Skip to contentSkip to conversation

trats: convert to driver model

PATCH New Jaehoon Chung 4 participants 12 messages Mar 30, 2017 – Apr 3, 2017 1 message not in the archive

Subsystems (2)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): CGME20170330123003epcas5p2558c23e6cf90bd0189d167e0e14665c9@epcas5p2.samsung.com

#1 lore raw

cover trats: convert to driver model

This patchset is for converting to driver model.
This task is working in progress.
Some codes should be remained to legacy mode, it will be converted in future.

Jaehoon Chung (6):
configs: trats: enable the CONFIG_DM_PMIC and PMIC_MAX8997
board: samsung: trats: remove the unnecessary codes
board: samsung: trats: convert to driver model for controlling phy
arm: dts: trats: add i2c_fg node for fuelgauge
board: samsung: trats: remove the i2c_init function
configs: trats: enable the CONFIG_DM_I2C_GPIO

 arch/arm/dts/exynos4210-trats.dts |   9 ++
 board/samsung/trats/trats.c       | 249 ++++++++------------------------------
 configs/trats_defconfig           |   4 +
 3 files changed, 62 insertions(+), 200 deletions(-)
Signature · 1 line
2.10.2
#2 lore raw

PATCH 1/6 configs: trats: enable the CONFIG_DM_PMIC and PMIC_MAX8997

Enable the CONFIG_DM_PMIC and PMIC_MAX8997. Also use the CONFIG_SYS_I2C_S3C24X0 for using I2C.

---
 configs/trats_defconfig | 3 +++
 1 file changed, 3 insertions(+)
configs/trats_defconfig +3 -0
index 7fe6c3d..2be05ff 100644
@@ -38,6 +38,9 @@ CONFIG_MMC_DW=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_SDMA=y
 CONFIG_MMC_SDHCI_S5P=y
+CONFIG_DM_PMIC=y
+CONFIG_PMIC_MAX8997=y
+CONFIG_SYS_I2C_S3C24X0=y
 CONFIG_USB=y
 CONFIG_DM_USB=y
 CONFIG_USB_GADGET=y
Signature · 1 line
2.10.2
#3 lore raw

PATCH 2/6 board: samsung: trats: remove the unnecessary codes

In reply to Jaehoon Chung

These codes are unnecessary, because max8997 should be initialized with dt-file.
Remove max8997_init() function.

---
 board/samsung/trats/trats.c | 161 +-------------------------------------------
 1 file changed, 1 insertion(+), 160 deletions(-)
board/samsung/trats/trats.c +1 -160
index 7200c2e..fa297c3 100644
@@ -56,13 +56,6 @@ void i2c_init_board(void)
 #ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
 	int err;
 
-	/* I2C_5 -> PMIC */
-	err = exynos_pinmux_config(PERIPH_ID_I2C5, PINMUX_FLAG_NONE);
-	if (err) {
-		debug("I2C%d not configured\n", (I2C_5));
-		return;
-	}
-
 	/* I2C_8 -> FG */
 	gpio_request(EXYNOS4_GPIO_Y40, "i2c_clk");
 	gpio_request(EXYNOS4_GPIO_Y41, "i2c_data");
@@ -129,156 +122,6 @@ static void trats_low_power_mode(void)
 	writel(0x0, &clk->gate_ip_image);	/* IMAGE */
 	writel(0x0, &clk->gate_ip_gps);	/* GPS */
 }
