Seletivamente desvinculando o SPIDEV de determinados chips-selects

1

Estou tentando desvincular o SPIDEV de um chip-select específico para que eu possa vincular um driver específico a um dispositivo naquele chip-select (sem alterar completamente o SPIDEV).

Eu tenho uma placa com um processador AM335X, inicializando um kernel da linha principal (+ patch de configuração de patch Renesas DT) com uma árvore de dispositivos personalizada.

Eu tenho o SPIDEV embutido no kernel para permitir que alguns drivers SPI do espaço do usuário operem, no entanto, eu gostaria de usar um driver de kernel para alguns outros dispositivos no barramento.

Por enquanto estou testando (para validar a configuração de hardware) em um Beaglebone Green.

  1. É possível ter o SPIDEV para algumas seleções de chip em um barramento enquanto usa drivers de kernel para outras seleções de chip?

  2. Como eu poderia desvincular o SPIDEV por meio de uma sobreposição de árvore de dispositivos?

Eu tenho testado a configuração de hardware, por enquanto, em um Beaglebone Green um pouco mais barato, antes de passar para o quadro personalizado.

Minha árvore de dispositivos de base define os nós SPI como: [aplicado após incluir os dts am33xx-bone / bonegreen]

&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>;
        };
};

Eu tenho testado com uma placa Adafruit BMP280 por enquanto, usando a seguinte sobreposição de 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";
                        };
                };
        };
}; 

Eu também tentei segmentar spi0 e sobrepor um /delete-node/' for canal @ 0 ', mas ambos resultam no driver SPI reclamando sobre conflitos de seleção de chip ao tentar aplicar a sobreposição. Isso sugere para mim que eu não tirei SPIDEV daquele chip-select corretamente.

Desculpas se estiver no site errado, mas como o Device Tree é independente de SO / plataforma, esse parece ser o melhor lugar.

    
por Mark K Cowan 19.09.2017 / 18:00

0 respostas