특정 드라이버를 해당 칩 선택의 장치에 바인딩할 수 있도록 특정 칩 선택에서 SPIDEV의 바인딩을 해제하려고 합니다(SPIDEV를 완전히 rmmoding하지 않고).
사용자 정의 장치 트리(+Renesas DT 재정의 configfs 패치)를 사용하여 메인라인 커널을 부팅하는 AM335X 프로세서가 장착된 마더보드가 있습니다.
일부 사용자 공간 SPI 드라이버를 실행할 수 있도록 커널에 SPIDEV가 내장되어 있지만 버스의 다른 일부 장치에는 커널 드라이버를 사용하고 싶습니다.
이제 하드웨어 구성을 확인하기 위해 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>;
};
};
저는 현재 테스트를 위해 다음 DT 적용 범위를 사용하여 Adafruit BMP280 보드를 사용하고 있습니다.
/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
또한 채널 @0`을 찾아 재정의하려고 시도했지만 /delete-node/' for
두 경우 모두 재정의를 적용하려고 할 때 SPI 드라이버가 칩 선택 충돌에 대해 불평하게 만듭니다. 이는 칩 선택에서 SPIDEV를 제대로 바인딩 해제하지 않았음을 나타냅니다.
잘못된 사이트라면 죄송합니다. 하지만 장치 트리는 OS/플랫폼에 구애받지 않으므로 이것이 가장 좋은 장소인 것 같습니다.