我正在开发Linux spi驱动程序,以处理通过SPI端口进行的通信。 我的SoC提供了三个spi模块(我将其理解为端口),称为ecspi1 / ecspi2 / ecspi3。 我需要使用ecspi1和ecspi2发送两种数据。
我已经实现了一个注册到spi驱动程序的驱动程序,并且已经通过在dts和驱动程序中添加以下内容来成功处理了ecspi1:
[dts]
&ecspi1 {
status = "okay";
fpga1: lfe5u12f6bg256i@0 {
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: lfe5u12f6bg256i@0 {
reg = <0>;
compatible = "lattice,lfe5u12f6bg256i";
spi-max-frequency = <10000000>;
};
};
+&ecspi2 {
+ status = "okay";
+
+ fpga0: fpga_fw@0 {
+ 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端口(设备)吗?
答案 0 :(得分:1)
要使用相同的驱动程序处理两个相同的SPI设备,不需要修改驱动程序,而只需要一个兼容的字符串:
DTS:
&ecspi1 {
status = "okay";
fpga1: lfe5u12f6bg256i@0 {
reg = <0>;
compatible = "lattice,lfe5u12f6bg256i";
spi-max-frequency = <10000000>;
};
};
&ecspi2 {
status = "okay";
fpga2: lfe5u12f6bg256i@0 {
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
。