[PATCH v2] mmc: dt: Consolidate DT bindings

Guennadi Liakhovetski g.liakhovetski at gmx.de
Sun May 13 15:29:15 EDT 2012


Hi Chris

Good to see this happening! Is anyone also planning to submit a generic OF 
parser to convert OF properties into respective host capability flags? I 
didn't thoroughly review this patch, just a minor typo correction:

On Sun, 13 May 2012, Chris Ball wrote:

> Hi Arnd,
> 
> On Fri, Mar 30 2012, Stephen Warren wrote:
> >> No progress so far. I would suggest we apply the patch below to unify
> >> the bindings we have. I tried to minimize the impact by picking the most
> >> common version for each property, but if we know about devices that would
> >> get broken by this, we may have to be more careful.
> >> 
> >> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> 
> Here's a version of your MMC DT bindings patch that responds to Stephen
> Warren's review comments, refreshed against latest linux-next -- I'd
> like to get this merged for v3.5.  Since it touches many .dts files,
> should it go via arm-soc?  Thanks.
> 
> 
> From: Arnd Bergmann <arnd at arndb.de>
> Subject: [PATCH] mmc: dt: Consolidate DT bindings
> 
> This patch unifies the current DT MMC bindings documentation and code,
> adds generic MMC DT bindings documentation, and updates .dts files for
> consistency.
> 
> Signed-off-by: Arnd Bergmann <arnd at arndb.de>
> [cjb: typo fixes, addition of max-frequency property]
> Signed-off-by: Chris Ball <cjb at laptop.org>
> ---
> Changes since Arnd's v1:
>  * Typo fix from Stephen Warren: s/interrupt/interrupts/
>  * Typo fix: s/non-removable/ti,non-removable/. This one's being
>    preserved for backwards compatibility.
>  * Add max-frequency property.
> 
> .../devicetree/bindings/mmc/fsl-esdhc.txt          |    6 +++--
>  .../devicetree/bindings/mmc/fsl-imx-esdhc.txt      |    2 +-
>  .../devicetree/bindings/mmc/mmc-spi-slot.txt       |    3 ++-
>  Documentation/devicetree/bindings/mmc/mmc.txt      |   27 ++++++++++++++++++++
>  .../devicetree/bindings/mmc/nvidia-sdhci.txt       |    4 +--
>  .../devicetree/bindings/mmc/ti-omap-hsmmc.txt      |    4 +--
>  arch/arm/boot/dts/imx53-smd.dts                    |    4 +--
>  arch/arm/boot/dts/imx6q-arm2.dts                   |    2 +-
>  arch/arm/boot/dts/omap3-beagle.dts                 |    2 +-
>  arch/arm/boot/dts/omap4-panda.dts                  |    4 +--
>  arch/arm/boot/dts/omap4-sdp.dts                    |    6 ++---
>  arch/arm/boot/dts/tegra-cardhu.dts                 |    2 ++
>  arch/arm/boot/dts/tegra-harmony.dts                |    2 ++
>  arch/arm/boot/dts/tegra-paz00.dts                  |    2 ++
>  arch/arm/boot/dts/tegra-seaboard.dts               |    2 ++
>  arch/arm/boot/dts/tegra-ventana.dts                |    2 ++
>  arch/powerpc/boot/dts/mpc8569mds.dts               |    1 +
>  drivers/mmc/host/omap_hsmmc.c                      |    2 +-
>  drivers/mmc/host/sdhci-esdhc-imx.c                 |    2 +-
>  drivers/mmc/host/sdhci-pltfm.c                     |    8 ++++--
>  20 files changed, 66 insertions(+), 21 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/mmc/mmc.txt
> 
> diff --git a/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt b/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt
> index 64bcb8b..0d93b4b 100644
> --- a/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt
> +++ b/Documentation/devicetree/bindings/mmc/fsl-esdhc.txt
> @@ -11,9 +11,11 @@ Required properties:
>    - interrupt-parent : interrupt source phandle.
>    - clock-frequency : specifies eSDHC base clock frequency.
>    - sdhci,wp-inverted : (optional) specifies that eSDHC controller
> -    reports inverted write-protect state;
> +    reports inverted write-protect state; New devices should use
> +    the generic "wp-inverted" property.
>    - sdhci,1-bit-only : (optional) specifies that a controller can
> -    only handle 1-bit data transfers.
> +    only handle 1-bit data transfers. New devices should use the
> +    generic "bus-width = <1>" property.
>    - sdhci,auto-cmd12: (optional) specifies that a controller can
>      only handle auto CMD12.
>  
> diff --git a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
> index ab22fe6..c7e404b 100644
> --- a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
> +++ b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
> @@ -9,7 +9,7 @@ Required properties:
>  - interrupts : Should contain eSDHC interrupt
>  
>  Optional properties:
> -- fsl,card-wired : Indicate the card is wired to host permanently
> +- non-removable : Indicate the card is wired to host permanently
>  - fsl,cd-internal : Indicate to use controller internal card detection
>  - fsl,wp-internal : Indicate to use controller internal write protection
>  - cd-gpios : Specify GPIOs for card detection
> diff --git a/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt b/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt
> index 89a0084..d64aea5 100644
> --- a/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt
> +++ b/Documentation/devicetree/bindings/mmc/mmc-spi-slot.txt
> @@ -10,7 +10,8 @@ Required properties:
>  
>  Optional properties:
>  - gpios : may specify GPIOs in this order: Card-Detect GPIO,
> -  Write-Protect GPIO.
> +  Write-Protect GPIO. Note that this does not follow the
> +  binding from mmc.txt, for historic reasons.
>  - interrupts : the interrupt of a card detect interrupt.
>  - interrupt-parent : the phandle for the interrupt controller that
>    services interrupts for this device.
> diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt b/Documentation/devicetree/bindings/mmc/mmc.txt
> new file mode 100644
> index 0000000..6e70dcd
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mmc/mmc.txt
> @@ -0,0 +1,27 @@
> +These properties are common to multiple MMC host controllers. Any host
> +that requires the respective functionality should implement them using
> +these definitions.
> +
> +Required properties:
> +- bus-width: Number of data lines, can be <1>, <4>, or <8>
> +
> +Optional properties:
> +- cd-gpios : Specify GPIOs for card detection, see gpio binding
> +- wp-gpios : Specify GPIOs for write protection, see gpio binding
> +- cd-inverted: when present, polarity on the wp gpio line is inverted

