将多个SPI端口(设备)注册到单个SPI平台驱动程序?

Nekonosukiyaki

我正在开发Linux spi驱动程序,以处理通过SPI端口进行的通信。我的SoC提供了三个spi模块(我将其理解为端口),称为ecspi1 / ecspi2 / ecspi3。我需要使用ecspi1和ecspi2发送两种数据。

我已经实现了一个驱动程序,该驱动程序已注册到spi驱动程序,并且已经通过在dts和驱动程序中添加以下内容来成功处理了ecspi1:

[dts]

&ecspi1 {
    status = "okay";

    fpga1: [email protected] {
        reg = <0>;
        compatible = "lattice,lfe5u12f6bg256i";
        spi-max-frequency = <10000000>;
    };
};

[司机]

static const struct of_device_id fpga_spi_of_match[] = {
    { .compatible = "lattice,lfe5u12f6bg256i", },
    {},
};

我尝试通过以下修改将ecspi2添加到驱动程序。但是,驱动程序在启动时进行了两次探测,但在第二次探测期间失败。

[dts]

 &ecspi1 {
    status = "okay";

    fpga1: [email protected] {
        reg = <0>;
        compatible = "lattice,lfe5u12f6bg256i";
        spi-max-frequency = <10000000>;
    };
 };

+&ecspi2 {
+   status = "okay";
+
+   fpga0: [email protected] {
+       reg = <0>;
+       compatible = "fpga_fw,lfe5u12f6bg256i";
+       spi-max-frequency = <10000000>;
+   };
+};

[司机]

 static const struct of_device_id fpga_spi_of_match[] = {
    { .compatible = "fpga_fw,lfe5u12f6bg256i", },
+   { .compatible = "lattice,lfe5u12f6bg256i", },
    {},
 };

有谁知道如何在单个驱动程序中处理多个SPI端口(设备)?

卢卡·塞雷索利(Luca Ceresoli)

要使用相同的驱动程序处理两个相同的SPI设备,不需要修改驱动程序,而只需要一个兼容的字符串:

DTS:

&ecspi1 {
    status = "okay";

    fpga1: [email protected] {
        reg = <0>;
        compatible = "lattice,lfe5u12f6bg256i";
        spi-max-frequency = <10000000>;
    };
 };

&ecspi2 {
    status = "okay";

    fpga2: [email protected] {
        reg = <0>;
        compatible = "lattice,lfe5u12f6bg256i";
        spi-max-frequency = <10000000>;
    };
 };

司机:

static const struct of_device_id fpga_spi_of_match[] = {
    { .compatible = "lattice,lfe5u12f6bg256i", },
    {},
};

该驱动程序将实例化两次,每个设备一次,每次接收一个不同的struct spi_device

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为x86和ARM编写平台设备驱动程序的区别

Linux平台驱动程序和普通设备驱动程序有什么区别?

如何将驱动程序与USB设备绑定?

获取与COM端口相关的设备/驱动程序信息?

Linux内核驱动程序模块:使用单个驱动程序处理多个设备文件

Linux Kernel API从平台驱动程序获取结构设备

具有平台驱动程序和字符设备接口的设备特定数据结构

SPI Linux驱动程序

自动将设备绑定到特定驱动程序

字符设备,平台驱动程序和内核模块之间的区别

可以在Linux中注册多个驱动程序以处理同一设备

如何修复在Linux内核SPI驱动程序中始终无法通过验证的SPI驱动程序

使用ADB访问SPI驱动程序

多个从机到单个主SPI软件从机管理的工作方式

STM32 SPI驱动程序始终接收数据0

平台设备和平台驱动程序链接

本机端口驱动程序和设备驱动程序之间的区别?

在linux设备驱动程序中注册级别的访问

将某些设备“列入黑名单”,以便Windows不下载新驱动程序/更改Windows驱动程序更新注册表

Linux是否具有USB端口的设备驱动程序?

Linux内核驱动程序-SPI如何识别SPI设备?

当多个设备适用时,如何指定设备使用的驱动程序

键盘驱动程序是字符设备驱动程序吗?

将设备驱动程序编译到内核

如何将驱动程序复制到英特尔 ax200 无线设备的目录中

将 ESP32(Lolin32 Lite 开发板)连接到 7 针 SPI TFT 显示器 ST7789 驱动程序

为 I2C 设备加载平台驱动程序时,该设备是否需要存在?

使用 spi-bitbang 驱动程序

如何使用 SPI 编写网络设备驱动程序?