From: Grant Likely <grant.likely@secretlab.ca>
To: Mark Brown <broonie@opensource.wolfsonmicro.com>,
Samuel Ortiz <sameo@linux.intel.com>,
Rob Herring <rob.herring@calxeda.com>, Liam Girdwood <lrg@ti.com>
Cc: linux-kernel@vger.kernel.org,
devicetree-discuss@lists.ozlabs.org,
Rhyland Klein <rklein@nvidia.com>
Subject: Re: [PATCH 5/8 v2] mfd: tps65910: Add device-tree support
Date: Thu, 17 May 2012 17:55:49 -0600 [thread overview]
Message-ID: <20120517235549.A13E23E062C@localhost> (raw)
In-Reply-To: <1335310570-12455-6-git-send-email-rklein@nvidia.com>
On Tue, 24 Apr 2012 16:36:07 -0700, Rhyland Klein <rklein@nvidia.com> wrote:
> Add device tree based initialization support for TI's tps65910 pmic.
>
> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
Patch description is rather light. I like to see some more details
about what the patch changes and testing details are nice too, but
I'll ack it anyway:
Acked-by: Grant Likely <grant.likely@secretlab.ca>
> ---
> v2: split mfd portion into single change to add dt support
> added of_node to config before calling regulator_register
> removed passing pdata to mfd_cell child devices
> removed use_dt_for_init_data flag
>
> drivers/mfd/tps65910.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 80 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
> index 70a8079..248fe9f 100644
> --- a/drivers/mfd/tps65910.c
> +++ b/drivers/mfd/tps65910.c
> @@ -23,6 +23,7 @@
> #include <linux/mfd/core.h>
> #include <linux/regmap.h>
> #include <linux/mfd/tps65910.h>
> +#include <linux/of_device.h>
>
> static struct mfd_cell tps65910s[] = {
> {
> @@ -66,6 +67,78 @@ static const struct regmap_config tps65910_regmap_config = {
> .cache_type = REGCACHE_RBTREE,
> };
>
> +#ifdef CONFIG_OF
> +static struct of_device_id tps65910_of_match[] = {
> + { .compatible = "ti,tps65910", .data = (void *)TPS65910},
> + { .compatible = "ti,tps65911", .data = (void *)TPS65911},
> + { },
> +};
> +MODULE_DEVICE_TABLE(of, tps65910_of_match);
> +
> +static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
> + int *chip_id)
> +{
> + struct device_node *np = client->dev.of_node;
> + struct tps65910_board *board_info;
> + unsigned int prop;
> + const struct of_device_id *match;
> + unsigned int prop_array[TPS6591X_MAX_NUM_GPIO];
> + int ret = 0;
> + int idx;
> +
> + match = of_match_device(tps65910_of_match, &client->dev);
> + if (!match) {
> + dev_err(&client->dev, "Failed to find matching dt id\n");
> + return NULL;
> + }
> +
> + *chip_id = (int)match->data;
> +
> + board_info = devm_kzalloc(&client->dev, sizeof(*board_info),
> + GFP_KERNEL);
> + if (!board_info) {
> + dev_err(&client->dev, "Failed to allocate pdata\n");
> + return NULL;
> + }
> +
> + ret = of_property_read_u32(np, "ti,vmbch-threshold", &prop);
> + if (!ret)
> + board_info->vmbch_threshold = prop;
> + else if (*chip_id == TPS65911)
> + dev_warn(&client->dev, "VMBCH-Threshold not specified");
> +
> + ret = of_property_read_u32(np, "ti,vmbch2-threshold", &prop);
> + if (!ret)
> + board_info->vmbch2_threshold = prop;
> + else if (*chip_id == TPS65911)
> + dev_warn(&client->dev, "VMBCH2-Threshold not specified");
> +
> + ret = of_property_read_u32_array(np, "ti,en-gpio-sleep",
> + prop_array, TPS6591X_MAX_NUM_GPIO);
> + if (!ret)
> + for (idx = 0; idx < ARRAY_SIZE(prop_array); idx++)
> + board_info->en_gpio_sleep[idx] = (prop_array[idx] != 0);
> + else if (ret != -EINVAL) {
> + dev_err(&client->dev,
> + "error reading property ti,en-gpio-sleep: %d\n.", ret);
> + return NULL;
> + }
> +
> +
> + board_info->irq = client->irq;
> + board_info->irq_base = -1;
> + board_info->gpio_base = -1;
> +
> + return board_info;
> +}
> +#else
> +static inline struct tps65910_board *tps65910_parse_dt(
> + struct i2c_client *client)
> +{
> + return NULL;
> +}
> +#endif
> +
> static int tps65910_i2c_probe(struct i2c_client *i2c,
> const struct i2c_device_id *id)
> {
> @@ -73,8 +146,13 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
> struct tps65910_board *pmic_plat_data;
> struct tps65910_platform_data *init_data;
> int ret = 0;
> + int chip_id = id->driver_data;
>
> pmic_plat_data = dev_get_platdata(&i2c->dev);
> +
> + if (!pmic_plat_data && i2c->dev.of_node)
> + pmic_plat_data = tps65910_parse_dt(i2c, &chip_id);
> +
> if (!pmic_plat_data)
> return -EINVAL;
>
> @@ -91,7 +169,7 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
> i2c_set_clientdata(i2c, tps65910);
> tps65910->dev = &i2c->dev;
> tps65910->i2c_client = i2c;
> - tps65910->id = id->driver_data;
> + tps65910->id = chip_id;
> mutex_init(&tps65910->io_mutex);
>
> tps65910->regmap = regmap_init_i2c(i2c, &tps65910_regmap_config);
> @@ -149,6 +227,7 @@ static struct i2c_driver tps65910_i2c_driver = {
> .driver = {
> .name = "tps65910",
> .owner = THIS_MODULE,
> + .of_match_table = of_match_ptr(tps65910_of_match),
> },
> .probe = tps65910_i2c_probe,
> .remove = tps65910_i2c_remove,
> --
> 1.7.0.4
>
--
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.
WARNING: multiple messages have this Message-ID (diff)
From: Grant Likely <grant.likely@secretlab.ca>
To: Rhyland Klein <rklein@nvidia.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Samuel Ortiz <sameo@linux.intel.com>,
Rob Herring <rob.herring@calxeda.com>, Liam Girdwood <lrg@ti.com>
Cc: linux-kernel@vger.kernel.org,
devicetree-discuss@lists.ozlabs.org,
Rhyland Klein <rklein@nvidia.com>
Subject: Re: [PATCH 5/8 v2] mfd: tps65910: Add device-tree support
Date: Thu, 17 May 2012 17:55:49 -0600 [thread overview]
Message-ID: <20120517235549.A13E23E062C@localhost> (raw)
In-Reply-To: <1335310570-12455-6-git-send-email-rklein@nvidia.com>
On Tue, 24 Apr 2012 16:36:07 -0700, Rhyland Klein <rklein@nvidia.com> wrote:
> Add device tree based initialization support for TI's tps65910 pmic.
>
> Signed-off-by: Rhyland Klein <rklein@nvidia.com>
Patch description is rather light. I like to see some more details
about what the patch changes and testing details are nice too, but
I'll ack it anyway:
Acked-by: Grant Likely <grant.likely@secretlab.ca>
> ---
> v2: split mfd portion into single change to add dt support
> added of_node to config before calling regulator_register
> removed passing pdata to mfd_cell child devices
> removed use_dt_for_init_data flag
>
> drivers/mfd/tps65910.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 80 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
> index 70a8079..248fe9f 100644
> --- a/drivers/mfd/tps65910.c
> +++ b/drivers/mfd/tps65910.c
> @@ -23,6 +23,7 @@
> #include <linux/mfd/core.h>
> #include <linux/regmap.h>
> #include <linux/mfd/tps65910.h>
> +#include <linux/of_device.h>
>
> static struct mfd_cell tps65910s[] = {
> {
> @@ -66,6 +67,78 @@ static const struct regmap_config tps65910_regmap_config = {
> .cache_type = REGCACHE_RBTREE,
> };
>
> +#ifdef CONFIG_OF
> +static struct of_device_id tps65910_of_match[] = {
> + { .compatible = "ti,tps65910", .data = (void *)TPS65910},
> + { .compatible = "ti,tps65911", .data = (void *)TPS65911},
> + { },
> +};
> +MODULE_DEVICE_TABLE(of, tps65910_of_match);
> +
> +static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
> + int *chip_id)
> +{
> + struct device_node *np = client->dev.of_node;
> + struct tps65910_board *board_info;
> + unsigned int prop;
> + const struct of_device_id *match;
> + unsigned int prop_array[TPS6591X_MAX_NUM_GPIO];
> + int ret = 0;
> + int idx;
> +
> + match = of_match_device(tps65910_of_match, &client->dev);
> + if (!match) {
> + dev_err(&client->dev, "Failed to find matching dt id\n");
> + return NULL;
> + }
> +
> + *chip_id = (int)match->data;
> +
> + board_info = devm_kzalloc(&client->dev, sizeof(*board_info),
> + GFP_KERNEL);
> + if (!board_info) {
> + dev_err(&client->dev, "Failed to allocate pdata\n");
> + return NULL;
> + }
> +
> + ret = of_property_read_u32(np, "ti,vmbch-threshold", &prop);
> + if (!ret)
> + board_info->vmbch_threshold = prop;
> + else if (*chip_id == TPS65911)
> + dev_warn(&client->dev, "VMBCH-Threshold not specified");
> +
> + ret = of_property_read_u32(np, "ti,vmbch2-threshold", &prop);
> + if (!ret)
> + board_info->vmbch2_threshold = prop;
> + else if (*chip_id == TPS65911)
> + dev_warn(&client->dev, "VMBCH2-Threshold not specified");
> +
> + ret = of_property_read_u32_array(np, "ti,en-gpio-sleep",
> + prop_array, TPS6591X_MAX_NUM_GPIO);
> + if (!ret)
> + for (idx = 0; idx < ARRAY_SIZE(prop_array); idx++)
> + board_info->en_gpio_sleep[idx] = (prop_array[idx] != 0);
> + else if (ret != -EINVAL) {
> + dev_err(&client->dev,
> + "error reading property ti,en-gpio-sleep: %d\n.", ret);
> + return NULL;
> + }
> +
> +
> + board_info->irq = client->irq;
> + board_info->irq_base = -1;
> + board_info->gpio_base = -1;
> +
> + return board_info;
> +}
> +#else
> +static inline struct tps65910_board *tps65910_parse_dt(
> + struct i2c_client *client)
> +{
> + return NULL;
> +}
> +#endif
> +
> static int tps65910_i2c_probe(struct i2c_client *i2c,
> const struct i2c_device_id *id)
> {
> @@ -73,8 +146,13 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
> struct tps65910_board *pmic_plat_data;
> struct tps65910_platform_data *init_data;
> int ret = 0;
> + int chip_id = id->driver_data;
>
> pmic_plat_data = dev_get_platdata(&i2c->dev);
> +
> + if (!pmic_plat_data && i2c->dev.of_node)
> + pmic_plat_data = tps65910_parse_dt(i2c, &chip_id);
> +
> if (!pmic_plat_data)
> return -EINVAL;
>
> @@ -91,7 +169,7 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
> i2c_set_clientdata(i2c, tps65910);
> tps65910->dev = &i2c->dev;
> tps65910->i2c_client = i2c;
> - tps65910->id = id->driver_data;
> + tps65910->id = chip_id;
> mutex_init(&tps65910->io_mutex);
>
> tps65910->regmap = regmap_init_i2c(i2c, &tps65910_regmap_config);
> @@ -149,6 +227,7 @@ static struct i2c_driver tps65910_i2c_driver = {
> .driver = {
> .name = "tps65910",
> .owner = THIS_MODULE,
> + .of_match_table = of_match_ptr(tps65910_of_match),
> },
> .probe = tps65910_i2c_probe,
> .remove = tps65910_i2c_remove,
> --
> 1.7.0.4
>
--
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies, Ltd.
next prev parent reply other threads:[~2012-05-17 23:55 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-24 23:36 [PATCH 0/8 v2] Update TPS65910 to boot using devicetree Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-04-24 23:36 ` [PATCH 1/8 v2] regulator: add generic of node parsing for regulators Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
[not found] ` <1335310570-12455-1-git-send-email-rklein-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-04-24 23:36 ` [PATCH 2/8 v2] regulator: add node validation checks Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-04-24 23:36 ` [PATCH 3/8 v2] mfd: tps65910: Commonize regmap access through header Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-05-17 23:52 ` Grant Likely
2012-05-17 23:52 ` Grant Likely
2012-04-24 23:36 ` [PATCH 4/8 v2] regulator: tps65910: Add device tree bindings Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-05-17 23:53 ` Grant Likely
2012-05-17 23:53 ` Grant Likely
2012-04-24 23:36 ` [PATCH 5/8 v2] mfd: tps65910: Add device-tree support Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-05-17 23:55 ` Grant Likely [this message]
2012-05-17 23:55 ` Grant Likely
2012-04-24 23:36 ` [PATCH 6/8 v2] regulator: tps65910 regulator: add device tree support Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-04-24 23:36 ` [PATCH 7/8 v2] mfd: tps65910-irq: Add devicetree init support Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
2012-05-18 0:00 ` Grant Likely
2012-05-18 0:00 ` Grant Likely
2012-04-24 23:36 ` [PATCH 8/8 v2] ARM: Tegra: Add support for TPS65910 PMIC Rhyland Klein
2012-04-24 23:36 ` Rhyland Klein
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=20120517235549.A13E23E062C@localhost \
--to=grant.likely@secretlab.ca \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lrg@ti.com \
--cc=rklein@nvidia.com \
--cc=rob.herring@calxeda.com \
--cc=sameo@linux.intel.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.