Зарегистрировать несколько портов (устройств) SPI для одного драйвера платформы SPI? - PullRequest
1 голос
/ 13 марта 2020

Я разрабатываю драйвер Linux spi для обработки связи через порт SPI. My So C предлагает три spi-модуля (которые я понимаю под портами), называемые ecspi1 / ecspi2 / ecspi3. Мне нужно отправить два вида данных, используя ecspi1 и ecspi2.

Я реализовал драйвер, который зарегистрирован в spi-драйвере и уже успешно обработал ecspi1, добавив ниже dts и driver:

[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>;
+   };
+};

[driver]

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

Кто-нибудь знает, как обрабатывать несколько портов (устройств) SPI в одном драйвере?

1 Ответ

1 голос
/ 14 марта 2020

Для обработки двух идентичных устройств 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.

...