-
-static int pmic_init_max8997(void)
-{
-	struct pmic *p = pmic_get("MAX8997_PMIC");
-	int i = 0, ret = 0;
-	u32 val;
-
-	if (pmic_probe(p))
-		return -1;
-
-	/* BUCK1 VARM: 1.2V */
-	val = (1200000 - 650000) / 25000;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK1DVS1, val);
-	val = ENBUCK | ACTIVE_DISCHARGE;		/* DVS OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK1CTRL, val);
-
-	/* BUCK2 VINT: 1.1V */
-	val = (1100000 - 650000) / 25000;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK2DVS1, val);
-	val = ENBUCK | ACTIVE_DISCHARGE;		/* DVS OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK2CTRL, val);
-
-
-	/* BUCK3 G3D: 1.1V - OFF */
-	ret |= pmic_reg_read(p, MAX8997_REG_BUCK3CTRL, &val);
-	val &= ~ENBUCK;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK3CTRL, val);
-
-	val = (1100000 - 750000) / 50000;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK3DVS, val);
-
-	/* BUCK4 CAMISP: 1.2V - OFF */
-	ret |= pmic_reg_read(p, MAX8997_REG_BUCK4CTRL, &val);
-	val &= ~ENBUCK;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK4CTRL, val);
-
-	val = (1200000 - 650000) / 25000;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK4DVS, val);
-
-	/* BUCK5 VMEM: 1.2V */
-	val = (1200000 - 650000) / 25000;
-	for (i = 0; i < 8; i++)
-		ret |= pmic_reg_write(p, MAX8997_REG_BUCK5DVS1 + i, val);
-
-	val = ENBUCK | ACTIVE_DISCHARGE;		/* DVS OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK5CTRL, val);
-
-	/* BUCK6 CAM AF: 2.8V */
-	/* No Voltage Setting Register */
-	/* GNSLCT 3.0X */
-	val = GNSLCT;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK6CTRL, val);
-
-	/* BUCK7 VCC_SUB: 2.0V */
-	val = (2000000 - 750000) / 50000;
-	ret |= pmic_reg_write(p, MAX8997_REG_BUCK7DVS, val);
-
-	/* LDO1 VADC: 3.3V */
-	val = max8997_reg_ldo(3300000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO1CTRL, val);
-
-	/* LDO1 Disable active discharging */
-	ret |= pmic_reg_read(p, MAX8997_REG_LDO1CONFIG, &val);
-	val &= ~LDO_ADE;
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO1CONFIG, val);
-
-	/* LDO2 VALIVE: 1.1V */
-	val = max8997_reg_ldo(1100000) | EN_LDO;
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO2CTRL, val);
-
-	/* LDO3 VUSB/MIPI: 1.1V */
-	val = max8997_reg_ldo(1100000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, val);
-
-	/* LDO4 VMIPI: 1.8V */
-	val = max8997_reg_ldo(1800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, val);
-
-	/* LDO5 VHSIC: 1.2V */
-	val = max8997_reg_ldo(1200000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO5CTRL, val);
-
-	/* LDO6 VCC_1.8V_PDA: 1.8V */
-	val = max8997_reg_ldo(1800000) | EN_LDO;
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO6CTRL, val);
-
-	/* LDO7 CAM_ISP: 1.8V */
-	val = max8997_reg_ldo(1800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO7CTRL, val);
-
-	/* LDO8 VDAC/VUSB: 3.3V */
-	val = max8997_reg_ldo(3300000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, val);
-
-	/* LDO9 VCC_2.8V_PDA: 2.8V */
-	val = max8997_reg_ldo(2800000) | EN_LDO;
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO9CTRL, val);
-
-	/* LDO10 VPLL: 1.1V */
-	val = max8997_reg_ldo(1100000) | EN_LDO;
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO10CTRL, val);
-
-	/* LDO11 TOUCH: 2.8V */
-	val = max8997_reg_ldo(2800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO11CTRL, val);
-
-	/* LDO12 VTCAM: 1.8V */
-	val = max8997_reg_ldo(1800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO12CTRL, val);
-
-	/* LDO13 VCC_3.0_LCD: 3.0V */
-	val = max8997_reg_ldo(3000000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, val);
-
-	/* LDO14 MOTOR: 3.0V */
-	val = max8997_reg_ldo(3000000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO14CTRL, val);
-
-	/* LDO15 LED_A: 2.8V */
-	val = max8997_reg_ldo(2800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, val);
-
-	/* LDO16 CAM_SENSOR: 1.8V */
-	val = max8997_reg_ldo(1800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO16CTRL, val);
-
-	/* LDO17 VTF: 2.8V */
-	val = max8997_reg_ldo(2800000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO17CTRL, val);
-
-	/* LDO18 TOUCH_LED 3.3V */
-	val = max8997_reg_ldo(3300000) | DIS_LDO;	/* OFF */
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO18CTRL, val);
-
-	/* LDO21 VDDQ: 1.2V */
-	val = max8997_reg_ldo(1200000) | EN_LDO;
-	ret |= pmic_reg_write(p, MAX8997_REG_LDO21CTRL, val);
-
-	/* SAFEOUT for both 1 and 2: 4.9V, Active discharge, Enable */
-	val = (SAFEOUT_4_90V << 0) | (SAFEOUT_4_90V << 2) |
-		ACTDISSAFEO1 | ACTDISSAFEO2 | ENSAFEOUT1 | ENSAFEOUT2;
-	ret |= pmic_reg_write(p, MAX8997_REG_SAFEOUTCTRL, val);
-
-	if (ret) {
-		puts("MAX8997 PMIC setting error!\n");
-		return -1;
-	}
-
-	return 0;
-}
 #endif
 
 int exynos_power_init(void)
