内核中有spi总线驱动,bus_register(&spi_bus_type)就是用来注册总线的,该函数调用完成后,就会在/sys/bus/目录下创建spi目录。 接下来看下总线中spi_match_device()函数,此函数在(四)中的设备注册中会调用,如下: 点击(此处)折叠或打开 static int spi_match_device(struct device *dev, struct device_driver ...
spi控制器驱动(SPI Master Driver):SPI Master针对不同类型的spi控制器硬件,实现spi总线的硬件访问操作。SPI Master通过接口函数向SPI Core注册一个控制器。 spi设备驱动(SPI Device Driver):SPI Driver是对应于spi设备端的驱动程序,通过接口函数向SPI Core进行注册,SPI Driver的作用是将spi设备挂接到spi总线上; Li...
MODULE_DEVICE_TABLE(spi, m25p_ids); static const struct spi_device_id *jedec_probe(struct spi_device *spi) { /* 省略 */ } static int m25p_probe(struct spi_device *spi) { const struct spi_device_id *id = spi_get_device_id(spi); struct flash_platform_data *data; struct m25p *fla...
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)...
int (*setup)(struct spi_device *spi); int (*transfer)(struct spi_device *spi, struct spi_message *mesg); void (*cleanup)(struct spi_device *spi); struct kthread_worker kworker; struct task_struct *kworker_task; struct kthread_work pump_messages; struct list_head queue; struct spi_mes...
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核心(SPI Core):SPI Core是Linux内核用来维护和管理spi的核心部分,SPI Core提供操作接口函数,允许一个spi master,spi driver和spi device初始化时在SPI Core中进行注册,以及退出时进行注销。 spi控制器驱动(SPI Master Driver):SPI Master针对不同类型的spi控制器硬件,实现spi总线的硬件访问操作。SPI Master通过接...
int spi_map_buf(struct spi_controller *ctlr, struct device *dev, struct sg_table *sgt, void *buf, size_t len, enum dma_data_direction dir) { const bool vmalloced_buf = is_vmalloc_addr(buf); unsigned int max_seg_size = dma_get_max_seg_size(dev); #ifdef CONFIG_HIGHMEM const bool...
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 ...
int spi_map_buf(struct spi_controller *ctlr, struct device *dev, struct sg_table *sgt, void *buf, size_t len, enum dma_data_direction dir) { const bool vmalloced_buf = is_vmalloc_addr(buf); unsigned int max_seg_size = dma_get_max_seg_size(dev); #ifdef CONFIG_HIGHMEM const bool...