spi控制器都是挂在platform总线上的,所以要等platform总线上的设备驱动加载spi控制器完成后才能加载spi设备。
1.spi控制器加载
由spi控制器驱动程序调用spi_register_master来完成spi控制器驱动加载
int spi_register_master(struct spi_master *master)
{
...status = of_spi_register_master(master); //片选gpio的解析,片选是在控制器配置的
...
if (master->transfer)
dev_info(dev, "master is unqueued, this is deprecated\n");
else {
status = spi_master_initialize_queue(master); //消息队列的初始化
if (status) {
device_del(&master->dev);
goto done;
}
}
/* add statistics */
spin_lock_init(&master->statistics.lock);mutex_lock(&board_lock);
list_add_tail(&master->list, &spi_master_list);
list_for_each_entry(bi, &board_list, list)
spi_match_master_to_boardinfo(master, &bi->board_info)//这里是通过spi_register_board_info调用,产生的spi device需要解析并添加到maste链表上
mutex_unlock(&board_lock);/* Register devices from the device tree and ACPI */
of_register_spi_devices(master); //spi device的添加
acpi_register_spi_devices(master); //acpi设备的添加,这里不关注
done:
return status;<