Re: [PATCH v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-03-09 Thread Rajendra Nayak

Hi Grant,

On Friday 09 March 2012 11:12 AM, Grant Likely wrote:

On Thu, 23 Feb 2012 17:31:27 +0530, Rajendra Nayakrna...@ti.com  wrote:

Define dt bindings for the ti-omap-hsmmc, and adapt
the driver to extract data (which was earlier passed as
platform_data) from device tree.

Signed-off-by: Rajendra Nayakrna...@ti.com
---
  .../devicetree/bindings/mmc/ti-omap-hsmmc.txt  |   31 +
  drivers/mmc/host/omap_hsmmc.c  |   68 
  2 files changed, 99 insertions(+), 0 deletions(-)
  create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt 
b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
new file mode 100644
index 000..e4fa8f0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
@@ -0,0 +1,31 @@
+* TI Highspeed MMC host controller for OMAP
+
+The Highspeed MMC Host Controller on TI OMAP family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers
+ Should be ti,omap4-hsmmc, for OMAP4 controllers
+- ti,hwmods: Must be mmcn, n is controller instance starting 1
+- reg : should contain hsmmc registers location and length
+
+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.
+cd-gpios: GPIOs for card detection
+wp-gpios: GPIOs for write protection
+ti,non-removable: non-removable slot (like eMMC)


Binding looks okay.  A couple comments below...

[...]

+static const struct of_device_id omap_mmc_of_match[];


If you move the omap_mmc_of_match[] table up to here then there is no
need for the forward declaration.


+
  static int __init omap_hsmmc_probe(struct platform_device *pdev)
  {
struct omap_mmc_platform_data *pdata = pdev-dev.platform_data;
@@ -1725,6 +1768,14 @@ static int __init omap_hsmmc_probe(struct 
platform_device *pdev)
struct omap_hsmmc_host *host = NULL;
struct resource *res;
int ret, irq;
+   const struct of_device_id *match;
+
+   match = of_match_device(omap_mmc_of_match,pdev-dev);
+   if (match) {
+   pdata = of_get_hsmmc_pdata(pdev-dev);
+   if (match-data)
+   pdata-reg_offset = *(u16 *)match-data;


Blech on the ugly cast.  It is slightly safer to do thusly:

u16 *offsetp = match-data;
pdata-reg_offset = *offsetp


thanks for the review. I'll repost with these changes.

regards,
Rajendra




+   }

if (pdata == NULL) {
dev_err(pdev-dev, Platform Data is missing\n);
@@ -2120,12 +2171,29 @@ static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
.runtime_resume = omap_hsmmc_runtime_resume,
  };

+#if defined(CONFIG_OF)
+static u16 omap4_reg_offset = 0x100;
+
+static const struct of_device_id omap_mmc_of_match[] = {
+   {
+   .compatible = ti,omap2-hsmmc,
+   },
+   {
+   .compatible = ti,omap4-hsmmc,
+   .data =omap4_reg_offset,
+   },
+   {},
+}
+MODULE_DEVICE_TABLE(of, omap_mmc_of_match);
+#endif
+
  static struct platform_driver omap_hsmmc_driver = {
.remove = omap_hsmmc_remove,
.driver = {
.name = DRIVER_NAME,
.owner = THIS_MODULE,
.pm =omap_hsmmc_dev_pm_ops,
+   .of_match_table = of_match_ptr(omap_mmc_of_match),
},
  };

--
1.7.1


___
linaro-dev mailing list
linaro-...@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev




--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-03-08 Thread Rob Herring
On 03/07/2012 09:46 PM, Rajendra Nayak wrote:
 Hi Rob/Grant,
 
 On Thursday 23 February 2012 05:31 PM, Rajendra Nayak wrote:
 Define dt bindings for the ti-omap-hsmmc, and adapt
 the driver to extract data (which was earlier passed as
 platform_data) from device tree.
 
 Any comments on these bindings for omap hsmmc? All the dependent
 patches/series on which this series was based have now made it to
 the respective -next of Mark and Chris.
 

Acked-by: Rob Herring rob.herr...@calxeda.com

 

 Signed-off-by: Rajendra Nayakrna...@ti.com
 ---
   .../devicetree/bindings/mmc/ti-omap-hsmmc.txt  |   31 +
   drivers/mmc/host/omap_hsmmc.c  |   68
 
   2 files changed, 99 insertions(+), 0 deletions(-)
   create mode 100644
 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

 diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 new file mode 100644
 index 000..e4fa8f0
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 @@ -0,0 +1,31 @@
 +* TI Highspeed MMC host controller for OMAP
 +
 +The Highspeed MMC Host Controller on TI OMAP family
 +provides an interface for MMC, SD, and SDIO types of memory cards.
 +
 +Required properties:
 +- compatible:
 + Should be ti,omap2-hsmmc, for OMAP2/3 controllers
 + Should be ti,omap4-hsmmc, for OMAP4 controllers
 +- ti,hwmods: Must be mmcn, n is controller instance starting 1
 +- reg : should contain hsmmc registers location and length
 +
 +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.
 +cd-gpios: GPIOs for card detection
 +wp-gpios: GPIOs for write protection
 +ti,non-removable: non-removable slot (like eMMC)
 +
 +Example:
 +mmc1: mmc@0x4809c000 {
 +compatible = ti,omap4-hsmmc;
 +reg =0x4809c000 0x400;
 +ti,hwmods = mmc1;
 +ti,dual-volt;
 +ti,bus-width =4;
 +vmmc-supply =vmmc; /* phandle to regulator node */
 +ti,non-removable;
 +};
 diff --git a/drivers/mmc/host/omap_hsmmc.c
 b/drivers/mmc/host/omap_hsmmc.c
 index 35f6dc1..0c93d58 100644
 --- a/drivers/mmc/host/omap_hsmmc.c
 +++ b/drivers/mmc/host/omap_hsmmc.c
 @@ -26,6 +26,9 @@
   #includelinux/platform_device.h
   #includelinux/timer.h
   #includelinux/clk.h
 +#includelinux/of.h
 +#includelinux/of_gpio.h
 +#includelinux/of_device.h
   #includelinux/mmc/host.h
   #includelinux/mmc/core.h
   #includelinux/mmc/mmc.h
 @@ -1718,6 +1721,46 @@ static void omap_hsmmc_debugfs(struct mmc_host
 *mmc)

   #endif

 +#ifdef CONFIG_OF
 +static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct
 device *dev)
 +{
 +struct omap_mmc_platform_data *pdata;
 +struct device_node *np = dev-of_node;
 +u32 bus_width;
 +
 +pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
 +if (!pdata)
 +return NULL; /* out of memory */
 +
 +if (of_find_property(np, ti,dual-volt, NULL))
 +pdata-controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT;
 +
 +/* This driver only supports 1 slot */
 +pdata-nr_slots = 1;
 +pdata-slots[0].switch_pin = of_get_named_gpio(np, cd-gpios, 0);
 +pdata-slots[0].gpio_wp = of_get_named_gpio(np, wp-gpios, 0);
 +
 +if (of_find_property(np, ti,non-removable, NULL)) {
 +pdata-slots[0].nonremovable = true;
 +pdata-slots[0].no_regulator_off_init = true;
 +}
 +of_property_read_u32(np, ti,bus-width,bus_width);
 +if (bus_width == 4)
 +pdata-slots[0].caps |= MMC_CAP_4_BIT_DATA;
 +else if (bus_width == 8)
 +pdata-slots[0].caps |= MMC_CAP_8_BIT_DATA;
 +return pdata;
 +}
 +#else
 +static inline struct omap_mmc_platform_data
 +*of_get_hsmmc_pdata(struct device *dev)
 +{
 +return NULL;
 +}
 +#endif
 +
 +static const struct of_device_id omap_mmc_of_match[];
 +
   static int __init omap_hsmmc_probe(struct platform_device *pdev)
   {
   struct omap_mmc_platform_data *pdata = pdev-dev.platform_data;
 @@ -1725,6 +1768,14 @@ static int __init omap_hsmmc_probe(struct
 platform_device *pdev)
   struct omap_hsmmc_host *host = NULL;
   struct resource *res;
   int ret, irq;
 +const struct of_device_id *match;
 +
 +match = of_match_device(omap_mmc_of_match,pdev-dev);
 +if (match) {
 +pdata = of_get_hsmmc_pdata(pdev-dev);
 +if (match-data)
 +pdata-reg_offset = *(u16 *)match-data;
 +}

   if (pdata == NULL) {
   dev_err(pdev-dev, Platform Data is missing\n);
 @@ -2120,12 +2171,29 @@ static struct dev_pm_ops omap_hsmmc_dev_pm_ops
 = {
   .runtime_resume = omap_hsmmc_runtime_resume,
   };

 +#if defined(CONFIG_OF)
 +static u16 omap4_reg_offset = 0x100;
 +
 +static const struct of_device_id omap_mmc_of_match[] = {
 

Re: [PATCH v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-03-08 Thread Grant Likely
On Thu, 23 Feb 2012 17:31:27 +0530, Rajendra Nayak rna...@ti.com wrote:
 Define dt bindings for the ti-omap-hsmmc, and adapt
 the driver to extract data (which was earlier passed as
 platform_data) from device tree.
 
 Signed-off-by: Rajendra Nayak rna...@ti.com
 ---
  .../devicetree/bindings/mmc/ti-omap-hsmmc.txt  |   31 +
  drivers/mmc/host/omap_hsmmc.c  |   68 
 
  2 files changed, 99 insertions(+), 0 deletions(-)
  create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 
 diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt 
 b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 new file mode 100644
 index 000..e4fa8f0
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 @@ -0,0 +1,31 @@
 +* TI Highspeed MMC host controller for OMAP
 +
 +The Highspeed MMC Host Controller on TI OMAP family
 +provides an interface for MMC, SD, and SDIO types of memory cards.
 +
 +Required properties:
 +- compatible:
 + Should be ti,omap2-hsmmc, for OMAP2/3 controllers
 + Should be ti,omap4-hsmmc, for OMAP4 controllers
 +- ti,hwmods: Must be mmcn, n is controller instance starting 1
 +- reg : should contain hsmmc registers location and length
 +
 +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.
 +cd-gpios: GPIOs for card detection
 +wp-gpios: GPIOs for write protection
 +ti,non-removable: non-removable slot (like eMMC)

Binding looks okay.  A couple comments below...

[...]
 +static const struct of_device_id omap_mmc_of_match[];

If you move the omap_mmc_of_match[] table up to here then there is no
need for the forward declaration.

 +
  static int __init omap_hsmmc_probe(struct platform_device *pdev)
  {
   struct omap_mmc_platform_data *pdata = pdev-dev.platform_data;
 @@ -1725,6 +1768,14 @@ static int __init omap_hsmmc_probe(struct 
 platform_device *pdev)
   struct omap_hsmmc_host *host = NULL;
   struct resource *res;
   int ret, irq;
 + const struct of_device_id *match;
 +
 + match = of_match_device(omap_mmc_of_match, pdev-dev);
 + if (match) {
 + pdata = of_get_hsmmc_pdata(pdev-dev);
 + if (match-data)
 + pdata-reg_offset = *(u16 *)match-data;

Blech on the ugly cast.  It is slightly safer to do thusly:

u16 *offsetp = match-data;
pdata-reg_offset = *offsetp

 + }
  
   if (pdata == NULL) {
   dev_err(pdev-dev, Platform Data is missing\n);
 @@ -2120,12 +2171,29 @@ static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
   .runtime_resume = omap_hsmmc_runtime_resume,
  };
  
 +#if defined(CONFIG_OF)
 +static u16 omap4_reg_offset = 0x100;
 +
 +static const struct of_device_id omap_mmc_of_match[] = {
 + {
 + .compatible = ti,omap2-hsmmc,
 + },
 + {
 + .compatible = ti,omap4-hsmmc,
 + .data = omap4_reg_offset,
 + },
 + {},
 +}
 +MODULE_DEVICE_TABLE(of, omap_mmc_of_match);
 +#endif
 +
  static struct platform_driver omap_hsmmc_driver = {
   .remove = omap_hsmmc_remove,
   .driver = {
   .name = DRIVER_NAME,
   .owner = THIS_MODULE,
   .pm = omap_hsmmc_dev_pm_ops,
 + .of_match_table = of_match_ptr(omap_mmc_of_match),
   },
  };
  
 -- 
 1.7.1
 
 
 ___
 linaro-dev mailing list
 linaro-...@lists.linaro.org
 http://lists.linaro.org/mailman/listinfo/linaro-dev

-- 
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies,Ltd.
--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-03-07 Thread Rajendra Nayak

Hi Rob/Grant,

On Thursday 23 February 2012 05:31 PM, Rajendra Nayak wrote:

Define dt bindings for the ti-omap-hsmmc, and adapt
the driver to extract data (which was earlier passed as
platform_data) from device tree.


Any comments on these bindings for omap hsmmc? All the dependent
patches/series on which this series was based have now made it to
the respective -next of Mark and Chris.

regards,
Rajendra



Signed-off-by: Rajendra Nayakrna...@ti.com
---
  .../devicetree/bindings/mmc/ti-omap-hsmmc.txt  |   31 +
  drivers/mmc/host/omap_hsmmc.c  |   68 
  2 files changed, 99 insertions(+), 0 deletions(-)
  create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt 
b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
new file mode 100644
index 000..e4fa8f0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
@@ -0,0 +1,31 @@
+* TI Highspeed MMC host controller for OMAP
+
+The Highspeed MMC Host Controller on TI OMAP family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers
+ Should be ti,omap4-hsmmc, for OMAP4 controllers
+- ti,hwmods: Must be mmcn, n is controller instance starting 1
+- reg : should contain hsmmc registers location and length
+
+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.
+cd-gpios: GPIOs for card detection
+wp-gpios: GPIOs for write protection
+ti,non-removable: non-removable slot (like eMMC)
+
+Example:
+   mmc1: mmc@0x4809c000 {
+   compatible = ti,omap4-hsmmc;
+   reg =0x4809c000 0x400;
+   ti,hwmods = mmc1;
+   ti,dual-volt;
+   ti,bus-width =4;
+   vmmc-supply =vmmc; /* phandle to regulator node */
+   ti,non-removable;
+   };
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 35f6dc1..0c93d58 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -26,6 +26,9 @@
  #includelinux/platform_device.h
  #includelinux/timer.h
  #includelinux/clk.h
+#includelinux/of.h
+#includelinux/of_gpio.h
+#includelinux/of_device.h
  #includelinux/mmc/host.h
  #includelinux/mmc/core.h
  #includelinux/mmc/mmc.h
@@ -1718,6 +1721,46 @@ static void omap_hsmmc_debugfs(struct mmc_host *mmc)

  #endif

+#ifdef CONFIG_OF
+static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
+{
+   struct omap_mmc_platform_data *pdata;
+   struct device_node *np = dev-of_node;
+   u32 bus_width;
+
+   pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+   if (!pdata)
+   return NULL; /* out of memory */
+
+   if (of_find_property(np, ti,dual-volt, NULL))
+   pdata-controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT;
+
+   /* This driver only supports 1 slot */
+   pdata-nr_slots = 1;
+   pdata-slots[0].switch_pin = of_get_named_gpio(np, cd-gpios, 0);
+   pdata-slots[0].gpio_wp = of_get_named_gpio(np, wp-gpios, 0);
+
+   if (of_find_property(np, ti,non-removable, NULL)) {
+   pdata-slots[0].nonremovable = true;
+   pdata-slots[0].no_regulator_off_init = true;
+   }
+   of_property_read_u32(np, ti,bus-width,bus_width);
+   if (bus_width == 4)
+   pdata-slots[0].caps |= MMC_CAP_4_BIT_DATA;
+   else if (bus_width == 8)
+   pdata-slots[0].caps |= MMC_CAP_8_BIT_DATA;
+   return pdata;
+}
+#else
+static inline struct omap_mmc_platform_data
+   *of_get_hsmmc_pdata(struct device *dev)
+{
+   return NULL;
+}
+#endif
+
+static const struct of_device_id omap_mmc_of_match[];
+
  static int __init omap_hsmmc_probe(struct platform_device *pdev)
  {
struct omap_mmc_platform_data *pdata = pdev-dev.platform_data;
@@ -1725,6 +1768,14 @@ static int __init omap_hsmmc_probe(struct 
platform_device *pdev)
struct omap_hsmmc_host *host = NULL;
struct resource *res;
int ret, irq;
+   const struct of_device_id *match;
+
+   match = of_match_device(omap_mmc_of_match,pdev-dev);
+   if (match) {
+   pdata = of_get_hsmmc_pdata(pdev-dev);
+   if (match-data)
+   pdata-reg_offset = *(u16 *)match-data;
+   }

if (pdata == NULL) {
dev_err(pdev-dev, Platform Data is missing\n);
@@ -2120,12 +2171,29 @@ static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
.runtime_resume = omap_hsmmc_runtime_resume,
  };

+#if defined(CONFIG_OF)
+static u16 omap4_reg_offset = 0x100;
+
+static const struct of_device_id omap_mmc_of_match[] = {

Re: [PATCH v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-24 Thread T Krishnamoorthy, Balaji
On Thu, Feb 23, 2012 at 5:31 PM, Rajendra Nayak rna...@ti.com wrote:
 Define dt bindings for the ti-omap-hsmmc, and adapt
 the driver to extract data (which was earlier passed as
 platform_data) from device tree.

 Signed-off-by: Rajendra Nayak rna...@ti.com
 ---
  .../devicetree/bindings/mmc/ti-omap-hsmmc.txt      |   31 +
  drivers/mmc/host/omap_hsmmc.c                      |   68 
 
  2 files changed, 99 insertions(+), 0 deletions(-)
  create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

 diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt 
 b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 new file mode 100644
 index 000..e4fa8f0
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
 @@ -0,0 +1,31 @@
 +* TI Highspeed MMC host controller for OMAP
 +
 +The Highspeed MMC Host Controller on TI OMAP family
 +provides an interface for MMC, SD, and SDIO types of memory cards.
 +
 +Required properties:
 +- compatible:
 + Should be ti,omap2-hsmmc, for OMAP2/3 controllers

omap_hsmmc is applicable for omap2430 and omap3.
omap2420 has non high speed controller mmci-omap - drivers/mmc/host/omap.c
May be omap3-hsmmc compatible with omap2430 ?

 + Should be ti,omap4-hsmmc, for OMAP4 controllers
 +- ti,hwmods: Must be mmcn, n is controller instance starting 1
 +- reg : should contain hsmmc registers location and length
 +
 +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.
 +cd-gpios: GPIOs for card detection
 +wp-gpios: GPIOs for write protection
 +ti,non-removable: non-removable slot (like eMMC)
 +
 +Example:
 +       mmc1: mmc@0x4809c000 {
 +               compatible = ti,omap4-hsmmc;
 +               reg = 0x4809c000 0x400;
 +               ti,hwmods = mmc1;
 +               ti,dual-volt;
 +               ti,bus-width = 4;
 +               vmmc-supply = vmmc; /* phandle to regulator node */
 +               ti,non-removable;
 +       };
--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-24 Thread Rajendra Nayak

On Friday 24 February 2012 05:02 PM, T Krishnamoorthy, Balaji wrote:

On Thu, Feb 23, 2012 at 5:31 PM, Rajendra Nayakrna...@ti.com  wrote:

Define dt bindings for the ti-omap-hsmmc, and adapt
the driver to extract data (which was earlier passed as
platform_data) from device tree.

Signed-off-by: Rajendra Nayakrna...@ti.com
---
  .../devicetree/bindings/mmc/ti-omap-hsmmc.txt  |   31 +
  drivers/mmc/host/omap_hsmmc.c  |   68 
  2 files changed, 99 insertions(+), 0 deletions(-)
  create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt 
b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
new file mode 100644
index 000..e4fa8f0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
@@ -0,0 +1,31 @@
+* TI Highspeed MMC host controller for OMAP
+
+The Highspeed MMC Host Controller on TI OMAP family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers


omap_hsmmc is applicable for omap2430 and omap3.
omap2420 has non high speed controller mmci-omap - drivers/mmc/host/omap.c
May be omap3-hsmmc compatible with omap2430 ?


Agree. I think its best in that case for me to define a
compatible ti,omap2430-hsmmc for omap2430 and ti,omap3-hsmmc
for omap3. Though the IP blocks are same, I cant think of some
common compatible string without causing confusion.




+ Should be ti,omap4-hsmmc, for OMAP4 controllers
+- ti,hwmods: Must be mmcn, n is controller instance starting 1
+- reg : should contain hsmmc registers location and length
+
+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.
+cd-gpios: GPIOs for card detection
+wp-gpios: GPIOs for write protection
+ti,non-removable: non-removable slot (like eMMC)
+
+Example:
+   mmc1: mmc@0x4809c000 {
+   compatible = ti,omap4-hsmmc;
+   reg =0x4809c000 0x400;
+   ti,hwmods = mmc1;
+   ti,dual-volt;
+   ti,bus-width =4;
+   vmmc-supply =vmmc; /* phandle to regulator node */
+   ti,non-removable;
+   };


--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-24 Thread Cousson, Benoit

On 2/24/2012 12:35 PM, Rajendra Nayak wrote:

On Friday 24 February 2012 05:02 PM, T Krishnamoorthy, Balaji wrote:

On Thu, Feb 23, 2012 at 5:31 PM, Rajendra Nayakrna...@ti.com wrote:

Define dt bindings for the ti-omap-hsmmc, and adapt
the driver to extract data (which was earlier passed as
platform_data) from device tree.

Signed-off-by: Rajendra Nayakrna...@ti.com
---
.../devicetree/bindings/mmc/ti-omap-hsmmc.txt | 31 +
drivers/mmc/host/omap_hsmmc.c | 68 
2 files changed, 99 insertions(+), 0 deletions(-)
create mode 100644
Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
new file mode 100644
index 000..e4fa8f0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
@@ -0,0 +1,31 @@
+* TI Highspeed MMC host controller for OMAP
+
+The Highspeed MMC Host Controller on TI OMAP family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers


omap_hsmmc is applicable for omap2430 and omap3.
omap2420 has non high speed controller mmci-omap -
drivers/mmc/host/omap.c
May be omap3-hsmmc compatible with omap2430 ?


Agree. I think its best in that case for me to define a
compatible ti,omap2430-hsmmc for omap2430 and ti,omap3-hsmmc
for omap3. Though the IP blocks are same, I cant think of some
common compatible string without causing confusion.


It depends, can we detect that using HW revision?
In that case, there is no need to differentiate again with compatible.

Regards,
Benoit






+ Should be ti,omap4-hsmmc, for OMAP4 controllers
+- ti,hwmods: Must be mmcn, n is controller instance starting 1
+- reg : should contain hsmmc registers location and length
+
+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.
+cd-gpios: GPIOs for card detection
+wp-gpios: GPIOs for write protection
+ti,non-removable: non-removable slot (like eMMC)
+
+Example:
+ mmc1: mmc@0x4809c000 {
+ compatible = ti,omap4-hsmmc;
+ reg =0x4809c000 0x400;
+ ti,hwmods = mmc1;
+ ti,dual-volt;
+ ti,bus-width =4;
+ vmmc-supply =vmmc; /* phandle to regulator node */
+ ti,non-removable;
+ };


___
devicetree-discuss mailing list
devicetree-disc...@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss


--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-24 Thread Rajendra Nayak

On Friday 24 February 2012 06:21 PM, Cousson, Benoit wrote:

On 2/24/2012 12:35 PM, Rajendra Nayak wrote:

On Friday 24 February 2012 05:02 PM, T Krishnamoorthy, Balaji wrote:

On Thu, Feb 23, 2012 at 5:31 PM, Rajendra Nayakrna...@ti.com wrote:

Define dt bindings for the ti-omap-hsmmc, and adapt
the driver to extract data (which was earlier passed as
platform_data) from device tree.

Signed-off-by: Rajendra Nayakrna...@ti.com
---
.../devicetree/bindings/mmc/ti-omap-hsmmc.txt | 31 +
drivers/mmc/host/omap_hsmmc.c | 68 
2 files changed, 99 insertions(+), 0 deletions(-)
create mode 100644
Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
new file mode 100644
index 000..e4fa8f0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
@@ -0,0 +1,31 @@
+* TI Highspeed MMC host controller for OMAP
+
+The Highspeed MMC Host Controller on TI OMAP family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers


omap_hsmmc is applicable for omap2430 and omap3.
omap2420 has non high speed controller mmci-omap -
drivers/mmc/host/omap.c
May be omap3-hsmmc compatible with omap2430 ?


Agree. I think its best in that case for me to define a
compatible ti,omap2430-hsmmc for omap2430 and ti,omap3-hsmmc
for omap3. Though the IP blocks are same, I cant think of some
common compatible string without causing confusion.


It depends, can we detect that using HW revision?


We don't need to. The driver does not do anything different for
2430 or omap3.


In that case, there is no need to differentiate again with compatible.


Thats perfectly fine. But what *common* compatible string would you
use?



Regards,
Benoit






+ Should be ti,omap4-hsmmc, for OMAP4 controllers
+- ti,hwmods: Must be mmcn, n is controller instance starting 1
+- reg : should contain hsmmc registers location and length
+
+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.
+cd-gpios: GPIOs for card detection
+wp-gpios: GPIOs for write protection
+ti,non-removable: non-removable slot (like eMMC)
+
+Example:
+ mmc1: mmc@0x4809c000 {
+ compatible = ti,omap4-hsmmc;
+ reg =0x4809c000 0x400;
+ ti,hwmods = mmc1;
+ ti,dual-volt;
+ ti,bus-width =4;
+ vmmc-supply =vmmc; /* phandle to regulator node */
+ ti,non-removable;
+ };


___
devicetree-discuss mailing list
devicetree-disc...@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/devicetree-discuss




--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-24 Thread Cousson, Benoit

On 2/24/2012 1:58 PM, Rajendra Nayak wrote:

On Friday 24 February 2012 06:21 PM, Cousson, Benoit wrote:

On 2/24/2012 12:35 PM, Rajendra Nayak wrote:

On Friday 24 February 2012 05:02 PM, T Krishnamoorthy, Balaji wrote:

On Thu, Feb 23, 2012 at 5:31 PM, Rajendra Nayakrna...@ti.com wrote:

...

+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers


omap_hsmmc is applicable for omap2430 and omap3.
omap2420 has non high speed controller mmci-omap -
drivers/mmc/host/omap.c
May be omap3-hsmmc compatible with omap2430 ?


Agree. I think its best in that case for me to define a
compatible ti,omap2430-hsmmc for omap2430 and ti,omap3-hsmmc
for omap3. Though the IP blocks are same, I cant think of some
common compatible string without causing confusion.


It depends, can we detect that using HW revision?


We don't need to. The driver does not do anything different for
2430 or omap3.


I was thinking of OMAP2420 vs OMAP2430. But I'm now wondering if we are 
using the same driver for the non-HS controller?



In that case, there is no need to differentiate again with compatible.


Thats perfectly fine. But what *common* compatible string would you
use?


I think that ti,omap2-hsmmc is still fine, because OMAP2420 will have 
ti,omap2-mmc and thus we can differentiate the 2 versions.


Does that make sense?

Regards,
Benoit
--
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 v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-24 Thread Rajendra Nayak

On Friday 24 February 2012 06:32 PM, Cousson, Benoit wrote:

On 2/24/2012 1:58 PM, Rajendra Nayak wrote:

On Friday 24 February 2012 06:21 PM, Cousson, Benoit wrote:

On 2/24/2012 12:35 PM, Rajendra Nayak wrote:

On Friday 24 February 2012 05:02 PM, T Krishnamoorthy, Balaji wrote:

On Thu, Feb 23, 2012 at 5:31 PM, Rajendra Nayakrna...@ti.com wrote:

...

+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers


omap_hsmmc is applicable for omap2430 and omap3.
omap2420 has non high speed controller mmci-omap -
drivers/mmc/host/omap.c
May be omap3-hsmmc compatible with omap2430 ?


Agree. I think its best in that case for me to define a
compatible ti,omap2430-hsmmc for omap2430 and ti,omap3-hsmmc
for omap3. Though the IP blocks are same, I cant think of some
common compatible string without causing confusion.


It depends, can we detect that using HW revision?


We don't need to. The driver does not do anything different for
2430 or omap3.


I was thinking of OMAP2420 vs OMAP2430. But I'm now wondering if we are
using the same driver for the non-HS controller?


No, we don't. there is a different driver for 2420.




In that case, there is no need to differentiate again with compatible.


Thats perfectly fine. But what *common* compatible string would you
use?


I think that ti,omap2-hsmmc is still fine, because OMAP2420 will have
ti,omap2-mmc and thus we can differentiate the 2 versions.

Does that make sense?


yup, that makes sense. So I don't need to change anything :-)



Regards,
Benoit


--
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


[PATCH v2 1/4] mmc: omap_hsmmc: Convert hsmmc driver to use device tree

2012-02-23 Thread Rajendra Nayak
Define dt bindings for the ti-omap-hsmmc, and adapt
the driver to extract data (which was earlier passed as
platform_data) from device tree.

Signed-off-by: Rajendra Nayak rna...@ti.com
---
 .../devicetree/bindings/mmc/ti-omap-hsmmc.txt  |   31 +
 drivers/mmc/host/omap_hsmmc.c  |   68 
 2 files changed, 99 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

diff --git a/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt 
b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
new file mode 100644
index 000..e4fa8f0
--- /dev/null
+++ b/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt
@@ -0,0 +1,31 @@
+* TI Highspeed MMC host controller for OMAP
+
+The Highspeed MMC Host Controller on TI OMAP family
+provides an interface for MMC, SD, and SDIO types of memory cards.
+
+Required properties:
+- compatible:
+ Should be ti,omap2-hsmmc, for OMAP2/3 controllers
+ Should be ti,omap4-hsmmc, for OMAP4 controllers
+- ti,hwmods: Must be mmcn, n is controller instance starting 1
+- reg : should contain hsmmc registers location and length
+
+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.
+cd-gpios: GPIOs for card detection
+wp-gpios: GPIOs for write protection
+ti,non-removable: non-removable slot (like eMMC)
+
+Example:
+   mmc1: mmc@0x4809c000 {
+   compatible = ti,omap4-hsmmc;
+   reg = 0x4809c000 0x400;
+   ti,hwmods = mmc1;
+   ti,dual-volt;
+   ti,bus-width = 4;
+   vmmc-supply = vmmc; /* phandle to regulator node */
+   ti,non-removable;
+   };
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index 35f6dc1..0c93d58 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -26,6 +26,9 @@
 #include linux/platform_device.h
 #include linux/timer.h
 #include linux/clk.h
+#include linux/of.h
+#include linux/of_gpio.h
+#include linux/of_device.h
 #include linux/mmc/host.h
 #include linux/mmc/core.h
 #include linux/mmc/mmc.h
@@ -1718,6 +1721,46 @@ static void omap_hsmmc_debugfs(struct mmc_host *mmc)
 
 #endif
 
+#ifdef CONFIG_OF
+static struct omap_mmc_platform_data *of_get_hsmmc_pdata(struct device *dev)
+{
+   struct omap_mmc_platform_data *pdata;
+   struct device_node *np = dev-of_node;
+   u32 bus_width;
+
+   pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+   if (!pdata)
+   return NULL; /* out of memory */
+
+   if (of_find_property(np, ti,dual-volt, NULL))
+   pdata-controller_flags |= OMAP_HSMMC_SUPPORTS_DUAL_VOLT;
+
+   /* This driver only supports 1 slot */
+   pdata-nr_slots = 1;
+   pdata-slots[0].switch_pin = of_get_named_gpio(np, cd-gpios, 0);
+   pdata-slots[0].gpio_wp = of_get_named_gpio(np, wp-gpios, 0);
+
+   if (of_find_property(np, ti,non-removable, NULL)) {
+   pdata-slots[0].nonremovable = true;
+   pdata-slots[0].no_regulator_off_init = true;
+   }
+   of_property_read_u32(np, ti,bus-width, bus_width);
+   if (bus_width == 4)
+   pdata-slots[0].caps |= MMC_CAP_4_BIT_DATA;
+   else if (bus_width == 8)
+   pdata-slots[0].caps |= MMC_CAP_8_BIT_DATA;
+   return pdata;
+}
+#else
+static inline struct omap_mmc_platform_data
+   *of_get_hsmmc_pdata(struct device *dev)
+{
+   return NULL;
+}
+#endif
+
+static const struct of_device_id omap_mmc_of_match[];
+
 static int __init omap_hsmmc_probe(struct platform_device *pdev)
 {
struct omap_mmc_platform_data *pdata = pdev-dev.platform_data;
@@ -1725,6 +1768,14 @@ static int __init omap_hsmmc_probe(struct 
platform_device *pdev)
struct omap_hsmmc_host *host = NULL;
struct resource *res;
int ret, irq;
+   const struct of_device_id *match;
+
+   match = of_match_device(omap_mmc_of_match, pdev-dev);
+   if (match) {
+   pdata = of_get_hsmmc_pdata(pdev-dev);
+   if (match-data)
+   pdata-reg_offset = *(u16 *)match-data;
+   }
 
if (pdata == NULL) {
dev_err(pdev-dev, Platform Data is missing\n);
@@ -2120,12 +2171,29 @@ static struct dev_pm_ops omap_hsmmc_dev_pm_ops = {
.runtime_resume = omap_hsmmc_runtime_resume,
 };
 
+#if defined(CONFIG_OF)
+static u16 omap4_reg_offset = 0x100;
+
+static const struct of_device_id omap_mmc_of_match[] = {
+   {
+   .compatible = ti,omap2-hsmmc,
+   },
+   {
+   .compatible = ti,omap4-hsmmc,
+   .data = omap4_reg_offset,
+   },
+   {},
+}
+MODULE_DEVICE_TABLE(of, omap_mmc_of_match);
+#endif
+
 static struct