[U-Boot] [PATCH 07/10] power: pmic: add Ricoh RN5T567 PMIC support

Simon Glass sjg at chromium.org
Mon Aug 1 03:01:25 CEST 2016


On 26 July 2016 at 00:22, Stefan Agner <stefan at agner.ch> wrote:
> From: Stefan Agner <stefan.agner at toradex.com>
>
> Add device model enabled PMIC driver for Ricoh RN5T567 PMIC used
> on Colibri iMX7.
>
> Signed-off-by: Stefan Agner <stefan.agner at toradex.com>
> ---
>
>  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 <sjg at chromium.org>

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 <stefan.agner at 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,
> +};
> 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 <stefan.agner at 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,
> +};
> +
> +int power_rn5t567_init(unsigned char bus);

That line should be dropped. Init should happen via driver model.

> +
> +#endif
> --
> 2.9.0
>


More information about the U-Boot mailing list