You certainly meant "cd gpio line is inverted." But in fact, as Olof 
proposed in his reply to my patch - cannot we just use the existing 
OF_GPIO_ACTIVE_LOW flag to invert CD and WP polarity?

Thanks
Guennadi

> +- wp-inverted: when present, polarity on the wp gpio line is inverted
> +- non-removable: non-removable slot (like eMMC)
> +- max-frequency: maximum operating clock frequency
> +
> +Example:
> +
> +sdhci at ab000000 {
> +	compatible = "sdhci";
> +	reg = <0xab000000 0x200>;
> +	interrupts = <23>;
> +	bus-width = <4>;
> +	cd-gpios = <&gpio 69 0>;
> +	cd-inverted;
> +	wp-gpios = <&gpio 70 0>;
> +	max-frequency = <50000000>;
> +}
> diff --git a/Documentation/devicetree/bindings/mmc/nvidia-sdhci.txt b/Documentation/devicetree/bindings/mmc/nvidia-sdhci.txt
> index 7e51154..f77c303 100644
> --- a/Documentation/devicetree/bindings/mmc/nvidia-sdhci.txt
> +++ b/Documentation/devicetree/bindings/mmc/nvidia-sdhci.txt
> @@ -7,12 +7,12 @@ Required properties:
>  - compatible : Should be "nvidia,<chip>-sdhci"
>  - reg : Should contain SD/MMC registers location and length
>  - interrupts : Should contain SD/MMC interrupt
> +- bus-width : Number of data lines, can be <1>, <4>, or <8>
>  
>  Optional properties:
>  - cd-gpios : Specify GPIOs for card detection
>  - wp-gpios : Specify GPIOs for write protection
>  - power-gpios : Specify GPIOs for power control
> -- support-8bit : Boolean, indicates if 8-bit mode should be used.
>  
>  Example:
>  
> @@ -23,5 +23,5 @@ sdhci at c8000200 {
>  	cd-gpios = <&gpio 69 0>; /* gpio PI5 */
>  	wp-gpios = <&gpio 57 0>; /* gpio PH1 */
>  	power-gpios = <&gpio 155 0>; /* gpio PT3 */
> -	support-8bit;
> +	bus-width = <8>;
>  };
> diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
> index dbd4368..8a53958 100644
> --- a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
> +++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
> @@ -15,7 +15,7 @@ Optional properties:
>  ti,dual-volt: boolean, supports dual voltage cards
>  <supply-name>-supply: phandle to the regulator device tree node
>  "supply-name" examples are "vmmc", "vmmc_aux" etc
> -ti,bus-width: Number of data lines, default assumed is 1 if the property is missing.
> +bus-width: Number of data lines, default assumed is 1 if the property is missing.
>  cd-gpios: GPIOs for card detection
>  wp-gpios: GPIOs for write protection
>  ti,non-removable: non-removable slot (like eMMC)
> @@ -27,7 +27,7 @@ Example:
>  		reg = <0x4809c000 0x400>;
>  		ti,hwmods = "mmc1";
>  		ti,dual-volt;
> -		ti,bus-width = <4>;
> +		bus-width = <4>;
>  		vmmc-supply = <&vmmc>; /* phandle to regulator node */
>  		ti,non-removable;
>  	};
> diff --git a/arch/arm/boot/dts/imx53-smd.dts b/arch/arm/boot/dts/imx53-smd.dts
> index c7ee86c..139138a 100644
> --- a/arch/arm/boot/dts/imx53-smd.dts
> +++ b/arch/arm/boot/dts/imx53-smd.dts
> @@ -35,7 +35,7 @@
>  				};
>  
>  				esdhc at 50008000 { /* ESDHC2 */
> -					fsl,card-wired;
> +					non-removable;
>  					status = "okay";
>  				};
>  
> @@ -76,7 +76,7 @@
>  				};
>  
>  				esdhc at 50020000 { /* ESDHC3 */
> -					fsl,card-wired;
> +					non-removable;
>  					status = "okay";
>  				};
>  			};
> diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts
> index ce1c823..d2eaf52 100644
> --- a/arch/arm/boot/dts/imx6q-arm2.dts
> +++ b/arch/arm/boot/dts/imx6q-arm2.dts
> @@ -41,7 +41,7 @@
>  			};
>  
>  			usdhc at 0219c000 { /* uSDHC4 */
> -				fsl,card-wired;
> +				non-removable;
>  				vmmc-supply = <&reg_3p3v>;
>  				status = "okay";
>  			};
> diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts
> index 8c756be..5b4506c 100644
> --- a/arch/arm/boot/dts/omap3-beagle.dts
> +++ b/arch/arm/boot/dts/omap3-beagle.dts
> @@ -57,7 +57,7 @@
>  &mmc1 {
>  	vmmc-supply = <&vmmc1>;
>  	vmmc_aux-supply = <&vsim>;
> -	ti,bus-width = <8>;
> +	bus-width = <8>;
>  };
>  
>  &mmc2 {
> diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts
> index ea6f5bb..31fb421 100644
> --- a/arch/arm/boot/dts/omap4-panda.dts
> +++ b/arch/arm/boot/dts/omap4-panda.dts
> @@ -55,7 +55,7 @@
>  
>  &mmc1 {
>  	vmmc-supply = <&vmmc>;
> -	ti,bus-width = <8>;
> +	bus-width = <8>;
>  };
>  
>  &mmc2 {
> @@ -72,5 +72,5 @@
>  
>  &mmc5 {
>  	ti,non-removable;
> -	ti,bus-width = <4>;
> +	bus-width = <4>;
>  };
> diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts
> index 67b2e98..a1dd873 100644
> --- a/arch/arm/boot/dts/omap4-sdp.dts
> +++ b/arch/arm/boot/dts/omap4-sdp.dts
> @@ -94,12 +94,12 @@
>  
>  &mmc1 {
>  	vmmc-supply = <&vmmc>;
> -	ti,bus-width = <8>;
> +	bus-width = <8>;
>  };
>  
>  &mmc2 {
>  	vmmc-supply = <&vaux1>;
> -	ti,bus-width = <8>;
> +	bus-width = <8>;
>  	ti,non-removable;
>  };
>  
> @@ -112,6 +112,6 @@
>  };
>  
>  &mmc5 {
> -	ti,bus-width = <4>;
> +	bus-width = <4>;
>  	ti,non-removable;
>  };
> diff --git a/arch/arm/boot/dts/tegra-cardhu.dts b/arch/arm/boot/dts/tegra-cardhu.dts
> index facb950..f00480a 100644
> --- a/arch/arm/boot/dts/tegra-cardhu.dts
> +++ b/arch/arm/boot/dts/tegra-cardhu.dts
> @@ -129,6 +129,7 @@
>  		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
>  		wp-gpios = <&gpio 155 0>; /* gpio PT3 */
>  		power-gpios = <&gpio 31 0>; /* gpio PD7 */
> +		bus-width = <4>;
>  	};
>  
>  	sdhci at 78000200 {
> @@ -141,6 +142,7 @@
>  
>  	sdhci at 78000400 {
>  		support-8bit;
> +		bus-width = <8>;
>  	};
>  
>  	ahub at 70080000 {
> diff --git a/arch/arm/boot/dts/tegra-harmony.dts b/arch/arm/boot/dts/tegra-harmony.dts
> index 6857cec..7cd513a 100644
> --- a/arch/arm/boot/dts/tegra-harmony.dts
> +++ b/arch/arm/boot/dts/tegra-harmony.dts
> @@ -324,6 +324,7 @@
>  		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
>  		wp-gpios = <&gpio 57 0>; /* gpio PH1 */
>  		power-gpios = <&gpio 155 0>; /* gpio PT3 */
> +		bus-width = <4>;
>  	};
>  
>  	sdhci at c8000400 {
> @@ -335,6 +336,7 @@
>  		wp-gpios = <&gpio 59 0>; /* gpio PH3 */
>  		power-gpios = <&gpio 70 0>; /* gpio PI6 */
>  		support-8bit;
> +		bus-width = <8>;
>  	};
>  
>  	usb at c5004000 {
> diff --git a/arch/arm/boot/dts/tegra-paz00.dts b/arch/arm/boot/dts/tegra-paz00.dts
> index 34a9177..8d625e4 100644
> --- a/arch/arm/boot/dts/tegra-paz00.dts
> +++ b/arch/arm/boot/dts/tegra-paz00.dts
> @@ -313,6 +313,7 @@
>  		cd-gpios = <&gpio 173 0>; /* gpio PV5 */
>  		wp-gpios = <&gpio 57 0>;  /* gpio PH1 */
>  		power-gpios = <&gpio 169 0>; /* gpio PV1 */
> +		bus-width = <4>;
>  	};
>  
>  	sdhci at c8000200 {
> @@ -325,6 +326,7 @@
>  
>  	sdhci at c8000600 {
>  		support-8bit;
> +		bus-width = <8>;
>  	};
>  
>  	gpio-keys {
> diff --git a/arch/arm/boot/dts/tegra-seaboard.dts b/arch/arm/boot/dts/tegra-seaboard.dts
> index c4d171e..38e40a1 100644
> --- a/arch/arm/boot/dts/tegra-seaboard.dts
> +++ b/arch/arm/boot/dts/tegra-seaboard.dts
> @@ -380,10 +380,12 @@
>  		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
>  		wp-gpios = <&gpio 57 0>; /* gpio PH1 */
>  		power-gpios = <&gpio 70 0>; /* gpio PI6 */
> +		bus-width = <4>;
>  	};
>  
>  	sdhci at c8000600 {
>  		support-8bit;
> +		bus-width = <8>;
>  	};
>  
>  	usb at c5000000 {
> diff --git a/arch/arm/boot/dts/tegra-ventana.dts b/arch/arm/boot/dts/tegra-ventana.dts
> index c20d5e9..149ab6d 100644
> --- a/arch/arm/boot/dts/tegra-ventana.dts
> +++ b/arch/arm/boot/dts/tegra-ventana.dts
> @@ -338,10 +338,12 @@
>  		cd-gpios = <&gpio 69 0>; /* gpio PI5 */
>  		wp-gpios = <&gpio 57 0>; /* gpio PH1 */
>  		power-gpios = <&gpio 70 0>; /* gpio PI6 */
> +		bus-width = <4>;
>  	};
>  
>  	sdhci at c8000600 {
>  		support-8bit;
> +		bus-width = <8>;
>  	};
>  
>  	usb at c5004000 {
> diff --git a/arch/powerpc/boot/dts/mpc8569mds.dts b/arch/powerpc/boot/dts/mpc8569mds.dts
> index 7e283c8..fe0d609 100644
> --- a/arch/powerpc/boot/dts/mpc8569mds.dts
> +++ b/arch/powerpc/boot/dts/mpc8569mds.dts
> @@ -119,6 +119,7 @@
>  		sdhc at 2e000 {
>  			status = "disabled";
>  			sdhci,1-bit-only;
> +			bus-width = <1>;
>  		};
>  
>  		par_io at e0100 {
> diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
> index d15b149..ebaf62a 100644
> --- a/drivers/mmc/host/omap_hsmmc.c
> +++ b/drivers/mmc/host/omap_hsmmc.c
> @@ -1781,7 +1781,7 @@ static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
>  		pdata->slots[0].nonremovable = true;
>  		pdata->slots[0].no_regulator_off_init = true;
>  	}
> -	of_property_read_u32(np, "ti,bus-width", &bus_width);
> +	of_property_read_u32(np, "bus-width", &bus_width);
>  	if (bus_width == 4)
>  		pdata->slots[0].caps |= MMC_CAP_4_BIT_DATA;
>  	else if (bus_width == 8)
> diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
> index 8abdaf6..0d2b082 100644
> --- a/drivers/mmc/host/sdhci-esdhc-imx.c
> +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
> @@ -402,7 +402,7 @@ sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,
>  	if (!np)
>  		return -ENODEV;
>  
> -	if (of_get_property(np, "fsl,card-wired", NULL))
> +	if (of_get_property(np, "non-removable", NULL))
>  		boarddata->cd_type = ESDHC_CD_PERMANENT;
>  
>  	if (of_get_property(np, "fsl,cd-controller", NULL))
> diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c
> index c5c2a48..a3858d0 100644
> --- a/drivers/mmc/host/sdhci-pltfm.c
> +++ b/drivers/mmc/host/sdhci-pltfm.c
> @@ -42,7 +42,8 @@ static struct sdhci_ops sdhci_pltfm_ops = {
>  #ifdef CONFIG_OF
>  static bool sdhci_of_wp_inverted(struct device_node *np)
>  {
> -	if (of_get_property(np, "sdhci,wp-inverted", NULL))
> +	if (of_get_property(np, "sdhci,wp-inverted", NULL) ||
> +	    of_get_property(np, "wp-inverted", NULL))
>  		return true;
>  
>  	/* Old device trees don't have the wp-inverted property. */
> @@ -59,13 +60,16 @@ void sdhci_get_of_property(struct platform_device *pdev)
>  	struct sdhci_host *host = platform_get_drvdata(pdev);
>  	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
>  	const __be32 *clk;
> +	u32 bus_width;
>  	int size;
>  
>  	if (of_device_is_available(np)) {
>  		if (of_get_property(np, "sdhci,auto-cmd12", NULL))
>  			host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
>  
> -		if (of_get_property(np, "sdhci,1-bit-only", NULL))
> +		if (of_get_property(np, "sdhci,1-bit-only", NULL) ||
> +		    (of_property_read_u32(np, "bus-width", &bus_width) == 0 &&
> +		    bus_width = 1))
>  			host->quirks |= SDHCI_QUIRK_FORCE_1_BIT_DATA;
>  
>  		if (sdhci_of_wp_inverted(np))
> -- 
> Chris Ball   <cjb at laptop.org>   <http://printf.net/>
> One Laptop Per Child
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/



More information about the linux-arm-kernel mailing list