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>master
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>; |
||||
}; |
@ -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