[U-Boot] [PATCH 1/2] power: pmic: add the max8997 controller for DM

Add the max8997 controller for Driver model. Exynos4210 is using max8997 pmic controller. (pmic_max8997.c should be deprecated.)
Signed-off-by: Jaehoon Chung jh80.chung@samsung.com --- drivers/power/pmic/Kconfig | 7 +++++ drivers/power/pmic/Makefile | 1 + drivers/power/pmic/max8997.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 drivers/power/pmic/max8997.c
diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 5e244c8..19494fa 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -54,6 +54,13 @@ config DM_PMIC_MAX77686 This config enables implementation of driver-model pmic uclass features for PMIC MAX77686. The driver implements read/write operations.
+config DM_PMIC_MAX8997 + bool "Enable Driver Model for PMIC MAX8997" + depends on DM_PMIC + ---help--- + This config enables implementation of driver-model pmic uclass features + for PMIC MAX8997. The driver implements read/write operations. + config DM_PMIC_MAX8998 bool "Enable Driver Model for PMIC MAX8998" depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index b4ac7d2..43f5557 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -7,6 +7,7 @@
obj-$(CONFIG_DM_PMIC) += pmic-uclass.o obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o +obj-$(CONFIG_DM_PMIC_MAX8997) += max8997.o obj-$(CONFIG_DM_PMIC_MAX8998) += max8998.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o diff --git a/drivers/power/pmic/max8997.c b/drivers/power/pmic/max8997.c new file mode 100644 index 0000000..f749d7d --- /dev/null +++ b/drivers/power/pmic/max8997.c @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2016 Samsung Electronics + * Jaehoon Chung jh80.chung@samsung.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <dm.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/max8997_pmic.h> +#include <errno.h> + +DECLARE_GLOBAL_DATA_PTR; + +static int max8997_reg_count(struct udevice *dev) +{ + return PMIC_NUM_OF_REGS; +} + +static int max8997_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 max8997_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 max8997_ops = { + .reg_count = max8997_reg_count, + .read = max8997_read, + .write = max8997_write, +}; + +static const struct udevice_id max8997_ids[] = { + { .compatible = "maxim,max8997" }, + { }, +}; + +U_BOOT_DRIVER(pmic_max8997) = { + .name = "max8997_pmic", + .id = UCLASS_PMIC, + .of_match = max8997_ids, + .ops = &max8997_ops, +};