@@ -295,9 +138,7 @@ int exynos_power_init(void)
 	 * The FUEL_GAUGE is marked as I2C9 on the schematic, but connected
 	 * to logical I2C adapter 1
 	 */
-	ret = pmic_init(I2C_5);
-	ret |= pmic_init_max8997();
-	ret |= power_fg_init(I2C_9);
+	ret = power_fg_init(I2C_9);
 	ret |= power_muic_init(I2C_5);
 	ret |= power_bat_init(0);
 	if (ret)
Signature · 1 line
2.10.2
#4 lore raw

PATCH 3/6 board: samsung: trats: convert to driver model for controlling phy

In reply to Jaehoon Chung

Convert to driver model for controlling phy.

---
 board/samsung/trats/trats.c | 75 +++++++++++++++++++++++++++++----------------
 1 file changed, 48 insertions(+), 27 deletions(-)
board/samsung/trats/trats.c +48 -27
index fa297c3..be5e2e2 100644
@@ -23,6 +23,7 @@
 #include <power/max8997_muic.h>
 #include <power/battery.h>
 #include <power/max17042_fg.h>
+#include <power/pmic.h>
 #include <libtizen.h>
 #include <usb.h>
 #include <usb_mass_storage.h>
@@ -232,39 +233,59 @@ 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;
-	u32 val = 0;
-	struct pmic *p = pmic_get("MAX8997_PMIC");
-	if (!p)
-		return -ENODEV;
+	struct udevice *dev;
+	int reg, ret;
 
-	if (pmic_probe(p))
-		return -1;
+	ret = pmic_get("max8997-pmic", &dev);
+	if (ret)
+		return ret;
 
 	if (on) {
-		ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL,
-				      ENSAFEOUT1, LDO_ON);
-		ret |= pmic_reg_read(p, MAX8997_REG_LDO3CTRL, &val);
-		ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, EN_LDO | val);
-
-		ret |= pmic_reg_read(p, MAX8997_REG_LDO8CTRL, &val);
-		ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, EN_LDO | val);
+		reg = pmic_reg_read(dev, MAX8997_REG_SAFEOUTCTRL);
+		reg |= ENSAFEOUT1;
+		ret = pmic_reg_write(dev, MAX8997_REG_SAFEOUTCTRL, reg);
+		if (ret) {
+			puts("MAX8997 setting error!\n");
+			return ret;
+		}
+		reg = pmic_reg_read(dev, MAX8997_REG_LDO3CTRL);
+		reg |= EN_LDO;
+		ret = pmic_reg_write(dev, MAX8997_REG_LDO3CTRL, reg);
+		if (ret) {
+			puts("MAX8997 setting error!\n");
+			return ret;
+		}
+		reg = pmic_reg_read(dev, MAX8997_REG_LDO8CTRL);
+		reg |= EN_LDO;
+		ret = pmic_reg_write(dev, MAX8997_REG_LDO8CTRL, reg);
+		if (ret) {
+			puts("MAX8997 setting error!\n");
+			return ret;
+		}
 	} else {
-		ret |= pmic_reg_read(p, MAX8997_REG_LDO8CTRL, &val);
-		ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, DIS_LDO | val);
-
-		ret |= pmic_reg_read(p, MAX8997_REG_LDO3CTRL, &val);
-		ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, DIS_LDO | val);
-		ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL,
-				      ENSAFEOUT1, LDO_OFF);
-	}
+		reg = pmic_reg_read(dev, MAX8997_REG_LDO8CTRL);
+		reg &= DIS_LDO;
+		ret = pmic_reg_write(dev, MAX8997_REG_LDO8CTRL, reg);
+		if (ret) {
+			puts("MAX8997 setting error!\n");
+			return ret;
+		}
+		reg = pmic_reg_read(dev, MAX8997_REG_LDO3CTRL);
+		reg &= DIS_LDO;
+		ret = pmic_reg_write(dev, MAX8997_REG_LDO3CTRL, reg);
+		if (ret) {
+			puts("MAX8997 setting error!\n");
+			return ret;
+		}
+		reg = pmic_reg_read(dev, MAX8997_REG_SAFEOUTCTRL);
+		reg &= ~ENSAFEOUT1;
+		ret = pmic_reg_write(dev, MAX8997_REG_SAFEOUTCTRL, reg);
+		if (ret) {
+			puts("MAX8997 setting error!\n");
+			return ret;
+		}
 
