From 103e83a1b0a3f2ef5d82d86711ea3d6b2bbf2a16 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Thu, 15 Dec 2016 18:21:10 +0900 Subject: power: pmic: add the max8998 controller for DM Add the max8998 controller for Driver model. Samsung S5P series are using max8998 pmic controller. In future, it should be supported the regulator framework. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- drivers/power/pmic/Kconfig | 7 +++++ drivers/power/pmic/Makefile | 1 + drivers/power/pmic/max8998.c | 61 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 drivers/power/pmic/max8998.c diff --git a/drivers/power/pmic/Kconfig b/drivers/power/pmic/Kconfig index ce204b36caa..5e244c8741c 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_MAX8998 + bool "Enable Driver Model for PMIC MAX8998" + depends on DM_PMIC + ---help--- + This config enables implementation of driver-model pmic uclass features + for PMIC MAX8998. The driver implements read/write operations. + config PMIC_PM8916 bool "Enable Driver Model for Qualcomm PM8916 PMIC" depends on DM_PMIC diff --git a/drivers/power/pmic/Makefile b/drivers/power/pmic/Makefile index cd1c6945cd2..b4ac7d26d0a 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_MAX8998) += max8998.o obj-$(CONFIG_DM_PMIC_PFUZE100) += pfuze100.o obj-$(CONFIG_PMIC_S2MPS11) += s2mps11.o obj-$(CONFIG_DM_PMIC_SANDBOX) += sandbox.o i2c_pmic_emul.o diff --git a/drivers/power/pmic/max8998.c b/drivers/power/pmic/max8998.c new file mode 100644 index 00000000000..3baa8da032a --- /dev/null +++ b/drivers/power/pmic/max8998.c @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2016 Samsung Electronics + * Jaehoon Chung + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +static int max8998_reg_count(struct udevice *dev) +{ + return PMIC_NUM_OF_REGS; +} + +static int max8998_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 max8998_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 max8998_ops = { + .reg_count = max8998_reg_count, + .read = max8998_read, + .write = max8998_write, +}; + +static const struct udevice_id max8998_ids[] = { + { .compatible = "maxim,max8998" }, + { } +}; + +U_BOOT_DRIVER(pmic_max8998) = { + .name = "max8998_pmic", + .id = UCLASS_PMIC, + .of_match = max8998_ids, + .ops = &max8998_ops, +}; -- cgit v1.3.1 From 23d2224b6483dbe053e63008c1561b83d1423c03 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Thu, 15 Dec 2016 18:21:11 +0900 Subject: arm: dts: s5pc1xx-goni: add the pmic node for using DM To use driver-model adds the pmic node for max8998. This is used as kerel device-tree in Linux. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- arch/arm/dts/s5pc1xx-goni.dts | 165 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) diff --git a/arch/arm/dts/s5pc1xx-goni.dts b/arch/arm/dts/s5pc1xx-goni.dts index 7bbfe591cd8..e80132dd99f 100644 --- a/arch/arm/dts/s5pc1xx-goni.dts +++ b/arch/arm/dts/s5pc1xx-goni.dts @@ -19,6 +19,7 @@ serial2 = "/serial@e2900800"; console = "/serial@e2900800"; pinctrl0 = &pinctrl0; + i2c3 = &i2c_pmic; }; pinctrl0: pinctrl@e0200000 { @@ -32,4 +33,168 @@ id = <2>; }; + i2c_pmic: i2c-pmic { + compatible = "i2c-gpio"; + gpios = <&gpj4 0 0>, /* sda */ + <&gpj4 3 0>; /* scl */ + i2c-gpio,delay-us = <2>; /* ~100 kHz */ + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + pmic@66 { + compatible = "maxim,max8998"; + reg = <0x66 0 0>; + + voltage-regulators { + ldo2_reg: LDO2 { + regulator-compatible = "LDO2"; + regulator-name = "VALIVE_1.1V"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-always-on; + }; + + ldo3_reg: LDO3 { + regulator-compatible = "LDO3"; + regulator-name = "VUSB+MIPI_1.1V"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-always-on; + }; + + ldo4_reg: LDO4 { + regulator-compatible = "LDO4"; + regulator-name = "VADC_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo5_reg: LDO5 { + regulator-compatible = "LDO5"; + regulator-name = "VTF_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo6_reg: LDO6 { + regulator-compatible = "LDO6"; + regulator-name = "VCC_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo7_reg: LDO7 { + regulator-compatible = "LDO7"; + regulator-name = "VLCD_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + + ldo8_reg: LDO8 { + regulator-compatible = "LDO8"; + regulator-name = "VUSB+VDAC_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo9_reg: LDO9 { + regulator-compatible = "LDO9"; + regulator-name = "VCC+VCAM_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo10_reg: LDO10 { + regulator-compatible = "LDO10"; + regulator-name = "VPLL_1.1V"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-boot-on; + }; + + ldo11_reg: LDO11 { + regulator-compatible = "LDO11"; + regulator-name = "CAM_IO_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo12_reg: LDO12 { + regulator-compatible = "LDO12"; + regulator-name = "CAM_ISP_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + ldo13_reg: LDO13 { + regulator-compatible = "LDO13"; + regulator-name = "CAM_A_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo14_reg: LDO14 { + regulator-compatible = "LDO14"; + regulator-name = "CAM_CIF_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + ldo15_reg: LDO15 { + regulator-compatible = "LDO15"; + regulator-name = "CAM_AF_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo16_reg: LDO16 { + regulator-compatible = "LDO16"; + regulator-name = "VMIPI_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + ldo17_reg: LDO17 { + regulator-compatible = "LDO17"; + regulator-name = "CAM_8M_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + + buck1_reg: BUCK1 { + regulator-compatible = "BUCK1"; + regulator-name = "VARM_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + buck2_reg: BUCK2 { + regulator-compatible = "BUCK2"; + regulator-name = "VINT_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + buck3_reg: BUCK3 { + regulator-compatible = "BUCK3"; + regulator-name = "VCC_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + + buck4_reg: BUCK4 { + regulator-compatible = "BUCK4"; + regulator-name = "CAM_CORE_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + }; + }; + }; + }; + }; -- cgit v1.3.1 From 9e26834f4945f7b1deb16bea1c06e7e0faaad848 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Thu, 15 Dec 2016 18:21:12 +0900 Subject: configs: enable the DM_PMIC and DM_I2C_GPIO for max8998 pmic Enable the DM_PMIC and DM_I2C_GPIO for using max8998 pmic. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- configs/s5p_goni_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/s5p_goni_defconfig b/configs/s5p_goni_defconfig index 4cbf0220803..aa61ef42489 100644 --- a/configs/s5p_goni_defconfig +++ b/configs/s5p_goni_defconfig @@ -29,3 +29,6 @@ CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_G_DNL_MANUFACTURER="Samsung" CONFIG_G_DNL_VENDOR_NUM=0x04e8 CONFIG_G_DNL_PRODUCT_NUM=0x6601 +CONFIG_DM_PMIC=y +CONFIG_DM_PMIC_MAX8998=y +CONFIG_DM_I2C_GPIO=y -- cgit v1.3.1