hi, On 27 October 2015 at 17:37, Przemyslaw Marczak <p.marc...@samsung.com> wrote: > 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 <p.marc...@samsung.com> > --- > Changes V2: > - remove "DM" prefix from config name > - fix word mistake in binding description > Changes V3: > - correct return values for driver's read/write methods > --- > doc/device-tree-bindings/pmic/s2mps11.txt | 17 +++++ > drivers/power/pmic/Kconfig | 14 ++++ > drivers/power/pmic/Makefile | 1 + > drivers/power/pmic/s2mps11.c | 62 +++++++++++++++++ > include/power/s2mps11.h | 109 > ++++++++++++++++++++++++++++++ > 5 files changed, 203 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 0000000..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 0000000..9d83059 > --- /dev/null > +++ b/drivers/power/pmic/s2mps11.c > @@ -0,0 +1,62 @@ > +/* > + * Copyright (C) 2015 Samsung Electronics > + * Przemyslaw Marczak <p.marc...@samsung.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/s2mps11.h> > + > +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) > +{ > + int ret; > + > + ret = dm_i2c_write(dev, reg, buff, len); > + if (ret) > + error("write error to device: %p register: %#x!", dev, reg); > + > + return ret; > +} > + > +static int s2mps11_read(struct udevice *dev, uint reg, uint8_t *buff, int > len) > +{ > + int ret; > + > + ret = dm_i2c_read(dev, reg, buff, len); > + if (ret) > + error("read error from device: %p register: %#x!", dev, reg); > + > + return ret; > +} > + > +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 = &s2mps11_ops, > +}; > diff --git a/include/power/s2mps11.h b/include/power/s2mps11.h > new file mode 100644 > index 0000000..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, > + S2MPS11_REG_STATUS1, > + S2MPS11_REG_STATUS2, > + S2MPS11_REG_OFFSRC, > + S2MPS11_REG_PWRONSRC, > + S2MPS11_REG_RTC_CTRL, > + S2MPS11_REG_CTRL1, > + S2MPS11_REG_ETC_TEST, > + S2MPS11_REG_RSVD3, > + S2MPS11_REG_BU_CHG, > + S2MPS11_REG_RAMP, > + S2MPS11_REG_RAMP_BUCK, > + S2MPS11_REG_LDO1_8, > + S2MPS11_REG_LDO9_16, > + S2MPS11_REG_LDO17_24, > + S2MPS11_REG_LDO25_32, > + S2MPS11_REG_LDO33_38, > + S2MPS11_REG_LDO1_8_OVC, > + S2MPS11_REG_LDO9_16_OVC, > + S2MPS11_REG_LDO17_24_OVC, > + S2MPS11_REG_LDO25_32_OVC, > + S2MPS11_REG_LDO33_38_OVC, > + S2MPS11_REG_RESERVED1, > + S2MPS11_REG_RESERVED2, > + S2MPS11_REG_RESERVED3, > + S2MPS11_REG_RESERVED4, > + S2MPS11_REG_RESERVED5, > + S2MPS11_REG_RESERVED6, > + S2MPS11_REG_RESERVED7, > + S2MPS11_REG_RESERVED8, > + S2MPS11_REG_WDRSTEN_CTRL, > + S2MPS11_REG_B1CTRL1, > + S2MPS11_REG_B1CTRL2, > + S2MPS11_REG_B2CTRL1, > + S2MPS11_REG_B2CTRL2, > + S2MPS11_REG_B3CTRL1, > + S2MPS11_REG_B3CTRL2, > + S2MPS11_REG_B4CTRL1, > + S2MPS11_REG_B4CTRL2, > + S2MPS11_REG_B5CTRL1, > + S2MPS11_REG_BUCK5_SW, > + S2MPS11_REG_B5CTRL2, > + S2MPS11_REG_B5CTRL3, > + S2MPS11_REG_B5CTRL4, > + S2MPS11_REG_B5CTRL5, > + S2MPS11_REG_B6CTRL1, > + S2MPS11_REG_B6CTRL2, > + S2MPS11_REG_B7CTRL1, > + S2MPS11_REG_B7CTRL2, > + S2MPS11_REG_B8CTRL1, > + S2MPS11_REG_B8CTRL2, > + S2MPS11_REG_B9CTRL1, > + S2MPS11_REG_B9CTRL2, > + S2MPS11_REG_B10CTRL1, > + S2MPS11_REG_B10CTRL2, > + S2MPS11_REG_L1CTRL, > + S2MPS11_REG_L2CTRL, > + S2MPS11_REG_L3CTRL, > + S2MPS11_REG_L4CTRL, > + S2MPS11_REG_L5CTRL, > + S2MPS11_REG_L6CTRL, > + S2MPS11_REG_L7CTRL, > + S2MPS11_REG_L8CTRL, > + S2MPS11_REG_L9CTRL, > + S2MPS11_REG_L10CTRL, > + S2MPS11_REG_L11CTRL, > + S2MPS11_REG_L12CTRL, > + S2MPS11_REG_L13CTRL, > + S2MPS11_REG_L14CTRL, > + S2MPS11_REG_L15CTRL, > + S2MPS11_REG_L16CTRL, > + S2MPS11_REG_L17CTRL, > + S2MPS11_REG_L18CTRL, > + S2MPS11_REG_L19CTRL, > + S2MPS11_REG_L20CTRL, > + S2MPS11_REG_L21CTRL, > + S2MPS11_REG_L22CTRL, > + S2MPS11_REG_L23CTRL, > + S2MPS11_REG_L24CTRL, > + S2MPS11_REG_L25CTRL, > + S2MPS11_REG_L26CTRL, > + S2MPS11_REG_L27CTRL, > + S2MPS11_REG_L28CTRL, > + S2MPS11_REG_L29CTRL, > + S2MPS11_REG_L30CTRL, > + S2MPS11_REG_L31CTRL, > + S2MPS11_REG_L32CTRL, > + S2MPS11_REG_L33CTRL, > + S2MPS11_REG_L34CTRL, > + S2MPS11_REG_L35CTRL, > + S2MPS11_REG_L36CTRL, > + S2MPS11_REG_L37CTRL, > + S2MPS11_REG_L38CTRL, > + S2MPS11_REG_COUNT, > +}; > + > +#define S2MPS11_LDO26_ENABLE 0xec > + > +#endif > -- > 1.9.1 >
Tested-by: Anand Moon <linux.am...@gmail.com> -Anand Moon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot