码迷,mamicode.com
首页 > 其他好文 > 详细

SPI 驱动框架

时间:2018-03-08 02:41:52      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:nsf   boa   方向   多个   init   entry   函数   gis   async   

SPI 驱动框架

1. 枚举过程
drivers/spi/spi.c:
    spi_register_board_info
        /* 对于每一个spi_master,调用spi_match_master_to_boardinfo */
        list_for_each_entry(master, &spi_master_list, list)
            /* 
             * board_info 里含有 bus_num , 如果某个 spi_master 的 bus_num 跟它一样
             * 则创建一个新的 spi_device
             */
            spi_match_master_to_boardinfo
                if (master->bus_num == bi->busnum)
                    spi_new_device
                        spi_alloc_device

                        /* 记录 bi 信息, 比如片选,MODE,MAX HZ */    
                        
                        spi_add_device /* 根据名字找到 spi_driver , 调用它的 probe 函数 */
                            spi_setup(spi);
                            device_add  /* 会绑定到一个 spi_driver */

2. 数据收发过程
    spi_write
        spi_message_init(&m);
        初始化一个spi_message  /* 一个不可打断的SPI传输过程: cs=0,传数据,cs=1 */
                               /* 一个spi_message由多个spi_transfer组成 */
        spi_message_add_tail(&t, &m);  /* spi_transfe 是 SPI 上传输的单方向 1 个或多个字节 */
        spi_sync(spi, &m);  /* 启动传输并等待完成 */
    
3. spi_driver如何调用spi_controller
    spi_sync
        __spi_sync(spi, message, 0);
            spi_async_locked
                __spi_async
                    master->transfer(spi, message);
            wait_for_completion

SPI 驱动框架

标签:nsf   boa   方向   多个   init   entry   函数   gis   async   

原文地址:https://www.cnblogs.com/GyForever1004/p/8525962.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!