-	if (ret) {
-		puts("MAX8997 LDO setting error!\n");
-		return -1;
 	}
-#endif
 
 	return 0;
 }
Signature · 1 line
2.10.2
#5 lore raw

PATCH 3/6 board: samsung: trats: convert to driver model for controlling phy

Quoted 6 lines · Jaehoon Chung

Convert to driver model for controlling phy.

---
 board/samsung/trats/trats.c | 75 +++++++++++++++++++++++++++++----------------
 1 file changed, 48 insertions(+), 27 deletions(-)

Also see pmic_clrsetbits().

Regards,
Simon

#6 lore raw

PATCH 4/6 arm: dts: trats: add i2c_fg node for fuelgauge

In reply to Jaehoon Chung

Trats has the i2c gpio for fuel-gaugge.
This patch s for preparing to use the fuel-gauge.

---
 arch/arm/dts/exynos4210-trats.dts | 9 +++++++++
 1 file changed, 9 insertions(+)
arch/arm/dts/exynos4210-trats.dts +9 -0
index 69c0605..ac422e4 100644
@@ -23,6 +23,7 @@
 		console = "/serial at 13820000";
 		mmc0 = "/sdhci at 12510000";
 		mmc2 = "/sdhci at 12530000";
+		i2c8 = &i2c_fg;
 	};
 
 	fimd at 11c00000 {
@@ -113,6 +114,14 @@
 	dwmmc at 12550000 {
 		status = "disabled";
 	};
+
+	i2c_fg: fuel-gauge {
+		compatible = "i2c-gpio";
+		gpios = <&gpy4 1 0>,	/* sda */
+			<&gpy4 0 0>;	/* scl */
+		i2c-gpio,delay-us = <2>;        /* ~100 kHz */
+		status = "okay";
+	};
 };
 
 &i2c_5 {
Signature · 1 line
2.10.2
#7 lore raw

PATCH 5/6 board: samsung: trats: remove the i2c_init function

In reply to Jaehoon Chung

i2c should be initialized with device-tree.
This function doesn't need anymore.

---
 board/samsung/trats/trats.c | 13 -------------
 1 file changed, 13 deletions(-)
board/samsung/trats/trats.c +0 -13
index be5e2e2..00059a1 100644
@@ -52,19 +52,6 @@ int exynos_init(void)
 	return 0;
 }
 
