Re[2]: [PATCH] regulator: mc13783: Add device tree probe support

2013-04-08 Thread Alexander Shiyan
Hello.

> On Sun, Apr 07, 2013 at 09:02:11PM +0400, Alexander Shiyan wrote:
> > Patch adds device tree probe support for mc13783-regulator driver.
> 
> I'd expect to see a document describing the binding for any new binding.
OK.
 
> > +   if (num_parsed != num_regulators) {
> > +   dev_warn(>dev,
> > +   "parsed %d != regulators %d - check your device tree!\n",
> > +   num_parsed, num_regulators);
> >  
> > -   init_data = >regulators[i];
> > -   desc = _regulators[init_data->id].desc;
> > +   num_regulators = num_parsed;
> > +   priv->num_regulators = num_regulators;
> 
> Why is this something we warn about?  Users should be able to omit
> unused regulators, no point in adding nodes that don't have any real
> information.

Warning is appear on nonexistent regulators names only.
I will rewrite warning procedure in the v2 globally for mc13xx.
Thanks.

---


Re[2]: [PATCH] regulator: mc13783: Add device tree probe support

2013-04-08 Thread Alexander Shiyan
Hello.

 On Sun, Apr 07, 2013 at 09:02:11PM +0400, Alexander Shiyan wrote:
  Patch adds device tree probe support for mc13783-regulator driver.
 
 I'd expect to see a document describing the binding for any new binding.
OK.
 
  +   if (num_parsed != num_regulators) {
  +   dev_warn(pdev-dev,
  +   parsed %d != regulators %d - check your device tree!\n,
  +   num_parsed, num_regulators);
   
  -   init_data = pdata-regulators[i];
  -   desc = mc13783_regulators[init_data-id].desc;
  +   num_regulators = num_parsed;
  +   priv-num_regulators = num_regulators;
 
 Why is this something we warn about?  Users should be able to omit
 unused regulators, no point in adding nodes that don't have any real
 information.

Warning is appear on nonexistent regulators names only.
I will rewrite warning procedure in the v2 globally for mc13xx.
Thanks.

---


Re: [PATCH] regulator: mc13783: Add device tree probe support

2013-04-07 Thread Mark Brown
On Sun, Apr 07, 2013 at 09:02:11PM +0400, Alexander Shiyan wrote:
> Patch adds device tree probe support for mc13783-regulator driver.

I'd expect to see a document describing the binding for any new binding.

> + if (num_parsed != num_regulators) {
> + dev_warn(>dev,
> + "parsed %d != regulators %d - check your device tree!\n",
> + num_parsed, num_regulators);
>  
> - init_data = >regulators[i];
> - desc = _regulators[init_data->id].desc;
> + num_regulators = num_parsed;
> + priv->num_regulators = num_regulators;

Why is this something we warn about?  Users should be able to omit
unused regulators, no point in adding nodes that don't have any real
information.


signature.asc
Description: Digital signature


[PATCH] regulator: mc13783: Add device tree probe support

2013-04-07 Thread Alexander Shiyan
Patch adds device tree probe support for mc13783-regulator driver.

Signed-off-by: Alexander Shiyan 
---
 drivers/regulator/mc13783-regulator.c  | 55 ++
 drivers/regulator/mc13xxx-regulator-core.c |  2 ++
 2 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/drivers/regulator/mc13783-regulator.c 
b/drivers/regulator/mc13783-regulator.c
index c46c670..fba8d5e 100644
--- a/drivers/regulator/mc13783-regulator.c
+++ b/drivers/regulator/mc13783-regulator.c
@@ -398,33 +398,62 @@ static int mc13783_regulator_probe(struct platform_device 
*pdev)
struct mc13xxx *mc13783 = dev_get_drvdata(pdev->dev.parent);
struct mc13xxx_regulator_platform_data *pdata =
dev_get_platdata(>dev);
-   struct mc13xxx_regulator_init_data *init_data;
+   struct mc13xxx_regulator_init_data *mc13xxx_data;
struct regulator_config config = { };
-   int i, ret;
+   int i, ret, num_regulators, num_parsed;
 
-   dev_dbg(>dev, "%s id %d\n", __func__, pdev->id);
+   num_regulators = mc13xxx_get_num_regulators_dt(pdev);
 
-   if (!pdata)
+   if (num_regulators <= 0 && pdata)
+   num_regulators = pdata->num_regulators;
+   if (num_regulators <= 0)
return -EINVAL;
 
+   num_parsed = num_regulators;
+
priv = devm_kzalloc(>dev, sizeof(*priv) +
-   pdata->num_regulators * sizeof(priv->regulators[0]),
+   num_regulators * sizeof(priv->regulators[0]),
GFP_KERNEL);
if (!priv)
return -ENOMEM;
 
+   priv->num_regulators = num_regulators;
priv->mc13xxx_regulators = mc13783_regulators;
priv->mc13xxx = mc13783;
+   platform_set_drvdata(pdev, priv);
 
-   for (i = 0; i < pdata->num_regulators; i++) {
-   struct regulator_desc *desc;
+   mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13783_regulators,
+   ARRAY_SIZE(mc13783_regulators),
+   _parsed);
+   if (num_parsed != num_regulators) {
+   dev_warn(>dev,
+   "parsed %d != regulators %d - check your device tree!\n",
+   num_parsed, num_regulators);
 
-   init_data = >regulators[i];
-   desc = _regulators[init_data->id].desc;
+   num_regulators = num_parsed;
+   priv->num_regulators = num_regulators;
+   }
+
+   for (i = 0; i < num_regulators; i++) {
+   struct regulator_init_data *init_data;
+   struct regulator_desc *desc;
+   struct device_node *node = NULL;
+   int id;
+
+   if (mc13xxx_data) {
+   id = mc13xxx_data[i].id;
+   init_data = mc13xxx_data[i].init_data;
+   node = mc13xxx_data[i].node;
+   } else {
+   id = pdata->regulators[i].id;
+   init_data = pdata->regulators[i].init_data;
+   }
+   desc = _regulators[id].desc;
 
config.dev = >dev;
-   config.init_data = init_data->init_data;
+   config.init_data = init_data;
config.driver_data = priv;
+   config.of_node = node;
 
priv->regulators[i] = regulator_register(desc, );
if (IS_ERR(priv->regulators[i])) {
@@ -435,8 +464,6 @@ static int mc13783_regulator_probe(struct platform_device 
*pdev)
}
}
 
-   platform_set_drvdata(pdev, priv);
-
return 0;
 err:
while (--i >= 0)
@@ -448,13 +475,11 @@ err:
 static int mc13783_regulator_remove(struct platform_device *pdev)
 {
struct mc13xxx_regulator_priv *priv = platform_get_drvdata(pdev);
-   struct mc13xxx_regulator_platform_data *pdata =
-   dev_get_platdata(>dev);
int i;
 
platform_set_drvdata(pdev, NULL);
 
-   for (i = 0; i < pdata->num_regulators; i++)
+   for (i = 0; i < priv->num_regulators; i++)
regulator_unregister(priv->regulators[i]);
 
return 0;
diff --git a/drivers/regulator/mc13xxx-regulator-core.c 
b/drivers/regulator/mc13xxx-regulator-core.c
index 23cf9f9..836e21e 100644
--- a/drivers/regulator/mc13xxx-regulator-core.c
+++ b/drivers/regulator/mc13xxx-regulator-core.c
@@ -205,6 +205,8 @@ struct mc13xxx_regulator_init_data 
*mc13xxx_parse_regulators_dt(
 
for_each_child_of_node(parent, child) {
for (i = 0; i < num_regulators; i++) {
+   if (!regulators[i].desc.name)
+   continue;
if (!of_node_cmp(child->name,
 regulators[i].desc.name)) {
 
-- 
1.8.1.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo 

[PATCH] regulator: mc13783: Add device tree probe support

2013-04-07 Thread Alexander Shiyan
Patch adds device tree probe support for mc13783-regulator driver.

Signed-off-by: Alexander Shiyan shc_w...@mail.ru
---
 drivers/regulator/mc13783-regulator.c  | 55 ++
 drivers/regulator/mc13xxx-regulator-core.c |  2 ++
 2 files changed, 42 insertions(+), 15 deletions(-)

diff --git a/drivers/regulator/mc13783-regulator.c 
b/drivers/regulator/mc13783-regulator.c
index c46c670..fba8d5e 100644
--- a/drivers/regulator/mc13783-regulator.c
+++ b/drivers/regulator/mc13783-regulator.c
@@ -398,33 +398,62 @@ static int mc13783_regulator_probe(struct platform_device 
*pdev)
struct mc13xxx *mc13783 = dev_get_drvdata(pdev-dev.parent);
struct mc13xxx_regulator_platform_data *pdata =
dev_get_platdata(pdev-dev);
-   struct mc13xxx_regulator_init_data *init_data;
+   struct mc13xxx_regulator_init_data *mc13xxx_data;
struct regulator_config config = { };
-   int i, ret;
+   int i, ret, num_regulators, num_parsed;
 
-   dev_dbg(pdev-dev, %s id %d\n, __func__, pdev-id);
+   num_regulators = mc13xxx_get_num_regulators_dt(pdev);
 
-   if (!pdata)
+   if (num_regulators = 0  pdata)
+   num_regulators = pdata-num_regulators;
+   if (num_regulators = 0)
return -EINVAL;
 
+   num_parsed = num_regulators;
+
priv = devm_kzalloc(pdev-dev, sizeof(*priv) +
-   pdata-num_regulators * sizeof(priv-regulators[0]),
+   num_regulators * sizeof(priv-regulators[0]),
GFP_KERNEL);
if (!priv)
return -ENOMEM;
 
+   priv-num_regulators = num_regulators;
priv-mc13xxx_regulators = mc13783_regulators;
priv-mc13xxx = mc13783;
+   platform_set_drvdata(pdev, priv);
 
-   for (i = 0; i  pdata-num_regulators; i++) {
-   struct regulator_desc *desc;
+   mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13783_regulators,
+   ARRAY_SIZE(mc13783_regulators),
+   num_parsed);
+   if (num_parsed != num_regulators) {
+   dev_warn(pdev-dev,
+   parsed %d != regulators %d - check your device tree!\n,
+   num_parsed, num_regulators);
 
-   init_data = pdata-regulators[i];
-   desc = mc13783_regulators[init_data-id].desc;
+   num_regulators = num_parsed;
+   priv-num_regulators = num_regulators;
+   }
+
+   for (i = 0; i  num_regulators; i++) {
+   struct regulator_init_data *init_data;
+   struct regulator_desc *desc;
+   struct device_node *node = NULL;
+   int id;
+
+   if (mc13xxx_data) {
+   id = mc13xxx_data[i].id;
+   init_data = mc13xxx_data[i].init_data;
+   node = mc13xxx_data[i].node;
+   } else {
+   id = pdata-regulators[i].id;
+   init_data = pdata-regulators[i].init_data;
+   }
+   desc = mc13783_regulators[id].desc;
 
config.dev = pdev-dev;
-   config.init_data = init_data-init_data;
+   config.init_data = init_data;
config.driver_data = priv;
+   config.of_node = node;
 
priv-regulators[i] = regulator_register(desc, config);
if (IS_ERR(priv-regulators[i])) {
@@ -435,8 +464,6 @@ static int mc13783_regulator_probe(struct platform_device 
*pdev)
}
}
 
-   platform_set_drvdata(pdev, priv);
-
return 0;
 err:
while (--i = 0)
@@ -448,13 +475,11 @@ err:
 static int mc13783_regulator_remove(struct platform_device *pdev)
 {
struct mc13xxx_regulator_priv *priv = platform_get_drvdata(pdev);
-   struct mc13xxx_regulator_platform_data *pdata =
-   dev_get_platdata(pdev-dev);
int i;
 
platform_set_drvdata(pdev, NULL);
 
-   for (i = 0; i  pdata-num_regulators; i++)
+   for (i = 0; i  priv-num_regulators; i++)
regulator_unregister(priv-regulators[i]);
 
return 0;
diff --git a/drivers/regulator/mc13xxx-regulator-core.c 
b/drivers/regulator/mc13xxx-regulator-core.c
index 23cf9f9..836e21e 100644
--- a/drivers/regulator/mc13xxx-regulator-core.c
+++ b/drivers/regulator/mc13xxx-regulator-core.c
@@ -205,6 +205,8 @@ struct mc13xxx_regulator_init_data 
*mc13xxx_parse_regulators_dt(
 
for_each_child_of_node(parent, child) {
for (i = 0; i  num_regulators; i++) {
+   if (!regulators[i].desc.name)
+   continue;
if (!of_node_cmp(child-name,
 regulators[i].desc.name)) {
 
-- 
1.8.1.5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to 

Re: [PATCH] regulator: mc13783: Add device tree probe support

2013-04-07 Thread Mark Brown
On Sun, Apr 07, 2013 at 09:02:11PM +0400, Alexander Shiyan wrote:
 Patch adds device tree probe support for mc13783-regulator driver.

I'd expect to see a document describing the binding for any new binding.

 + if (num_parsed != num_regulators) {
 + dev_warn(pdev-dev,
 + parsed %d != regulators %d - check your device tree!\n,
 + num_parsed, num_regulators);
  
 - init_data = pdata-regulators[i];
 - desc = mc13783_regulators[init_data-id].desc;
 + num_regulators = num_parsed;
 + priv-num_regulators = num_regulators;

Why is this something we warn about?  Users should be able to omit
unused regulators, no point in adding nodes that don't have any real
information.


signature.asc
Description: Digital signature