From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Sun, 31 Jul 2016 19:01:25 -0600 Subject: [U-Boot] [PATCH 07/10] power: pmic: add Ricoh RN5T567 PMIC support In-Reply-To: <20160726062233.7656-8-stefan@agner.ch> References: <20160726062233.7656-1-stefan@agner.ch> <20160726062233.7656-8-stefan@agner.ch> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 26 July 2016 at 00:22, Stefan Agner wrote: > From: Stefan Agner > > Add device model enabled PMIC driver for Ricoh RN5T567 PMIC used > on Colibri iMX7. > > Signed-off-by: Stefan Agner > --- > > doc/device-tree-bindings/pmic/rn5t567.txt | 17 +++++ > drivers/power/pmic/Kconfig | 8 +++ > drivers/power/pmic/Makefile | 1 + > drivers/power/pmic/rn5t567.c | 64 +++++++++++++++++ > include/power/rn5t567_pmic.h | 115 ++++++++++++++++++++++++++++++ > 5 files changed, 205 insertions(+) > create mode 100644 doc/device-tree-bindings/pmic/rn5t567.txt > create mode 100644 drivers/power/pmic/rn5t567.c > create mode 100644 include/power/rn5t567_pmic.h > Reviewed-by: Simon Glass See below though. > diff --git a/doc/device-tree-bindings/pmic/rn5t567.txt b/doc/device-tree-bindings/pmic/rn5t567.txt > new file mode 100644 > index 0000000..e9e6885 > --- /dev/null > +++ b/doc/device-tree-bindings/pmic/rn5t567.txt > @@ -0,0 +1,17 @@ > +Ricoh RN5T567 PMIC > + > +This file describes the binding info for the PMIC driver. > + > +Required properties: > +- compatible: "ricoh,rn5t567" > +- reg: depending on strapping, e.g. 0x33 > + > +With those two properties, the PMIC device can be used to read/write > +registers. > + > +Example: > + > +rn5t567 at 33 { > + compatible = "ricoh,rn5t567"; > + reg = <0x33>; > +}; > diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig > index 69f8d51..13d293a 100644 > --- a/drivers/power/pmic/Kconfig > +++ b/drivers/power/pmic/Kconfig > @@ -127,6 +127,14 @@ config PMIC_S5M8767 > driver provides basic register access and sets up the attached > regulators if regulator support is enabled. > > +config PMIC_RN5T567 > + bool "Enable driver for Ricoh RN5T567 PMIC" > + depends on DM_PMIC > + ---help--- > + The RN5T567 is a PMIC with 4 step-down DC/DC converters, 5 LDO > + regulators Real-Time Clock and 4 GPIOs. This driver provides > + register access only. > + > config PMIC_TPS65090 > bool "Enable driver for Texas Instruments TPS65090 PMIC" > depends on DM_PMIC > diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile > index 52b4f71..37d9eb5 100644 > --- a/drivers/power/pmic/Makefile > +++ b/drivers/power/pmic/Makefile > @@ -13,6 +13,7 @@ obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o > obj-$(CONFIG_PMIC_ACT8846) += act8846.o > obj-$(CONFIG_PMIC_PM8916) += pm8916.o > obj-$(CONFIG_PMIC_RK808) += rk808.o > +obj-$(CONFIG_PMIC_RN5T567) += rn5t567.o > obj-$(CONFIG_PMIC_TPS65090) += tps65090.o > obj-$(CONFIG_PMIC_S5M8767) += s5m8767.o > > diff --git a/drivers/power/pmic/rn5t567.c b/drivers/power/pmic/rn5t567.c > new file mode 100644 > index 0000000..001e695 > --- /dev/null > +++ b/drivers/power/pmic/rn5t567.c > @@ -0,0 +1,64 @@ > +/* > + * Copyright (C) 2016 Toradex AG > + * Stefan Agner > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +static int rn5t567_reg_count(struct udevice *dev) > +{ > + return RN5T567_NUM_OF_REGS; > +} > + > +static int rn5t567_write(struct udevice *dev, uint reg, const uint8_t *buff, > + int len) > +{ > + int ret; > + > + ret = dm_i2c_write(dev, reg, buff, len); > + if (ret) { > + debug("write error to device: %p register: %#x!", dev, reg); > + return ret; > + } > + > + return 0; > +} > + > +static int rn5t567_read(struct udevice *dev, uint reg, uint8_t *buff, int len) > +{ > + int ret; > + > + ret = dm_i2c_read(dev, reg, buff, len); > + if (ret) { > + debug("read error from device: %p register: %#x!", dev, reg); > + return ret; > + } > + > + return 0; > +} > + > +static struct dm_pmic_ops rn5t567_ops = { > + .reg_count = rn5t567_reg_count, > + .read = rn5t567_read, > + .write = rn5t567_write, > +}; > + > +static const struct udevice_id rn5t567_ids[] = { > + { .compatible = "ricoh,rn5t567" }, > + { } > +}; > + > +U_BOOT_DRIVER(pmic_rn5t567) = { > + .name = "rn5t567 pmic", > + .id = UCLASS_PMIC, > + .of_match = rn5t567_ids, > + .ops = &rn5t567_ops, > +}; > diff --git a/include/power/rn5t567_pmic.h b/include/power/rn5t567_pmic.h > new file mode 100644 > index 0000000..aa3b083 > --- /dev/null > +++ b/include/power/rn5t567_pmic.h > @@ -0,0 +1,115 @@ > +/* > + * Copyright (C) 2016 Toradex AG > + * Stefan Agner > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > +#ifndef __RN5T567_PMIC_H_ > +#define __RN5T567_PMIC_H_ > + > +/* RN5T567 registers */ > +enum { > + RN5T567_LSIVER = 0x00, > + RN5T567_OTPVER = 0x01, > + RN5T567_IODAC = 0x02, > + RN5T567_VINDAC = 0x03, > + RN5T567_OUT32KEN = 0x05, > + > + RN5T567_CPUCNT = 0x06, > + > + RN5T567_PSWR = 0x07, > + RN5T567_PONHIS = 0x09, > + RN5T567_POFFHIS = 0x0A, > + RN5T567_WATCHDOG = 0x0B, > + RN5T567_WATCHDOGCNT = 0x0C, > + RN5T567_PWRFUNC = 0x0D, > + RN5T567_SLPCNT = 0x0E, > + RN5T567_REPCNT = 0x0F, > + RN5T567_PWRONTIMSET = 0x10, > + RN5T567_NOETIMSETCNT = 0x11, > + RN5T567_PWRIREN = 0x12, > + RN5T567_PWRIRQ = 0x13, > + RN5T567_PWRMON = 0x14, > + RN5T567_PWRIRSEL = 0x15, > + > + RN5T567_DC1_SLOT = 0x16, > + RN5T567_DC2_SLOT = 0x17, > + RN5T567_DC3_SLOT = 0x18, > + RN5T567_DC4_SLOT = 0x19, > + > + RN5T567_LDO1_SLOT = 0x1B, > + RN5T567_LDO2_SLOT = 0x1C, > + RN5T567_LDO3_SLOT = 0x1D, > + RN5T567_LDO4_SLOT = 0x1E, > + RN5T567_LDO5_SLOT = 0x1F, > + > + RN5T567_PSO0_SLOT = 0x25, > + RN5T567_PSO1_SLOT = 0x26, > + RN5T567_PSO2_SLOT = 0x27, > + RN5T567_PSO3_SLOT = 0x28, > + > + RN5T567_LDORTC1_SLOT = 0x2A, > + > + RN5T567_DC1CTL = 0x2C, > + RN5T567_DC1CTL2 = 0x2D, > + RN5T567_DC2CTL = 0x2E, > + RN5T567_DC2CTL2 = 0x2F, > + RN5T567_DC3CTL = 0x30, > + RN5T567_DC3CTL2 = 0x31, > + RN5T567_DC4CTL = 0x32, > + RN5T567_DC4CTL2 = 0x33, > + > + RN5T567_DC1DAC = 0x36, > + RN5T567_DC2DAC = 0x37, > + RN5T567_DC3DAC = 0x38, > + RN5T567_DC4DAC = 0x39, > + > + RN5T567_DC1DAC_SLP = 0x3B, > + RN5T567_DC2DAC_SLP = 0x3C, > + RN5T567_DC3DAC_SLP = 0x3D, > + RN5T567_DC4DAC_SLP = 0x3E, > + > + RN5T567_DCIREN = 0x40, > + RN5T567_DCIRQ = 0x41, > + RN5T567_DCIRMON = 0x42, > + > + RN5T567_LDOEN1 = 0x44, > + RN5T567_LDOEN2 = 0x45, > + RN5T567_LDODIS1 = 0x46, > + > + RN5T567_LDO1DAC = 0x4C, > + RN5T567_LDO2DAC = 0x4D, > + RN5T567_LDO3DAC = 0x4E, > + RN5T567_LDO4DAC = 0x4F, > + RN5T567_LDO5DAC = 0x50, > + > + RN5T567_LDORTC1DAC = 0x56, > + RN5T567_LDORTC2DAC = 0x57, > + > + RN5T567_LDO1DAC_SLP = 0x58, > + RN5T567_LDO2DAC_SLP = 0x59, > + RN5T567_LDO3DAC_SLP = 0x5A, > + RN5T567_LDO4DAC_SLP = 0x5B, > + RN5T567_LDO5DAC_SLP = 0x5C, > + > + RN5T567_IOSEL = 0x90, > + RN5T567_IOOUT = 0x91, > + RN5T567_GPEDGE1 = 0x92, > + RN5T567_EN_GPIR = 0x94, > + RN5T567_IR_GPR = 0x95, > + RN5T567_IR_GPF = 0x96, > + RN5T567_MON_IOIN = 0x97, > + RN5T567_GPLED_FUNC = 0x98, > + RN5T567_INTPOL = 0x9C, > + RN5T567_INTEN = 0x9D, > + RN5T567_INTMON = 0x9E, > + > + RN5T567_PREVINDAC = 0xB0, > + RN5T567_OVTEMP = 0xBC, > + > + RN5T567_NUM_OF_REGS = 0xBF, > +}; > + > +int power_rn5t567_init(unsigned char bus); That line should be dropped. Init should happen via driver model. > + > +#endif > -- > 2.9.0 >