有选择地解除 SPIDEV 与某些片选的绑定

有选择地解除 SPIDEV 与某些片选的绑定

我正在尝试将 SPIDEV 与特定芯片选择解除绑定,以便我可以将特定驱动程序绑定到该芯片选择上的设备(无需完全 rmmod'ing SPIDEV)。

我有一块带有 AM335X 处理器的主板,使用自定义设备树启动主线内核(+Renesas DT 覆盖 configfs 补丁)。

我在内核中内置了 SPIDEV,以允许某些用户空间 SPI 驱动程序运行,但是我想对总线上的其他一些设备使用内核驱动程序。

现在我正在 Beaglebone Green 上进行测试(以验证硬件配置)。

  1. 是否可以将 SPIDEV 用于总线上的某些片选,同时将内核驱动程序用于其他片选?

  2. 如何通过设备树覆盖解除 SPIDEV 的绑定?

在最终转向定制板之前,我一直在更便宜的 Beaglebone Green 上测试硬件配置。

我的基本设备树将 SPI 节点定义为:[在包含 am33xx-bone/bonegreen dts 后应用]

&spi1 {
        status = "okay";
        channel@0 {
                #address-cells = <1>;
                #size-cells = <0>;

                compatible = "ti,omap24xx-spi";

                reg = <0>;
                spi-max-frequency = <16000000>;
                spi-cpha;
        };
        channel@1 {
                #address-cells = <1>;
                #size-cells = <0>;

                compatible = "ti,omap24xx-spi";

                reg = <1>;
                spi-max-frequency = <16000000>;
        };
};

我现在一直在使用 Adafruit BMP280 板进行测试,使用以下 DT 覆盖:

/dts-v1/;

/plugin/;

/ {
        compatible = "ti,am335x-bone-green", "ti,am335x-bone", "ti,am33xx";

        fragment@0 {
                target-path = "/ocp/spi0/channel@0";

                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;

                        status = "disabled";
                };
        };

        fragment@1 {
                target = <&spi0>;

                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;

                        bmp280_spi: bmp280@0 {
                                compatible = "bosch,bmp280", "bosch,bme280";
                                reg = <0>;
                                spi-max-frequency = <500000>;
                                default-oversampling = <1>;
                                status = "okay";
                        };
                };
        };
}; 

我还尝试定位spi0并覆盖/delete-node/' for通道@0`,但这两种情况都会导致 SPI 驱动程序在尝试应用覆盖时抱怨芯片选择冲突。这表明我没有正确地从芯片选择中解除 SPIDEV 的绑定。

如果这是在错误的站点上,我们深表歉意,但由于设备树与操作系统/平台无关,因此这似乎是最好的地方。

相关内容