Re: [U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver
Hi Simon, On 10/03/2015 04:28 PM, Simon Glass wrote: Hi Przemyslaw, On 21 September 2015 at 13:26, Przemyslaw Marczakwrote: This driver allows I/O operations on the Samsung S2MPS11 PMIC, which provides lots of LDO/BUCK outputs. To enable it, update defconfig with: - CONFIG_PMIC_S2MPS11 and additional, if were not defined: - CONFIG_CMD_PMIC - CONFIG_ERRNO_STR The binding info: doc/device-tree-bindings/pmic/s2mps11.txt Signed-off-by: Przemyslaw Marczak --- Changes V2: - remove "DM" prefix from config name - fix word mistake in binding description --- doc/device-tree-bindings/pmic/s2mps11.txt | 17 + drivers/power/pmic/Kconfig| 14 drivers/power/pmic/Makefile | 1 + drivers/power/pmic/s2mps11.c | 60 include/power/s2mps11.h | 109 ++ 5 files changed, 201 insertions(+) create mode 100644 doc/device-tree-bindings/pmic/s2mps11.txt create mode 100644 drivers/power/pmic/s2mps11.c create mode 100644 include/power/s2mps11.h Reviewed-by: Simon Glass But please see nit below. diff --git a/doc/device-tree-bindings/pmic/s2mps11.txt b/doc/device-tree-bindings/pmic/s2mps11.txt new file mode 100644 index 000..422f14f --- /dev/null +++ b/doc/device-tree-bindings/pmic/s2mps11.txt @@ -0,0 +1,17 @@ +SAMSUNG, S2MPS11 PMIC + +This file describes the binding info for the PMIC driver: +- drivers/power/pmic/s2mps11.c + +Required properties: +- compatible: "samsung,s2mps11-pmic" +- reg = 0x66 + +With those two properties, the pmic device can be used for read/write only. + +Example: + +s2mps11@66 { + compatible = "samsung,s2mps11-pmic"; + reg = <0x66>; +}; diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 547fd1a..fb29843 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -33,6 +33,20 @@ config DM_PMIC_MAX77686 This config enables implementation of driver-model pmic uclass features for PMIC MAX77686. The driver implements read/write operations. +config PMIC_S2MPS11 + bool "Enable Driver Model for PMIC Samsung S2MPS11" + depends on DM_PMIC + ---help--- + The Samsung S2MPS11 PMIC provides: +- 38 adjustable LDO regulators +- 9 High-Efficiency Buck Converters +- 1 BuckBoost Converter +- RTC with two alarms +- Backup battery charger +- I2C Configuration Interface + This driver provides access to I/O interface only. + Binding info: doc/device-tree-bindings/pmic/s2mps11.txt + config DM_PMIC_SANDBOX bool "Enable Driver Model for emulated Sandbox PMIC " depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index 00fde71..91e78f8 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_DM_PMIC) += pmic-uclass.o obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o +obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o obj-$(CONFIG_PMIC_ACT8846) += act8846.o obj-$(CONFIG_PMIC_TPS65090) += tps65090.o diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c new file mode 100644 index 000..7e28402 --- /dev/null +++ b/drivers/power/pmic/s2mps11.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2015 Samsung Electronics + * Przemyslaw Marczak + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static int s2mps11_reg_count(struct udevice *dev) +{ + return S2MPS11_REG_COUNT; +} + +static int s2mps11_write(struct udevice *dev, uint reg, const uint8_t *buff, +int len) +{ + if (dm_i2c_write(dev, reg, buff, len)) { + error("write error to device: %p register: %#x!", dev, reg); + return -EIO; Should return the value of dm_i2c_write(). Also below. Right, will fix. + } + + return 0; +} + +static int s2mps11_read(struct udevice *dev, uint reg, uint8_t *buff, int len) +{ + if (dm_i2c_read(dev, reg, buff, len)) { + error("read error from device: %p register: %#x!", dev, reg); + return -EIO; + } + + return 0; +} + +static struct dm_pmic_ops s2mps11_ops = { + .reg_count = s2mps11_reg_count, + .read = s2mps11_read, + .write = s2mps11_write, +}; + +static const struct udevice_id s2mps11_ids[] = { + { .compatible = "samsung,s2mps11-pmic" }, + { } +}; + +U_BOOT_DRIVER(pmic_s2mps11) = { + .name = "s2mps11_pmic", + .id = UCLASS_PMIC, + .of_match = s2mps11_ids, + .ops = _ops, +}; diff --git a/include/power/s2mps11.h b/include/power/s2mps11.h new file mode 100644 index
Re: [U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver
Hi Przemyslaw, On 21 September 2015 at 13:26, Przemyslaw Marczakwrote: > This driver allows I/O operations on the Samsung S2MPS11 PMIC, > which provides lots of LDO/BUCK outputs. > > To enable it, update defconfig with: > - CONFIG_PMIC_S2MPS11 > and additional, if were not defined: > - CONFIG_CMD_PMIC > - CONFIG_ERRNO_STR > > The binding info: doc/device-tree-bindings/pmic/s2mps11.txt > > Signed-off-by: Przemyslaw Marczak > --- > Changes V2: > - remove "DM" prefix from config name > - fix word mistake in binding description > --- > doc/device-tree-bindings/pmic/s2mps11.txt | 17 + > drivers/power/pmic/Kconfig| 14 > drivers/power/pmic/Makefile | 1 + > drivers/power/pmic/s2mps11.c | 60 > include/power/s2mps11.h | 109 > ++ > 5 files changed, 201 insertions(+) > create mode 100644 doc/device-tree-bindings/pmic/s2mps11.txt > create mode 100644 drivers/power/pmic/s2mps11.c > create mode 100644 include/power/s2mps11.h Reviewed-by: Simon Glass But please see nit below. > > diff --git a/doc/device-tree-bindings/pmic/s2mps11.txt > b/doc/device-tree-bindings/pmic/s2mps11.txt > new file mode 100644 > index 000..422f14f > --- /dev/null > +++ b/doc/device-tree-bindings/pmic/s2mps11.txt > @@ -0,0 +1,17 @@ > +SAMSUNG, S2MPS11 PMIC > + > +This file describes the binding info for the PMIC driver: > +- drivers/power/pmic/s2mps11.c > + > +Required properties: > +- compatible: "samsung,s2mps11-pmic" > +- reg = 0x66 > + > +With those two properties, the pmic device can be used for read/write only. > + > +Example: > + > +s2mps11@66 { > + compatible = "samsung,s2mps11-pmic"; > + reg = <0x66>; > +}; > diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig > index 547fd1a..fb29843 100644 > --- a/drivers/power/pmic/Kconfig > +++ b/drivers/power/pmic/Kconfig > @@ -33,6 +33,20 @@ config DM_PMIC_MAX77686 > This config enables implementation of driver-model pmic uclass > features > for PMIC MAX77686. The driver implements read/write operations. > > +config PMIC_S2MPS11 > + bool "Enable Driver Model for PMIC Samsung S2MPS11" > + depends on DM_PMIC > + ---help--- > + The Samsung S2MPS11 PMIC provides: > +- 38 adjustable LDO regulators > +- 9 High-Efficiency Buck Converters > +- 1 BuckBoost Converter > +- RTC with two alarms > +- Backup battery charger > +- I2C Configuration Interface > + This driver provides access to I/O interface only. > + Binding info: doc/device-tree-bindings/pmic/s2mps11.txt > + > config DM_PMIC_SANDBOX > bool "Enable Driver Model for emulated Sandbox PMIC " > depends on DM_PMIC > diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile > index 00fde71..91e78f8 100644 > --- a/drivers/power/pmic/Makefile > +++ b/drivers/power/pmic/Makefile > @@ -8,6 +8,7 @@ > obj-$(CONFIG_DM_PMIC) += pmic-uclass.o > obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o > obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o > +obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o > obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o > obj-$(CONFIG_PMIC_ACT8846) += act8846.o > obj-$(CONFIG_PMIC_TPS65090) += tps65090.o > diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c > new file mode 100644 > index 000..7e28402 > --- /dev/null > +++ b/drivers/power/pmic/s2mps11.c > @@ -0,0 +1,60 @@ > +/* > + * Copyright (C) 2015 Samsung Electronics > + * Przemyslaw Marczak > + * > + * SPDX-License-Identifier:GPL-2.0+ > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +DECLARE_GLOBAL_DATA_PTR; > + > +static int s2mps11_reg_count(struct udevice *dev) > +{ > + return S2MPS11_REG_COUNT; > +} > + > +static int s2mps11_write(struct udevice *dev, uint reg, const uint8_t *buff, > +int len) > +{ > + if (dm_i2c_write(dev, reg, buff, len)) { > + error("write error to device: %p register: %#x!", dev, reg); > + return -EIO; Should return the value of dm_i2c_write(). Also below. > + } > + > + return 0; > +} > + > +static int s2mps11_read(struct udevice *dev, uint reg, uint8_t *buff, int > len) > +{ > + if (dm_i2c_read(dev, reg, buff, len)) { > + error("read error from device: %p register: %#x!", dev, reg); > + return -EIO; > + } > + > + return 0; > +} > + > +static struct dm_pmic_ops s2mps11_ops = { > + .reg_count = s2mps11_reg_count, > + .read = s2mps11_read, > + .write = s2mps11_write, > +}; > + > +static const struct udevice_id s2mps11_ids[] = { > + { .compatible = "samsung,s2mps11-pmic" }, > + { } > +}; > + > +U_BOOT_DRIVER(pmic_s2mps11) = { > +
[U-Boot] [PATCH V2 05/11] dm: pmic: add s2mps11 PMIC I/O driver
This driver allows I/O operations on the Samsung S2MPS11 PMIC, which provides lots of LDO/BUCK outputs. To enable it, update defconfig with: - CONFIG_PMIC_S2MPS11 and additional, if were not defined: - CONFIG_CMD_PMIC - CONFIG_ERRNO_STR The binding info: doc/device-tree-bindings/pmic/s2mps11.txt Signed-off-by: Przemyslaw Marczak--- Changes V2: - remove "DM" prefix from config name - fix word mistake in binding description --- doc/device-tree-bindings/pmic/s2mps11.txt | 17 + drivers/power/pmic/Kconfig| 14 drivers/power/pmic/Makefile | 1 + drivers/power/pmic/s2mps11.c | 60 include/power/s2mps11.h | 109 ++ 5 files changed, 201 insertions(+) create mode 100644 doc/device-tree-bindings/pmic/s2mps11.txt create mode 100644 drivers/power/pmic/s2mps11.c create mode 100644 include/power/s2mps11.h diff --git a/doc/device-tree-bindings/pmic/s2mps11.txt b/doc/device-tree-bindings/pmic/s2mps11.txt new file mode 100644 index 000..422f14f --- /dev/null +++ b/doc/device-tree-bindings/pmic/s2mps11.txt @@ -0,0 +1,17 @@ +SAMSUNG, S2MPS11 PMIC + +This file describes the binding info for the PMIC driver: +- drivers/power/pmic/s2mps11.c + +Required properties: +- compatible: "samsung,s2mps11-pmic" +- reg = 0x66 + +With those two properties, the pmic device can be used for read/write only. + +Example: + +s2mps11@66 { + compatible = "samsung,s2mps11-pmic"; + reg = <0x66>; +}; diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 547fd1a..fb29843 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -33,6 +33,20 @@ config DM_PMIC_MAX77686 This config enables implementation of driver-model pmic uclass features for PMIC MAX77686. The driver implements read/write operations. +config PMIC_S2MPS11 + bool "Enable Driver Model for PMIC Samsung S2MPS11" + depends on DM_PMIC + ---help--- + The Samsung S2MPS11 PMIC provides: +- 38 adjustable LDO regulators +- 9 High-Efficiency Buck Converters +- 1 BuckBoost Converter +- RTC with two alarms +- Backup battery charger +- I2C Configuration Interface + This driver provides access to I/O interface only. + Binding info: doc/device-tree-bindings/pmic/s2mps11.txt + config DM_PMIC_SANDBOX bool "Enable Driver Model for emulated Sandbox PMIC " depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index 00fde71..91e78f8 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_DM_PMIC) += pmic-uclass.o obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o +obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o obj-$(CONFIG_PMIC_ACT8846) += act8846.o obj-$(CONFIG_PMIC_TPS65090) += tps65090.o diff --git a/drivers/power/pmic/s2mps11.c b/drivers/power/pmic/s2mps11.c new file mode 100644 index 000..7e28402 --- /dev/null +++ b/drivers/power/pmic/s2mps11.c @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2015 Samsung Electronics + * Przemyslaw Marczak + * + * SPDX-License-Identifier:GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static int s2mps11_reg_count(struct udevice *dev) +{ + return S2MPS11_REG_COUNT; +} + +static int s2mps11_write(struct udevice *dev, uint reg, const uint8_t *buff, +int len) +{ + if (dm_i2c_write(dev, reg, buff, len)) { + error("write error to device: %p register: %#x!", dev, reg); + return -EIO; + } + + return 0; +} + +static int s2mps11_read(struct udevice *dev, uint reg, uint8_t *buff, int len) +{ + if (dm_i2c_read(dev, reg, buff, len)) { + error("read error from device: %p register: %#x!", dev, reg); + return -EIO; + } + + return 0; +} + +static struct dm_pmic_ops s2mps11_ops = { + .reg_count = s2mps11_reg_count, + .read = s2mps11_read, + .write = s2mps11_write, +}; + +static const struct udevice_id s2mps11_ids[] = { + { .compatible = "samsung,s2mps11-pmic" }, + { } +}; + +U_BOOT_DRIVER(pmic_s2mps11) = { + .name = "s2mps11_pmic", + .id = UCLASS_PMIC, + .of_match = s2mps11_ids, + .ops = _ops, +}; diff --git a/include/power/s2mps11.h b/include/power/s2mps11.h new file mode 100644 index 000..5da4719 --- /dev/null +++ b/include/power/s2mps11.h @@ -0,0 +1,109 @@ +#ifndef __S2MPS11__H__ +#define __S2MPS11__H__ + +enum s2mps11_reg { + S2MPS11_REG_ID = 0, + S2MPS11_REG_INT1, + S2MPS11_REG_INT2, + S2MPS11_REG_INT3, + S2MPS11_REG_INT1M, + S2MPS11_REG_INT2M, + S2MPS11_REG_INT3M,