* [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs
@ 2016-09-19 6:17 Keerthy
2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy
` (5 more replies)
0 siblings, 6 replies; 21+ messages in thread
From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw)
To: u-boot
The series adds support for Palmas family of PMICs.
Implements functions to configure regulators. Enable/Disable
Get/Set voltages of regulators.
Supports TPS659038, TPS65917, Palmas.
Tested on TPS659038, TPS65917 using DRA7XX-EVM and AM57XX-EVM.
Changes in v3:
Introduced u8 i2c read/write functions.
Keerthy (6):
dm: i2c: Add u8 read/write i2c functions
power: regulator: Add ctrl_reg and volt_reg fields for pmic
power: pmic: Palmas: Add the base pmic support
power: regulator: palmas: Add regulator support
configs: am57xx_evm_defconfig: Enable PALMAS options
configs: dra7xx_evm_defconfig: Enable PALMAS options
configs/am57xx_evm_defconfig | 3 +
configs/dra7xx_evm_defconfig | 3 +
drivers/i2c/i2c-uclass.c | 10 +
drivers/power/pmic/Kconfig | 7 +
drivers/power/pmic/Makefile | 1 +
drivers/power/pmic/palmas.c | 77 +++++
drivers/power/regulator/Kconfig | 8 +
drivers/power/regulator/Makefile | 1 +
drivers/power/regulator/palmas_regulator.c | 457 +++++++++++++++++++++++++++++
include/i2c.h | 24 ++
include/power/palmas.h | 25 ++
include/power/regulator.h | 4 +
12 files changed, 620 insertions(+)
create mode 100644 drivers/power/pmic/palmas.c
create mode 100644 drivers/power/regulator/palmas_regulator.c
create mode 100644 include/power/palmas.h
--
1.9.1
^ permalink raw reply [flat|nested] 21+ messages in thread* [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy @ 2016-09-19 6:17 ` Keerthy 2016-09-20 2:06 ` Tom Rini ` (2 more replies) 2016-09-19 6:17 ` [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic Keerthy ` (4 subsequent siblings) 5 siblings, 3 replies; 21+ messages in thread From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw) To: u-boot Add u8 i2c read/write hooks. Signed-off-by: Keerthy <j-keerthy@ti.com> --- drivers/i2c/i2c-uclass.c | 10 ++++++++++ include/i2c.h | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c index dbd3789..6ce5d9a 100644 --- a/drivers/i2c/i2c-uclass.c +++ b/drivers/i2c/i2c-uclass.c @@ -231,6 +231,16 @@ int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) return dm_i2c_write(dev, offset, &val, 1); } +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val) +{ + return dm_i2c_read(dev, offset, val, 1); +} + +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val) +{ + return dm_i2c_write(dev, offset, val, 1); +} + /** * i2c_probe_chip() - probe for a chip on a bus * diff --git a/include/i2c.h b/include/i2c.h index d500445..c3059ad 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -191,6 +191,30 @@ int dm_i2c_reg_read(struct udevice *dev, uint offset); int dm_i2c_reg_write(struct udevice *dev, uint offset, unsigned int val); /** + * dm_i2c_u8_read() - Read a byte value from an I2C register + * + * This reads a single value from the given address in an I2C chip + * + * @dev: Device to use for transfer + * @addr: Address to read from + * @val: Value read is stored in val + * @return 0 for success, -ve on error + */ +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val); + +/** + * dm_i2c_u8_write() - Write a byte value to an I2C register + * + * This writes a single value to the given address in an I2C chip + * + * @dev: Device to use for transfer + * @addr: Address to write to + * @val: Value to write + * @return 0 on success, -ve on error + */ +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val); + +/** * dm_i2c_xfer() - Transfer messages over I2C * * This transfers a raw message. It is best to use dm_i2c_reg_read/write() -- 1.9.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions 2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy @ 2016-09-20 2:06 ` Tom Rini 2016-09-20 5:07 ` Heiko Schocher 2016-09-20 11:53 ` Simon Glass 2 siblings, 0 replies; 21+ messages in thread From: Tom Rini @ 2016-09-20 2:06 UTC (permalink / raw) To: u-boot On Mon, Sep 19, 2016 at 11:47:33AM +0530, Keerthy wrote: > Add u8 i2c read/write hooks. > > Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com> -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/696293f7/attachment.sig> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions 2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy 2016-09-20 2:06 ` Tom Rini @ 2016-09-20 5:07 ` Heiko Schocher 2016-09-20 11:53 ` Simon Glass 2 siblings, 0 replies; 21+ messages in thread From: Heiko Schocher @ 2016-09-20 5:07 UTC (permalink / raw) To: u-boot Hello, Am 19.09.2016 um 08:17 schrieb Keerthy: > Add u8 i2c read/write hooks. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > --- > drivers/i2c/i2c-uclass.c | 10 ++++++++++ > include/i2c.h | 24 ++++++++++++++++++++++++ > 2 files changed, 34 insertions(+) Reviewed-by: Heiko Schocher <hs@denx.de> bye, Heiko > > diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c > index dbd3789..6ce5d9a 100644 > --- a/drivers/i2c/i2c-uclass.c > +++ b/drivers/i2c/i2c-uclass.c > @@ -231,6 +231,16 @@ int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) > return dm_i2c_write(dev, offset, &val, 1); > } > > +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val) > +{ > + return dm_i2c_read(dev, offset, val, 1); > +} > + > +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val) > +{ > + return dm_i2c_write(dev, offset, val, 1); > +} > + > /** > * i2c_probe_chip() - probe for a chip on a bus > * > diff --git a/include/i2c.h b/include/i2c.h > index d500445..c3059ad 100644 > --- a/include/i2c.h > +++ b/include/i2c.h > @@ -191,6 +191,30 @@ int dm_i2c_reg_read(struct udevice *dev, uint offset); > int dm_i2c_reg_write(struct udevice *dev, uint offset, unsigned int val); > > /** > + * dm_i2c_u8_read() - Read a byte value from an I2C register > + * > + * This reads a single value from the given address in an I2C chip > + * > + * @dev: Device to use for transfer > + * @addr: Address to read from > + * @val: Value read is stored in val > + * @return 0 for success, -ve on error > + */ > +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val); > + > +/** > + * dm_i2c_u8_write() - Write a byte value to an I2C register > + * > + * This writes a single value to the given address in an I2C chip > + * > + * @dev: Device to use for transfer > + * @addr: Address to write to > + * @val: Value to write > + * @return 0 on success, -ve on error > + */ > +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val); > + > +/** > * dm_i2c_xfer() - Transfer messages over I2C > * > * This transfers a raw message. It is best to use dm_i2c_reg_read/write() > -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions 2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-20 5:07 ` Heiko Schocher @ 2016-09-20 11:53 ` Simon Glass 2016-09-20 12:42 ` Keerthy 2 siblings, 1 reply; 21+ messages in thread From: Simon Glass @ 2016-09-20 11:53 UTC (permalink / raw) To: u-boot Hi, On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: > Add u8 i2c read/write hooks. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > --- > drivers/i2c/i2c-uclass.c | 10 ++++++++++ > include/i2c.h | 24 ++++++++++++++++++++++++ > 2 files changed, 34 insertions(+) > > diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c > index dbd3789..6ce5d9a 100644 > --- a/drivers/i2c/i2c-uclass.c > +++ b/drivers/i2c/i2c-uclass.c > @@ -231,6 +231,16 @@ int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) > return dm_i2c_write(dev, offset, &val, 1); > } > > +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val) > +{ > + return dm_i2c_read(dev, offset, val, 1); > +} > + > +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val) > +{ > + return dm_i2c_write(dev, offset, val, 1); > +} These look almost the same as dm_i2c_reg_read/write(), but IMO those are easier to use since they don't require a pointer to be passed. How do you intend to use these two new functions? > + > /** > * i2c_probe_chip() - probe for a chip on a bus > * > diff --git a/include/i2c.h b/include/i2c.h > index d500445..c3059ad 100644 > --- a/include/i2c.h > +++ b/include/i2c.h > @@ -191,6 +191,30 @@ int dm_i2c_reg_read(struct udevice *dev, uint offset); > int dm_i2c_reg_write(struct udevice *dev, uint offset, unsigned int val); > > /** > + * dm_i2c_u8_read() - Read a byte value from an I2C register > + * > + * This reads a single value from the given address in an I2C chip > + * > + * @dev: Device to use for transfer > + * @addr: Address to read from > + * @val: Value read is stored in val > + * @return 0 for success, -ve on error > + */ > +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val); > + > +/** > + * dm_i2c_u8_write() - Write a byte value to an I2C register > + * > + * This writes a single value to the given address in an I2C chip > + * > + * @dev: Device to use for transfer > + * @addr: Address to write to > + * @val: Value to write > + * @return 0 on success, -ve on error > + */ > +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val); > + > +/** > * dm_i2c_xfer() - Transfer messages over I2C > * > * This transfers a raw message. It is best to use dm_i2c_reg_read/write() > -- > 1.9.1 Regards, Simon ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions 2016-09-20 11:53 ` Simon Glass @ 2016-09-20 12:42 ` Keerthy 2016-09-23 4:17 ` Simon Glass 0 siblings, 1 reply; 21+ messages in thread From: Keerthy @ 2016-09-20 12:42 UTC (permalink / raw) To: u-boot On Tuesday 20 September 2016 05:23 PM, Simon Glass wrote: > Hi, > > On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: >> Add u8 i2c read/write hooks. >> >> Signed-off-by: Keerthy <j-keerthy@ti.com> >> --- >> drivers/i2c/i2c-uclass.c | 10 ++++++++++ >> include/i2c.h | 24 ++++++++++++++++++++++++ >> 2 files changed, 34 insertions(+) >> >> diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c >> index dbd3789..6ce5d9a 100644 >> --- a/drivers/i2c/i2c-uclass.c >> +++ b/drivers/i2c/i2c-uclass.c >> @@ -231,6 +231,16 @@ int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) >> return dm_i2c_write(dev, offset, &val, 1); >> } >> >> +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val) >> +{ >> + return dm_i2c_read(dev, offset, val, 1); >> +} >> + >> +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val) >> +{ >> + return dm_i2c_write(dev, offset, val, 1); >> +} > > These look almost the same as dm_i2c_reg_read/write(), but IMO those > are easier to use since they don't require a pointer to be passed. How > do you intend to use these two new functions? Simon, I see a kind of issue in the current implementation of int dm_i2c_reg_read(struct udevice *dev, uint offset) int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) In the current set up my need is to read and then write a 1 byte I2C register. It is best to have consistency with read and write. In the current case(dm_i2c_reg_read/write) i read an integer and now when i want to write i need to convert it to an unsigned integer. Instead of all this i made a patch which keeps u8 across read and write: int dm_i2c_reg_read(struct udevice *dev, uint offset, u8 *val) returns error/success with the return value and value is passed by reference in val variable. int dm_i2c_reg_write(struct udevice *dev, uint offset, u8 *val) returns error/success using the return value and the value to be written is sent in val. Regards, Keerthy > >> + >> /** >> * i2c_probe_chip() - probe for a chip on a bus >> * >> diff --git a/include/i2c.h b/include/i2c.h >> index d500445..c3059ad 100644 >> --- a/include/i2c.h >> +++ b/include/i2c.h >> @@ -191,6 +191,30 @@ int dm_i2c_reg_read(struct udevice *dev, uint offset); >> int dm_i2c_reg_write(struct udevice *dev, uint offset, unsigned int val); >> >> /** >> + * dm_i2c_u8_read() - Read a byte value from an I2C register >> + * >> + * This reads a single value from the given address in an I2C chip >> + * >> + * @dev: Device to use for transfer >> + * @addr: Address to read from >> + * @val: Value read is stored in val >> + * @return 0 for success, -ve on error >> + */ >> +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val); >> + >> +/** >> + * dm_i2c_u8_write() - Write a byte value to an I2C register >> + * >> + * This writes a single value to the given address in an I2C chip >> + * >> + * @dev: Device to use for transfer >> + * @addr: Address to write to >> + * @val: Value to write >> + * @return 0 on success, -ve on error >> + */ >> +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val); >> + >> +/** >> * dm_i2c_xfer() - Transfer messages over I2C >> * >> * This transfers a raw message. It is best to use dm_i2c_reg_read/write() >> -- >> 1.9.1 > > Regards, > Simon > ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions 2016-09-20 12:42 ` Keerthy @ 2016-09-23 4:17 ` Simon Glass 0 siblings, 0 replies; 21+ messages in thread From: Simon Glass @ 2016-09-23 4:17 UTC (permalink / raw) To: u-boot Hi, On 20 September 2016 at 06:42, Keerthy <a0393675@ti.com> wrote: > > > On Tuesday 20 September 2016 05:23 PM, Simon Glass wrote: >> >> Hi, >> >> On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: >>> >>> Add u8 i2c read/write hooks. >>> >>> Signed-off-by: Keerthy <j-keerthy@ti.com> >>> --- >>> drivers/i2c/i2c-uclass.c | 10 ++++++++++ >>> include/i2c.h | 24 ++++++++++++++++++++++++ >>> 2 files changed, 34 insertions(+) >>> >>> diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c >>> index dbd3789..6ce5d9a 100644 >>> --- a/drivers/i2c/i2c-uclass.c >>> +++ b/drivers/i2c/i2c-uclass.c >>> @@ -231,6 +231,16 @@ int dm_i2c_reg_write(struct udevice *dev, uint >>> offset, uint value) >>> return dm_i2c_write(dev, offset, &val, 1); >>> } >>> >>> +int dm_i2c_u8_read(struct udevice *dev, uint offset, u8 *val) >>> +{ >>> + return dm_i2c_read(dev, offset, val, 1); >>> +} >>> + >>> +int dm_i2c_u8_write(struct udevice *dev, uint offset, u8 *val) >>> +{ >>> + return dm_i2c_write(dev, offset, val, 1); >>> +} >> >> >> These look almost the same as dm_i2c_reg_read/write(), but IMO those >> are easier to use since they don't require a pointer to be passed. How >> do you intend to use these two new functions? > > > Simon, > > I see a kind of issue in the current implementation of > int dm_i2c_reg_read(struct udevice *dev, uint offset) > int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) > > In the current set up my need is to read and then write a 1 byte I2C > register. It is best to have consistency with read and write. > In the current case(dm_i2c_reg_read/write) i read an integer and now when i > want to write i need to convert it to an unsigned integer. > > Instead of all this i made a patch which keeps u8 across read and write: > > int dm_i2c_reg_read(struct udevice *dev, uint offset, u8 *val) > returns error/success with the return value and value is passed by reference > in val variable. > > int dm_i2c_reg_write(struct udevice *dev, uint offset, u8 *val) > returns error/success using the return value and the value to be written is > sent in val. Well I really don't see why you can use the other functions. But if you prefer these, then OK. > > Regards, > Keerthy > > [...] Regards, Simon ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy @ 2016-09-19 6:17 ` Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-23 4:15 ` Simon Glass 2016-09-19 6:17 ` [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support Keerthy ` (3 subsequent siblings) 5 siblings, 2 replies; 21+ messages in thread From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw) To: u-boot The ctrl reg contains bit fields to enable and disable regulators, and volt_reg has the bit fields to configure the voltage values. The registers are frequently accessed hence make them part of dm_regulator_uclass_platdata structure. Signed-off-by: Keerthy <j-keerthy@ti.com> --- include/power/regulator.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/power/regulator.h b/include/power/regulator.h index 9bcd728..2117f55 100644 --- a/include/power/regulator.h +++ b/include/power/regulator.h @@ -152,6 +152,8 @@ enum regulator_flag { * TODO(sjg at chromium.org): Consider putting the above two into @flags * @flags: - flags value (see REGULATOR_FLAG_...) * @name** - fdt regulator name - should be taken from the device tree + * ctrl_reg: - Control register offset used to enable/disable regulator + * volt_reg: - register offset for writing voltage vsel values * * Note: * * - set automatically on device probe by the uclass's '.pre_probe' method. @@ -171,6 +173,8 @@ struct dm_regulator_uclass_platdata { bool boot_on; const char *name; int flags; + u8 ctrl_reg; + u8 volt_reg; }; /* Regulator device operations */ -- 1.9.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic 2016-09-19 6:17 ` [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic Keerthy @ 2016-09-20 2:06 ` Tom Rini 2016-09-23 4:15 ` Simon Glass 1 sibling, 0 replies; 21+ messages in thread From: Tom Rini @ 2016-09-20 2:06 UTC (permalink / raw) To: u-boot On Mon, Sep 19, 2016 at 11:47:34AM +0530, Keerthy wrote: > The ctrl reg contains bit fields to enable and disable regulators, > and volt_reg has the bit fields to configure the voltage values. > The registers are frequently accessed hence make them part > of dm_regulator_uclass_platdata structure. > > Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com> -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/c88a45a5/attachment.sig> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic 2016-09-19 6:17 ` [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic Keerthy 2016-09-20 2:06 ` Tom Rini @ 2016-09-23 4:15 ` Simon Glass 2016-09-25 12:06 ` Keerthy 1 sibling, 1 reply; 21+ messages in thread From: Simon Glass @ 2016-09-23 4:15 UTC (permalink / raw) To: u-boot On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: > The ctrl reg contains bit fields to enable and disable regulators, > and volt_reg has the bit fields to configure the voltage values. > The registers are frequently accessed hence make them part > of dm_regulator_uclass_platdata structure. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > --- > include/power/regulator.h | 4 ++++ > 1 file changed, 4 insertions(+) Reviewed-by: Simon Glass <sjg@chromium.org> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic 2016-09-23 4:15 ` Simon Glass @ 2016-09-25 12:06 ` Keerthy 0 siblings, 0 replies; 21+ messages in thread From: Keerthy @ 2016-09-25 12:06 UTC (permalink / raw) To: u-boot On Friday 23 September 2016 09:45 AM, Simon Glass wrote: > On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: >> The ctrl reg contains bit fields to enable and disable regulators, >> and volt_reg has the bit fields to configure the voltage values. >> The registers are frequently accessed hence make them part >> of dm_regulator_uclass_platdata structure. >> >> Signed-off-by: Keerthy <j-keerthy@ti.com> >> --- >> include/power/regulator.h | 4 ++++ >> 1 file changed, 4 insertions(+) > > Reviewed-by: Simon Glass <sjg@chromium.org> Thanks i will repost a v4 with comments on the other patch fixed. > ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic Keerthy @ 2016-09-19 6:17 ` Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-23 4:15 ` Simon Glass 2016-09-19 6:17 ` [U-Boot] [PATCH v3 4/6] power: regulator: palmas: Add regulator support Keerthy ` (2 subsequent siblings) 5 siblings, 2 replies; 21+ messages in thread From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw) To: u-boot Add support to bind the regulators/child nodes with the pmic. Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org> --- drivers/power/pmic/Kconfig | 7 +++++ drivers/power/pmic/Makefile | 1 + drivers/power/pmic/palmas.c | 77 +++++++++++++++++++++++++++++++++++++++++++++ include/power/palmas.h | 25 +++++++++++++++ 4 files changed, 110 insertions(+) create mode 100644 drivers/power/pmic/palmas.c create mode 100644 include/power/palmas.h diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 69f8d51..92931c5 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -135,3 +135,10 @@ config PMIC_TPS65090 FETs and a battery charger. This driver provides register access only, and you can enable the regulator/charger drivers separately if required. + +config PMIC_PALMAS + bool "Enable driver for Texas Instruments PALMAS PMIC" + depends on DM_PMIC + ---help--- + The PALMAS is a PMIC containing several LDOs, SMPS. + This driver binds the pmic children. diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index 52b4f71..828c0cf 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -15,6 +15,7 @@ obj-$(CONFIG_PMIC_PM8916) += pm8916.o obj-$(CONFIG_PMIC_RK808) += rk808.o obj-$(CONFIG_PMIC_TPS65090) += tps65090.o obj-$(CONFIG_PMIC_S5M8767) += s5m8767.o +obj-$(CONFIG_$(SPL_)PMIC_PALMAS) += palmas.o obj-$(CONFIG_POWER_LTC3676) += pmic_ltc3676.o obj-$(CONFIG_POWER_MAX77696) += pmic_max77696.o diff --git a/drivers/power/pmic/palmas.c b/drivers/power/pmic/palmas.c new file mode 100644 index 0000000..3cef2c9 --- /dev/null +++ b/drivers/power/pmic/palmas.c @@ -0,0 +1,77 @@ +/* + * (C) Copyright 2016 Texas Instruments Incorporated, <www.ti.com> + * Keerthy <j-keerthy@ti.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <fdtdec.h> +#include <errno.h> +#include <dm.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/regulator.h> +#include <power/palmas.h> +#include <dm/device.h> + +DECLARE_GLOBAL_DATA_PTR; + +static const struct pmic_child_info pmic_children_info[] = { + { .prefix = "ldo", .driver = PALMAS_LDO_DRIVER }, + { .prefix = "smps", .driver = PALMAS_SMPS_DRIVER }, + { }, +}; + +static int palmas_bind(struct udevice *dev) +{ + int pmic_node = -1, regulators_node; + const void *blob = gd->fdt_blob; + int children; + int node = dev->of_offset; + int subnode, len; + + fdt_for_each_subnode(blob, subnode, node) { + const char *name; + char *temp; + + name = fdt_get_name(blob, subnode, &len); + temp = strstr(name, "pmic"); + if (temp) { + pmic_node = subnode; + break; + } + } + + if (pmic_node <= 0) { + printf("%s: %s pmic subnode not found!", __func__, dev->name); + return -ENXIO; + } + + regulators_node = fdt_subnode_offset(blob, pmic_node, "regulators"); + + if (regulators_node <= 0) { + printf("%s: %s reg subnode not found!", __func__, dev->name); + return -ENXIO; + } + + children = pmic_bind_children(dev, regulators_node, pmic_children_info); + if (!children) + printf("%s: %s - no child found\n", __func__, dev->name); + + /* Always return success for this device */ + return 0; +} + +static const struct udevice_id palmas_ids[] = { + { .compatible = "ti,tps659038", .data = TPS659038 }, + { .compatible = "ti,tps65917" , .data = TPS65917 }, + { } +}; + +U_BOOT_DRIVER(pmic_palmas) = { + .name = "palmas_pmic", + .id = UCLASS_PMIC, + .of_match = palmas_ids, + .bind = palmas_bind, +}; diff --git a/include/power/palmas.h b/include/power/palmas.h new file mode 100644 index 0000000..bad5a35 --- /dev/null +++ b/include/power/palmas.h @@ -0,0 +1,25 @@ +#define PALMAS 0x0 +#define TPS659038 0x1 +#define TPS65917 0x2 + +/* I2C device address for pmic palmas */ +#define PALMAS_I2C_ADDR (0x12 >> 1) +#define PALMAS_LDO_NUM 11 +#define PALMAS_SMPS_NUM 8 + +/* Drivers name */ +#define PALMAS_LDO_DRIVER "palmas_ldo" +#define PALMAS_SMPS_DRIVER "palmas_smps" + +#define PALMAS_SMPS_VOLT_MASK 0x7F +#define PALMAS_SMPS_RANGE_MASK 0x80 +#define PALMAS_SMPS_VOLT_MAX_HEX 0x7F +#define PALMAS_SMPS_VOLT_MAX 3300000 +#define PALMAS_SMPS_MODE_MASK 0x3 +#define PALMAS_SMPS_STATUS_MASK 0x30 + +#define PALMAS_LDO_VOLT_MASK 0x3F +#define PALMAS_LDO_VOLT_MAX_HEX 0x3F +#define PALMAS_LDO_VOLT_MAX 3300000 +#define PALMAS_LDO_MODE_MASK 0x1 +#define PALMAS_LDO_STATUS_MASK 0x10 -- 1.9.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support 2016-09-19 6:17 ` [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support Keerthy @ 2016-09-20 2:06 ` Tom Rini 2016-09-23 4:15 ` Simon Glass 1 sibling, 0 replies; 21+ messages in thread From: Tom Rini @ 2016-09-20 2:06 UTC (permalink / raw) To: u-boot On Mon, Sep 19, 2016 at 11:47:35AM +0530, Keerthy wrote: > Add support to bind the regulators/child nodes with the pmic. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com> -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/f85e40ab/attachment.sig> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support 2016-09-19 6:17 ` [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support Keerthy 2016-09-20 2:06 ` Tom Rini @ 2016-09-23 4:15 ` Simon Glass 2016-09-25 12:05 ` Keerthy 1 sibling, 1 reply; 21+ messages in thread From: Simon Glass @ 2016-09-23 4:15 UTC (permalink / raw) To: u-boot Hi, On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: > Add support to bind the regulators/child nodes with the pmic. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > --- > drivers/power/pmic/Kconfig | 7 +++++ > drivers/power/pmic/Makefile | 1 + > drivers/power/pmic/palmas.c | 77 +++++++++++++++++++++++++++++++++++++++++++++ > include/power/palmas.h | 25 +++++++++++++++ > 4 files changed, 110 insertions(+) > create mode 100644 drivers/power/pmic/palmas.c > create mode 100644 include/power/palmas.h I missed it before, but you should use debug() in drivers, not printf(). Regards, Simon ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support 2016-09-23 4:15 ` Simon Glass @ 2016-09-25 12:05 ` Keerthy 0 siblings, 0 replies; 21+ messages in thread From: Keerthy @ 2016-09-25 12:05 UTC (permalink / raw) To: u-boot On Friday 23 September 2016 09:45 AM, Simon Glass wrote: > Hi, > > On 19 September 2016 at 00:17, Keerthy <j-keerthy@ti.com> wrote: >> Add support to bind the regulators/child nodes with the pmic. >> >> Signed-off-by: Keerthy <j-keerthy@ti.com> >> Reviewed-by: Simon Glass <sjg@chromium.org> >> --- >> drivers/power/pmic/Kconfig | 7 +++++ >> drivers/power/pmic/Makefile | 1 + >> drivers/power/pmic/palmas.c | 77 +++++++++++++++++++++++++++++++++++++++++++++ >> include/power/palmas.h | 25 +++++++++++++++ >> 4 files changed, 110 insertions(+) >> create mode 100644 drivers/power/pmic/palmas.c >> create mode 100644 include/power/palmas.h > > I missed it before, but you should use debug() in drivers, not printf(). Sure. I will fix that in the next version. > > Regards, > Simon > ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 4/6] power: regulator: palmas: Add regulator support 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy ` (2 preceding siblings ...) 2016-09-19 6:17 ` [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support Keerthy @ 2016-09-19 6:17 ` Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-19 6:17 ` [U-Boot] [PATCH v3 5/6] configs: am57xx_evm_defconfig: Enable PALMAS options Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 6/6] configs: dra7xx_evm_defconfig: " Keerthy 5 siblings, 1 reply; 21+ messages in thread From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw) To: u-boot The driver provides regulator set/get voltage enable/disable functions for palmas family of PMICs. Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org> --- Changes in v3: * made use of dm_i2c_u8_write/read in place of dm_i2c_reg_write/read Changes in v2: * made use of dm_i2c_reg_write/read in place of dm_i2c_write/read drivers/power/regulator/Kconfig | 8 + drivers/power/regulator/Makefile | 1 + drivers/power/regulator/palmas_regulator.c | 457 +++++++++++++++++++++++++++++ 3 files changed, 466 insertions(+) create mode 100644 drivers/power/regulator/palmas_regulator.c diff --git a/drivers/power/regulator/Kconfig b/drivers/power/regulator/Kconfig index 17f22dd..adb710a 100644 --- a/drivers/power/regulator/Kconfig +++ b/drivers/power/regulator/Kconfig @@ -115,3 +115,11 @@ config REGULATOR_TPS65090 regulators, one for each FET. The standard regulator interface is supported, but it is only possible to turn the regulators on or off. There is no voltage/current control. + +config DM_REGULATOR_PALMAS + bool "Enable driver for PALMAS PMIC regulators" + depends on PMIC_PALMAS + ---help--- + This enables implementation of driver-model regulator uclass + features for REGULATOR PALMAS and the family of PALMAS PMICs. + The driver implements get/set api for: value and enable. diff --git a/drivers/power/regulator/Makefile b/drivers/power/regulator/Makefile index 1590d85..75080d4 100644 --- a/drivers/power/regulator/Makefile +++ b/drivers/power/regulator/Makefile @@ -14,3 +14,4 @@ obj-$(CONFIG_REGULATOR_RK808) += rk808.o obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o obj-$(CONFIG_DM_REGULATOR_SANDBOX) += sandbox.o obj-$(CONFIG_REGULATOR_TPS65090) += tps65090_regulator.o +obj-$(CONFIG_$(SPL_)DM_REGULATOR_PALMAS) += palmas_regulator.o diff --git a/drivers/power/regulator/palmas_regulator.c b/drivers/power/regulator/palmas_regulator.c new file mode 100644 index 0000000..14bc701 --- /dev/null +++ b/drivers/power/regulator/palmas_regulator.c @@ -0,0 +1,457 @@ +/* + * (C) Copyright 2016 + * Texas Instruments Incorporated, <www.ti.com> + * + * Keerthy <j-keerthy@ti.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <fdtdec.h> +#include <errno.h> +#include <dm.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/regulator.h> +#include <power/palmas.h> + +DECLARE_GLOBAL_DATA_PTR; + +#define REGULATOR_ON 0x1 +#define REGULATOR_OFF 0x0 + +#define SMPS_MODE_MASK 0x3 +#define SMPS_MODE_SHIFT 0x0 +#define LDO_MODE_MASK 0x1 +#define LDO_MODE_SHIFT 0x0 + +static const char palmas_smps_ctrl[][PALMAS_SMPS_NUM] = { + {0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c}, + {0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38}, + {0x20, 0x24, 0x2c, 0x30, 0x38}, +}; + +static const char palmas_smps_volt[][PALMAS_SMPS_NUM] = { + {0x23, 0x27, 0x2b, 0x2f, 0x33, 0x37, 0x3b, 0x3c}, + {0x23, 0x27, 0x2b, 0x2f, 0x33, 0x37, 0x3b}, + {0x23, 0x27, 0x2f, 0x33, 0x3B} +}; + +static const char palmas_ldo_ctrl[][PALMAS_LDO_NUM] = { + {0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64}, + {0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x62, 0x64}, + {0x50, 0x52, 0x54, 0x5e, 0x62} +}; + +static const char palmas_ldo_volt[][PALMAS_LDO_NUM] = { + {0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65}, + {0x51, 0x53, 0x55, 0x57, 0x59, 0x5b, 0x5d, 0x5f, 0x61, 0x63, 0x65}, + {0x51, 0x53, 0x55, 0x5f, 0x63} +}; + +static int palmas_smps_enable(struct udevice *dev, int op, bool *enable) +{ + int ret; + uint8_t val; + unsigned int adr; + struct dm_regulator_uclass_platdata *uc_pdata; + + uc_pdata = dev_get_uclass_platdata(dev); + adr = uc_pdata->ctrl_reg; + + ret = dm_i2c_u8_read(dev->parent, adr, &val); + if (ret < 0) + return ret; + + if (op == PMIC_OP_GET) { + val &= PALMAS_SMPS_STATUS_MASK; + + if (val) + *enable = true; + else + *enable = false; + + return 0; + } else if (op == PMIC_OP_SET) { + if (*enable) + val |= PALMAS_SMPS_MODE_MASK; + else + val &= ~(PALMAS_SMPS_MODE_MASK); + + ret = dm_i2c_u8_write(dev->parent, adr, &val); + if (ret) + return ret; + } + + return 0; +} + +static int palmas_smps_volt2hex(int uV) +{ + if (uV > PALMAS_LDO_VOLT_MAX) + return -EINVAL; + + if (uV > 1650000) + return (uV - 1000000) / 20000 + 0x6; + + if (uV == 500000) + return 0x6; + else + return 0x6 + ((uV - 500000) / 10000); +} + +static int palmas_smps_hex2volt(int hex, bool range) +{ + unsigned int uV = 0; + + if (hex > PALMAS_SMPS_VOLT_MAX_HEX) + return -EINVAL; + + if (hex < 0x7) + uV = 500000; + else + uV = 500000 + (hex - 0x6) * 10000; + + if (range) + uV *= 2; + + return uV; +} + +static int palmas_smps_val(struct udevice *dev, int op, int *uV) +{ + unsigned int hex, adr; + u8 val; + int ret; + bool range; + struct dm_regulator_uclass_platdata *uc_pdata; + + uc_pdata = dev_get_uclass_platdata(dev); + + if (op == PMIC_OP_GET) + *uV = 0; + + adr = uc_pdata->volt_reg; + + ret = dm_i2c_u8_read(dev->parent, adr, &val); + if (ret) + return ret; + + if (op == PMIC_OP_GET) { + if (val & PALMAS_SMPS_RANGE_MASK) + range = true; + else + range = false; + + val &= PALMAS_SMPS_VOLT_MASK; + ret = palmas_smps_hex2volt(val, range); + if (ret < 0) + return ret; + *uV = ret; + + return 0; + } + + hex = palmas_smps_volt2hex(*uV); + if (hex < 0) + return hex; + + val &= ~PALMAS_SMPS_VOLT_MASK; + val |= hex; + if (*uV > 1650000) + val |= PALMAS_SMPS_RANGE_MASK; + + return dm_i2c_u8_write(dev->parent, adr, &val); +} + +static int palmas_ldo_enable(struct udevice *dev, int op, bool *enable) +{ + int ret; + uint8_t val; + unsigned int adr; + struct dm_regulator_uclass_platdata *uc_pdata; + + uc_pdata = dev_get_uclass_platdata(dev); + adr = uc_pdata->ctrl_reg; + + ret = dm_i2c_u8_read(dev->parent, adr, &val); + if (ret) + return ret; + + if (op == PMIC_OP_GET) { + val &= PALMAS_LDO_STATUS_MASK; + + if (val) + *enable = true; + else + *enable = false; + + return 0; + } else if (op == PMIC_OP_SET) { + if (*enable) + val |= PALMAS_LDO_MODE_MASK; + else + val &= ~(PALMAS_LDO_MODE_MASK); + + ret = dm_i2c_u8_write(dev->parent, adr, &val); + if (ret) + return ret; + } + + return 0; +} + +static int palmas_ldo_volt2hex(int uV) +{ + if (uV > PALMAS_LDO_VOLT_MAX) + return -EINVAL; + + return (uV - 850000) / 50000; +} + +static int palmas_ldo_hex2volt(int hex) +{ + if (hex > PALMAS_LDO_VOLT_MAX_HEX) + return -EINVAL; + + if (!hex) + return 0; + + return (hex * 50000) + 850000; +} + +static int palmas_ldo_val(struct udevice *dev, int op, int *uV) +{ + unsigned int hex, adr; + u8 val; + int ret; + + struct dm_regulator_uclass_platdata *uc_pdata; + + if (op == PMIC_OP_GET) + *uV = 0; + + uc_pdata = dev_get_uclass_platdata(dev); + + adr = uc_pdata->volt_reg; + + ret = dm_i2c_u8_read(dev->parent, adr, &val); + if (ret) + return ret; + + if (op == PMIC_OP_GET) { + val &= PALMAS_LDO_VOLT_MASK; + ret = palmas_ldo_hex2volt(val); + if (ret < 0) + return ret; + *uV = ret; + return 0; + } + + hex = palmas_ldo_volt2hex(*uV); + if (hex < 0) + return hex; + + val &= ~PALMAS_LDO_VOLT_MASK; + val |= hex; + if (*uV > 1650000) + val |= 0x80; + + return dm_i2c_u8_write(dev->parent, adr, &val); +} + +static int palmas_ldo_probe(struct udevice *dev) +{ + struct dm_regulator_uclass_platdata *uc_pdata; + struct udevice *parent; + + uc_pdata = dev_get_uclass_platdata(dev); + + parent = dev_get_parent(dev); + int type = dev_get_driver_data(parent); + + uc_pdata->type = REGULATOR_TYPE_LDO; + + if (dev->driver_data) { + u8 idx = dev->driver_data - 1; + uc_pdata->ctrl_reg = palmas_ldo_ctrl[type][idx]; + uc_pdata->volt_reg = palmas_ldo_volt[type][idx]; + } else { + /* check for ldoln and ldousb cases */ + if (!strcmp("ldoln", dev->name)) { + uc_pdata->ctrl_reg = palmas_ldo_ctrl[type][9]; + uc_pdata->volt_reg = palmas_ldo_volt[type][9]; + } else if (!strcmp("ldousb", dev->name)) { + uc_pdata->ctrl_reg = palmas_ldo_ctrl[type][10]; + uc_pdata->volt_reg = palmas_ldo_volt[type][10]; + } + } + + return 0; +} + +static int ldo_get_value(struct udevice *dev) +{ + int uV; + int ret; + + ret = palmas_ldo_val(dev, PMIC_OP_GET, &uV); + if (ret) + return ret; + + return uV; +} + +static int ldo_set_value(struct udevice *dev, int uV) +{ + return palmas_ldo_val(dev, PMIC_OP_SET, &uV); +} + +static bool ldo_get_enable(struct udevice *dev) +{ + bool enable = false; + int ret; + + ret = palmas_ldo_enable(dev, PMIC_OP_GET, &enable); + if (ret) + return ret; + + return enable; +} + +static int ldo_set_enable(struct udevice *dev, bool enable) +{ + return palmas_ldo_enable(dev, PMIC_OP_SET, &enable); +} + +static int palmas_smps_probe(struct udevice *dev) +{ + struct dm_regulator_uclass_platdata *uc_pdata; + struct udevice *parent; + int idx; + + uc_pdata = dev_get_uclass_platdata(dev); + + parent = dev_get_parent(dev); + int type = dev_get_driver_data(parent); + + uc_pdata->type = REGULATOR_TYPE_BUCK; + + switch (type) { + case PALMAS: + case TPS659038: + switch (dev->driver_data) { + case 123: + case 12: + uc_pdata->ctrl_reg = palmas_smps_ctrl[type][0]; + uc_pdata->volt_reg = palmas_smps_volt[type][0]; + break; + case 3: + uc_pdata->ctrl_reg = palmas_smps_ctrl[type][1]; + uc_pdata->volt_reg = palmas_smps_volt[type][1]; + break; + case 45: + uc_pdata->ctrl_reg = palmas_smps_ctrl[type][2]; + uc_pdata->volt_reg = palmas_smps_volt[type][2]; + break; + case 6: + case 7: + case 8: + case 9: + case 10: + idx = dev->driver_data - 4; + uc_pdata->ctrl_reg = palmas_smps_ctrl[type][idx]; + uc_pdata->volt_reg = palmas_smps_volt[type][idx]; + break; + + default: + printf("Wrong ID for regulator\n"); + } + break; + + case TPS65917: + switch (dev->driver_data) { + case 1: + case 2: + case 3: + case 4: + case 5: + idx = dev->driver_data - 1; + uc_pdata->ctrl_reg = palmas_smps_ctrl[type][idx]; + uc_pdata->volt_reg = palmas_smps_volt[type][idx]; + break; + + default: + printf("Wrong ID for regulator\n"); + } + break; + + default: + printf("Invalid PMIC ID\n"); + } + + return 0; +} + +static int smps_get_value(struct udevice *dev) +{ + int uV; + int ret; + + ret = palmas_smps_val(dev, PMIC_OP_GET, &uV); + if (ret) + return ret; + + return uV; +} + +static int smps_set_value(struct udevice *dev, int uV) +{ + return palmas_smps_val(dev, PMIC_OP_SET, &uV); +} + +static bool smps_get_enable(struct udevice *dev) +{ + bool enable = false; + int ret; + + ret = palmas_smps_enable(dev, PMIC_OP_GET, &enable); + if (ret) + return ret; + + return enable; +} + +static int smps_set_enable(struct udevice *dev, bool enable) +{ + return palmas_smps_enable(dev, PMIC_OP_SET, &enable); +} + +static const struct dm_regulator_ops palmas_ldo_ops = { + .get_value = ldo_get_value, + .set_value = ldo_set_value, + .get_enable = ldo_get_enable, + .set_enable = ldo_set_enable, +}; + +U_BOOT_DRIVER(palmas_ldo) = { + .name = PALMAS_LDO_DRIVER, + .id = UCLASS_REGULATOR, + .ops = &palmas_ldo_ops, + .probe = palmas_ldo_probe, +}; + +static const struct dm_regulator_ops palmas_smps_ops = { + .get_value = smps_get_value, + .set_value = smps_set_value, + .get_enable = smps_get_enable, + .set_enable = smps_set_enable, +}; + +U_BOOT_DRIVER(palmas_smps) = { + .name = PALMAS_SMPS_DRIVER, + .id = UCLASS_REGULATOR, + .ops = &palmas_smps_ops, + .probe = palmas_smps_probe, +}; -- 1.9.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 4/6] power: regulator: palmas: Add regulator support 2016-09-19 6:17 ` [U-Boot] [PATCH v3 4/6] power: regulator: palmas: Add regulator support Keerthy @ 2016-09-20 2:06 ` Tom Rini 0 siblings, 0 replies; 21+ messages in thread From: Tom Rini @ 2016-09-20 2:06 UTC (permalink / raw) To: u-boot On Mon, Sep 19, 2016 at 11:47:36AM +0530, Keerthy wrote: > The driver provides regulator set/get voltage > enable/disable functions for palmas family of PMICs. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Tom Rini <trini@konsulko.com> -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/38bf030e/attachment.sig> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 5/6] configs: am57xx_evm_defconfig: Enable PALMAS options 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy ` (3 preceding siblings ...) 2016-09-19 6:17 ` [U-Boot] [PATCH v3 4/6] power: regulator: palmas: Add regulator support Keerthy @ 2016-09-19 6:17 ` Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-19 6:17 ` [U-Boot] [PATCH v3 6/6] configs: dra7xx_evm_defconfig: " Keerthy 5 siblings, 1 reply; 21+ messages in thread From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw) To: u-boot Enable palmas PMIC config options. Signed-off-by: Keerthy <j-keerthy@ti.com> --- configs/am57xx_evm_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/am57xx_evm_defconfig b/configs/am57xx_evm_defconfig index 0c41a4e..4a5b206 100644 --- a/configs/am57xx_evm_defconfig +++ b/configs/am57xx_evm_defconfig @@ -43,6 +43,9 @@ CONFIG_DM_SPI_FLASH=y CONFIG_SPI_FLASH=y CONFIG_SPI_FLASH_BAR=y CONFIG_SPI_FLASH_SPANSION=y +CONFIG_DM_PMIC=y +CONFIG_PMIC_PALMAS=y +CONFIG_DM_REGULATOR_PALMAS=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_DM_SPI=y -- 1.9.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 5/6] configs: am57xx_evm_defconfig: Enable PALMAS options 2016-09-19 6:17 ` [U-Boot] [PATCH v3 5/6] configs: am57xx_evm_defconfig: Enable PALMAS options Keerthy @ 2016-09-20 2:06 ` Tom Rini 0 siblings, 0 replies; 21+ messages in thread From: Tom Rini @ 2016-09-20 2:06 UTC (permalink / raw) To: u-boot On Mon, Sep 19, 2016 at 11:47:37AM +0530, Keerthy wrote: > Enable palmas PMIC config options. > > Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com> -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/62d1ace5/attachment.sig> ^ permalink raw reply [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 6/6] configs: dra7xx_evm_defconfig: Enable PALMAS options 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy ` (4 preceding siblings ...) 2016-09-19 6:17 ` [U-Boot] [PATCH v3 5/6] configs: am57xx_evm_defconfig: Enable PALMAS options Keerthy @ 2016-09-19 6:17 ` Keerthy 2016-09-20 2:06 ` Tom Rini 5 siblings, 1 reply; 21+ messages in thread From: Keerthy @ 2016-09-19 6:17 UTC (permalink / raw) To: u-boot Enable palmas PMIC config options. Signed-off-by: Keerthy <j-keerthy@ti.com> --- configs/dra7xx_evm_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/dra7xx_evm_defconfig b/configs/dra7xx_evm_defconfig index 5738f1d..31ceca1 100644 --- a/configs/dra7xx_evm_defconfig +++ b/configs/dra7xx_evm_defconfig @@ -47,8 +47,11 @@ CONFIG_SPI_FLASH=y CONFIG_SPI_FLASH_BAR=y CONFIG_SPI_FLASH_SPANSION=y CONFIG_DM_ETH=y +CONFIG_DM_PMIC=y +CONFIG_PMIC_PALMAS=y CONFIG_DM_REGULATOR=y CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_REGULATOR_PALMAS=y CONFIG_DM_SERIAL=y CONFIG_SYS_NS16550=y CONFIG_DM_SPI=y -- 1.9.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [U-Boot] [PATCH v3 6/6] configs: dra7xx_evm_defconfig: Enable PALMAS options 2016-09-19 6:17 ` [U-Boot] [PATCH v3 6/6] configs: dra7xx_evm_defconfig: " Keerthy @ 2016-09-20 2:06 ` Tom Rini 0 siblings, 0 replies; 21+ messages in thread From: Tom Rini @ 2016-09-20 2:06 UTC (permalink / raw) To: u-boot On Mon, Sep 19, 2016 at 11:47:38AM +0530, Keerthy wrote: > Enable palmas PMIC config options. > > Signed-off-by: Keerthy <j-keerthy@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com> -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160919/64013035/attachment.sig> ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2016-09-25 12:06 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-09-19 6:17 [U-Boot] [PATCH v3 0/6] power: pmic: Add support for Palmas family of PMICs Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 1/6] dm: i2c: Add u8 read/write i2c functions Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-20 5:07 ` Heiko Schocher 2016-09-20 11:53 ` Simon Glass 2016-09-20 12:42 ` Keerthy 2016-09-23 4:17 ` Simon Glass 2016-09-19 6:17 ` [U-Boot] [PATCH v3 2/6] power: regulator: Add ctrl_reg and volt_reg fields for pmic Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-23 4:15 ` Simon Glass 2016-09-25 12:06 ` Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 3/6] power: pmic: Palmas: Add the base pmic support Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-23 4:15 ` Simon Glass 2016-09-25 12:05 ` Keerthy 2016-09-19 6:17 ` [U-Boot] [PATCH v3 4/6] power: regulator: palmas: Add regulator support Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-19 6:17 ` [U-Boot] [PATCH v3 5/6] configs: am57xx_evm_defconfig: Enable PALMAS options Keerthy 2016-09-20 2:06 ` Tom Rini 2016-09-19 6:17 ` [U-Boot] [PATCH v3 6/6] configs: dra7xx_evm_defconfig: " Keerthy 2016-09-20 2:06 ` Tom Rini
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox