Message ID | 1475036851-12048-3-git-send-email-j-keerthy@ti.com |
---|---|
State | Superseded |
Headers | show |
Hi Keerthy, On 27 September 2016 at 22:27, Keerthy <j-keerthy@ti.com> wrote: > Add support to bind the regulators/child nodes with the pmic. > Also adds the pmic i2c based read/write funtions to access pmic > registers. > > Signed-off-by: Keerthy <j-keerthy@ti.com> > Reviewed-by: Simon Glass <sjg@chromium.org> > Reviewed-by: Tom Rini <trini@konsulko.com> > --- > > Changes in v5: > > * Added pmic read/write functions. > > drivers/power/pmic/Kconfig | 7 +++ > drivers/power/pmic/Makefile | 1 + > drivers/power/pmic/palmas.c | 108 ++++++++++++++++++++++++++++++++++++++++++++ > include/power/palmas.h | 25 ++++++++++ > 4 files changed, 141 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..1d2bd67 > --- /dev/null > +++ b/drivers/power/pmic/palmas.c > @@ -0,0 +1,108 @@ > +/* > + * (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_write(struct udevice *dev, uint reg, const uint8_t *buff, > + int len) > +{ > + if (dm_i2c_reg_write(dev, reg, *buff)) { I think this should be dm_i2c_write(). You are only writing a single byte. > + error("write error to device: %p register: %#x!", dev, reg); > + return -EIO; > + } > + > + return 0; > +} > + > +static int palmas_read(struct udevice *dev, uint reg, uint8_t *buff, int len) > +{ > + int ret; > + > + ret = dm_i2c_reg_read(dev, reg); dm_i2c_read() > + if (ret < 0) { > + error("read error %d from device: %p register: %#x!", ret, dev, > + reg); > + return -EIO; > + } > + > + return ret; > +} [...] Regards, Simon
On Wednesday 28 September 2016 11:21 PM, Simon Glass wrote: > Hi Keerthy, > > On 27 September 2016 at 22:27, Keerthy <j-keerthy@ti.com> wrote: >> Add support to bind the regulators/child nodes with the pmic. >> Also adds the pmic i2c based read/write funtions to access pmic >> registers. >> >> Signed-off-by: Keerthy <j-keerthy@ti.com> >> Reviewed-by: Simon Glass <sjg@chromium.org> >> Reviewed-by: Tom Rini <trini@konsulko.com> >> --- >> >> Changes in v5: >> >> * Added pmic read/write functions. >> >> drivers/power/pmic/Kconfig | 7 +++ >> drivers/power/pmic/Makefile | 1 + >> drivers/power/pmic/palmas.c | 108 ++++++++++++++++++++++++++++++++++++++++++++ >> include/power/palmas.h | 25 ++++++++++ >> 4 files changed, 141 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..1d2bd67 >> --- /dev/null >> +++ b/drivers/power/pmic/palmas.c >> @@ -0,0 +1,108 @@ >> +/* >> + * (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_write(struct udevice *dev, uint reg, const uint8_t *buff, >> + int len) >> +{ >> + if (dm_i2c_reg_write(dev, reg, *buff)) { > > I think this should be dm_i2c_write(). You are only writing a single byte. Now the v2 of this series had comments suggesting the opposite: https://www.mail-archive.com/u-boot@lists.denx.de/msg225123.html > >> + error("write error to device: %p register: %#x!", dev, reg); >> + return -EIO; >> + } >> + >> + return 0; >> +} >> + >> +static int palmas_read(struct udevice *dev, uint reg, uint8_t *buff, int len) >> +{ >> + int ret; >> + >> + ret = dm_i2c_reg_read(dev, reg); > > dm_i2c_read() > >> + if (ret < 0) { >> + error("read error %d from device: %p register: %#x!", ret, dev, >> + reg); >> + return -EIO; >> + } >> + >> + return ret; >> +} > > [...] > > Regards, > Simon >
On Thursday 29 September 2016 11:32 AM, Keerthy wrote: > > > On Wednesday 28 September 2016 11:21 PM, Simon Glass wrote: >> Hi Keerthy, >> >> On 27 September 2016 at 22:27, Keerthy <j-keerthy@ti.com> wrote: >>> Add support to bind the regulators/child nodes with the pmic. >>> Also adds the pmic i2c based read/write funtions to access pmic >>> registers. >>> >>> Signed-off-by: Keerthy <j-keerthy@ti.com> >>> Reviewed-by: Simon Glass <sjg@chromium.org> >>> Reviewed-by: Tom Rini <trini@konsulko.com> >>> --- >>> >>> Changes in v5: >>> >>> * Added pmic read/write functions. >>> >>> drivers/power/pmic/Kconfig | 7 +++ >>> drivers/power/pmic/Makefile | 1 + >>> drivers/power/pmic/palmas.c | 108 >>> ++++++++++++++++++++++++++++++++++++++++++++ >>> include/power/palmas.h | 25 ++++++++++ >>> 4 files changed, 141 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..1d2bd67 >>> --- /dev/null >>> +++ b/drivers/power/pmic/palmas.c >>> @@ -0,0 +1,108 @@ >>> +/* >>> + * (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_write(struct udevice *dev, uint reg, const uint8_t >>> *buff, >>> + int len) >>> +{ >>> + if (dm_i2c_reg_write(dev, reg, *buff)) { >> >> I think this should be dm_i2c_write(). You are only writing a single >> byte. > > Now the v2 of this series had comments suggesting the opposite: > > https://www.mail-archive.com/u-boot@lists.denx.de/msg225123.html And i thought dm_i2c_reg_write/read was specifically introduced for writing and reading one byte value? int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) { uint8_t val = value; return dm_i2c_write(dev, offset, &val, 1); } Regards, Keerthy > >> >>> + error("write error to device: %p register: %#x!", >>> dev, reg); >>> + return -EIO; >>> + } >>> + >>> + return 0; >>> +} >>> + >>> +static int palmas_read(struct udevice *dev, uint reg, uint8_t *buff, >>> int len) >>> +{ >>> + int ret; >>> + >>> + ret = dm_i2c_reg_read(dev, reg); >> >> dm_i2c_read() >> >>> + if (ret < 0) { >>> + error("read error %d from device: %p register: %#x!", >>> ret, dev, >>> + reg); >>> + return -EIO; >>> + } >>> + >>> + return ret; >>> +} >> >> [...] >> >> Regards, >> Simon >>
Hi Keethy, On 29 September 2016 at 00:11, Keerthy <a0393675@ti.com> wrote: > > > On Thursday 29 September 2016 11:32 AM, Keerthy wrote: >> >> >> >> On Wednesday 28 September 2016 11:21 PM, Simon Glass wrote: >>> >>> Hi Keerthy, >>> >>> On 27 September 2016 at 22:27, Keerthy <j-keerthy@ti.com> wrote: >>>> >>>> Add support to bind the regulators/child nodes with the pmic. >>>> Also adds the pmic i2c based read/write funtions to access pmic >>>> registers. >>>> >>>> Signed-off-by: Keerthy <j-keerthy@ti.com> >>>> Reviewed-by: Simon Glass <sjg@chromium.org> >>>> Reviewed-by: Tom Rini <trini@konsulko.com> >>>> --- >>>> >>>> Changes in v5: >>>> >>>> * Added pmic read/write functions. >>>> >>>> drivers/power/pmic/Kconfig | 7 +++ >>>> drivers/power/pmic/Makefile | 1 + >>>> drivers/power/pmic/palmas.c | 108 >>>> ++++++++++++++++++++++++++++++++++++++++++++ >>>> include/power/palmas.h | 25 ++++++++++ >>>> 4 files changed, 141 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..1d2bd67 >>>> --- /dev/null >>>> +++ b/drivers/power/pmic/palmas.c >>>> @@ -0,0 +1,108 @@ >>>> +/* >>>> + * (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_write(struct udevice *dev, uint reg, const uint8_t >>>> *buff, >>>> + int len) >>>> +{ >>>> + if (dm_i2c_reg_write(dev, reg, *buff)) { >>> >>> >>> I think this should be dm_i2c_write(). You are only writing a single >>> byte. >> >> >> Now the v2 of this series had comments suggesting the opposite: >> >> https://www.mail-archive.com/u-boot@lists.denx.de/msg225123.html > > > And i thought dm_i2c_reg_write/read was specifically introduced for writing > and reading one byte value? > > int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) > { > uint8_t val = value; > > return dm_i2c_write(dev, offset, &val, 1); > } Yes, but your palmas_write() function should be able to write multiple bytes. If you look at the function signature and the comments in pmic.h you should be able to see that. [...] Regards, Simon
On Friday 30 September 2016 05:12 AM, Simon Glass wrote: > Hi Keethy, > > On 29 September 2016 at 00:11, Keerthy <a0393675@ti.com> wrote: >> >> >> On Thursday 29 September 2016 11:32 AM, Keerthy wrote: >>> >>> >>> >>> On Wednesday 28 September 2016 11:21 PM, Simon Glass wrote: >>>> >>>> Hi Keerthy, >>>> >>>> On 27 September 2016 at 22:27, Keerthy <j-keerthy@ti.com> wrote: >>>>> >>>>> Add support to bind the regulators/child nodes with the pmic. >>>>> Also adds the pmic i2c based read/write funtions to access pmic >>>>> registers. >>>>> >>>>> Signed-off-by: Keerthy <j-keerthy@ti.com> >>>>> Reviewed-by: Simon Glass <sjg@chromium.org> >>>>> Reviewed-by: Tom Rini <trini@konsulko.com> >>>>> --- >>>>> >>>>> Changes in v5: >>>>> >>>>> * Added pmic read/write functions. >>>>> >>>>> drivers/power/pmic/Kconfig | 7 +++ >>>>> drivers/power/pmic/Makefile | 1 + >>>>> drivers/power/pmic/palmas.c | 108 >>>>> ++++++++++++++++++++++++++++++++++++++++++++ >>>>> include/power/palmas.h | 25 ++++++++++ >>>>> 4 files changed, 141 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..1d2bd67 >>>>> --- /dev/null >>>>> +++ b/drivers/power/pmic/palmas.c >>>>> @@ -0,0 +1,108 @@ >>>>> +/* >>>>> + * (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_write(struct udevice *dev, uint reg, const uint8_t >>>>> *buff, >>>>> + int len) >>>>> +{ >>>>> + if (dm_i2c_reg_write(dev, reg, *buff)) { >>>> >>>> >>>> I think this should be dm_i2c_write(). You are only writing a single >>>> byte. >>> >>> >>> Now the v2 of this series had comments suggesting the opposite: >>> >>> https://www.mail-archive.com/u-boot@lists.denx.de/msg225123.html >> >> >> And i thought dm_i2c_reg_write/read was specifically introduced for writing >> and reading one byte value? >> >> int dm_i2c_reg_write(struct udevice *dev, uint offset, uint value) >> { >> uint8_t val = value; >> >> return dm_i2c_write(dev, offset, &val, 1); >> } > > Yes, but your palmas_write() function should be able to write multiple > bytes. If you look at the function signature and the comments in > pmic.h you should be able to see that. Okay. > > [...] > > Regards, > Simon >
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..1d2bd67 --- /dev/null +++ b/drivers/power/pmic/palmas.c @@ -0,0 +1,108 @@ +/* + * (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_write(struct udevice *dev, uint reg, const uint8_t *buff, + int len) +{ + if (dm_i2c_reg_write(dev, reg, *buff)) { + error("write error to device: %p register: %#x!", dev, reg); + return -EIO; + } + + return 0; +} + +static int palmas_read(struct udevice *dev, uint reg, uint8_t *buff, int len) +{ + int ret; + + ret = dm_i2c_reg_read(dev, reg); + if (ret < 0) { + error("read error %d from device: %p register: %#x!", ret, dev, + reg); + return -EIO; + } + + return ret; +} + +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) { + debug("%s: %s pmic subnode not found!", __func__, dev->name); + return -ENXIO; + } + + regulators_node = fdt_subnode_offset(blob, pmic_node, "regulators"); + + if (regulators_node <= 0) { + debug("%s: %s reg subnode not found!", __func__, dev->name); + return -ENXIO; + } + + children = pmic_bind_children(dev, regulators_node, pmic_children_info); + if (!children) + debug("%s: %s - no child found\n", __func__, dev->name); + + /* Always return success for this device */ + return 0; +} + +static struct dm_pmic_ops palmas_ops = { + .read = palmas_read, + .write = palmas_write, +}; + +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, + .ops = &palmas_ops, +}; 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