To use driver-model adds the pmic node for max8997. This is used as kernel device-tree in Linux.
Signed-off-by: Jaehoon Chung jh80.chung@samsung.com --- arch/arm/dts/exynos4210-trats.dts | 150 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 142 insertions(+), 8 deletions(-)
diff --git a/arch/arm/dts/exynos4210-trats.dts b/arch/arm/dts/exynos4210-trats.dts index 2ed38f3..69c0605 100644 --- a/arch/arm/dts/exynos4210-trats.dts +++ b/arch/arm/dts/exynos4210-trats.dts @@ -19,14 +19,6 @@ };
aliases { - i2c0 = "/i2c@13860000"; - i2c1 = "/i2c@13870000"; - i2c2 = "/i2c@13880000"; - i2c3 = "/i2c@13890000"; - i2c4 = "/i2c@138a0000"; - i2c5 = "/i2c@138b0000"; - i2c6 = "/i2c@138c0000"; - i2c7 = "/i2c@138d0000"; serial0 = "/serial@13800000"; console = "/serial@13820000"; mmc0 = "/sdhci@12510000"; @@ -122,3 +114,145 @@ status = "disabled"; }; }; + +&i2c_5 { + clock-frequency = <100000>; + status = "okay"; + + max8997-pmic@66 { + compatible = "maxim,max8997"; + reg = <0x66 0 0>; + voltage-regulators { + valive_reg: LDO2 { + regulator-name = "VALIVE_1.1V_C210"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-always-on; + }; + + vusb_reg: LDO3 { + regulator-name = "VUSB_1.1V_C210"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + }; + + vmipi_reg: LDO4 { + regulator-name = "VMIPI_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + vpda_reg: LDO6 { + regulator-name = "VCC_1.8V_PDA"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + + vcam_reg: LDO7 { + regulator-name = "CAM_ISP_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + vusbdac_reg: LDO8 { + regulator-name = "VUSB+VDAC_3.3V_C210"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + vccpda_reg: LDO9 { + regulator-name = "VCC_2.8V_PDA"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-always-on; + }; + + vpll_reg: LDO10 { + regulator-name = "VPLL_1.1V_C210"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-always-on; + }; + + vtcam_reg: LDO12 { + regulator-name = "VT_CAM_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + vcclcd_reg: LDO13 { + regulator-name = "VCC_3.3V_LCD"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + vlcd_reg: LDO15 { + regulator-name = "VLCD_2.2V"; + regulator-min-microvolt = <2200000>; + regulator-max-microvolt = <2200000>; + }; + + camsensor_reg: LDO16 { + regulator-name = "CAM_SENSOR_IO_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + vddq_reg: LDO21 { + regulator-name = "VDDQ_M1M2_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + }; + + varm_breg: BUCK1 { + /* + * HACK: The real name is VARM_1.2V_C210, + * but exynos-cpufreq does not support + * DT-based regulator lookup yet. + */ + regulator-name = "vdd_arm"; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1350000>; + regulator-always-on; + }; + + vint_breg: BUCK2 { + regulator-name = "VINT_1.1V_C210"; + regulator-min-microvolt = <900000>; + regulator-max-microvolt = <1100000>; + regulator-always-on; + }; + + camisp_breg: BUCK4 { + regulator-name = "CAM_ISP_CORE_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + vmem_breg: BUCK5 { + regulator-name = "VMEM_1.2V_C210"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + }; + + vccsub_breg: BUCK7 { + regulator-name = "VCC_SUB_2.0V"; + regulator-min-microvolt = <2000000>; + regulator-max-microvolt = <2000000>; + regulator-always-on; + }; + + safe1_sreg: ESAFEOUT1 { + regulator-name = "SAFEOUT1"; + }; + + safe2_sreg: ESAFEOUT2 { + regulator-name = "SAFEOUT2"; + regulator-boot-on; + }; + }; + }; +};

On 18 January 2017 at 23:13, Jaehoon Chung jh80.chung@samsung.com wrote:
To use driver-model adds the pmic node for max8997. This is used as kernel device-tree in Linux.
Signed-off-by: Jaehoon Chung jh80.chung@samsung.com
arch/arm/dts/exynos4210-trats.dts | 150 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 142 insertions(+), 8 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

Hi Jaehoon,
On 18 January 2017 at 23:13, Jaehoon Chung jh80.chung@samsung.com wrote:
Add the max8997 controller for Driver model. Exynos4210 is using max8997 pmic controller. (pmic_max8997.c should be deprecated.)
Signed-off-by: Jaehoon Chung jh80.chung@samsung.com
drivers/power/pmic/Kconfig | 7 +++++ drivers/power/pmic/Makefile | 1 + drivers/power/pmic/max8997.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 drivers/power/pmic/max8997.c
Reviewed-by: Simon Glass sjg@chromium.org
But please see comments below.
diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 5e244c8..19494fa 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -54,6 +54,13 @@ config DM_PMIC_MAX77686 This config enables implementation of driver-model pmic uclass features for PMIC MAX77686. The driver implements read/write operations.
+config DM_PMIC_MAX8997
config PMIC_MAX8997
Since I don't think you have a non-DM option here.
bool "Enable Driver Model for PMIC MAX8997"
depends on DM_PMIC
---help---
This config enables implementation of driver-model pmic uclass features
for PMIC MAX8997. The driver implements read/write operations.
Can you mention a few details about the device? Number of LDOs, etc.?
config DM_PMIC_MAX8998 bool "Enable Driver Model for PMIC MAX8998" depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index b4ac7d2..43f5557 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -7,6 +7,7 @@
obj-$(CONFIG_DM_PMIC) += pmic-uclass.o obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o +obj-$(CONFIG_DM_PMIC_MAX8997) += max8997.o obj-$(CONFIG_DM_PMIC_MAX8998) += max8998.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o diff --git a/drivers/power/pmic/max8997.c b/drivers/power/pmic/max8997.c new file mode 100644 index 0000000..f749d7d --- /dev/null +++ b/drivers/power/pmic/max8997.c @@ -0,0 +1,61 @@ +/*
- Copyright (C) 2016 Samsung Electronics
- Jaehoon Chung jh80.chung@samsung.com
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <dm.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/max8997_pmic.h> +#include <errno.h>
nit: Should go above i2.h
[...]
Regards, Simon

Hi Simon
On 01/26/2017 11:23 PM, Simon Glass wrote:
Hi Jaehoon,
On 18 January 2017 at 23:13, Jaehoon Chung jh80.chung@samsung.com wrote:
Add the max8997 controller for Driver model. Exynos4210 is using max8997 pmic controller. (pmic_max8997.c should be deprecated.)
Signed-off-by: Jaehoon Chung jh80.chung@samsung.com
drivers/power/pmic/Kconfig | 7 +++++ drivers/power/pmic/Makefile | 1 + drivers/power/pmic/max8997.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 drivers/power/pmic/max8997.c
Reviewed-by: Simon Glass sjg@chromium.org
But please see comments below.
diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index 5e244c8..19494fa 100644 --- a/drivers/power/pmic/Kconfig +++ b/drivers/power/pmic/Kconfig @@ -54,6 +54,13 @@ config DM_PMIC_MAX77686 This config enables implementation of driver-model pmic uclass features for PMIC MAX77686. The driver implements read/write operations.
+config DM_PMIC_MAX8997
config PMIC_MAX8997
Since I don't think you have a non-DM option here.
Will fix.
bool "Enable Driver Model for PMIC MAX8997"
depends on DM_PMIC
---help---
This config enables implementation of driver-model pmic uclass features
for PMIC MAX8997. The driver implements read/write operations.
Can you mention a few details about the device? Number of LDOs, etc.?
Ok.
config DM_PMIC_MAX8998 bool "Enable Driver Model for PMIC MAX8998" depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index b4ac7d2..43f5557 100644 --- a/drivers/power/pmic/Makefile +++ b/drivers/power/pmic/Makefile @@ -7,6 +7,7 @@
obj-$(CONFIG_DM_PMIC) += pmic-uclass.o obj-$(CONFIG_DM_PMIC_MAX77686) += max77686.o +obj-$(CONFIG_DM_PMIC_MAX8997) += max8997.o obj-$(CONFIG_DM_PMIC_MAX8998) += max8998.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o diff --git a/drivers/power/pmic/max8997.c b/drivers/power/pmic/max8997.c new file mode 100644 index 0000000..f749d7d --- /dev/null +++ b/drivers/power/pmic/max8997.c @@ -0,0 +1,61 @@ +/*
- Copyright (C) 2016 Samsung Electronics
- Jaehoon Chung jh80.chung@samsung.com
- SPDX-License-Identifier: GPL-2.0+
- */
+#include <common.h> +#include <dm.h> +#include <i2c.h> +#include <power/pmic.h> +#include <power/max8997_pmic.h> +#include <errno.h>
nit: Should go above i2.h
Will fix.
Best Regards, Jaehoon Chung
[...]
Regards, Simon
participants (2)
-
Jaehoon Chung
-
Simon Glass