From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Cc: Mark Brown <broonie@kernel.org>,
Kukjin Kim <kgene.kim@samsung.com>,
Chanwoo Choi <cw00.choi@samsung.com>,
Olof Johansson <olof@lixom.net>, Chris Zhong <zyw@rock-chips.com>,
Abhilash Kesavan <kesavan.abhilash@gmail.com>,
linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org
Subject: Re: [PATCH v5 3/5] regulator: of: Add regulator desc param to of_get_regulator_init_data()
Date: Fri, 07 Nov 2014 16:23:12 +0100 [thread overview]
Message-ID: <1415373792.31102.27.camel@AMDC1943> (raw)
In-Reply-To: <1415365205-27630-4-git-send-email-javier.martinez@collabora.co.uk>
On pią, 2014-11-07 at 14:00 +0100, Javier Martinez Canillas wrote:
> The of_get_regulator_init_data() function is used to extract the regulator
> init_data but information on how to extract certain data is defined in the
> static regulator descriptor (e.g: how to map the hardware operating modes).
>
> Add a const struct regulator_desc * parameter to the function signature so
> the parsing logic could use the information in the struct regulator_desc.
>
> of_get_regulator_init_data() relies on of_get_regulation_constraints() to
> actually extract the init_data so it has to pass the struct regulator_desc
> but that is modified on a later patch.
>
> Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
(this looks fine)
(...)
> diff --git a/drivers/regulator/fan53555.c b/drivers/regulator/fan53555.c
> index f8e4257..37b671c 100644
> --- a/drivers/regulator/fan53555.c
> +++ b/drivers/regulator/fan53555.c
> @@ -302,7 +302,8 @@ static struct regmap_config fan53555_regmap_config = {
> };
>
> static struct fan53555_platform_data *fan53555_parse_dt(struct device *dev,
> - struct device_node *np)
> + struct device_node *np,
> + struct regulator_desc *desc)
Not a const? Why not?
> {
> struct fan53555_platform_data *pdata;
> int ret;
> @@ -312,7 +313,7 @@ static struct fan53555_platform_data *fan53555_parse_dt(struct device *dev,
> if (!pdata)
> return NULL;
>
> - pdata->regulator = of_get_regulator_init_data(dev, np);
> + pdata->regulator = of_get_regulator_init_data(dev, np, desc);
Desc would be always NULL here which is safe (check in patch 5/5) but if
someone puts "regulator-initial-mode" in DTS then this will always print
warning. Just wonder - is it actually what you wanted?
This applies also for tps51632 and tps62360.
>
> ret = of_property_read_u32(np, "fcs,suspend-voltage-selector",
> &tmp);
> @@ -347,20 +348,20 @@ static int fan53555_regulator_probe(struct i2c_client *client,
> unsigned int val;
> int ret;
>
> + di = devm_kzalloc(&client->dev, sizeof(struct fan53555_device_info),
> + GFP_KERNEL);
> + if (!di)
> + return -ENOMEM;
> +
> pdata = dev_get_platdata(&client->dev);
> if (!pdata)
> - pdata = fan53555_parse_dt(&client->dev, np);
> + pdata = fan53555_parse_dt(&client->dev, np, &di->desc);
>
> if (!pdata || !pdata->regulator) {
> dev_err(&client->dev, "Platform data not found!\n");
> return -ENODEV;
> }
>
> - di = devm_kzalloc(&client->dev, sizeof(struct fan53555_device_info),
> - GFP_KERNEL);
> - if (!di)
> - return -ENOMEM;
> -
> di->regulator = pdata->regulator;
> if (client->dev.of_node) {
> const struct of_device_id *match;
> diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
> index 354105e..649fece 100644
> --- a/drivers/regulator/fixed.c
> +++ b/drivers/regulator/fixed.c
> @@ -40,13 +40,14 @@ struct fixed_voltage_data {
> /**
> * of_get_fixed_voltage_config - extract fixed_voltage_config structure info
> * @dev: device requesting for fixed_voltage_config
> + * @desc: regulator description
> *
> * Populates fixed_voltage_config structure by extracting data from device
> * tree node, returns a pointer to the populated structure of NULL if memory
> * alloc fails.
> */
> static struct fixed_voltage_config *
> -of_get_fixed_voltage_config(struct device *dev)
> +of_get_fixed_voltage_config(struct device *dev, struct regulator_desc *desc)
Not const?
> {
> struct fixed_voltage_config *config;
> struct device_node *np = dev->of_node;
> @@ -57,7 +58,7 @@ of_get_fixed_voltage_config(struct device *dev)
> if (!config)
> return ERR_PTR(-ENOMEM);
>
> - config->init_data = of_get_regulator_init_data(dev, dev->of_node);
> + config->init_data = of_get_regulator_init_data(dev, dev->of_node, desc);
> if (!config->init_data)
> return ERR_PTR(-EINVAL);
>
> @@ -112,8 +113,14 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
> struct regulator_config cfg = { };
> int ret;
>
> + drvdata = devm_kzalloc(&pdev->dev, sizeof(struct fixed_voltage_data),
> + GFP_KERNEL);
> + if (!drvdata)
> + return -ENOMEM;
> +
> if (pdev->dev.of_node) {
> - config = of_get_fixed_voltage_config(&pdev->dev);
> + config = of_get_fixed_voltage_config(&pdev->dev,
> + &drvdata->desc);
> if (IS_ERR(config))
> return PTR_ERR(config);
> } else {
> @@ -123,11 +130,6 @@ static int reg_fixed_voltage_probe(struct platform_device *pdev)
> if (!config)
> return -ENOMEM;
>
> - drvdata = devm_kzalloc(&pdev->dev, sizeof(struct fixed_voltage_data),
> - GFP_KERNEL);
> - if (!drvdata)
> - return -ENOMEM;
> -
> drvdata->desc.name = devm_kstrdup(&pdev->dev,
> config->supply_name,
> GFP_KERNEL);
> diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
> index 989b23b..be0d08e 100644
> --- a/drivers/regulator/gpio-regulator.c
> +++ b/drivers/regulator/gpio-regulator.c
> @@ -133,7 +133,8 @@ static struct regulator_ops gpio_regulator_voltage_ops = {
> };
>
> static struct gpio_regulator_config *
> -of_get_gpio_regulator_config(struct device *dev, struct device_node *np)
> +of_get_gpio_regulator_config(struct device *dev, struct device_node *np,
> + struct regulator_desc *desc)
Not const?
> {
> struct gpio_regulator_config *config;
> const char *regtype;
> @@ -146,7 +147,7 @@ of_get_gpio_regulator_config(struct device *dev, struct device_node *np)
> if (!config)
> return ERR_PTR(-ENOMEM);
>
> - config->init_data = of_get_regulator_init_data(dev, np);
> + config->init_data = of_get_regulator_init_data(dev, np, desc);
> if (!config->init_data)
> return ERR_PTR(-EINVAL);
>
> @@ -243,17 +244,18 @@ static int gpio_regulator_probe(struct platform_device *pdev)
> struct regulator_config cfg = { };
> int ptr, ret, state;
>
> - if (np) {
> - config = of_get_gpio_regulator_config(&pdev->dev, np);
> - if (IS_ERR(config))
> - return PTR_ERR(config);
> - }
> -
> drvdata = devm_kzalloc(&pdev->dev, sizeof(struct gpio_regulator_data),
> GFP_KERNEL);
> if (drvdata == NULL)
> return -ENOMEM;
>
> + if (np) {
> + config = of_get_gpio_regulator_config(&pdev->dev, np,
> + &drvdata->desc);
> + if (IS_ERR(config))
> + return PTR_ERR(config);
> + }
> +
> drvdata->desc.name = kstrdup(config->supply_name, GFP_KERNEL);
> if (drvdata->desc.name == NULL) {
> dev_err(&pdev->dev, "Failed to allocate supply name\n");
> diff --git a/drivers/regulator/max8952.c b/drivers/regulator/max8952.c
> index f7f9efc..6e54d78 100644
> --- a/drivers/regulator/max8952.c
> +++ b/drivers/regulator/max8952.c
> @@ -174,7 +174,7 @@ static struct max8952_platform_data *max8952_parse_dt(struct device *dev)
> if (of_property_read_u32(np, "max8952,ramp-speed", &pd->ramp_speed))
> dev_warn(dev, "max8952,ramp-speed property not specified, defaulting to 32mV/us\n");
>
> - pd->reg_data = of_get_regulator_init_data(dev, np);
> + pd->reg_data = of_get_regulator_init_data(dev, np, ®ulator);
> if (!pd->reg_data) {
> dev_err(dev, "Failed to parse regulator init data\n");
> return NULL;
> diff --git a/drivers/regulator/max8973-regulator.c b/drivers/regulator/max8973-regulator.c
> index dbedf17..c3d55c2 100644
> --- a/drivers/regulator/max8973-regulator.c
> +++ b/drivers/regulator/max8973-regulator.c
> @@ -458,7 +458,8 @@ static int max8973_probe(struct i2c_client *client,
>
> config.dev = &client->dev;
> config.init_data = pdata ? pdata->reg_init_data :
> - of_get_regulator_init_data(&client->dev, client->dev.of_node);
> + of_get_regulator_init_data(&client->dev, client->dev.of_node,
> + &max->desc);
> config.driver_data = max;
> config.of_node = client->dev.of_node;
> config.regmap = max->regmap;
> diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
> index 9c31e21..726fde1 100644
> --- a/drivers/regulator/max8997.c
> +++ b/drivers/regulator/max8997.c
> @@ -953,7 +953,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
>
> rdata->id = i;
> rdata->initdata = of_get_regulator_init_data(&pdev->dev,
> - reg_np);
> + reg_np,
> + ®ulators[i]);
> rdata->reg_node = reg_np;
> rdata++;
> }
> diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c
> index 961091b..59e34a0 100644
> --- a/drivers/regulator/max8998.c
> +++ b/drivers/regulator/max8998.c
> @@ -686,8 +686,9 @@ static int max8998_pmic_dt_parse_pdata(struct max8998_dev *iodev,
> continue;
>
> rdata->id = regulators[i].id;
> - rdata->initdata = of_get_regulator_init_data(
> - iodev->dev, reg_np);
> + rdata->initdata = of_get_regulator_init_data(iodev->dev,
> + reg_np,
> + ®ulators[i]);
> rdata->reg_node = reg_np;
> ++rdata;
> }
> diff --git a/drivers/regulator/mc13xxx-regulator-core.c b/drivers/regulator/mc13xxx-regulator-core.c
> index afba024..0281c31 100644
> --- a/drivers/regulator/mc13xxx-regulator-core.c
> +++ b/drivers/regulator/mc13xxx-regulator-core.c
> @@ -194,7 +194,8 @@ struct mc13xxx_regulator_init_data *mc13xxx_parse_regulators_dt(
> regulators[i].desc.name)) {
> p->id = i;
> p->init_data = of_get_regulator_init_data(
> - &pdev->dev, child);
> + &pdev->dev, child,
> + ®ulators[i].desc);
> p->node = child;
> p++;
>
> diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c
> index 03edb17..945486f 100644
> --- a/drivers/regulator/of_regulator.c
> +++ b/drivers/regulator/of_regulator.c
> @@ -120,13 +120,16 @@ static void of_get_regulation_constraints(struct device_node *np,
> /**
> * of_get_regulator_init_data - extract regulator_init_data structure info
> * @dev: device requesting for regulator_init_data
> + * @node: regulator device node
> + * @desc: regulator description
> *
> * Populates regulator_init_data structure by extracting data from device
> * tree node, returns a pointer to the populated struture or NULL if memory
> * alloc fails.
> */
> struct regulator_init_data *of_get_regulator_init_data(struct device *dev,
> - struct device_node *node)
> + struct device_node *node,
> + const struct regulator_desc *desc)
> {
> struct regulator_init_data *init_data;
>
> @@ -218,7 +221,7 @@ int of_regulator_match(struct device *dev, struct device_node *node,
> continue;
>
> match->init_data =
> - of_get_regulator_init_data(dev, child);
> + of_get_regulator_init_data(dev, child, NULL);
> if (!match->init_data) {
> dev_err(dev,
> "failed to parse DT for regulator %s\n",
> @@ -266,7 +269,7 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
> if (strcmp(desc->of_match, name))
> continue;
>
> - init_data = of_get_regulator_init_data(dev, child);
> + init_data = of_get_regulator_init_data(dev, child, desc);
> if (!init_data) {
> dev_err(dev,
> "failed to parse DT for regulator %s\n",
> diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c
> index d3f55ea..91f34ca 100644
> --- a/drivers/regulator/pwm-regulator.c
> +++ b/drivers/regulator/pwm-regulator.c
> @@ -149,7 +149,8 @@ static int pwm_regulator_probe(struct platform_device *pdev)
> return ret;
> }
>
> - config.init_data = of_get_regulator_init_data(&pdev->dev, np);
> + config.init_data = of_get_regulator_init_data(&pdev->dev, np,
> + &drvdata->desc);
> if (!config.init_data)
> return -ENOMEM;
>
> diff --git a/drivers/regulator/qcom_rpm-regulator.c b/drivers/regulator/qcom_rpm-regulator.c
> index b55cd5b..dabd28a 100644
> --- a/drivers/regulator/qcom_rpm-regulator.c
> +++ b/drivers/regulator/qcom_rpm-regulator.c
> @@ -643,10 +643,6 @@ static int rpm_reg_probe(struct platform_device *pdev)
> match = of_match_device(rpm_of_match, &pdev->dev);
> template = match->data;
>
> - initdata = of_get_regulator_init_data(&pdev->dev, pdev->dev.of_node);
> - if (!initdata)
> - return -EINVAL;
> -
> vreg = devm_kmalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL);
> if (!vreg) {
> dev_err(&pdev->dev, "failed to allocate vreg\n");
> @@ -666,6 +662,11 @@ static int rpm_reg_probe(struct platform_device *pdev)
> return -ENODEV;
> }
>
> + initdata = of_get_regulator_init_data(&pdev->dev, pdev->dev.of_node,
> + &vreg->desc);
> + if (!initdata)
> + return -EINVAL;
> +
> key = "reg";
> ret = of_property_read_u32(pdev->dev.of_node, key, &val);
> if (ret) {
> diff --git a/drivers/regulator/s5m8767.c b/drivers/regulator/s5m8767.c
> index 0ab5cbe..26932fe 100644
> --- a/drivers/regulator/s5m8767.c
> +++ b/drivers/regulator/s5m8767.c
> @@ -581,7 +581,8 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
>
> rdata->id = i;
> rdata->initdata = of_get_regulator_init_data(
> - &pdev->dev, reg_np);
> + &pdev->dev, reg_np,
> + ®ulators[i]);
> rdata->reg_node = reg_np;
> rdata++;
> rmode->id = i;
> diff --git a/drivers/regulator/sky81452-regulator.c b/drivers/regulator/sky81452-regulator.c
> index 476b80a..e68e13f 100644
> --- a/drivers/regulator/sky81452-regulator.c
> +++ b/drivers/regulator/sky81452-regulator.c
> @@ -76,7 +76,7 @@ static struct regulator_init_data *sky81452_reg_parse_dt(struct device *dev)
> return NULL;
> }
>
> - init_data = of_get_regulator_init_data(dev, np);
> + init_data = of_get_regulator_init_data(dev, np, &sky81452_reg);
>
> of_node_put(np);
> return init_data;
> diff --git a/drivers/regulator/stw481x-vmmc.c b/drivers/regulator/stw481x-vmmc.c
> index a7e1526..b4f1696 100644
> --- a/drivers/regulator/stw481x-vmmc.c
> +++ b/drivers/regulator/stw481x-vmmc.c
> @@ -72,7 +72,8 @@ static int stw481x_vmmc_regulator_probe(struct platform_device *pdev)
> config.regmap = stw481x->map;
> config.of_node = pdev->dev.of_node;
> config.init_data = of_get_regulator_init_data(&pdev->dev,
> - pdev->dev.of_node);
> + pdev->dev.of_node,
> + &vmmc_regulator);
>
> stw481x->vmmc_regulator = devm_regulator_register(&pdev->dev,
> &vmmc_regulator, &config);
> diff --git a/drivers/regulator/ti-abb-regulator.c b/drivers/regulator/ti-abb-regulator.c
> index a2dabb5..1ef5aba 100644
> --- a/drivers/regulator/ti-abb-regulator.c
> +++ b/drivers/regulator/ti-abb-regulator.c
> @@ -837,7 +837,8 @@ skip_opt:
> return -EINVAL;
> }
>
> - initdata = of_get_regulator_init_data(dev, pdev->dev.of_node);
> + initdata = of_get_regulator_init_data(dev, pdev->dev.of_node,
> + &abb->rdesc);
> if (!initdata) {
> dev_err(dev, "%s: Unable to alloc regulator init data\n",
> __func__);
> diff --git a/drivers/regulator/tps51632-regulator.c b/drivers/regulator/tps51632-regulator.c
> index f31f22e..c917b54 100644
> --- a/drivers/regulator/tps51632-regulator.c
> +++ b/drivers/regulator/tps51632-regulator.c
> @@ -221,7 +221,8 @@ static const struct of_device_id tps51632_of_match[] = {
> MODULE_DEVICE_TABLE(of, tps51632_of_match);
>
> static struct tps51632_regulator_platform_data *
> - of_get_tps51632_platform_data(struct device *dev)
> + of_get_tps51632_platform_data(struct device *dev,
> + struct regulator_desc *desc)
Not const?
> {
> struct tps51632_regulator_platform_data *pdata;
> struct device_node *np = dev->of_node;
> @@ -230,7 +231,8 @@ static struct tps51632_regulator_platform_data *
> if (!pdata)
> return NULL;
>
> - pdata->reg_init_data = of_get_regulator_init_data(dev, dev->of_node);
> + pdata->reg_init_data = of_get_regulator_init_data(dev, dev->of_node,
> + desc);
> if (!pdata->reg_init_data) {
> dev_err(dev, "Not able to get OF regulator init data\n");
> return NULL;
> @@ -273,9 +275,13 @@ static int tps51632_probe(struct i2c_client *client,
> }
> }
>
> + tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
> + if (!tps)
> + return -ENOMEM;
> +
> pdata = dev_get_platdata(&client->dev);
> if (!pdata && client->dev.of_node)
> - pdata = of_get_tps51632_platform_data(&client->dev);
> + pdata = of_get_tps51632_platform_data(&client->dev, &tps->desc);
> if (!pdata) {
> dev_err(&client->dev, "No Platform data\n");
> return -EINVAL;
> @@ -296,10 +302,6 @@ static int tps51632_probe(struct i2c_client *client,
> }
> }
>
> - tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL);
> - if (!tps)
> - return -ENOMEM;
> -
> tps->dev = &client->dev;
> tps->desc.name = client->name;
> tps->desc.id = 0;
> diff --git a/drivers/regulator/tps62360-regulator.c b/drivers/regulator/tps62360-regulator.c
> index a167204..be1f401 100644
> --- a/drivers/regulator/tps62360-regulator.c
> +++ b/drivers/regulator/tps62360-regulator.c
> @@ -293,7 +293,8 @@ static const struct regmap_config tps62360_regmap_config = {
> };
>
> static struct tps62360_regulator_platform_data *
> - of_get_tps62360_platform_data(struct device *dev)
> + of_get_tps62360_platform_data(struct device *dev,
> + struct regulator_desc *desc)
Not const?
(...)
Rest looks fine.
Krzysztof
next prev parent reply other threads:[~2014-11-07 15:23 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-07 13:00 [PATCH v5 0/5] regulator: of: Add initial and suspend modes support Javier Martinez Canillas
2014-11-07 13:00 ` [PATCH v5 1/5] regulator: Document binding for initial and suspend modes Javier Martinez Canillas
[not found] ` <1415365205-27630-2-git-send-email-javier.martinez-ZGY8ohtN/8pPYcu2f3hruQ@public.gmane.org>
2014-11-07 14:58 ` Mark Brown
2014-11-07 14:58 ` Mark Brown
2014-11-07 15:38 ` Javier Martinez Canillas
[not found] ` <545CE75C.8000408-ZGY8ohtN/8pPYcu2f3hruQ@public.gmane.org>
2014-11-07 16:10 ` Mark Brown
2014-11-07 16:10 ` Mark Brown
2014-11-07 16:19 ` Javier Martinez Canillas
2014-11-07 13:00 ` [PATCH v5 2/5] regulator: Add function to map modes to struct regulator_desc Javier Martinez Canillas
2014-11-07 15:54 ` Mark Brown
2014-11-07 16:17 ` Javier Martinez Canillas
2014-11-07 13:00 ` [PATCH v5 3/5] regulator: of: Add regulator desc param to of_get_regulator_init_data() Javier Martinez Canillas
2014-11-07 15:07 ` Mark Brown
[not found] ` <20141107150743.GR8509-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-11-07 15:49 ` Javier Martinez Canillas
2014-11-07 15:49 ` Javier Martinez Canillas
2014-11-07 15:23 ` Krzysztof Kozlowski [this message]
2014-11-07 16:11 ` Javier Martinez Canillas
2014-11-07 13:00 ` [PATCH v5 4/5] regulator: of: Pass the regulator description in the match table Javier Martinez Canillas
2014-11-07 13:00 ` [PATCH v5 5/5] regulator: of: Add support for parsing initial and suspend modes Javier Martinez Canillas
2014-11-07 15:47 ` Mark Brown
[not found] ` <20141107154743.GT8509-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-11-07 16:15 ` Javier Martinez Canillas
2014-11-07 16:15 ` Javier Martinez Canillas
[not found] ` <545CF02A.9060500-ZGY8ohtN/8pPYcu2f3hruQ@public.gmane.org>
2014-11-07 16:21 ` Mark Brown
2014-11-07 16:21 ` Mark Brown
2014-11-07 15:26 ` [PATCH v5 0/5] regulator: of: Add initial and suspend modes support Krzysztof Kozlowski
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=1415373792.31102.27.camel@AMDC1943 \
--to=k.kozlowski@samsung.com \
--cc=broonie@kernel.org \
--cc=cw00.choi@samsung.com \
--cc=devicetree@vger.kernel.org \
--cc=javier.martinez@collabora.co.uk \
--cc=kesavan.abhilash@gmail.com \
--cc=kgene.kim@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=olof@lixom.net \
--cc=zyw@rock-chips.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.