[RFC PATCH 4/4] HACK: OMAP4460/TPS/TWL/PandaBoardES - Enable VP regulator for cpufreq

From: Nishanth Menon
Date: Wed May 22 2013 - 14:19:33 EST


This is just an example patch - Tested on PandaBoard-ES OMAP4460
Connectivity is as follows:
VP_MPU -> VC_CH_MPU -> VC -> TPS62361
TPS62631 Voltage register selection is done using GPIO (GPIO_WK 7)
VP_IVA -> VC_CH_IVA -> VC -> TWL6030/vcore2
VP_CORE -> VC_CH_CORE -> VC -> TWL6030/vcore1

NOT-Signed-off-by: Nishanth Menon <nm@xxxxxx>
---
arch/arm/boot/dts/omap4-panda-es.dts | 55 +++++++++++++++++++--
arch/arm/boot/dts/omap4.dtsi | 84 +++++++++++++++++++++++++++++++
arch/arm/boot/dts/omap4460.dtsi | 1 +
arch/arm/boot/dts/tps62361.dtsi | 90 ++++++++++++++++++++++++++++++++++
arch/arm/boot/dts/twl6030.dtsi | 68 +++++++++++++++++++++++++
5 files changed, 294 insertions(+), 4 deletions(-)
create mode 100644 arch/arm/boot/dts/tps62361.dtsi

diff --git a/arch/arm/boot/dts/omap4-panda-es.dts b/arch/arm/boot/dts/omap4-panda-es.dts
index 08d2e38..71aa5f3 100644
--- a/arch/arm/boot/dts/omap4-panda-es.dts
+++ b/arch/arm/boot/dts/omap4-panda-es.dts
@@ -43,10 +43,18 @@
};
};

-&led_wkgpio_pins {
- pinctrl-single,pins = <
- 0x1c 0x3 /* gpio_wk8 OUTPUT | MODE 3 */
- >;
+&omap4_pmx_wkup {
+ led_wkgpio_pins: pinmux_leds_wkpins {
+ pinctrl-single,pins = <
+ 0x1c 0x3 /* gpio_wk8 OUTPUT | MODE 3 */
+ >;
+ };
+
+ tps62361_wkgpio_pins: pinmux_tps62361_wkpins {
+ pinctrl-single,pins = <
+ 0x1a 0xa03 /* gpio_wk7 OUTPUT | MODE 3 |OFF_HI */
+ >;
+ };
};

&leds {
@@ -68,3 +76,42 @@
linux,default-trigger = "mmc0";
};
};
+
+#define TPS62361_PD_VSEL0
+#include "tps62361.dtsi"
+
+/* Board Specific configuration */
+&omap_tps62361 {
+ pinctrl-names = "default";
+ pinctrl-0 = <
+ &tps62361_wkgpio_pins
+ >;
+ gpios = <&gpio1 7 1>; /* gpio_wk7 Set to HIGH */
+
+ ti,boot-voltage-micro-volts=<1203000>;
+ ti,vp=<&vp_mpu>;
+};
+
+&omap_twl6030_vcore1 {
+ ti,boot-voltage-micro-volts=<1200000>;
+ ti,vp=<&vp_core>;
+};
+
+&omap_twl6030_vcore2 {
+ ti,boot-voltage-micro-volts=<1200000>;
+ ti,vp = <&vp_iva>;
+};
+
+&omap_twl6030_vcore3 {
+ status = "disabled";
+};
+
+&vc_mpu {
+ /* Due to potential lifetime impact, OFF voltage is set to RET V: TPS*/
+ ti,off-micro-volts = <750000>;
+};
+
+&vc {
+ ti,i2c-high-speed;
+ ti,i2c-pad-load=<3>;
+};
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
index 1c6d969..b9fd360 100644
--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -108,6 +108,11 @@
ti,hwmods = "counter_32k";
};

+ sysclk_in: sys_clkin {
+ #clock-cells = <0>;
+ compatible = "ti,omap-clock";
+ };
+
dpll_mpu: dpll_mpu {
#clock-cells = <0>;
compatible = "ti,omap-clock";
@@ -667,5 +672,84 @@
ram-bits = <12>;
ti,has-mailbox;
};
+
+ vc: vc@0x4A307B88 {
+ compatible = "ti,omap4-vc";
+ clocks = <&sysclk_in>;
+ reg = <0x4A307B88 0x40>;
+ reg-names = "base-address";
+
+ ti,i2c-high-speed; /* belongs to board file */
+ vc_mpu: vc_mpu {
+ compatible = "ti,omap4-vc-channel-mpu";
+ ti,master-channel;
+ ti,retention-micro-volts = <750000>;
+ ti,off-micro-volts = <0>;
+ };
+
+ vc_iva: vc_iva {
+ compatible = "ti,omap4-vc-channel-iva";
+ ti,retention-micro-volts = <750000>;
+ ti,off-micro-volts = <0>;
+ };
+
+ vc_core: vc_core {
+ compatible = "ti,omap4-vc-channel-core";
+ ti,retention-micro-volts = <750000>;
+ ti,off-micro-volts = <0>;
+ };
+ };
+
+ vp_mpu: vp@0x4a307b58 {
+ compatible = "ti,omap4-vp";
+
+ reg = <0x4a307b58 0x18>, <0x4A306014 0x4>;
+ reg-names = "base-address", "int-address";
+ ti,tranxdone-status-mask=<0x20>;
+
+ clocks = <&sysclk_in>;
+
+ ti,vc-channel = <&vc_mpu>;
+ ti,min-step-micro-volts = <10000>;
+ ti,max-step-micro-volts = <50000>;
+ /* HACKs: belongs to SoC specific file */
+ ti,min-micro-volts = <750000>;
+ ti,max-micro-volts = <1410000>;
+ };
+
+ vp_iva: vp@0x4a307b70 {
+ compatible = "ti,omap4-vp";
+
+ reg = <0x4a307b70 0x18>, <0x4A306010 0x4>;
+ reg-names = "base-address", "int-address";
+ ti,tranxdone-status-mask=<0x20000000>;
+
+ clocks = <&sysclk_in>;
+
+ ti,vc-channel = <&vc_iva>;
+ /* HACKs: belongs to SoC specific file */
+ ti,min-step-micro-volts = <10000>;
+ ti,max-step-micro-volts = <50000>;
+ ti,min-micro-volts = <750000>;
+ ti,max-micro-volts = <1260000>;
+ };
+
+ vp_core: vp@0x4a307b40 {
+ compatible = "ti,omap4-vp";
+
+ reg = <0x4a307b40 0x18>, <0x4A306010 0x4>;
+ reg-names = "base-address", "int-address";
+ ti,tranxdone-status-mask=<0x200000>;
+
+ clocks = <&sysclk_in>;
+
+ regulator_name = "vdd_core";
+ ti,vc-channel = <&vc_core>;
+ /* HACKs: belongs to SoC specific file */
+ ti,min-step-micro-volts = <10000>;
+ ti,max-step-micro-volts = <50000>;
+ ti,min-micro-volts = <830000>;
+ ti,max-micro-volts = <1200000>;
+ };
};
};
diff --git a/arch/arm/boot/dts/omap4460.dtsi b/arch/arm/boot/dts/omap4460.dtsi
index 2cf227c..6937d92 100644
--- a/arch/arm/boot/dts/omap4460.dtsi
+++ b/arch/arm/boot/dts/omap4460.dtsi
@@ -20,6 +20,7 @@
920000 1313000
>;
clock-latency = <300000>; /* From legacy driver */
+ cpu0-supply = <&omap_tps62361>; /* HACK: belongs to board file */
};
};