-void i2c_init_board(void)
-{
-#ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
-	int err;
-
-	/* I2C_8 -> FG */
-	gpio_request(EXYNOS4_GPIO_Y40, "i2c_clk");
-	gpio_request(EXYNOS4_GPIO_Y41, "i2c_data");
-	gpio_direction_output(EXYNOS4_GPIO_Y40, 1);
-	gpio_direction_output(EXYNOS4_GPIO_Y41, 1);
-#endif
-}
-
 #ifndef CONFIG_DM_I2C /* TODO(maintainer): Convert to driver model */
 static void trats_low_power_mode(void)
 {
Signature · 1 line
2.10.2
#9 lore raw

PATCH 6/6 configs: trats: enable the CONFIG_DM_I2C_GPIO

In reply to Jaehoon Chung

Enable the CONFIG_DM_I2C_GPIO for using i2c gpio

---
 configs/trats_defconfig | 1 +
 1 file changed, 1 insertion(+)
configs/trats_defconfig +1 -0
index 2be05ff..23024fd 100644
@@ -34,6 +34,7 @@ CONFIG_CMD_FS_GENERIC=y
 CONFIG_ISO_PARTITION=y
 CONFIG_OF_CONTROL=y
 CONFIG_DFU_MMC=y
+CONFIG_DM_I2C_GPIO=y
 CONFIG_MMC_DW=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_SDMA=y
Signature · 1 line
2.10.2
#10 lore raw

PATCH 6/6 configs: trats: enable the CONFIG_DM_I2C_GPIO

Quoted 20 lines · Jaehoon Chung

Enable the CONFIG_DM_I2C_GPIO for using i2c gpio

---
 configs/trats_defconfig | 1 +
 1 file changed, 1 insertion(+)
configs/trats_defconfig +1 -1
index 2be05ff..23024fd 100644
@@ -34,6 +34,7 @@ CONFIG_CMD_FS_GENERIC=y
 CONFIG_ISO_PARTITION=y
 CONFIG_OF_CONTROL=y
 CONFIG_DFU_MMC=y
+CONFIG_DM_I2C_GPIO=y
 CONFIG_MMC_DW=y
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_SDMA=y
--
Quoted 2 lines

2.10.2

#11 lore raw

cover trats: convert to driver model

In reply to Jaehoon Chung

Hi Jaehoon,

Quoted 4 lines

This patchset is for converting to driver model.
This task is working in progress.
Some codes should be remained to legacy mode, it will be converted in future.

Quoted 9 lines

Jaehoon Chung (6):
configs: trats: enable the CONFIG_DM_PMIC and PMIC_MAX8997
board: samsung: trats: remove the unnecessary codes
board: samsung: trats: convert to driver model for controlling phy
arm: dts: trats: add i2c_fg node for fuelgauge
board: samsung: trats: remove the i2c_init function
configs: trats: enable the CONFIG_DM_I2C_GPIO

Quoted 6 lines
 arch/arm/dts/exynos4210-trats.dts |   9 ++
 board/samsung/trats/trats.c       | 249

++++++++------------------------------
configs/trats_defconfig | 4 + 3 files changed, 62
insertions(+), 200 deletions(-)

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de

#12 lore raw

cover trats: convert to driver model

Hi

2017년 3월 30일 (목) 22:09, Lukasz Majewski <[email protected]>님이 작성:

Quoted 32 lines

Hi Jaehoon,

Quoted 4 lines

This patchset is for converting to driver model.
This task is working in progress.
Some codes should be remained to legacy mode, it will be converted in future.

Quoted 9 lines

Jaehoon Chung (6):
configs: trats: enable the CONFIG_DM_PMIC and PMIC_MAX8997
board: samsung: trats: remove the unnecessary codes
board: samsung: trats: convert to driver model for controlling phy
arm: dts: trats: add i2c_fg node for fuelgauge
board: samsung: trats: remove the i2c_init function
configs: trats: enable the CONFIG_DM_I2C_GPIO

Quoted 6 lines
 arch/arm/dts/exynos4210-trats.dts |   9 ++
 board/samsung/trats/trats.c       | 249

++++++++------------------------------
configs/trats_defconfig | 4 + 3 files changed, 62
insertions(+), 200 deletions(-)

Best regards,

Lukasz Majewski

--

Quoted 7 lines

DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
https://lists.denx.de/listinfo/u-boot

applied to u-boot-samsung.

Thanks

Signature · 1 line
Thanks. Minkyu Kang.