specifying two conflicting configs
Mitch Bradley
wmb at firmworks.com
Thu Jul 26 10:53:03 EST 2012
On 7/25/2012 11:48 AM, David Gibson wrote:
> On Tue, Jul 24, 2012 at 11:34:50AM +0200, Attila Kinali wrote:
>> Hi,
>>
>> I have here an embedded system where i use a serial port as SD Card
>> interface as well as SPI interface. I select what i want to use
>> by setting a GPIO pin high or low.
>>
>> Currently i'm using two different dts files, one that specifies the
>> serial port as SD Card interface and one that specifies the serial
>> port as SPI interface.
>>
>> Now i would like to merge them into one file so that i can select
>> which mode to use at runtime. The documentation gave me the impression
>> that this should be possible, but i was not able to figure out how
>> to do it.
>>
>> Would someone be so kind and point me to the documentation/example
>> i've missed?
>>
>> The current configuration i use is either:
>>
>> ssp0: ssp at 80010000 {
>> compatible = "fsl,imx23-mmc";
>> pinctrl-names = "default";
>> pinctrl-0 = <&mmc0_8bit_pins_a &mmc1_pins_fixup>;
>> bus-width = <8>;
>> status = "okay";
>> };
>>
>> or:
>>
>> ssp0: ssp at 80010000 {
>> #address-cells = <1>;
>> #size-cells = <0>;
>> compatible = "fsl,imx23-spi";
>> fsl,ssp-dma-channel = <1>;
>> pinctrl-names = "default";
>> pinctrl-0 = <&spi_pins_a>;
>> status = "okay";
>>
>> };
>
> So, Mitch may have better insights here, but my inclination would be
> to do something like this:
The example below looks okay to me, except for the
ranges property. It doesn't seem that the mux node
"passes through" the address space - because then
the @1 sub-device would have the address 8001001
>
> ssp-mux at 80010000 {
> #address-cells = <1>;
> #size-cells = <0>;
> compatible = "yourvendor,ssp-mux";
> control-line = <&gpio 17>;
> ranges = <0x0 0x80010000>;
>
> ssp-mmc at 0 {
> compatible = "fsl,imx23-mmc";
> /* ... */
> status = "okay";
> };
>
> ssp-spi at 1 {
> compatible = "fsl,imx23-spi";
> /* ... */
> status = "disabled";
> };
> };
>
> ranges would need tweaking depending on #size-cells of the parent and
> the existing node reg properties, which you don't show.
>
> A hackier, but possibly simpler alternative would be to simply include
> both nodes, but have the one that's active by default marked status =
> "okay" and the other marked status = "disabled". Platform specific
> knowledge would then me needed to know that with the right gpio magic
> the original one can be disabled and the other enabled.
>
More information about the devicetree-discuss
mailing list