了解全志sdk下的spi
设备树
在总的设备树中设置有base地址和寄存器长度,尽管实际的长度并么有那么大



在board.dts也有对spi做描述,但这个描述是描述所用io引脚、频率、时钟源等,不做详细
make menuconfig
如果想要使用sunxi平台所指定的spi驱动,那么要勾选(如果未改动为自动勾选)spi选项

spi源码
spi的源码其实在driver/spi目录下,没错,是为驱动提供spi的接口方便使用spi的。



大概的接口结构是这个样子的

接口函数
既然有了接口函数那么接下来就是对接spi了(终于不用手打寄存器拉)
spi_register_driver()

spi_unregister_driver()

以上两个是常用的spi接口函数,其他的可以在例程中搜寻
例程
在tina/lichee/linux-5.4/drivers/spi/spidev.c路径中为一个通用的spi例程,里面详细讲解了spi读取和注册的步骤(当然,有注释,根本看不懂)
搜寻到几个有关的文章

那么我们看一下probe到底做了什么

spidev_probe


find_first_zero_bit():
#define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0)
---->extern unsigned long find_next_zero_bit(const unsigned long *addr, unsigned long size, unsigned long offset);


剩下的就很简单了,就是获得次节点设备号后注册,然后如果失败就释放资源

remove则是对这些资源进行一个释放