Re: [PATCH 3/3] mmc: sdhci-esdhc-imx: add device tree probe support

2011-07-05 Thread Shawn Guo
On Mon, Jul 04, 2011 at 12:25:48AM -0600, Grant Likely wrote:
 On Sun, Jul 03, 2011 at 04:30:51PM +0800, Shawn Guo wrote:
  The patch adds device tree probe support for sdhci-esdhc-imx driver.
  
  Signed-off-by: Shawn Guo shawn@linaro.org
  Cc: Wolfram Sang w.s...@pengutronix.de
  Cc: Chris Ball c...@laptop.org
  Cc: Grant Likely grant.lik...@secretlab.ca
  ---
   .../devicetree/bindings/mmc/fsl-imx-esdhc.txt  |   40 
   drivers/mmc/host/sdhci-esdhc-imx.c |   99 
  +++-
   2 files changed, 134 insertions(+), 5 deletions(-)
   create mode 100644 Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
  
  diff --git a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt 
  b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
  new file mode 100644
  index 000..e182e7c
  --- /dev/null
  +++ b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
  @@ -0,0 +1,40 @@
  +* Freescale Enhanced Secure Digital Host Controller (eSDHC) for i.MX
  +
  +The Enhanced Secure Digital Host Controller on Freescale i.MX family
  +provides an interface for MMC, SD, and SDIO types of memory cards.
  +
  +Required properties:
  +- compatible : Should be fsl,chip-esdhc
  +- reg : Should contain eSDHC registers location and length
  +- interrupts : Should contain eSDHC interrupt
  +- cd-type : String, card detection (CD) method.  Supported values are:
 
 Similar to previous comments, use the fsl, prefix to this property name.
 
I did not know even property name could be written like this.  I tried
it and found it works :)

  +none : No CD
  +controller : Uses eSDHC controller internal CD signal
  +gpio : Uses GPIO pin for CD
 
 I would say the presence of a cd-gpios property would implicitly
 mean gpio is to be used for the CD pin.
 
Yes, you are right.  But I would say this is a direct translation of
the existing platform_data.  After all, we are sharing most of code
path between platform and dt.

-- 
Regards,
Shawn

--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/3] mmc: sdhci-esdhc-imx: add device tree probe support

2011-07-05 Thread Grant Likely
On Tue, Jul 5, 2011 at 9:35 AM, Shawn Guo shawn@freescale.com wrote:
 On Mon, Jul 04, 2011 at 12:25:48AM -0600, Grant Likely wrote:
  +    none : No CD
  +    controller : Uses eSDHC controller internal CD signal
  +    gpio : Uses GPIO pin for CD

 I would say the presence of a cd-gpios property would implicitly
 mean gpio is to be used for the CD pin.

 Yes, you are right.  But I would say this is a direct translation of
 the existing platform_data.  After all, we are sharing most of code
 path between platform and dt.

Meh, that's just implementation detail and the DT bindings should
*not* be focused on what Linux happens to currently do.  Define a
binding that makes sense first and foremost, and then make the driver
use it.

g.
--
To unsubscribe from this list: send the line unsubscribe linux-mmc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/3] mmc: sdhci-esdhc-imx: add device tree probe support

2011-07-04 Thread Grant Likely
On Sun, Jul 03, 2011 at 04:30:51PM +0800, Shawn Guo wrote:
 The patch adds device tree probe support for sdhci-esdhc-imx driver.
 
 Signed-off-by: Shawn Guo shawn@linaro.org
 Cc: Wolfram Sang w.s...@pengutronix.de
 Cc: Chris Ball c...@laptop.org
 Cc: Grant Likely grant.lik...@secretlab.ca
 ---
  .../devicetree/bindings/mmc/fsl-imx-esdhc.txt  |   40 
  drivers/mmc/host/sdhci-esdhc-imx.c |   99 
 +++-
  2 files changed, 134 insertions(+), 5 deletions(-)
  create mode 100644 Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
 
 diff --git a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt 
 b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
 new file mode 100644
 index 000..e182e7c
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
 @@ -0,0 +1,40 @@
 +* Freescale Enhanced Secure Digital Host Controller (eSDHC) for i.MX
 +
 +The Enhanced Secure Digital Host Controller on Freescale i.MX family
 +provides an interface for MMC, SD, and SDIO types of memory cards.
 +
 +Required properties:
 +- compatible : Should be fsl,chip-esdhc
 +- reg : Should contain eSDHC registers location and length
 +- interrupts : Should contain eSDHC interrupt
 +- cd-type : String, card detection (CD) method.  Supported values are:

Similar to previous comments, use the fsl, prefix to this property name.

 +none : No CD
 +controller : Uses eSDHC controller internal CD signal
 +gpio : Uses GPIO pin for CD

I would say the presence of a cd-gpios property would implicitly
mean gpio is to be used for the CD pin.

 +permanent : No CD because card is permanently wired to host
 +- wp-type : String, write protection (WP) method.  Supported values are:
 +none : No WP
 +controller : Uses eSDHC controller internal WP signal 
 +gpio : Uses GPIO pin for WP

