我正在尝试将 SPIDEV 与特定芯片选择解除绑定,以便我可以将特定驱动程序绑定到该芯片选择上的设备(无需完全 rmmod'ing SPIDEV)。
我有一块带有 AM335X 处理器的主板,使用自定义设备树启动主线内核(+Renesas DT 覆盖 configfs 补丁)。
我在内核中内置了 SPIDEV,以允许某些用户空间 SPI 驱动程序运行,但是我想对总线上的其他一些设备使用内核驱动程序。
现在我正在 Beaglebone Green 上进行测试(以验证硬件配置)。
是否可以将 SPIDEV 用于总线上的某些片选,同时将内核驱动程序用于其他片选?
如何通过设备树覆盖解除 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 的绑定。
如果这是在错误的站点上,我们深表歉意,但由于设备树与操作系统/平台无关,因此这似乎是最好的地方。