从另一个驱动程序检测spi设备

时间:2015-11-19 20:00:25

标签: linux-kernel arm linux-device-driver spi

我有一个基于飞思卡尔imx.6q(arm)的主板。 硬件配置了devicetree。

它改变了对板载fpga的时序和电压的主要不兼容的改变,但这些改变对于内核是不可见的。 EE告诉我们,我们不应该加载旧的fpga固件,以免损坏它。我想支持来自相同代码的两个硬件(它已经引起混淆)

我想到的解决方案是这样的: 电路板上有几个新的spi温度传感器。如果我可以从其中一个设备上读取,我可以推断出我需要新的固件。

我怎样(在一个驱动程序中)抓住spi设备然后释放它? 我怀疑我可以用设备树做这样的事情, 但我不想让设备不可用。

这样的事情有什么想法或例子吗?

1 个答案:

答案 0 :(得分:1)

编辑(回答问题) 要检测使用来自其他驱动程序的SPI设备,请使用对设备结构中的设备的引用。

简答:在你的设备dts条目中添加对spi设备的引用。

答案稍长: 将spi添加到另一个设备驱动程序时,您实际上是在添加一个子设备,它可能需要自己的驱动程序。我有一个FPGA加载其固件(足够接近的东西)SPI。我开始的想法只是将spi设备视为更大驱动程序的一部分,但是进入它的工作越多,就越明显它是它自己的设备,其目的和功能与其他设备不同。司机。我将该代码分成了自己的驱动程序。 现在,我的驱动程序只是引用了一个FPGA管理器设备而不是对SPI设备的引用。

https://github.com/d4ddi0/linux/blob/v4.12evi/arch/arm/boot/dts/imx6q-evi.dts

的第98,370行

和 确保在驱动程序完成加载之前加载了spi驱动程序

我对问题的原始答案(出于历史目的):

我最终做的是使用不同的devicetree文件。在初始安装时间(基于序列号)知道差异。引导加载程序知道要加载哪个dts文件名。

有多个FPGA固件版本,根据dts中的描述选择正确的版本。

这样,我仍然可以在没有破损的情况下更新驱动程序和/或dts。

这在实践中运行良好,即使它在运行时没有检测到任何东西。

仍然存在一个问题,如果我从新版本中取出SD卡并将其放入旧版本中,则会加载不正确的固件。为了真正解决这个最后一个问题,我们已经讨论过添加一个EEPROM来唯一识别未来主板上的硬件版本。