specifying two conflicting configs

David Gibson david at gibson.dropbear.id.au
Wed Jul 25 13:48:01 EST 2012


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:

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.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson


More information about the devicetree-discuss mailing list