匹配已经存在的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