const struct spi_device_id *id_table; int (*probe)(struct spi_device *spi); int (*remove)(struct spi_device *spi); void (*shutdown)(struct spi_device *spi); int (*suspend)(struct spi_device *spi, pm_message_t mesg); int (*resume)(struct spi_device *spi); struct device_driver...
1.2 首先调用函数spi_alloc_device,分配一个spi_device,并通过device_initialize初始化。 1 struct spi_device *spi_alloc_device(struct spi_master *master) 2{ 3 struct spi_device *spi; 4 struct device *dev = master->dev.parent; 5 6 if (!spi_master_get(master))//判断spi主机是否存在 7 retur...
SPI设备是主设备的子设备,由struct spi_device表示,并由struct spi_board_info描述符进行描述,这些描述符通常由特定板卡的初始化代码提供。 struct spi_driver称为协议驱动程序,并通过正常的驱动程序模型绑定到spi_device。 SPI的I/O模型是一组排队的消息,在协议驱动程序中可提交一个或多个struct spi_message对象,...
spi_device代表一个外围spi设备,由master controller driver注册完成后扫描BSP中注册设备产生的设备链表并向spi_bus注册产生。在内核中,每个spi_device代表一个物理的spi设备。 2.3.2. spi_driver 复制 struct spi_driver {const struct spi_device_id *id_table; /*支持的spi_device设备表*/int(*probe)(struct ...
if (of_driver_match_device(dev, drv)) return 1; /* Then try ACPI */ if (acpi_driver_match_device(dev, drv)) return 1; if (sdrv->id_table) return !!spi_match_id(sdrv->id_table, spi->modalias); return strcmp(spi->modalias, drv->name) == 0; ...
spi_driver会向内核申请总线处理的权限,当我们加载驱动的时候,在ARM机器的linux上的/sys/bus/spi/drivers目录下会看到申请SPI驱动内核的名字。 static const struct spi_device_id oled_spi_id[] = { {“oledspi”, 1}, {}, }; static struct spi_driver sp6818_spi_driver = ...
id->name)) return id; id++; } return NULL; } /* SPI总线的match方法 */ static int spi_match_device(struct device *dev, struct device_driver *drv) { const struct spi_device *spi = to_spi_device(dev); const struct spi_driver *sdrv = to_spi_driver(drv); if (sdrv->id_table)...
00000095 return !!spi_match_id(sdrv->id_table, spi); 00000096 00000097 return strcmp(spi->modalias, drv->name) == 0; 00000098 } 写过驱动的都应该知道platform总线有struct platform_device和struct platform_driver,到了SPI总线,当然也有对应的struct spi_device和struct spi_driver,如87、88行所示。
SPI 控制器驱动负责控制具体的控制器硬件,诸如 DMA 和中断操作等等,因为多个上层的协议驱动可能会通过控制器请求数据传输操作,所以,SPI 控制器驱动同时也要负责对这些请求进行队列管理,保证先进先出的原则。 SPI 通用接口封装层 为了简化 SPI 驱动程序的编程工作,同时也为了降低【协议驱动程序】和【控制器驱动程序】的...
1.1 SPI 主机驱动 SPI主机驱动就是 SOC的 SPI控制器驱动,内核使用 spi_master 表示 SPI主机驱动, spi_master是个结构体,定义在 include/linux/spi/spi.h文件中 AI检测代码解析 struct spi_master { struct device dev; struct list_head list; ... s16 ...