diff --git a/arch/arm/boot/dts/tps62361.dtsi b/arch/arm/boot/dts/tps62361.dtsi
new file mode 100644
index 0000000..b82a50f
--- /dev/null
+++ b/arch/arm/boot/dts/tps62361.dtsi
@@ -0,0 +1,90 @@
+
+/* Add blah blah */
+
+/* Register set definitions */
+#define REG_TPS6236X_SET_0 0x00
+#define REG_TPS6236X_SET_1 0x01
+#define REG_TPS6236X_SET_2 0x02
+#define REG_TPS6236X_SET_3 0x03
+#define REG_TPS6236X_CTRL 0x04
+#define REG_TPS6236X_TEMP 0x05
+#define REG_TPS6236X_RAMP_CTRL 0x06
+#define REG_TPS6236X_CHIP_ID0 0x08
+#define REG_TPS6236X_CHIP_ID1 0x09
+
+/* Register field definitions for REG_TPS6236X_CTRL */
+#define REG_TPS6236X_CTRL_PD_EN (1 << 7)
+#define REG_TPS6236X_CTRL_PD_VSEL0 (1 << 6)
+#define REG_TPS6236X_CTRL_PD_VSEL1 (1 << 5)
+
+/* Register field definitions for REG_TPS6236X_RAMP_CTRL */
+#define REG_TPS6236X_RAMP_CTRL_RMP_SHIFT 5
+#define REG_TPS6236X_RAMP_CTRL_EN_DISC (1 << 2)
+#define REG_TPS6236X_RAMP_CTRL_RAMP_PFM (1 << 1)
+
+/* Value definitions for REG_TPS6236X_RAMP_CTRL::RMP field */
+#define RMP_32MV_USEC 0x0
+#define RMP_16MV_USEC 0x1
+#define RMP_8MV_USEC 0x2
+#define RMP_4MV_USEC 0x3
+#define RMP_2MV_USEC 0x4
+#define RMP_1MV_USEC 0x5
+
+/* Selected values */
+#define RMP_VALUE (RMP_32MV_USEC << REG_TPS6236X_RAMP_CTRL_RMP_SHIFT | REG_TPS6236X_RAMP_CTRL_EN_DISC | REG_TPS6236X_RAMP_CTRL_RAMP_PFM)
+
+#ifdef TPS62361_PD_VSEL0
+#define _CTRL_VALUE0 (REG_TPS6236X_CTRL_PD_EN | REG_TPS6236X_CTRL_PD_VSEL0)
+#else
+#define _CTRL_VALUE0 0x0
+#endif
+#ifdef TPS62361_PD_VSEL1
+#define _CTRL_VALUE1 (REG_TPS6236X_CTRL_PD_EN | REG_TPS6236X_CTRL_PD_VSEL0)
+#else
+#define _CTRL_VALUE1 0x0
+#endif
+
+#if defined(TPS62361_PD_VSEL0) || defined(TPS62361_PD_VSEL1)
+#define _CTRL_VALUE (_CTRL_VALUE0 | _CTRL_VALUE0)
+#endif
+
+/ {
+ omap_tps62361: tps62361 {
+ compatible = "ti,omap-pmic";
+ ti,non-zero-voltage-selector;
+
+ /* Slave address */
+ ti,i2c-slave-address = <0x60>;
+ /* I2C register address */
+ ti,i2c-voltage-register = <0x01>; /* Set 1 */
+ ti,i2c-command-register = <0x01>; /* Set 1 */
+
+ /* Slew rate in uV */
+ ti,slew-rate-microvolt = <32000>;
+ /* Step size in uV */
+ ti,step-size-microvolt = <10000>;
+ regulator-min-microvolt= <500000>;
+ regulator-max-microvolt= <1770000>;
+
+ /* Optional - any voltage selector offset to care about */
+ ti,voltage-selector-offset = <0x0>;
+ /* Optional - what mask to apply on vsel value before doing operations on it */
+ ti,voltage-selector-mask =<0x7F>;
+ /* Optional - what bits to always set on voltage selector when sending to PMIC */
+ ti,voltage-selector-set-bits =<0x80>; /* PFM mode */
+
+ /* Optional - Any access to be done over I2C SR to setup registers */
+ ti,setup_commands=<
+ /* register_addr value */
+ /* Setup Slew (ramp) rate */
+ REG_TPS6236X_RAMP_CTRL RMP_VALUE
+ /* Setup PMIC internal pull if needed */
+#ifdef _CTRL_VALUE
+ REG_TPS6236X_CTRL _CTRL_VALUE
+#endif
+ /* Enable thermal shutdown - 0 is enable :) */
+ REG_TPS6236X_TEMP 0x0
+ /* Setup the internal pulls */
+ >;
+ };
+};
diff --git a/arch/arm/boot/dts/twl6030.dtsi b/arch/arm/boot/dts/twl6030.dtsi
index 2e3bd31..5e1f4ed 100644
--- a/arch/arm/boot/dts/twl6030.dtsi
+++ b/arch/arm/boot/dts/twl6030.dtsi
@@ -103,4 +103,72 @@
compatible = "ti,twl6030-pwmled";
#pwm-cells = <2>;
};
+
+ omap_twl6030_vcore1: vcore1 {
+ compatible = "ti,omap-pmic";
+
+ /* Slave address */
+ ti,i2c-slave-address = <0x12>;
+ /* I2C register address */
+ ti,i2c-voltage-register = <0x55>;
+ ti,i2c-command-register = <0x56>;
+
+ /* Slew rate in uV */
+ ti,slew-rate-microvolt = <9000>;
+ /* Step size in uV */
+ ti,step-size-microvolt = <12660>;
+ regulator-min-microvolt= <709000>;
+ regulator-max-microvolt= <1418000>;
+
+ /* Optional - any voltage selector offset to care about */
+ ti,voltage-selector-offset = <0x1>;
+ /* Optional - what mask to apply on vsel value before doing operations on it */
+ ti,voltage-selector-mask =<0x7F>;
+ };
+
+ omap_twl6030_vcore2: vcore2 {
+ compatible = "ti,omap-pmic";
+
+ /* Slave address */
+ ti,i2c-slave-address = <0x12>;
+ /* I2C register address */
+ ti,i2c-voltage-register = <0x5b>;
+ ti,i2c-command-register = <0x5c>;
+
+ /* Slew rate in uV */
+ ti,slew-rate-microvolt = <9000>;
+ /* Step size in uV */
+ ti,step-size-microvolt = <12660>;
+ /* Min voltage in uV for continous operational range at step size */
+ regulator-min-microvolt= <709000>;
+ regulator-max-microvolt= <1418000>;
+
+ /* Optional - any voltage selector offset to care about */
+ ti,voltage-selector-offset = <0x1>;
+ /* Optional - what mask to apply on vsel value before doing operations on it */
+ ti,voltage-selector-mask =<0x7F>;
+ };
+
+ omap_twl6030_vcore3: vcore3 {
+ compatible = "ti,omap-pmic";
+
+ /* Slave address */
+ ti,i2c-slave-address = <0x12>;
+ /* I2C register address */
+ ti,i2c-voltage-register = <0x61>;
+ ti,i2c-command-register = <0x62>;
+
+
+ /* Slew rate in uV */
+ ti,slew-rate-microvolt = <9000>;
+ /* Step size in uV */
+ ti,step-size-microvolt = <12660>;
+ regulator-min-microvolt= <709000>;
+ regulator-max-microvolt= <1418000>;
+
+ /* Optional - any voltage selector offset to care about */
+ ti,voltage-selector-offset = <0x1>;
+ /* Optional - what mask to apply on vsel value before doing operations on it */
+ ti,voltage-selector-mask =<0x7F>;
+ };
};
--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/