On Tue, Jul 24, 2012 at 8:48 PM, David Gibson
<[email protected]> 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@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@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:
>
> ssp-mux@80010000 {
>         #address-cells = <1>;
>         #size-cells = <0>;
>         compatible = "yourvendor,ssp-mux";
>         control-line = <&gpio 17>;
>         ranges = <0x0 0x80010000>;
>
>         ssp-mmc@0 {
>                   compatible = "fsl,imx23-mmc";
>                   /* ... */
>                   status = "okay";
>         };
>
>         ssp-spi@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.

I think the missing piece for a bystander looking at this proposal
(besides Mitch' comment about ranges) is that the probing by the
kernel would stop at the mux level, and the driver binding on the mux
device would have the option of restarting tree walk on its children.

That means that the standard unmodified drivers can be used since the
selection is done outside of them.


-Olof
_______________________________________________
devicetree-discuss mailing list
[email protected]
https://lists.ozlabs.org/listinfo/devicetree-discuss

Reply via email to