* [PATCH v6 0/6] mfd: tps65218: Clean ups @ 2016-06-28 12:30 Keerthy 2016-06-28 12:30 ` [PATCH v6 1/6] mfd: tps65218: Remove redundant read wrapper Keerthy ` (5 more replies) 0 siblings, 6 replies; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy The series cleans up mainly the regulator driver and implements the device tree parsing using the regulator framework. Removes all the redundant compatibles for the individual regulators. Adds platform_device_id table for the gpio and power button modules. One of the patch removes redundant read wrapper and makes use of regmap_read wherever necessary. The series is checked for all the regulator registrations on am437x-gp-evm and am437x-sk-evm. Boot log on am437x-sk-evm: http://pastebin.ubuntu.com/18022661/ Changes in v6: Rebased regulator/mfd clean up patches against linux-next + https://lkml.org/lkml/2016/6/24/122 series. Changes in v5: Rebased regulator clean up patch against linux-next. Changes in v4: For gpio-tps65218 reatined the compatible table. Fixed missing ';' in the power button patch. Fixed comments on the Documentation patch. Split the Device Tree patches to a separate series. Changes in v3: Missed making corresponding changes in the power button and gpio drivers. Added couple of patches to fix them to use mfd_cell way of parsing. Keerthy (6): mfd: tps65218: Remove redundant read wrapper Documentation: regulator: tps65218: Update examples input: tps65218-pwrbutton: Add platform_device_id table gpio: tps65218-gpio: Add platform_device_id table mfd: tps65218: Use mfd_add_devices instead of of_platform_populate regulator: tps65218: Remove all the compatibles .../devicetree/bindings/regulator/tps65218.txt | 87 +++++++++--- drivers/gpio/gpio-tps65218.c | 10 +- drivers/input/misc/tps65218-pwrbutton.c | 10 +- drivers/mfd/tps65218.c | 34 ++--- drivers/regulator/tps65218-regulator.c | 153 ++++++++------------- include/linux/mfd/tps65218.h | 3 +- 6 files changed, 165 insertions(+), 132 deletions(-) -- 1.9.1 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v6 1/6] mfd: tps65218: Remove redundant read wrapper 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy @ 2016-06-28 12:30 ` Keerthy 2016-06-28 12:30 ` [PATCH v6 2/6] Documentation: regulator: tps65218: Update examples Keerthy ` (4 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy Currently read directly calls the repmap read function. Hence remove the redundant wrapper and use regmap read wherever needed. Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Keerthy <j-keerthy@ti.com> --- Changes in v6: Rebased against linux-next + https://lkml.org/lkml/2016/6/24/122 series. Changes in v4: * Added Lee Jones's Ack. Changes in v3: * Cleaned up tps65218-pwrbutton and gpio drivers to remove tps65218_reg_read instances. drivers/gpio/gpio-tps65218.c | 3 ++- drivers/input/misc/tps65218-pwrbutton.c | 3 ++- drivers/mfd/tps65218.c | 18 ++---------------- drivers/regulator/tps65218-regulator.c | 5 +++-- include/linux/mfd/tps65218.h | 2 -- 5 files changed, 9 insertions(+), 22 deletions(-) diff --git a/drivers/gpio/gpio-tps65218.c b/drivers/gpio/gpio-tps65218.c index 0eaeac8..0f9d9bd 100644 --- a/drivers/gpio/gpio-tps65218.c +++ b/drivers/gpio/gpio-tps65218.c @@ -16,6 +16,7 @@ #include <linux/errno.h> #include <linux/gpio/driver.h> #include <linux/platform_device.h> +#include <linux/regmap.h> #include <linux/mfd/tps65218.h> struct tps65218_gpio { @@ -30,7 +31,7 @@ static int tps65218_gpio_get(struct gpio_chip *gc, unsigned offset) unsigned int val; int ret; - ret = tps65218_reg_read(tps65218, TPS65218_REG_ENABLE2, &val); + ret = regmap_read(tps65218->regmap, TPS65218_REG_ENABLE2, &val); if (ret) return ret; diff --git a/drivers/input/misc/tps65218-pwrbutton.c b/drivers/input/misc/tps65218-pwrbutton.c index a39b626..2bba8de 100644 --- a/drivers/input/misc/tps65218-pwrbutton.c +++ b/drivers/input/misc/tps65218-pwrbutton.c @@ -22,6 +22,7 @@ #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> +#include <linux/regmap.h> #include <linux/slab.h> struct tps65218_pwrbutton { @@ -36,7 +37,7 @@ static irqreturn_t tps65218_pwr_irq(int irq, void *_pwr) unsigned int reg; int error; - error = tps65218_reg_read(pwr->tps, TPS65218_REG_STATUS, ®); + error = regmap_read(pwr->tps->regmap, TPS65218_REG_STATUS, ®); if (error) { dev_err(pwr->dev, "can't read register: %d\n", error); goto out; diff --git a/drivers/mfd/tps65218.c b/drivers/mfd/tps65218.c index ba610ad..9bca1b1 100644 --- a/drivers/mfd/tps65218.c +++ b/drivers/mfd/tps65218.c @@ -34,20 +34,6 @@ #define TPS65218_PASSWORD_REGS_UNLOCK 0x7D /** - * tps65218_reg_read: Read a single tps65218 register. - * - * @tps: Device to read from. - * @reg: Register to read. - * @val: Contians the value - */ -int tps65218_reg_read(struct tps65218 *tps, unsigned int reg, - unsigned int *val) -{ - return regmap_read(tps->regmap, reg, val); -} -EXPORT_SYMBOL_GPL(tps65218_reg_read); - -/** * tps65218_reg_write: Write a single tps65218 register. * * @tps65218: Device to write to. @@ -93,7 +79,7 @@ static int tps65218_update_bits(struct tps65218 *tps, unsigned int reg, int ret; unsigned int data; - ret = tps65218_reg_read(tps, reg, &data); + ret = regmap_read(tps->regmap, reg, &data); if (ret) { dev_err(tps->dev, "Read from reg 0x%x failed\n", reg); return ret; @@ -251,7 +237,7 @@ static int tps65218_probe(struct i2c_client *client, if (ret < 0) return ret; - ret = tps65218_reg_read(tps, TPS65218_REG_CHIPID, &chipid); + ret = regmap_read(tps->regmap, TPS65218_REG_CHIPID, &chipid); if (ret) { dev_err(tps->dev, "Failed to read chipid: %d\n", ret); return ret; diff --git a/drivers/regulator/tps65218-regulator.c b/drivers/regulator/tps65218-regulator.c index eb0f5b1..ae16caf 100644 --- a/drivers/regulator/tps65218-regulator.c +++ b/drivers/regulator/tps65218-regulator.c @@ -22,6 +22,7 @@ #include <linux/err.h> #include <linux/platform_device.h> #include <linux/of_device.h> +#include <linux/regmap.h> #include <linux/regulator/of_regulator.h> #include <linux/regulator/driver.h> #include <linux/regulator/machine.h> @@ -272,7 +273,7 @@ static int tps65218_pmic_get_current_limit(struct regulator_dev *dev) unsigned int index; struct tps65218 *tps = rdev_get_drvdata(dev); - retval = tps65218_reg_read(tps, dev->desc->csel_reg, &index); + retval = regmap_read(tps->regmap, dev->desc->csel_reg, &index); if (retval < 0) return retval; @@ -383,7 +384,7 @@ static int tps65218_regulator_probe(struct platform_device *pdev) return PTR_ERR(rdev); } - ret = tps65218_reg_read(tps, regulators[id].bypass_reg, &val); + ret = regmap_read(tps->regmap, regulators[id].bypass_reg, &val); if (ret) return ret; diff --git a/include/linux/mfd/tps65218.h b/include/linux/mfd/tps65218.h index d1db952..51bef53 100644 --- a/include/linux/mfd/tps65218.h +++ b/include/linux/mfd/tps65218.h @@ -284,8 +284,6 @@ struct tps65218 { struct regmap *regmap; }; -int tps65218_reg_read(struct tps65218 *tps, unsigned int reg, - unsigned int *val); int tps65218_reg_write(struct tps65218 *tps, unsigned int reg, unsigned int val, unsigned int level); int tps65218_set_bits(struct tps65218 *tps, unsigned int reg, -- 1.9.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v6 2/6] Documentation: regulator: tps65218: Update examples 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy 2016-06-28 12:30 ` [PATCH v6 1/6] mfd: tps65218: Remove redundant read wrapper Keerthy @ 2016-06-28 12:30 ` Keerthy 2016-06-28 12:30 ` [PATCH v6 3/6] input: tps65218-pwrbutton: Add platform_device_id table Keerthy ` (3 subsequent siblings) 5 siblings, 0 replies; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy This updates the Device Tree according to the preferred way of parsing the nodes using the regulator framework. Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Keerthy <j-keerthy@ti.com> --- Changes in v4: * Formatted and corrected typos in few lines. * Used relative path names for the file names. .../devicetree/bindings/regulator/tps65218.txt | 87 ++++++++++++++++++---- 1 file changed, 71 insertions(+), 16 deletions(-) diff --git a/Documentation/devicetree/bindings/regulator/tps65218.txt b/Documentation/devicetree/bindings/regulator/tps65218.txt index fccc1d2..02f0e9b 100644 --- a/Documentation/devicetree/bindings/regulator/tps65218.txt +++ b/Documentation/devicetree/bindings/regulator/tps65218.txt @@ -1,23 +1,78 @@ TPS65218 family of regulators Required properties: -For tps65218 regulators/LDOs -- compatible: - - "ti,tps65218-dcdc1" for DCDC1 - - "ti,tps65218-dcdc2" for DCDC2 - - "ti,tps65218-dcdc3" for DCDC3 - - "ti,tps65218-dcdc4" for DCDC4 - - "ti,tps65218-dcdc5" for DCDC5 - - "ti,tps65218-dcdc6" for DCDC6 - - "ti,tps65218-ldo1" for LDO1 - -Optional properties: -- Any optional property defined in bindings/regulator/regulator.txt +- compatible: "ti,tps65218" +- reg: I2C slave address + +- List of regulators provided by this controller, must be named + after their hardware counterparts: dcdc[1-6] and ldo1 +- This is the list of child nodes that specify the regulator + initialization data for defined regulators. Not all regulators for the given + device need to be present. The definition for each of these nodes is defined + using the standard binding for regulators found at ./regulator.txt. + + The valid names for regulators are: + tps65217: regulator-dcdc1, regulator-dcdc2, regulator-dcdc3, regulator-dcdc4, + regulator-dcdc5, regulator-dcdc6, regulator-ldo1, regulator-ls3. + Each regulator is defined using the standard binding for regulators. Example: +tps65218: tps65218@24 { + reg = <0x24>; + compatible = "ti,tps65218"; + interrupts = <GIC_SPI 7 IRQ_TYPE_NONE>; /* NMIn */ + interrupt-controller; + #interrupt-cells = <2>; + + dcdc1: regulator-dcdc1 { + regulator-name = "vdd_core"; + regulator-min-microvolt = <912000>; + regulator-max-microvolt = <1144000>; + regulator-boot-on; + regulator-always-on; + }; + + dcdc2: regulator-dcdc2 { + regulator-name = "vdd_mpu"; + regulator-min-microvolt = <912000>; + regulator-max-microvolt = <1378000>; + regulator-boot-on; + regulator-always-on; + }; + + dcdc3: regulator-dcdc3 { + regulator-name = "vdcdc3"; + regulator-min-microvolt = <1500000>; + regulator-max-microvolt = <1500000>; + regulator-boot-on; + regulator-always-on; + }; + + dcdc5: regulator-dcdc5 { + regulator-name = "v1_0bat"; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1000000>; + regulator-boot-on; + regulator-always-on; + }; + + dcdc6: regulator-dcdc6 { + regulator-name = "v1_8bat"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo1: regulator-ldo1 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + regulator-always-on; + }; - xyz: regulator@0 { - compatible = "ti,tps65218-dcdc1"; - regulator-min-microvolt = <1000000>; - regulator-max-microvolt = <3000000>; + ls3: regulator-ls3 { + regulator-min-microvolt = <100000>; + regulator-max-microvolt = <1000000>; }; +}; -- 1.9.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v6 3/6] input: tps65218-pwrbutton: Add platform_device_id table 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy 2016-06-28 12:30 ` [PATCH v6 1/6] mfd: tps65218: Remove redundant read wrapper Keerthy 2016-06-28 12:30 ` [PATCH v6 2/6] Documentation: regulator: tps65218: Update examples Keerthy @ 2016-06-28 12:30 ` Keerthy 2016-06-28 17:04 ` Dmitry Torokhov 2016-06-28 12:30 ` [PATCH v6 4/6] gpio: tps65218-gpio: " Keerthy ` (2 subsequent siblings) 5 siblings, 1 reply; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy platform_device_id table is needed for adding the tps65218-pwrbutton module to the mfd_cell array. Signed-off-by: Keerthy <j-keerthy@ti.com> --- Changes in v4: * Added the missing ';' for struct platform_device_id. drivers/input/misc/tps65218-pwrbutton.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/input/misc/tps65218-pwrbutton.c b/drivers/input/misc/tps65218-pwrbutton.c index 2bba8de..33d141a 100644 --- a/drivers/input/misc/tps65218-pwrbutton.c +++ b/drivers/input/misc/tps65218-pwrbutton.c @@ -113,12 +113,19 @@ static const struct of_device_id of_tps65218_pwr_match[] = { }; MODULE_DEVICE_TABLE(of, of_tps65218_pwr_match); +static const struct platform_device_id tps65218_pwrbtn_id_table[] = { + { "tps65218-pwrbutton", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(platform, tps65218_pwrbtn_id_table); + static struct platform_driver tps65218_pwron_driver = { .probe = tps65218_pwron_probe, .driver = { .name = "tps65218_pwrbutton", .of_match_table = of_tps65218_pwr_match, }, + .id_table = tps65218_pwrbtn_id_table, }; module_platform_driver(tps65218_pwron_driver); -- 1.9.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v6 3/6] input: tps65218-pwrbutton: Add platform_device_id table 2016-06-28 12:30 ` [PATCH v6 3/6] input: tps65218-pwrbutton: Add platform_device_id table Keerthy @ 2016-06-28 17:04 ` Dmitry Torokhov 0 siblings, 0 replies; 12+ messages in thread From: Dmitry Torokhov @ 2016-06-28 17:04 UTC (permalink / raw) To: Keerthy Cc: linus.walleij, gnurou, lee.jones, broonie, tony, linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel On Tue, Jun 28, 2016 at 06:00:51PM +0530, Keerthy wrote: > platform_device_id table is needed for adding the tps65218-pwrbutton > module to the mfd_cell array. > > Signed-off-by: Keerthy <j-keerthy@ti.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> > --- > > Changes in v4: > > * Added the missing ';' for struct platform_device_id. > > drivers/input/misc/tps65218-pwrbutton.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/drivers/input/misc/tps65218-pwrbutton.c b/drivers/input/misc/tps65218-pwrbutton.c > index 2bba8de..33d141a 100644 > --- a/drivers/input/misc/tps65218-pwrbutton.c > +++ b/drivers/input/misc/tps65218-pwrbutton.c > @@ -113,12 +113,19 @@ static const struct of_device_id of_tps65218_pwr_match[] = { > }; > MODULE_DEVICE_TABLE(of, of_tps65218_pwr_match); > > +static const struct platform_device_id tps65218_pwrbtn_id_table[] = { > + { "tps65218-pwrbutton", }, > + { /* sentinel */ } > +}; > +MODULE_DEVICE_TABLE(platform, tps65218_pwrbtn_id_table); > + > static struct platform_driver tps65218_pwron_driver = { > .probe = tps65218_pwron_probe, > .driver = { > .name = "tps65218_pwrbutton", > .of_match_table = of_tps65218_pwr_match, > }, > + .id_table = tps65218_pwrbtn_id_table, > }; > module_platform_driver(tps65218_pwron_driver); > > -- > 1.9.1 > -- Dmitry ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v6 4/6] gpio: tps65218-gpio: Add platform_device_id table 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy ` (2 preceding siblings ...) 2016-06-28 12:30 ` [PATCH v6 3/6] input: tps65218-pwrbutton: Add platform_device_id table Keerthy @ 2016-06-28 12:30 ` Keerthy 2016-06-29 8:56 ` Linus Walleij 2016-07-04 9:50 ` Linus Walleij 2016-06-28 12:30 ` [PATCH v6 5/6] mfd: tps65218: Use mfd_add_devices instead of of_platform_populate Keerthy 2016-06-28 12:30 ` [PATCH v6 6/6] regulator: tps65218: Remove all the compatibles Keerthy 5 siblings, 2 replies; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy platform_device_id table is needed for adding the tps65218-gpio module to the mfd_cell array. Signed-off-by: Keerthy <j-keerthy@ti.com> --- Changes in v4: * Retained the compatible strings in order to interrogate the DT in the normal way. drivers/gpio/gpio-tps65218.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/gpio/gpio-tps65218.c b/drivers/gpio/gpio-tps65218.c index 0f9d9bd..0961f3a 100644 --- a/drivers/gpio/gpio-tps65218.c +++ b/drivers/gpio/gpio-tps65218.c @@ -231,6 +231,12 @@ static const struct of_device_id tps65218_dt_match[] = { }; MODULE_DEVICE_TABLE(of, tps65218_dt_match); +static const struct platform_device_id tps65218_gpio_id_table[] = { + { "tps65218-gpio", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(platform, tps65218_gpio_id_table); + static struct platform_driver tps65218_gpio_driver = { .driver = { .name = "tps65218-gpio", @@ -238,6 +244,7 @@ static struct platform_driver tps65218_gpio_driver = { }, .probe = tps65218_gpio_probe, .remove = tps65218_gpio_remove, + .id_table = tps65218_gpio_id_table, }; module_platform_driver(tps65218_gpio_driver); -- 1.9.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v6 4/6] gpio: tps65218-gpio: Add platform_device_id table 2016-06-28 12:30 ` [PATCH v6 4/6] gpio: tps65218-gpio: " Keerthy @ 2016-06-29 8:56 ` Linus Walleij 2016-06-29 9:32 ` Keerthy 2016-07-04 9:50 ` Linus Walleij 1 sibling, 1 reply; 12+ messages in thread From: Linus Walleij @ 2016-06-29 8:56 UTC (permalink / raw) To: Keerthy Cc: Dmitry Torokhov, Alexandre Courbot, Lee Jones, Mark Brown, Tony Lindgren, Linux-OMAP, linux-kernel, devicetree, linux-gpio, Linux Input, Rob Herring, linux-arm-kernel On Tue, Jun 28, 2016 at 2:30 PM, Keerthy <j-keerthy@ti.com> wrote: > platform_device_id table is needed for adding the tps65218-gpio > module to the mfd_cell array. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > --- > > Changes in v4: > > * Retained the compatible strings in order to interrogate the DT in the > normal way. So do I just apply this or do you need it applied through another tree? It looks standalone, should I just merge it? Acked-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v6 4/6] gpio: tps65218-gpio: Add platform_device_id table 2016-06-29 8:56 ` Linus Walleij @ 2016-06-29 9:32 ` Keerthy 0 siblings, 0 replies; 12+ messages in thread From: Keerthy @ 2016-06-29 9:32 UTC (permalink / raw) To: Linus Walleij, Keerthy, Lee Jones Cc: Dmitry Torokhov, Alexandre Courbot, Mark Brown, Tony Lindgren, Linux-OMAP, linux-kernel, devicetree, linux-gpio, Linux Input, Rob Herring, linux-arm-kernel On Wednesday 29 June 2016 02:26 PM, Linus Walleij wrote: > On Tue, Jun 28, 2016 at 2:30 PM, Keerthy <j-keerthy@ti.com> wrote: > >> platform_device_id table is needed for adding the tps65218-gpio >> module to the mfd_cell array. >> >> Signed-off-by: Keerthy <j-keerthy@ti.com> >> --- >> >> Changes in v4: >> >> * Retained the compatible strings in order to interrogate the DT in the >> normal way. > > So do I just apply this or do you need it applied through another tree? > > It looks standalone, should I just merge it? > > Acked-by: Linus Walleij <linus.walleij@linaro.org> Thanks Linus. I guess this can be merged by you. Is that fine Lee Jones? > > Yours, > Linus Walleij > ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v6 4/6] gpio: tps65218-gpio: Add platform_device_id table 2016-06-28 12:30 ` [PATCH v6 4/6] gpio: tps65218-gpio: " Keerthy 2016-06-29 8:56 ` Linus Walleij @ 2016-07-04 9:50 ` Linus Walleij 2016-07-04 9:57 ` Keerthy 1 sibling, 1 reply; 12+ messages in thread From: Linus Walleij @ 2016-07-04 9:50 UTC (permalink / raw) To: Keerthy Cc: Dmitry Torokhov, Alexandre Courbot, Lee Jones, Mark Brown, Tony Lindgren, Linux-OMAP, linux-kernel, devicetree, linux-gpio, Linux Input, Rob Herring, linux-arm-kernel On Tue, Jun 28, 2016 at 2:30 PM, Keerthy <j-keerthy@ti.com> wrote: > platform_device_id table is needed for adding the tps65218-gpio > module to the mfd_cell array. > > Signed-off-by: Keerthy <j-keerthy@ti.com> Patch applied. Yours, Linus Walleij ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v6 4/6] gpio: tps65218-gpio: Add platform_device_id table 2016-07-04 9:50 ` Linus Walleij @ 2016-07-04 9:57 ` Keerthy 0 siblings, 0 replies; 12+ messages in thread From: Keerthy @ 2016-07-04 9:57 UTC (permalink / raw) To: Linus Walleij, Keerthy Cc: Dmitry Torokhov, Alexandre Courbot, Lee Jones, Mark Brown, Tony Lindgren, Linux-OMAP, linux-kernel, devicetree, linux-gpio, Linux Input, Rob Herring, linux-arm-kernel On Monday 04 July 2016 03:20 PM, Linus Walleij wrote: > On Tue, Jun 28, 2016 at 2:30 PM, Keerthy <j-keerthy@ti.com> wrote: > >> platform_device_id table is needed for adding the tps65218-gpio >> module to the mfd_cell array. >> >> Signed-off-by: Keerthy <j-keerthy@ti.com> > > Patch applied. Thanks Linus. > > Yours, > Linus Walleij > ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v6 5/6] mfd: tps65218: Use mfd_add_devices instead of of_platform_populate 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy ` (3 preceding siblings ...) 2016-06-28 12:30 ` [PATCH v6 4/6] gpio: tps65218-gpio: " Keerthy @ 2016-06-28 12:30 ` Keerthy 2016-06-28 12:30 ` [PATCH v6 6/6] regulator: tps65218: Remove all the compatibles Keerthy 5 siblings, 0 replies; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy mfd_add_devices enables parsing device tree nodes without compatibles for regulators and gpio modules. Replace of_platform_populate with mfd_add_devices. mfd_cell currently is populated with regulators, gpio and powerbutton. Acked-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Keerthy <j-keerthy@ti.com> --- Changes in v4: * Regrouped the mfd cells better. drivers/mfd/tps65218.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/tps65218.c b/drivers/mfd/tps65218.c index 9bca1b1..13834a0 100644 --- a/drivers/mfd/tps65218.c +++ b/drivers/mfd/tps65218.c @@ -33,6 +33,18 @@ #define TPS65218_PASSWORD_REGS_UNLOCK 0x7D +static const struct mfd_cell tps65218_cells[] = { + { + .name = "tps65218-pwrbutton", + .of_compatible = "ti,tps65218-pwrbutton", + }, + { + .name = "tps65218-gpio", + .of_compatible = "ti,tps65218-gpio", + }, + { .name = "tps65218-regulator", }, +}; + /** * tps65218_reg_write: Write a single tps65218 register. * @@ -245,8 +257,10 @@ static int tps65218_probe(struct i2c_client *client, tps->rev = chipid & TPS65218_CHIPID_REV_MASK; - ret = of_platform_populate(client->dev.of_node, NULL, NULL, - &client->dev); + ret = mfd_add_devices(tps->dev, PLATFORM_DEVID_AUTO, tps65218_cells, + ARRAY_SIZE(tps65218_cells), NULL, 0, + regmap_irq_get_domain(tps->irq_data)); + if (ret < 0) goto err_irq; -- 1.9.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v6 6/6] regulator: tps65218: Remove all the compatibles 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy ` (4 preceding siblings ...) 2016-06-28 12:30 ` [PATCH v6 5/6] mfd: tps65218: Use mfd_add_devices instead of of_platform_populate Keerthy @ 2016-06-28 12:30 ` Keerthy 5 siblings, 0 replies; 12+ messages in thread From: Keerthy @ 2016-06-28 12:30 UTC (permalink / raw) To: dmitry.torokhov, linus.walleij, gnurou, lee.jones, broonie, tony Cc: linux-omap, linux-kernel, devicetree, linux-gpio, linux-input, robh+dt, linux-arm-kernel, j-keerthy Remove all the individual compatibles for all the regulators and introduce id_table and update the driver accordingly to parse device tree nodes using the regulator framework. Acked-by: Mark Brown <broonie@kernel.org> Signed-off-by: Keerthy <j-keerthy@ti.com> --- Changes in v6: Rebased against linux-next + https://lkml.org/lkml/2016/6/24/122 series. Changes in v5: * Rebased to latest linux-next. * Added dynamic allocation for strobes as part of rebasing. drivers/regulator/tps65218-regulator.c | 150 ++++++++++++--------------------- include/linux/mfd/tps65218.h | 1 + 2 files changed, 57 insertions(+), 94 deletions(-) diff --git a/drivers/regulator/tps65218-regulator.c b/drivers/regulator/tps65218-regulator.c index ae16caf..9aafbb0 100644 --- a/drivers/regulator/tps65218-regulator.c +++ b/drivers/regulator/tps65218-regulator.c @@ -31,10 +31,11 @@ enum tps65218_regulators { DCDC1, DCDC2, DCDC3, DCDC4, DCDC5, DCDC6, LDO1, LS3 }; -#define TPS65218_REGULATOR(_name, _id, _type, _ops, _n, _vr, _vm, _er, _em, \ - _cr, _cm, _lr, _nlr, _delay, _fuv, _sr, _sm) \ +#define TPS65218_REGULATOR(_name, _of, _id, _type, _ops, _n, _vr, _vm, _er, \ + _em, _cr, _cm, _lr, _nlr, _delay, _fuv, _sr, _sm) \ { \ .name = _name, \ + .of_match = _of, \ .id = _id, \ .ops = &_ops, \ .n_voltages = _n, \ @@ -55,14 +56,6 @@ enum tps65218_regulators { DCDC1, DCDC2, DCDC3, DCDC4, .bypass_mask = _sm, \ } \ -#define TPS65218_INFO(_id, _nm, _min, _max) \ - [_id] = { \ - .id = _id, \ - .name = _nm, \ - .min_uV = _min, \ - .max_uV = _max, \ - } - static const struct regulator_linear_range dcdc1_dcdc2_ranges[] = { REGULATOR_LINEAR_RANGE(850000, 0x0, 0x32, 10000), REGULATOR_LINEAR_RANGE(1375000, 0x33, 0x3f, 25000), @@ -78,36 +71,6 @@ static const struct regulator_linear_range dcdc4_ranges[] = { REGULATOR_LINEAR_RANGE(1600000, 0x10, 0x34, 50000), }; -static struct tps_info tps65218_pmic_regs[] = { - TPS65218_INFO(DCDC1, "DCDC1", 850000, 1675000), - TPS65218_INFO(DCDC2, "DCDC2", 850000, 1675000), - TPS65218_INFO(DCDC3, "DCDC3", 900000, 3400000), - TPS65218_INFO(DCDC4, "DCDC4", 1175000, 3400000), - TPS65218_INFO(DCDC5, "DCDC5", 1000000, 1000000), - TPS65218_INFO(DCDC6, "DCDC6", 1800000, 1800000), - TPS65218_INFO(LDO1, "LDO1", 900000, 3400000), - TPS65218_INFO(LS3, "LS3", -1, -1), -}; - -#define TPS65218_OF_MATCH(comp, label) \ - { \ - .compatible = comp, \ - .data = &label, \ - } - -static const struct of_device_id tps65218_of_match[] = { - TPS65218_OF_MATCH("ti,tps65218-dcdc1", tps65218_pmic_regs[DCDC1]), - TPS65218_OF_MATCH("ti,tps65218-dcdc2", tps65218_pmic_regs[DCDC2]), - TPS65218_OF_MATCH("ti,tps65218-dcdc3", tps65218_pmic_regs[DCDC3]), - TPS65218_OF_MATCH("ti,tps65218-dcdc4", tps65218_pmic_regs[DCDC4]), - TPS65218_OF_MATCH("ti,tps65218-dcdc5", tps65218_pmic_regs[DCDC5]), - TPS65218_OF_MATCH("ti,tps65218-dcdc6", tps65218_pmic_regs[DCDC6]), - TPS65218_OF_MATCH("ti,tps65218-ldo1", tps65218_pmic_regs[LDO1]), - TPS65218_OF_MATCH("ti,tps65218-ls3", tps65218_pmic_regs[LS3]), - { } -}; -MODULE_DEVICE_TABLE(of, tps65218_of_match); - static int tps65218_pmic_set_voltage_sel(struct regulator_dev *dev, unsigned selector) { @@ -189,7 +152,7 @@ static int tps65218_pmic_set_suspend_disable(struct regulator_dev *dev) if (rid == TPS65218_DCDC_3 && tps->rev == TPS65218_REV_2_1) return 0; - if (!tps->info[rid]->strobe) { + if (!tps->strobes[rid]) { if (rid == TPS65218_DCDC_3) tps->info[rid]->strobe = 3; else @@ -198,8 +161,7 @@ static int tps65218_pmic_set_suspend_disable(struct regulator_dev *dev) return tps65218_set_bits(tps, dev->desc->bypass_reg, dev->desc->bypass_mask, - tps->info[rid]->strobe, - TPS65218_PROTECT_L1); + tps->strobes[rid], TPS65218_PROTECT_L1); } /* Operations permitted on DCDC1, DCDC2 */ @@ -301,104 +263,104 @@ static struct regulator_ops tps65218_dcdc56_pmic_ops = { }; static const struct regulator_desc regulators[] = { - TPS65218_REGULATOR("DCDC1", TPS65218_DCDC_1, REGULATOR_VOLTAGE, - tps65218_dcdc12_ops, 64, TPS65218_REG_CONTROL_DCDC1, + TPS65218_REGULATOR("DCDC1", "regulator-dcdc1", TPS65218_DCDC_1, + REGULATOR_VOLTAGE, tps65218_dcdc12_ops, 64, + TPS65218_REG_CONTROL_DCDC1, TPS65218_CONTROL_DCDC1_MASK, TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC1_EN, 0, 0, dcdc1_dcdc2_ranges, 2, 4000, 0, TPS65218_REG_SEQ3, TPS65218_SEQ3_DC1_SEQ_MASK), - TPS65218_REGULATOR("DCDC2", TPS65218_DCDC_2, REGULATOR_VOLTAGE, - tps65218_dcdc12_ops, 64, TPS65218_REG_CONTROL_DCDC2, + TPS65218_REGULATOR("DCDC2", "regulator-dcdc2", TPS65218_DCDC_2, + REGULATOR_VOLTAGE, tps65218_dcdc12_ops, 64, + TPS65218_REG_CONTROL_DCDC2, TPS65218_CONTROL_DCDC2_MASK, TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC2_EN, 0, 0, dcdc1_dcdc2_ranges, 2, 4000, 0, TPS65218_REG_SEQ3, TPS65218_SEQ3_DC2_SEQ_MASK), - TPS65218_REGULATOR("DCDC3", TPS65218_DCDC_3, REGULATOR_VOLTAGE, - tps65218_ldo1_dcdc34_ops, 64, + TPS65218_REGULATOR("DCDC3", "regulator-dcdc3", TPS65218_DCDC_3, + REGULATOR_VOLTAGE, tps65218_ldo1_dcdc34_ops, 64, TPS65218_REG_CONTROL_DCDC3, TPS65218_CONTROL_DCDC3_MASK, TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC3_EN, 0, 0, ldo1_dcdc3_ranges, 2, 0, 0, TPS65218_REG_SEQ4, TPS65218_SEQ4_DC3_SEQ_MASK), - TPS65218_REGULATOR("DCDC4", TPS65218_DCDC_4, REGULATOR_VOLTAGE, - tps65218_ldo1_dcdc34_ops, 53, + TPS65218_REGULATOR("DCDC4", "regulator-dcdc4", TPS65218_DCDC_4, + REGULATOR_VOLTAGE, tps65218_ldo1_dcdc34_ops, 53, TPS65218_REG_CONTROL_DCDC4, TPS65218_CONTROL_DCDC4_MASK, TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC4_EN, 0, 0, dcdc4_ranges, 2, 0, 0, TPS65218_REG_SEQ4, TPS65218_SEQ4_DC4_SEQ_MASK), - TPS65218_REGULATOR("DCDC5", TPS65218_DCDC_5, REGULATOR_VOLTAGE, - tps65218_dcdc56_pmic_ops, 1, -1, -1, - TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC5_EN, 0, 0, - NULL, 0, 0, 1000000, TPS65218_REG_SEQ5, + TPS65218_REGULATOR("DCDC5", "regulator-dcdc5", TPS65218_DCDC_5, + REGULATOR_VOLTAGE, tps65218_dcdc56_pmic_ops, 1, -1, + -1, TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC5_EN, 0, + 0, NULL, 0, 0, 1000000, TPS65218_REG_SEQ5, TPS65218_SEQ5_DC5_SEQ_MASK), - TPS65218_REGULATOR("DCDC6", TPS65218_DCDC_6, REGULATOR_VOLTAGE, - tps65218_dcdc56_pmic_ops, 1, -1, -1, - TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC6_EN, 0, 0, - NULL, 0, 0, 1800000, TPS65218_REG_SEQ5, + TPS65218_REGULATOR("DCDC6", "regulator-dcdc6", TPS65218_DCDC_6, + REGULATOR_VOLTAGE, tps65218_dcdc56_pmic_ops, 1, -1, + -1, TPS65218_REG_ENABLE1, TPS65218_ENABLE1_DC6_EN, 0, + 0, NULL, 0, 0, 1800000, TPS65218_REG_SEQ5, TPS65218_SEQ5_DC6_SEQ_MASK), - TPS65218_REGULATOR("LDO1", TPS65218_LDO_1, REGULATOR_VOLTAGE, - tps65218_ldo1_dcdc34_ops, 64, + TPS65218_REGULATOR("LDO1", "regulator-ldo1", TPS65218_LDO_1, + REGULATOR_VOLTAGE, tps65218_ldo1_dcdc34_ops, 64, TPS65218_REG_CONTROL_LDO1, TPS65218_CONTROL_LDO1_MASK, TPS65218_REG_ENABLE2, TPS65218_ENABLE2_LDO1_EN, 0, 0, ldo1_dcdc3_ranges, 2, 0, 0, TPS65218_REG_SEQ6, TPS65218_SEQ6_LDO1_SEQ_MASK), - TPS65218_REGULATOR("LS3", TPS65218_LS_3, REGULATOR_CURRENT, - tps65218_ls3_ops, 0, 0, 0, TPS65218_REG_ENABLE2, - TPS65218_ENABLE2_LS3_EN, TPS65218_REG_CONFIG2, - TPS65218_CONFIG2_LS3ILIM_MASK, NULL, 0, 0, 0, 0, 0), + TPS65218_REGULATOR("LS3", "regulator-ls3", TPS65218_LS_3, + REGULATOR_CURRENT, tps65218_ls3_ops, 0, 0, 0, + TPS65218_REG_ENABLE2, TPS65218_ENABLE2_LS3_EN, + TPS65218_REG_CONFIG2, TPS65218_CONFIG2_LS3ILIM_MASK, + NULL, 0, 0, 0, 0, 0), }; static int tps65218_regulator_probe(struct platform_device *pdev) { struct tps65218 *tps = dev_get_drvdata(pdev->dev.parent); - struct regulator_init_data *init_data; - const struct tps_info *template; struct regulator_dev *rdev; - const struct of_device_id *match; struct regulator_config config = { }; - int id, ret; + int i, ret; unsigned int val; - match = of_match_device(tps65218_of_match, &pdev->dev); - if (!match) - return -ENODEV; - - template = match->data; - id = template->id; - init_data = of_get_regulator_init_data(&pdev->dev, pdev->dev.of_node, - ®ulators[id]); - - platform_set_drvdata(pdev, tps); - - tps->info[id] = &tps65218_pmic_regs[id]; config.dev = &pdev->dev; - config.init_data = init_data; + config.dev->of_node = tps->dev->of_node; config.driver_data = tps; config.regmap = tps->regmap; - config.of_node = pdev->dev.of_node; - rdev = devm_regulator_register(&pdev->dev, ®ulators[id], &config); - if (IS_ERR(rdev)) { - dev_err(tps->dev, "failed to register %s regulator\n", - pdev->name); - return PTR_ERR(rdev); - } + /* Allocate memory for strobes */ + tps->strobes = devm_kzalloc(&pdev->dev, sizeof(u8) * + TPS65218_NUM_REGULATOR, GFP_KERNEL); - ret = regmap_read(tps->regmap, regulators[id].bypass_reg, &val); - if (ret) - return ret; + for (i = 0; i < ARRAY_SIZE(regulators); i++) { + rdev = devm_regulator_register(&pdev->dev, ®ulators[i], + &config); + if (IS_ERR(rdev)) { + dev_err(tps->dev, "failed to register %s regulator\n", + pdev->name); + return PTR_ERR(rdev); + } - tps->info[id]->strobe = val & regulators[id].bypass_mask; + ret = regmap_read(tps->regmap, regulators[i].bypass_reg, &val); + if (ret) + return ret; + + tps->strobes[i] = val & regulators[i].bypass_mask; + } return 0; } +static const struct platform_device_id tps65218_regulator_id_table[] = { + { "tps65218-regulator", }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(platform, tps65218_regulator_id_table); + static struct platform_driver tps65218_regulator_driver = { .driver = { .name = "tps65218-pmic", - .of_match_table = tps65218_of_match, }, .probe = tps65218_regulator_probe, + .id_table = tps65218_regulator_id_table, }; module_platform_driver(tps65218_regulator_driver); diff --git a/include/linux/mfd/tps65218.h b/include/linux/mfd/tps65218.h index 51bef53..bccd2d6 100644 --- a/include/linux/mfd/tps65218.h +++ b/include/linux/mfd/tps65218.h @@ -282,6 +282,7 @@ struct tps65218 { struct regulator_desc desc[TPS65218_NUM_REGULATOR]; struct tps_info *info[TPS65218_NUM_REGULATOR]; struct regmap *regmap; + u8 *strobes; }; int tps65218_reg_write(struct tps65218 *tps, unsigned int reg, -- 1.9.1 ^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2016-07-04 9:57 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-06-28 12:30 [PATCH v6 0/6] mfd: tps65218: Clean ups Keerthy 2016-06-28 12:30 ` [PATCH v6 1/6] mfd: tps65218: Remove redundant read wrapper Keerthy 2016-06-28 12:30 ` [PATCH v6 2/6] Documentation: regulator: tps65218: Update examples Keerthy 2016-06-28 12:30 ` [PATCH v6 3/6] input: tps65218-pwrbutton: Add platform_device_id table Keerthy 2016-06-28 17:04 ` Dmitry Torokhov 2016-06-28 12:30 ` [PATCH v6 4/6] gpio: tps65218-gpio: " Keerthy 2016-06-29 8:56 ` Linus Walleij 2016-06-29 9:32 ` Keerthy 2016-07-04 9:50 ` Linus Walleij 2016-07-04 9:57 ` Keerthy 2016-06-28 12:30 ` [PATCH v6 5/6] mfd: tps65218: Use mfd_add_devices instead of of_platform_populate Keerthy 2016-06-28 12:30 ` [PATCH v6 6/6] regulator: tps65218: Remove all the compatibles Keerthy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).