power: pmic: add Ricoh RN5T567 PMIC support
Add device model enabled PMIC driver for Ricoh RN5T567 PMIC used on Colibri iMX7. Signed-off-by: Stefan Agner <stefan.agner@toradex.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									aa723b8dbf
								
							
						
					
					
						commit
						c571d6828d
					
				|  | @ -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@33 { | ||||||
|  | 	compatible = "ricoh,rn5t567"; | ||||||
|  | 	reg = <0x33>; | ||||||
|  | }; | ||||||
|  | @ -127,6 +127,14 @@ config PMIC_S5M8767 | ||||||
| 	driver provides basic register access and sets up the attached | 	driver provides basic register access and sets up the attached | ||||||
| 	regulators if regulator support is enabled. | 	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 | config PMIC_TPS65090 | ||||||
| 	bool "Enable driver for Texas Instruments TPS65090 PMIC" | 	bool "Enable driver for Texas Instruments TPS65090 PMIC" | ||||||
| 	depends on DM_PMIC | 	depends on DM_PMIC | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o | ||||||
| obj-$(CONFIG_PMIC_ACT8846) += act8846.o | obj-$(CONFIG_PMIC_ACT8846) += act8846.o | ||||||
| obj-$(CONFIG_PMIC_PM8916) += pm8916.o | obj-$(CONFIG_PMIC_PM8916) += pm8916.o | ||||||
| obj-$(CONFIG_PMIC_RK808) += rk808.o | obj-$(CONFIG_PMIC_RK808) += rk808.o | ||||||
|  | obj-$(CONFIG_PMIC_RN5T567) += rn5t567.o | ||||||
| obj-$(CONFIG_PMIC_TPS65090) += tps65090.o | obj-$(CONFIG_PMIC_TPS65090) += tps65090.o | ||||||
| obj-$(CONFIG_PMIC_S5M8767) += s5m8767.o | obj-$(CONFIG_PMIC_S5M8767) += s5m8767.o | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,64 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (C) 2016 Toradex AG | ||||||
|  |  * Stefan Agner <stefan.agner@toradex.com> | ||||||
|  |  * | ||||||
|  |  * SPDX-License-Identifier:      GPL-2.0+ | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <common.h> | ||||||
|  | #include <dm.h> | ||||||
|  | #include <errno.h> | ||||||
|  | #include <fdtdec.h> | ||||||
|  | #include <libfdt.h> | ||||||
|  | #include <power/rn5t567_pmic.h> | ||||||
|  | #include <power/pmic.h> | ||||||
|  | 
 | ||||||
|  | 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, | ||||||
|  | }; | ||||||
|  | @ -0,0 +1,113 @@ | ||||||
|  | /*
 | ||||||
|  |  * Copyright (C) 2016 Toradex AG | ||||||
|  |  * Stefan Agner <stefan.agner@toradex.com> | ||||||
|  |  * | ||||||
|  |  * 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, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
		Loading…
	
		Reference in New Issue