匹配已經存在的board_list鏈,並進行匹配,spi_match_master_to_boardinfo,這裏主要進行兩步操作:第一是匹配bus_num,第二步是
進行實際的slave與master的匹配工作,
struct spi_device *spi_new_device(struct spi_master *master, struct spi_board_info *chip)【分析在slave後面】
注:這裏的觸發spi_match_master_to_boardinfo流程的源頭可能有兩個:
1. 註冊master:spi_register_master
2. 註冊spi board:spi_register_board_info
匹配已經存在的board_list鏈,並進行匹配,spi_match_master_to_boardinfo,這裏主要進行兩步操作:第一是匹配bus_num,第二步是
進行實際的slave與master的匹配工作,
struct spi_device *spi_new_device(struct spi_master *master, struct spi_board_info *chip)【分析在slave後面】
注:這裏的觸發spi_match_master_to_boardinfo流程的源頭可能有兩個:
1. 註冊master:spi_register_master
2. 註冊spi board:spi_register_board_info
系統爲了SPI slave及master的匹配,聲明瞭兩個靜態鏈表
static LIST_HEAD(board_list); 宿主爲board_info->{list + spi_board_info}
static LIST_HEAD(spi_master_list); 宿主爲spi_master【已包含list_head】
一個用於存儲spi_board_info【slave端會詳細描述】,一個用於存儲master鏈。
slave端的device聲明:
static struct spi_board_info openhone_spi_devices_wifi[] = {
{
.modalias = "spi_slot0", // "spidev" --> spidev_spi
.chip_select = SPRD_3RDPARTY_SPI_WIFI_CS,
//.max_speed_hz = 24 * 1000 * 1000, wch
.max_speed_hz = 8 * 1000 * 1000,
.mode = SPI_CPOL | SPI_CPHA,
},
};
slave端的註冊流程:
1.標準做法
spi_register_board_info