Ditto comments here.

 +- gpios : Should specify GPIOs in this order: CD GPIO, WP GPIO, if
 +  properties cd-type and wp-type are gpio.

The gpios binding has been extended to allow named gpios now.  You can
uses something like cd-gpios and wp-gpios.

 +
 +Examples:
 +
 +esdhc@70004000 {
 + compatible = fsl,imx51-esdhc;
 + reg = 0x70004000 0x4000;
 + interrupts = 1;
 + cd-type = controller;
 + wp-type = controller;
 +};
 +
 +esdhc@70008000 {
 + compatible = fsl,imx51-esdhc;
 + reg = 0x70008000 0x4000;
 + interrupts = 2;
 + cd-type = gpio;
 + wp-type = gpio;
 + gpios = gpio0 6 0, /* CD, GPIO1_6 */
 + gpio0 5 0; /* WP, GPIO1_5 */
 +};
 diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
 b/drivers/mmc/host/sdhci-esdhc-imx.c
 index 705d670..57793e3 100644
 --- a/drivers/mmc/host/sdhci-esdhc-imx.c
 +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
 @@ -20,6 +20,9 @@
  #include linux/mmc/host.h
  #include linux/mmc/mmc.h
  #include linux/mmc/sdio.h
 +#include linux/of.h
 +#include linux/of_device.h
 +#include linux/of_gpio.h
  #include mach/esdhc.h
  #include sdhci-pltfm.h
  #include sdhci-esdhc.h
 @@ -78,6 +81,14 @@ static struct platform_device_id imx_esdhc_devtype[] = {
  };
  MODULE_DEVICE_TABLE(platform, imx_esdhc_devtype);
  
 +static const struct of_device_id imx_esdhc_dt_ids[] = {
 + { .compatible = fsl,imx25-esdhc, .data = 
 imx_esdhc_devtype[IMX25_ESDHC], },
 + { .compatible = fsl,imx35-esdhc, .data = 
 imx_esdhc_devtype[IMX35_ESDHC], },
 + { .compatible = fsl,imx51-esdhc, .data = 
 imx_esdhc_devtype[IMX51_ESDHC], },
 + { .compatible = fsl,imx53-esdhc, .data = 
 imx_esdhc_devtype[IMX53_ESDHC], },
 + { /* sentinel */ },
 +};
 +
  static unsigned int esdhc_pltfm_get_max_blk_size(struct sdhci_host *host)
  {
   /* Force 2048 bytes, which is the maximum supported size in SDHCI. */
 @@ -290,24 +301,93 @@ static irqreturn_t cd_irq(int irq, void *data)
   return IRQ_HANDLED;
  };
  
 +#ifdef CONFIG_OF
 +static int __devinit sdhci_esdhc_imx_probe_dt(struct platform_device *pdev)
 +{
 + const struct of_device_id *of_id =
 + of_match_device(imx_esdhc_dt_ids, pdev-dev);
 + struct device_node *np = pdev-dev.of_node;
 + struct esdhc_platform_data *boarddata;
 + int err, i;
 + const char *cd, *cd_types[] = {
 + [ESDHC_CD_NONE] = none,
 + [ESDHC_CD_CONTROLLER]   = controller,
 + [ESDHC_CD_GPIO] = gpio,
 + [ESDHC_CD_PERMANENT]= permanent,
 + };
 + const char *wp, *wp_types[] = {
 + [ESDHC_WP_NONE] = none,
 + [ESDHC_WP_CONTROLLER]   = controller,
 + [ESDHC_WP_GPIO] = gpio,
 + };
 +
 + if (!np)
 + return -ENODEV;
 +
 + boarddata = kzalloc(sizeof(*boarddata), GFP_KERNEL);
 + if (!boarddata)
 + return -ENOMEM;
 + pdev-dev.platform_data = boarddata;
 +
 + err = of_property_read_string(np, cd-type, cd);
 + if (err)
 + return err;
 + for (i = 0; i  ARRAY_SIZE(cd_types); i++)
 +   

[PATCH 3/3] mmc: sdhci-esdhc-imx: add device tree probe support

2011-07-03 Thread Shawn Guo
The patch adds device tree probe support for sdhci-esdhc-imx driver.

Signed-off-by: Shawn Guo shawn@linaro.org
Cc: Wolfram Sang w.s...@pengutronix.de
Cc: Chris Ball c...@laptop.org
Cc: Grant Likely grant.lik...@secretlab.ca
---
 .../devicetree/bindings/mmc/fsl-imx-esdhc.txt  |   40 
 drivers/mmc/host/sdhci-esdhc-imx.c |   99 +++-
 2 files changed, 134 insertions(+), 5 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt

diff --git a/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt 
b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
new file mode 100644
index 000..e182e7c
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/fsl-imx-esdhc.txt
@@ -0,0 +1,40 @@
+* Freescale Enhanced Secure Digital Host Controller (eSDHC) for i.MX
+
+The Enhanced Secure Digital Host Controller on Freescale i.MX family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible : Should be fsl,chip-esdhc
+- reg : Should contain eSDHC registers location and length
+- interrupts : Should contain eSDHC interrupt
+- cd-type : String, card detection (CD) method.  Supported values are:
+none : No CD
+controller : Uses eSDHC controller internal CD signal
+gpio : Uses GPIO pin for CD
+permanent : No CD because card is permanently wired to host
+- wp-type : String, write protection (WP) method.  Supported values are:
+none : No WP
+controller : Uses eSDHC controller internal WP signal 
+gpio : Uses GPIO pin for WP
+- gpios : Should specify GPIOs in this order: CD GPIO, WP GPIO, if
+  properties cd-type and wp-type are gpio.
+
+Examples:
+
+esdhc@70004000 {
+   compatible = fsl,imx51-esdhc;
+   reg = 0x70004000 0x4000;
+   interrupts = 1;
+   cd-type = controller;
+   wp-type = controller;
+};
+
+esdhc@70008000 {
+   compatible = fsl,imx51-esdhc;
+   reg = 0x70008000 0x4000;
+   interrupts = 2;
+   cd-type = gpio;
+   wp-type = gpio;
+   gpios = gpio0 6 0, /* CD, GPIO1_6 */
+   gpio0 5 0; /* WP, GPIO1_5 */
+};
diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c 
b/drivers/mmc/host/sdhci-esdhc-imx.c
index 705d670..57793e3 100644
--- a/drivers/mmc/host/sdhci-esdhc-imx.c
+++ b/drivers/mmc/host/sdhci-esdhc-imx.c
@@ -20,6 +20,9 @@
 #include linux/mmc/host.h
 #include linux/mmc/mmc.h
 #include linux/mmc/sdio.h
+#include linux/of.h
+#include linux/of_device.h
+#include linux/of_gpio.h
 #include mach/esdhc.h
 #include sdhci-pltfm.h
 #include sdhci-esdhc.h
@@ -78,6 +81,14 @@ static struct platform_device_id imx_esdhc_devtype[] = {
 };
 MODULE_DEVICE_TABLE(platform, imx_esdhc_devtype);
 
+static const struct of_device_id imx_esdhc_dt_ids[] = {
+   { .compatible = fsl,imx25-esdhc, .data = 
imx_esdhc_devtype[IMX25_ESDHC], },
+   { .compatible = fsl,imx35-esdhc, .data = 
imx_esdhc_devtype[IMX35_ESDHC], },
+   { .compatible = fsl,imx51-esdhc, .data = 
imx_esdhc_devtype[IMX51_ESDHC], },
+   { .compatible = fsl,imx53-esdhc, .data = 
imx_esdhc_devtype[IMX53_ESDHC], },
+   { /* sentinel */ },
+};
+
 static unsigned int esdhc_pltfm_get_max_blk_size(struct sdhci_host *host)
 {
/* Force 2048 bytes, which is the maximum supported size in SDHCI. */
@@ -290,24 +301,93 @@ static irqreturn_t cd_irq(int irq, void *data)
return IRQ_HANDLED;
 };
 
+#ifdef CONFIG_OF
+static int __devinit sdhci_esdhc_imx_probe_dt(struct platform_device *pdev)
+{
+   const struct of_device_id *of_id =
+   of_match_device(imx_esdhc_dt_ids, pdev-dev);
+   struct device_node *np = pdev-dev.of_node;
+   struct esdhc_platform_data *boarddata;
+   int err, i;
+   const char *cd, *cd_types[] = {
+   [ESDHC_CD_NONE] = none,
+   [ESDHC_CD_CONTROLLER]   = controller,
+   [ESDHC_CD_GPIO] = gpio,
+   [ESDHC_CD_PERMANENT]= permanent,
+   };
+   const char *wp, *wp_types[] = {
+   [ESDHC_WP_NONE] = none,
+   [ESDHC_WP_CONTROLLER]   = controller,
+   [ESDHC_WP_GPIO] = gpio,
+   };
+
+   if (!np)
+   return -ENODEV;
+
+   boarddata = kzalloc(sizeof(*boarddata), GFP_KERNEL);
+   if (!boarddata)
+   return -ENOMEM;
+   pdev-dev.platform_data = boarddata;
+
+   err = of_property_read_string(np, cd-type, cd);
+   if (err)
+   return err;
+   for (i = 0; i  ARRAY_SIZE(cd_types); i++)
+   if (!strcasecmp(cd, cd_types[i])) {
+   boarddata-cd_type = i;
+   break;
+   }
+
+   err = of_property_read_string(np, wp-type, wp);
+   if (err)
+   return err;
+   for (i = 0; i  ARRAY_SIZE(wp_types); i++)
+   if (!strcasecmp(wp, wp_types[i])) {
+   boarddata-wp_type = i;
+   break;
+