如果设备已被" spidev"访问,则如何添加SPI设备驱动程序驱动程序?

时间:2016-11-14 11:03:49

标签: linux linux-kernel

Linux内核:

我的问题是如何从内核驱动程序访问SPI从设备,如果该设备已被" spidev"驱动程序。

在HW级别,我们在SOC端(Marvell Cetus)上有一个SPI主控制器,一个SPI从器件(FPGA器件)连接到4线SPI总线顶部的主控制器。 所以系统中只使用了一条SS线

在SW级别,我们有Linux内核3.10.104,根据设备树源模型探测设备驱动程序。

在我们的DTS文件中,我们在CS(ChipSelect)上定义了一个SPI主设备(" marvell,orion-spi")和一个SPI从设备(" spidev")# 0。 尝试在同一个CS#0上的同一SPI主设备下添加另一个SPI从设备会失败 - 抱怨只有一个从设备可以在同一个CS上注册到主设备。

(dmesg:" orion_spi f1010600.spi:chipselect 0已在使用")

以下是我们DTS文件中的相关部分:

spi0: spi@10600 {

    status = "okay";

    spifpga@0 {
     #address-cells = <1>;
     #size-cells = <1>;
     compatible = "spidev";
     reg = <0>;
     spi-max-frequency = <25000000>;
    };

    lattice {
     #address-cells = <1>;
     #size-cells = <1>;
     compatible = "msys_lattice_drv";
     reg = <0>;
     spi-max-frequency = <25000000>;

    };
};

&#34; spidev&#34;我们的用户空间流程经常使用它,我们无法将其删除。 此外,确实需要为该从FPGA添加新的内核驱动程序,以便处理一些问题,包括内核空间中的中断。

我们如何添加另一个处理相同SPI从设备的内核驱动程序,假设该设备已由&#34; spidev&#34;处理。 ?

谢谢!

2 个答案:

答案 0 :(得分:1)

强烈建议不要在设备树中使用“ compatible = "spidev"”,因为它没有描述真正的硬件设备。

spidev 只是一个通用内核驱动程序,可将低级API导出到用户空间 形式/dev界面。

您不能为一个硬件设备注册两个驱动程序。您的替代方法是根据Linux SPI驱动程序模型编写自己的SPI芯片(客户端)驱动程序。

LINUX documentation

答案 1 :(得分:0)

其他答案都提到,这是不允许的。

您说您无法删除spidev设备,但是您的新驱动程序是否有任何原因不能提供与spidev通用驱动程序相同的功能,然后替换设备树中的spidev条目?它创建sysFS条目,并允许使用命令行,ioctl和读/写功能进行基本传输。我假设您已经具有传输数据的方法,因此您已经掌握了spidev驱动程序的大部分工作。

The documentation for the spidev device can be found here.