linux内核SPI总线驱动(一)

今天我们分析一下SPI驱动的东西,老方法,我们反向追踪,数据手册端上来

linux内核SPI总线驱动(一)

总线地址是0xC005B000

 

顺藤摸瓜:

kernel\kernel-3.4.39\arch\arm\mach-s5p6818\include\mach\ s5p6818.h

linux内核SPI总线驱动(一)

 

继续寻找到

\kernel\kernel-3.4.39\arch\arm\mach-s5p6818\ devices.c

linux内核SPI总线驱动(一)

 

linux内核SPI总线驱动(一)

 

linux内核SPI总线驱动(一)

 

这里看出来spi注册为平台总线的形式,那我们按照平台总线继续往下找通过.name匹配的

s3c64xx-spi 名字很奇怪啊~

 

\kernel\kernel-3.4.39\drivers\spi\ spi-slsi.c

linux内核SPI总线驱动(一)

MODULE_ALIAS("platform:s3c64xx-spi");一般通过hotplug的设备会通过module.alias 中的信息来加载device对应的driver

MODULE_ALIAS ( 模块为人所知的另一个名字 ), 以及 MODULE_DEVICE_TABLE ( 来告知用户空间, 模块支持那些设备 ).

 

linux内核SPI总线驱动(一)

关联了prob函数

 

分析下prob函数

linux内核SPI总线驱动(一)

前面是得到设备地址啊,什么设备树解析啊什么的,有兴趣可以看一下,我们主要是先看大流程好吧

linux内核SPI总线驱动(一)

这里注册了spi master控制器(spi_register_master函数是通用驱动其他的及linux内核提供的方法)。到这里驱动的加载流程基本已经完成。

 

看起来好像比i2c简单喔,我们继续往下看喔。

这里其实spi的硬件相关部分已经完结了,其余的咱下周再看吧,毕竟是端午节嘛哈哈,休息一下。