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) spi_match_master_to_boardinfo /* board_info裏含有bus_num, 若是某個spi_master的bus_num跟它同樣 * 則建立一個新的spi_device */ 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
具體使用時:async