All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qing Xu <qingx@marvell.com>
To: Haojian Zhuang <haojian.zhuang@gmail.com>
Cc: Samuel Ortiz <sameo@linux.intel.com>,
	Grant Likely <grant.likely@secretlab.ca>,
	Rob Herring <rob.herring@calxeda.com>,
	Qiao Zhou <zhouqiao@marvell.com>, Chao Xie <cxie4@marvell.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] mfd: 88pm80x: add dt support
Date: Wed, 05 Dec 2012 13:43:26 +0800	[thread overview]
Message-ID: <50BEDEFE.1090800@marvell.com> (raw)
In-Reply-To: <CAN1soZzZ-XB2P9Hp=dc3pr9+iHAUFvYh36yt8TEx5VT9kFTYzQ@mail.gmail.com>

On 12/05/2012 10:28 AM, Haojian Zhuang wrote:
> On Wed, Dec 5, 2012 at 10:23 AM, Qing Xu <qingx@marvell.com> wrote:
>> From: Qing Xu <qingx@marvell.com>
>>
>> add dt support for 88pm800 and 88pm805
>>
>> Signed-off-by: Qing Xu <qingx@marvell.com>
>> ---
>>   drivers/mfd/88pm800.c       |   26 +++++++++++++++++++++++---
>>   drivers/mfd/88pm805.c       |   26 +++++++++++++++++++++++---
>>   drivers/mfd/88pm80x.c       |   32 ++++++++++++++++++++++++++++++++
>>   include/linux/mfd/88pm80x.h |    3 +++
>>   4 files changed, 81 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/mfd/88pm800.c b/drivers/mfd/88pm800.c
>> index 3fcc8dd..20b67d7 100644
>> --- a/drivers/mfd/88pm800.c
>> +++ b/drivers/mfd/88pm800.c
>> @@ -506,6 +506,22 @@ static int __devinit pm800_probe(struct i2c_client *client,
>>          struct pm80x_chip *chip;
>>          struct pm80x_platform_data *pdata = client->dev.platform_data;
>>          struct pm80x_subchip *subchip;
>> +       struct device_node *node = client->dev.of_node;
>> +
>> +       if (node && !pdata) {
>> +               /* parse DT to get platform data */
>> +               pdata = devm_kzalloc(&client->dev,
>> +                                    sizeof(struct pm80x_platform_data),
>> +                                    GFP_KERNEL);
>> +               if (!pdata)
>> +                       return -ENOMEM;
>> +               ret = pm80x_dt_init(node, &client->dev, pdata);
>> +               if (ret)
>> +                       return -EINVAL;
>> +       } else if (!pdata) {
>> +               pr_info("No platform data in %s!\n", __func__);
>> +               return -EINVAL;
>> +       }
>>
>>          ret = pm80x_init(client, id);
>>          if (ret) {
>> @@ -540,9 +556,6 @@ static int __devinit pm800_probe(struct i2c_client *client,
>>                  goto err_800_init;
>>          }
>>
>> -       if (pdata->plat_config)
>> -               pdata->plat_config(chip, pdata);
>> -
>>          return 0;
>>
>>   err_800_init:
>> @@ -570,11 +583,18 @@ static int __devexit pm800_remove(struct i2c_client *client)
>>          return 0;
>>   }
>>
>> +static const struct of_device_id pm800_dt_ids[] = {
>> +       { .compatible = "marvell,88pm800", },
>> +       {},
>> +};
>> +MODULE_DEVICE_TABLE(of, pm800_dt_ids);
>> +
>>   static struct i2c_driver pm800_driver = {
>>          .driver = {
>>                  .name = "88PM800",
>>                  .owner = THIS_MODULE,
>>                  .pm = &pm80x_pm_ops,
>> +               .of_match_table = of_match_ptr(pm800_dt_ids),
>>                  },
>>          .probe = pm800_probe,
>>          .remove = __devexit_p(pm800_remove),
>> diff --git a/drivers/mfd/88pm805.c b/drivers/mfd/88pm805.c
>> index 39a91bd..b0fb3ff 100644
>> --- a/drivers/mfd/88pm805.c
>> +++ b/drivers/mfd/88pm805.c
>> @@ -239,6 +239,22 @@ static int __devinit pm805_probe(struct i2c_client *client,
>>          int ret = 0;
>>          struct pm80x_chip *chip;
>>          struct pm80x_platform_data *pdata = client->dev.platform_data;
>> +       struct device_node *node = client->dev.of_node;
>> +
>> +       if (node && !pdata) {
>> +               /* parse DT to get platform data */
>> +               pdata = devm_kzalloc(&client->dev,
>> +                                    sizeof(struct pm80x_platform_data),
>> +                                    GFP_KERNEL);
>> +               if (!pdata)
>> +                       return -ENOMEM;
>> +               ret = pm80x_dt_init(node, &client->dev, pdata);
>> +               if (ret)
>> +                       return -EINVAL;
>> +       } else if (!pdata) {
>> +               pr_info("No platform data in %s!\n", __func__);
>> +               return -EINVAL;
>> +       }
>>
>>          ret = pm80x_init(client, id);
>>          if (ret) {
>> @@ -254,9 +270,6 @@ static int __devinit pm805_probe(struct i2c_client *client,
>>                  goto err_805_init;
>>          }
>>
>> -       if (pdata->plat_config)
>> -               pdata->plat_config(chip, pdata);
>> -
>>          return 0;
>>
>>   err_805_init:
>> @@ -277,11 +290,18 @@ static int __devexit pm805_remove(struct i2c_client *client)
>>          return 0;
>>   }
>>
>> +static const struct of_device_id pm805_dt_ids[] = {
>> +       { .compatible = "marvell,88pm805", },
>> +       {},
>> +};
>> +MODULE_DEVICE_TABLE(of, pm805_dt_ids);
>> +
>>   static struct i2c_driver pm805_driver = {
>>          .driver = {
>>                  .name = "88PM805",
>>                  .owner = THIS_MODULE,
>>                  .pm = &pm80x_pm_ops,
>> +               .of_match_table = of_match_ptr(pm805_dt_ids),
>>                  },
>>          .probe = pm805_probe,
>>          .remove = __devexit_p(pm805_remove),
>> diff --git a/drivers/mfd/88pm80x.c b/drivers/mfd/88pm80x.c
>> index 1adb355..bd59202 100644
>> --- a/drivers/mfd/88pm80x.c
>> +++ b/drivers/mfd/88pm80x.c
>> @@ -111,6 +111,38 @@ int pm80x_deinit(struct i2c_client *client)
>>   }
>>   EXPORT_SYMBOL_GPL(pm80x_deinit);
>>
>> +int pm80x_dt_init(struct device_node *np,
>> +                                   struct device *dev,
>> +                                   struct pm80x_platform_data *pdata)
>> +{
>> +       int ret;
>> +       ret = of_property_read_u32(np, "marvell,88pm80x-irqmode",
>> +                                  &pdata->irq_mode);
>> +       if (ret) {
>> +               dev_err(dev, "Not found \"marvell,88pm80x-irqmode\" "
>> +                       "property\n");
>> +               return -EINVAL;
>> +       }
>> +
>> +       ret = of_property_read_u32(np, "marvell,88pm80x-poweraddr",
>> +                                  (u32*)(&pdata->power_page_addr));
>> +       if (ret) {
>> +               dev_err(dev, "Not found \"marvell,88pm80x-poweraddr\" "
>> +                       "property\n");
>> +               return -EINVAL;
>> +       }
>> +
>> +       ret = of_property_read_u32(np, "marvell,88pm80x-gpadcaddr",
>> +                                  (u32*)(&pdata->gpadc_page_addr));
>> +       if (ret) {
>> +               dev_err(dev, "Not found \"marvell,88pm80x-gpadcaddr\" "
>> +                       "property\n");
>> +               return -EINVAL;
>> +       }
>> +       return 0;
>> +}
>> +EXPORT_SYMBOL_GPL(pm80x_dt_init);
>> +
>>   #ifdef CONFIG_PM_SLEEP
>>   static int pm80x_suspend(struct device *dev)
>>   {
>> diff --git a/include/linux/mfd/88pm80x.h b/include/linux/mfd/88pm80x.h
>> index 904efb9..153f492 100644
>> --- a/include/linux/mfd/88pm80x.h
>> +++ b/include/linux/mfd/88pm80x.h
>> @@ -367,4 +367,7 @@ static inline int pm80x_dev_resume(struct device *dev)
>>   extern int pm80x_init(struct i2c_client *client,
>>                               const struct i2c_device_id *id) __devinit;
>>   extern int pm80x_deinit(struct i2c_client *client);
>> +extern int pm80x_dt_init(struct device_node *np,
>> +                                               struct device *dev,
>> +                                               struct pm80x_platform_data *pdata);
>>   #endif /* __LINUX_MFD_88PM80X_H */
>> --
>> 1.7.0.4
>>
> Document?

Thanks for review! I update doc in the 2nd patch. Please help to review 
again.


  reply	other threads:[~2012-12-05  5:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-05  2:23 [PATCH] mfd: 88pm80x: add dt support Qing Xu
2012-12-05  2:28 ` Haojian Zhuang
2012-12-05  5:43   ` Qing Xu [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-12-06  1:55 Qing Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50BEDEFE.1090800@marvell.com \
    --to=qingx@marvell.com \
    --cc=cxie4@marvell.com \
    --cc=grant.likely@secretlab.ca \
    --cc=haojian.zhuang@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rob.herring@calxeda.com \
    --cc=sameo@linux.intel.com \
    --cc=zhouqiao@marvell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.