From cf2a693864392afe49d69cfe00557eab23acc055 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Tue, 3 Jan 2017 09:43:28 +0900 Subject: [PATCH 01/12] arm: samsung: goni: use the driver model for max8998 Remove the "ifndef CONFIG_DM_I2C". Instead, use the driver model for max8998. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- board/samsung/goni/goni.c | 61 +++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index b066832e5f..80fd0d43d0 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -43,19 +44,6 @@ void i2c_init_board(void) } #endif -int power_init_board(void) -{ -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - /* - * For PMIC the I2C bus is named as I2C5, but it is connected - * to logical I2C adapter 0 - */ - return pmic_init(I2C_0); -#else - return 0; -#endif -} - int dram_init(void) { gd->ram_size = PHYS_SDRAM_1_SIZE + PHYS_SDRAM_2_SIZE + @@ -146,39 +134,50 @@ int board_mmc_init(bd_t *bis) #ifdef CONFIG_USB_GADGET static int s5pc1xx_phy_control(int on) { -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - int ret; + struct udevice *dev; static int status; - struct pmic *p = pmic_get("MAX8998_PMIC"); - if (!p) - return -ENODEV; + int reg, ret; - if (pmic_probe(p)) - return -1; + ret = pmic_get("max8998_pmic", &dev); + if (ret) + return ret; if (on && !status) { - ret = pmic_set_output(p, MAX8998_REG_ONOFF1, - MAX8998_LDO3, LDO_ON); - ret = pmic_set_output(p, MAX8998_REG_ONOFF2, - MAX8998_LDO8, LDO_ON); + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF1); + reg |= MAX8998_LDO3; + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF1, reg); if (ret) { puts("MAX8998 LDO setting error!\n"); - return -1; + return -EINVAL; + } + + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF2); + reg |= MAX8998_LDO8; + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF2, reg); + if (ret) { + puts("MAX8998 LDO setting error!\n"); + return -EINVAL; } status = 1; } else if (!on && status) { - ret = pmic_set_output(p, MAX8998_REG_ONOFF1, - MAX8998_LDO3, LDO_OFF); - ret = pmic_set_output(p, MAX8998_REG_ONOFF2, - MAX8998_LDO8, LDO_OFF); + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF1); + reg &= ~MAX8998_LDO3; + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF1, reg); if (ret) { puts("MAX8998 LDO setting error!\n"); - return -1; + return -EINVAL; + } + + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF2); + reg &= ~MAX8998_LDO8; + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF2, reg); + if (ret) { + puts("MAX8998 LDO setting error!\n"); + return -EINVAL; } status = 0; } udelay(10000); -#endif return 0; } From fd3b710ae8d37c3909aee47352c6f7f79b8d9b3f Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Thu, 5 Jan 2017 16:55:14 +0900 Subject: [PATCH 02/12] board: samsung: goni: fix the pmic's name for getting For Getting from uclass, use the "max8998-pmic" as name. It also needs to change the dt-node's name as "max8998-pmic". Otherwise, it doesn't find the pmic device. Because it's only searching for 'max8998_pmic'. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- arch/arm/dts/s5pc1xx-goni.dts | 2 +- board/samsung/goni/goni.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/dts/s5pc1xx-goni.dts b/arch/arm/dts/s5pc1xx-goni.dts index e80132dd99..182325a091 100644 --- a/arch/arm/dts/s5pc1xx-goni.dts +++ b/arch/arm/dts/s5pc1xx-goni.dts @@ -42,7 +42,7 @@ #size-cells = <0>; status = "okay"; - pmic@66 { + max8998-pmic@66 { compatible = "maxim,max8998"; reg = <0x66 0 0>; diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index 80fd0d43d0..9c48d71a67 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -138,7 +138,7 @@ static int s5pc1xx_phy_control(int on) static int status; int reg, ret; - ret = pmic_get("max8998_pmic", &dev); + ret = pmic_get("max8998-pmic", &dev); if (ret) return ret; From 233bc69f5133a4e606bb82f8da81d511700e8b3e Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:47 +0900 Subject: [PATCH 03/12] ARM: dts: exynos4: use the node's name for i2c Use the node's name for i2c. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- arch/arm/dts/exynos4.dtsi | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/arch/arm/dts/exynos4.dtsi b/arch/arm/dts/exynos4.dtsi index 7de227cc01..a5a00c8fd4 100644 --- a/arch/arm/dts/exynos4.dtsi +++ b/arch/arm/dts/exynos4.dtsi @@ -10,6 +10,17 @@ #include "skeleton.dtsi" / { + aliases { + i2c0 = &i2c_0; + i2c1 = &i2c_1; + i2c2 = &i2c_2; + i2c3 = &i2c_3; + i2c4 = &i2c_4; + i2c5 = &i2c_5; + i2c6 = &i2c_6; + i2c7 = &i2c_7; + }; + combiner: interrupt-controller@10440000 { compatible = "samsung,exynos4210-combiner"; #interrupt-cells = <2>; @@ -47,7 +58,7 @@ id = <4>; }; - i2c@13860000 { + i2c_0: i2c@13860000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -55,7 +66,7 @@ interrupts = <0 56 0>; }; - i2c@13870000 { + i2c_1: i2c@13870000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -63,7 +74,7 @@ interrupts = <1 57 0>; }; - i2c@13880000 { + i2c_2: i2c@13880000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -71,7 +82,7 @@ interrupts = <2 58 0>; }; - i2c@13890000 { + i2c_3: i2c@13890000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -79,7 +90,7 @@ interrupts = <3 59 0>; }; - i2c@138a0000 { + i2c_4: i2c@138a0000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -87,7 +98,7 @@ interrupts = <4 60 0>; }; - i2c@138b0000 { + i2c_5: i2c@138b0000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -95,7 +106,7 @@ interrupts = <5 61 0>; }; - i2c@138c0000 { + i2c_6: i2c@138c0000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; @@ -103,7 +114,7 @@ interrupts = <6 62 0>; }; - i2c@138d0000 { + i2c_7: i2c@138d0000 { #address-cells = <1>; #size-cells = <0>; compatible = "samsung,s3c2440-i2c"; From 72331fb8def99745c036dd123710775a66d97207 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:48 +0900 Subject: [PATCH 04/12] ARM: dts: exnyos4210-universl_c210: add i2c_5 and pmic nodes Add the i2c_5 node and pmic as its child node. Signed-off-by: Jaehoon Chung Reviewed-by: Simon Glass Signed-off-by: Minkyu Kang --- arch/arm/dts/exynos4210-universal_c210.dts | 164 +++++++++++++++++++++ 1 file changed, 164 insertions(+) diff --git a/arch/arm/dts/exynos4210-universal_c210.dts b/arch/arm/dts/exynos4210-universal_c210.dts index 8cac7dd752..57636276a8 100644 --- a/arch/arm/dts/exynos4210-universal_c210.dts +++ b/arch/arm/dts/exynos4210-universal_c210.dts @@ -94,3 +94,167 @@ samsung,rgb-mode = <0>; }; }; + +&i2c_5 { + clock-frequency = <100000>; + status = "okay"; + + max8998-pmic@66 { + compatible = "maxim,max8998"; + reg = <0x66 0 0>; + voltage-regulators { + ldo2_reg: LDO2 { + regulator-name = "VALIVE_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + }; + + ldo3_reg: LDO3 { + regulator-name = "VUSB+MIPI_1.1V"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-always-on; + }; + + ldo4_reg: LDO4 { + regulator-name = "VADC_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo5_reg: LDO5 { + regulator-name = "VTF_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo6_reg: LDO6 { + regulator-name = "LDO6"; + regulator-min-microvolt = <2000000>; + regulator-max-microvolt = <2000000>; + }; + + ldo7_reg: LDO7 { + regulator-name = "VLCD+VMIPI_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + ldo8_reg: LDO8 { + regulator-name = "VUSB+VDAC_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + ldo9_reg: LDO9 { + regulator-name = "VCC_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + regulator-always-on; + }; + + ldo10_reg: LDO10 { + regulator-name = "VPLL_1.1V"; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1100000>; + regulator-boot-on; + regulator-always-on; + }; + + ldo11_reg: LDO11 { + regulator-name = "CAM_AF_3.3V"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + ldo12_reg: LDO12 { + regulator-name = "PS_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo13_reg: LDO13 { + regulator-name = "VHIC_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + ldo14_reg: LDO14 { + regulator-name = "CAM_I_HOST_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + ldo15_reg: LDO15 { + regulator-name = "CAM_S_DIG+FM33_CORE_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + }; + + ldo16_reg: LDO16 { + regulator-name = "CAM_S_ANA_2.8V"; + regulator-min-microvolt = <2800000>; + regulator-max-microvolt = <2800000>; + }; + + ldo17_reg: LDO17 { + regulator-name = "VCC_3.0V_LCD"; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; + }; + + buck1_reg: BUCK1 { + regulator-name = "VINT_1.1V"; + regulator-min-microvolt = <750000>; + regulator-max-microvolt = <1500000>; + regulator-boot-on; + regulator-always-on; + }; + + buck2_reg: BUCK2 { + regulator-name = "VG3D_1.1V"; + regulator-min-microvolt = <750000>; + regulator-max-microvolt = <1500000>; + regulator-boot-on; + }; + + buck3_reg: BUCK3 { + regulator-name = "VCC_1.8V"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + + buck4_reg: BUCK4 { + regulator-name = "VMEM_1.2V"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; + regulator-always-on; + }; + + ap32khz_reg: EN32KHz-AP { + regulator-name = "32KHz AP"; + regulator-always-on; + }; + + cp32khz_reg: EN32KHz-CP { + regulator-name = "32KHz CP"; + }; + + vichg_reg: ENVICHG { + regulator-name = "VICHG"; + }; + + safeout1_reg: ESAFEOUT1 { + regulator-name = "SAFEOUT1"; + }; + + safeout2_reg: ESAFEOUT2 { + regulator-name = "SAFEOUT2"; + regulator-boot-on; + }; + }; + }; +}; From 3c385dceca445563ffc58888e25c8576770590b0 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:49 +0900 Subject: [PATCH 05/12] configs: s5pc210_universal: enable the DM_PMIC and MAX8998 Enable the CONFIG_DM_PMIC and CONFIG_DM_PMIC_MAX8998. s5pc210_universal board is using max8998 pmic. To use the i2c/pmic driver model, enable these configurations. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- configs/s5pc210_universal_defconfig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/configs/s5pc210_universal_defconfig b/configs/s5pc210_universal_defconfig index b6cefb132a..538e0ce45b 100644 --- a/configs/s5pc210_universal_defconfig +++ b/configs/s5pc210_universal_defconfig @@ -32,6 +32,9 @@ CONFIG_DFU_MMC=y CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_SDMA=y CONFIG_MMC_SDHCI_S5P=y +CONFIG_DM_PMIC=y +CONFIG_DM_PMIC_MAX8998=y +CONFIG_SYS_I2C_S3C24X0=y CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_GADGET=y From 816d8b500814b26df318d724628f6b88da9aadbf Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:50 +0900 Subject: [PATCH 06/12] board: samsung: universal_210: use the driver model for max8998 Revmoe the "ifndef CONFIG_DM_I2C". Intead, use the driver model for max8998. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- board/samsung/universal_c210/universal.c | 171 +++++++++++++---------- 1 file changed, 95 insertions(+), 76 deletions(-) diff --git a/board/samsung/universal_c210/universal.c b/board/samsung/universal_c210/universal.c index c3946ee891..0645843934 100644 --- a/board/samsung/universal_c210/universal.c +++ b/board/samsung/universal_c210/universal.c @@ -27,35 +27,23 @@ DECLARE_GLOBAL_DATA_PTR; unsigned int board_rev; +static int init_pmic_lcd(void); u32 get_board_rev(void) { return board_rev; } +int exynos_power_init(void) +{ + return init_pmic_lcd(); +} + static int get_hwrev(void) { return board_rev & 0xFF; } -int exynos_power_init(void) -{ -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - int ret; - - /* - * For PMIC the I2C bus is named as I2C5, but it is connected - * to logical I2C adapter 0 - */ - ret = pmic_init(I2C_0); - if (ret) - return ret; - - init_pmic_lcd(); -#endif - return 0; -} - static unsigned short get_adc_value(int channel) { struct s5p_adc *adc = (struct s5p_adc *)samsung_get_base_adc(); @@ -83,23 +71,29 @@ static unsigned short get_adc_value(int channel) static int adc_power_control(int on) { -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ + struct udevice *dev; int ret; - struct pmic *p = pmic_get("MAX8998_PMIC"); - if (!p) - return -ENODEV; + u8 reg; - if (pmic_probe(p)) - return -1; + ret = pmic_get("max8998-pmic", &dev); + if (ret) { + puts("Failed to get MAX8998!\n"); + return ret; + } - ret = pmic_set_output(p, - MAX8998_REG_ONOFF1, - MAX8998_LDO4, !!on); + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF1); + if (on) + reg |= MAX8998_LDO4; + else + reg &= ~MAX8998_LDO4; + + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF1, reg); + if (ret) { + puts("MAX8998 LDO setting error\n"); + return -EINVAL; + } - return ret; -#else return 0; -#endif } static unsigned int get_hw_revision(void) @@ -147,39 +141,50 @@ static void check_hw_revision(void) #ifdef CONFIG_USB_GADGET static int s5pc210_phy_control(int on) { -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - int ret = 0; - struct pmic *p = pmic_get("MAX8998_PMIC"); - if (!p) - return -ENODEV; + struct udevice *dev; + int ret; + u8 reg; - if (pmic_probe(p)) - return -1; + ret = pmic_get("max8998-pmic", &dev); + if (ret) { + puts("Failed to get MAX8998!\n"); + return ret; + } if (on) { - ret |= pmic_set_output(p, - MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, - MAX8998_SAFEOUT1, LDO_ON); - ret |= pmic_set_output(p, MAX8998_REG_ONOFF1, - MAX8998_LDO3, LDO_ON); - ret |= pmic_set_output(p, MAX8998_REG_ONOFF2, - MAX8998_LDO8, LDO_ON); + reg = pmic_reg_read(dev, MAX8998_REG_BUCK_ACTIVE_DISCHARGE3); + reg |= MAX8998_SAFEOUT1; + ret |= pmic_reg_write(dev, + MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, reg); + + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF1); + reg |= MAX8998_LDO3; + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF1, reg); + + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF2); + reg |= MAX8998_LDO8; + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF2, reg); } else { - ret |= pmic_set_output(p, MAX8998_REG_ONOFF2, - MAX8998_LDO8, LDO_OFF); - ret |= pmic_set_output(p, MAX8998_REG_ONOFF1, - MAX8998_LDO3, LDO_OFF); - ret |= pmic_set_output(p, - MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, - MAX8998_SAFEOUT1, LDO_OFF); + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF2); + reg &= ~MAX8998_LDO8; + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF2, reg); + + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF1); + reg &= ~MAX8998_LDO3; + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF1, reg); + + reg = pmic_reg_read(dev, MAX8998_REG_BUCK_ACTIVE_DISCHARGE3); + reg &= ~MAX8998_SAFEOUT1; + ret |= pmic_reg_write(dev, + MAX8998_REG_BUCK_ACTIVE_DISCHARGE3, reg); } if (ret) { puts("MAX8998 LDO setting error!\n"); - return -1; + return -EINVAL; } -#endif + return 0; } @@ -205,27 +210,25 @@ int exynos_early_init_f(void) return 0; } -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ -static void init_pmic_lcd(void) +static int init_pmic_lcd(void) { + struct udevice *dev; unsigned char val; int ret = 0; - struct pmic *p = pmic_get("MAX8998_PMIC"); - - if (!p) - return; - - if (pmic_probe(p)) - return; + ret = pmic_get("max8998-pmic", &dev); + if (ret) { + puts("Failed to get MAX8998 for init_pmic_lcd()!\n"); + return ret; + } /* LDO7 1.8V */ val = 0x02; /* (1800 - 1600) / 100; */ - ret |= pmic_reg_write(p, MAX8998_REG_LDO7, val); + ret |= pmic_reg_write(dev, MAX8998_REG_LDO7, val); /* LDO17 3.0V */ val = 0xe; /* (3000 - 1600) / 100; */ - ret |= pmic_reg_write(p, MAX8998_REG_LDO17, val); + ret |= pmic_reg_write(dev, MAX8998_REG_LDO17, val); /* Disable unneeded regulators */ /* @@ -234,26 +237,29 @@ static void init_pmic_lcd(void) * LDO2 ON, LDO3 OFF, LDO4 OFF, LDO5 ON */ val = 0xB9; - ret |= pmic_reg_write(p, MAX8998_REG_ONOFF1, val); + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF1, val); /* ONOFF2 * LDO6 OFF, LDO7 ON, LDO8 OFF, LDO9 ON, * LDO10 OFF, LDO11 OFF, LDO12 OFF, LDO13 OFF */ val = 0x50; - ret |= pmic_reg_write(p, MAX8998_REG_ONOFF2, val); + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF2, val); /* ONOFF3 * LDO14 OFF, LDO15 OFF, LGO16 OFF, LDO17 OFF * EPWRHOLD OFF, EBATTMON OFF, ELBCNFG2 OFF, ELBCNFG1 OFF */ val = 0x00; - ret |= pmic_reg_write(p, MAX8998_REG_ONOFF3, val); + ret |= pmic_reg_write(dev, MAX8998_REG_ONOFF3, val); - if (ret) + if (ret) { puts("LCD pmic initialisation error!\n"); + return -EINVAL; + } + + return 0; } -#endif void exynos_cfg_lcd_gpio(void) { @@ -310,18 +316,31 @@ void exynos_reset_lcd(void) void exynos_lcd_power_on(void) { -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - struct pmic *p = pmic_get("MAX8998_PMIC"); + struct udevice *dev; + int ret; + u8 reg; - if (!p) + ret = pmic_get("max8998-pmic", &dev); + if (ret) { + puts("Failed to get MAX8998!\n"); return; + } - if (pmic_probe(p)) + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF3); + reg |= MAX8998_LDO17; + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF3, reg); + if (ret) { + puts("MAX8998 LDO setting error\n"); return; + } - pmic_set_output(p, MAX8998_REG_ONOFF3, MAX8998_LDO17, LDO_ON); - pmic_set_output(p, MAX8998_REG_ONOFF2, MAX8998_LDO7, LDO_ON); -#endif + reg = pmic_reg_read(dev, MAX8998_REG_ONOFF2); + reg |= MAX8998_LDO7; + ret = pmic_reg_write(dev, MAX8998_REG_ONOFF2, reg); + if (ret) { + puts("MAX8998 LDO setting error\n"); + return; + } } void exynos_cfg_ldo(void) From a298712e948e473d9e61a3c75835becd0d3a2bf6 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:51 +0900 Subject: [PATCH 07/12] i2c: s3c24x0: fix the compiler error for exynos4 If CONFIG_SYS_I2C_S3C24X0_SLAVE isn't defined, then complie error should be occurred. This patch is for preventing it. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- drivers/i2c/s3c24x0_i2c.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/s3c24x0_i2c.c b/drivers/i2c/s3c24x0_i2c.c index 2ece9f4195..363cd04e4e 100644 --- a/drivers/i2c/s3c24x0_i2c.c +++ b/drivers/i2c/s3c24x0_i2c.c @@ -24,6 +24,12 @@ #include #include "s3c24x0_i2c.h" +#ifndef CONFIG_SYS_I2C_S3C24X0_SLAVE +#define SYS_I2C_S3C24X0_SLAVE_ADDR 0 +#else +#define SYS_I2C_S3C24X0_SLAVE_ADDR CONFIG_SYS_I2C_S3C24X0_SLAVE +#endif + DECLARE_GLOBAL_DATA_PTR; /* @@ -87,7 +93,7 @@ static int s3c24x0_i2c_set_bus_speed(struct udevice *dev, unsigned int speed) i2c_bus->clock_frequency = speed; i2c_ch_init(i2c_bus->regs, i2c_bus->clock_frequency, - CONFIG_SYS_I2C_S3C24X0_SLAVE); + SYS_I2C_S3C24X0_SLAVE_ADDR); return 0; } From 1d61ad959e3783ff01177c752818975e8f3de104 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:52 +0900 Subject: [PATCH 08/12] i2c: Kconfig: Add SYS_I2C_S3C24X0 entry Adding Kconfig for SYS_I2C_S3C24X0. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- drivers/i2c/Kconfig | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig index 051f911e23..71cc173fc0 100644 --- a/drivers/i2c/Kconfig +++ b/drivers/i2c/Kconfig @@ -155,6 +155,11 @@ config SYS_I2C_SANDBOX }; }; +config SYS_I2C_S3C24X0 + bool "Samsung I2C driver" + depends on ARCH_EXYNOS4 && DM_I2C + help + Support for Samsung I2C controller as Samsung SoCs. config SYS_I2C_UNIPHIER bool "UniPhier I2C driver" From 9c796784aa7e2e2ae4400db45381795bf766bc77 Mon Sep 17 00:00:00 2001 From: Jaehoon Chung Date: Mon, 9 Jan 2017 14:47:53 +0900 Subject: [PATCH 09/12] board: samsung: universal_c210: remove the codes relevant to soft_i2c Removes the codes of soft_i2c. There is no usasge for universal_c210, also didn't define CONFIG_SOFT_I2C_GPIO_SCL. This code seems a dead code. Signed-off-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- board/samsung/universal_c210/universal.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/board/samsung/universal_c210/universal.c b/board/samsung/universal_c210/universal.c index 0645843934..feb8a341be 100644 --- a/board/samsung/universal_c210/universal.c +++ b/board/samsung/universal_c210/universal.c @@ -355,9 +355,6 @@ void exynos_enable_ldo(unsigned int onoff) int exynos_init(void) { -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - char buf[16]; -#endif gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210; switch (get_hwrev()) { @@ -382,14 +379,6 @@ int exynos_init(void) break; } -#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */ - /* Request soft I2C gpios */ - strcpy(buf, "soft_i2c_scl"); - gpio_request(CONFIG_SOFT_I2C_GPIO_SCL, buf); - - strcpy(buf, "soft_i2c_sda"); - gpio_request(CONFIG_SOFT_I2C_GPIO_SDA, buf); -#endif check_hw_revision(); printf("HW Revision:\t0x%x\n", board_rev); From 701e740f59bb1108485f1cb8e1b54248eee3ff87 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Tue, 10 Jan 2017 12:28:57 +0100 Subject: [PATCH 10/12] exynos5: Don't potentially undervoltage the CPU For snow when chainloading u-boot the CPU seems to be running at full speed. The lower CPU voltage seems to be ok for u-boot, but when booting linux (bringing up all cores) I'm seeing random crashes. Bump the voltage up to a level that's safe for all cpu frequencies. Signed-off-by: Sjoerd Simons Reviewed-by: Javier Martinez Canillas Signed-off-by: Minkyu Kang --- board/samsung/common/exynos5-dt.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/board/samsung/common/exynos5-dt.c b/board/samsung/common/exynos5-dt.c index 2e3b16df45..aec1f396b0 100644 --- a/board/samsung/common/exynos5-dt.c +++ b/board/samsung/common/exynos5-dt.c @@ -123,13 +123,7 @@ int exynos_power_init(void) if (ret) return ret; - /* - * This would normally be 1.3V, but since we are running slowly 1.1V - * is enough. For spring it helps reduce CPU temperature and avoid - * hangs with the case open. 1.1V is minimum voltage borderline for - * chained bootloaders. - */ - ret = exynos_set_regulator("vdd_arm", 1100000); + ret = exynos_set_regulator("vdd_arm", 1300000); if (ret) return ret; ret = exynos_set_regulator("vdd_int", 1012500); From d64c31dd93e75c3940730d603c428d869a629168 Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Tue, 10 Jan 2017 14:36:17 +0100 Subject: [PATCH 11/12] exynos: Enable XHCI on exynos5250 boards Once upon a time u-boot didn't support building with two usb host controller types, these days it does. Enable XHCI in addition to the existing EHCI support so user can plug usb devices in all available ports regardless of the controller type. Signed-off-by: Sjoerd Simons Reviewed-by: Javier Martinez Canillas Reviewed-by: Jaehoon Chung Signed-off-by: Minkyu Kang --- configs/arndale_defconfig | 2 ++ configs/smdk5250_defconfig | 2 ++ configs/snow_defconfig | 2 ++ configs/spring_defconfig | 2 ++ include/configs/exynos5250-common.h | 2 ++ 5 files changed, 10 insertions(+) diff --git a/configs/arndale_defconfig b/configs/arndale_defconfig index cdfb73996f..821e1c7dd7 100644 --- a/configs/arndale_defconfig +++ b/configs/arndale_defconfig @@ -31,4 +31,6 @@ CONFIG_SOUND_MAX98095=y CONFIG_SOUND_WM8994=y CONFIG_USB=y CONFIG_DM_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y diff --git a/configs/smdk5250_defconfig b/configs/smdk5250_defconfig index b785efe306..95c379b580 100644 --- a/configs/smdk5250_defconfig +++ b/configs/smdk5250_defconfig @@ -43,6 +43,8 @@ CONFIG_SOUND_WM8994=y CONFIG_EXYNOS_SPI=y CONFIG_USB=y CONFIG_DM_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y CONFIG_VIDEO_BRIDGE=y CONFIG_ERRNO_STR=y diff --git a/configs/snow_defconfig b/configs/snow_defconfig index 47b498b6b2..967927f48a 100644 --- a/configs/snow_defconfig +++ b/configs/snow_defconfig @@ -61,6 +61,8 @@ CONFIG_EXYNOS_SPI=y CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y CONFIG_DM_VIDEO=y CONFIG_DISPLAY=y diff --git a/configs/spring_defconfig b/configs/spring_defconfig index 4a782c80da..1898b95690 100644 --- a/configs/spring_defconfig +++ b/configs/spring_defconfig @@ -61,6 +61,8 @@ CONFIG_EXYNOS_SPI=y CONFIG_TPM_TIS_INFINEON=y CONFIG_USB=y CONFIG_DM_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_DWC3=y CONFIG_USB_STORAGE=y CONFIG_DM_VIDEO=y CONFIG_DISPLAY=y diff --git a/include/configs/exynos5250-common.h b/include/configs/exynos5250-common.h index 7d8921f24e..846739a6c5 100644 --- a/include/configs/exynos5250-common.h +++ b/include/configs/exynos5250-common.h @@ -31,6 +31,8 @@ #define CONFIG_USB_EHCI #define CONFIG_USB_EHCI_EXYNOS +#define CONFIG_USB_XHCI_EXYNOS + #define CONFIG_USB_HOST_ETHER #define CONFIG_USB_ETHER_ASIX #define CONFIG_USB_ETHER_ASIX88179 From 3296eeff8ae064a788d52325fcd4ce1fdf52ee06 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Mon, 16 Jan 2017 14:15:23 -0300 Subject: [PATCH 12/12] exynos: video: Enable stdout env var backward compatibility for LCD Commit bb5930d5c97f ("exynos: video: Convert several boards to driver model for video") converted the Exynos Chromebooks machines to use DM for video, but this breaks backward compatibility with the stdout env var since now stdout is expected to be "vidconsole" instead of "lcd". This causes display to not work when updating u-boot on these boards if the old stdout env var is used. Since these are consumer devices, there's no easy way to have a serial console so users may be confused thinking that u-boot failed to boot, or in the best case will need to update the stdout env var blindly to make the display to work again. There's a CONFIG_VIDCONSOLE_AS_LCD config option to workaround this, so enable it in the Chromebooks' default configuration files to allow users to change their stdout env var before the workaround is removed. Suggested-by: Simon Glass Signed-off-by: Javier Martinez Canillas Signed-off-by: Minkyu Kang --- configs/peach-pi_defconfig | 1 + configs/peach-pit_defconfig | 1 + configs/snow_defconfig | 1 + configs/spring_defconfig | 1 + 4 files changed, 4 insertions(+) diff --git a/configs/peach-pi_defconfig b/configs/peach-pi_defconfig index ef02118421..fb933efc5a 100644 --- a/configs/peach-pi_defconfig +++ b/configs/peach-pi_defconfig @@ -60,5 +60,6 @@ CONFIG_DISPLAY=y CONFIG_VIDEO_BRIDGE=y CONFIG_VIDEO_BRIDGE_PARADE_PS862X=y CONFIG_LCD=y +CONFIG_VIDCONSOLE_AS_LCD=y CONFIG_TPM=y CONFIG_ERRNO_STR=y diff --git a/configs/peach-pit_defconfig b/configs/peach-pit_defconfig index 14fe00eb2a..cbac99dd83 100644 --- a/configs/peach-pit_defconfig +++ b/configs/peach-pit_defconfig @@ -60,5 +60,6 @@ CONFIG_DISPLAY=y CONFIG_VIDEO_BRIDGE=y CONFIG_VIDEO_BRIDGE_PARADE_PS862X=y CONFIG_LCD=y +CONFIG_VIDCONSOLE_AS_LCD=y CONFIG_TPM=y CONFIG_ERRNO_STR=y diff --git a/configs/snow_defconfig b/configs/snow_defconfig index 967927f48a..ebd1a52831 100644 --- a/configs/snow_defconfig +++ b/configs/snow_defconfig @@ -70,5 +70,6 @@ CONFIG_VIDEO_BRIDGE=y CONFIG_VIDEO_BRIDGE_PARADE_PS862X=y CONFIG_VIDEO_BRIDGE_NXP_PTN3460=y CONFIG_LCD=y +CONFIG_VIDCONSOLE_AS_LCD=y CONFIG_TPM=y CONFIG_ERRNO_STR=y diff --git a/configs/spring_defconfig b/configs/spring_defconfig index 1898b95690..3d6c2e9339 100644 --- a/configs/spring_defconfig +++ b/configs/spring_defconfig @@ -69,5 +69,6 @@ CONFIG_DISPLAY=y CONFIG_VIDEO_BRIDGE=y CONFIG_VIDEO_BRIDGE_PARADE_PS862X=y CONFIG_LCD=y +CONFIG_VIDCONSOLE_AS_LCD=y CONFIG_TPM=y CONFIG_ERRNO_STR=y