특정 칩 선택에서 SPIDEV를 선택적으로 바인딩 해제합니다.

특정 칩 선택에서 SPIDEV를 선택적으로 바인딩 해제합니다.

특정 드라이버를 해당 칩 선택의 장치에 바인딩할 수 있도록 특정 칩 선택에서 SPIDEV의 바인딩을 해제하려고 합니다(SPIDEV를 완전히 rmmoding하지 않고).

사용자 정의 장치 트리(+Renesas DT 재정의 configfs 패치)를 사용하여 메인라인 커널을 부팅하는 AM335X 프로세서가 장착된 마더보드가 있습니다.

일부 사용자 공간 SPI 드라이버를 실행할 수 있도록 커널에 SPIDEV가 내장되어 있지만 버스의 다른 일부 장치에는 커널 드라이버를 사용하고 싶습니다.

이제 하드웨어 구성을 확인하기 위해 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>;
        };
};

저는 현재 테스트를 위해 다음 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/플랫폼에 구애받지 않으므로 이것이 가장 좋은 장소인 것 같습니다.

관련 정보