1 From bba669562fa208d12f4c7cd8188446e8576cd6ee Mon Sep 17 00:00:00 2001
\r
2 From: Syed Mohammed Khasim <khasim@ti.com>
\r
3 Date: Fri, 8 Jan 2010 20:34:37 +0530
\r
4 Subject: [PATCH] Support 720Mhz configuration for OMAP35xx
\r
6 Adds a new API "twl4030_pmrecv_vsel_cfg" to select voltage and group
\r
7 Adds support for 720Mhz in clock.c
\r
8 Board file modified to use these new APIs and boot at 720Mhz
\r
10 Signed-off-by: Syed Mohammed Khasim <khasim@ti.com>
\r
12 board/ti/beagle/beagle.c | 20 ++++++++++++++++++--
\r
13 cpu/arm_cortexa8/omap3/clock.c | 21 +++++++++++++++++++++
\r
14 drivers/power/twl4030.c | 24 +++++++++++++++---------
\r
15 include/twl4030.h | 16 ++++++++++++++++
\r
16 4 files changed, 70 insertions(+), 11 deletions(-)
\r
18 diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c
\r
19 index 0def5a6..7985ee9 100644
\r
20 --- a/board/ti/beagle/beagle.c
\r
21 +++ b/board/ti/beagle/beagle.c
\r
22 @@ -122,9 +122,27 @@ int misc_init_r(void)
\r
23 struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE;
\r
24 struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
\r
26 + beagle_identify();
\r
28 twl4030_power_init();
\r
31 + if ((beagle_revision == REVISION_C4) || (beagle_revision == REVISION_XM)) {
\r
33 + /* Select TWL4030 VSEL to support 720Mhz */
\r
34 + twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VAUX2_DEDICATED,
\r
36 + TWL4030_PM_RECEIVER_VAUX2_DEV_GRP,
\r
39 + twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VDD1_VSEL,
\r
41 + TWL4030_PM_RECEIVER_VDD1_DEV_GRP,
\r
44 + prcm_config_720mhz();
\r
47 /* Configure GPIOs to output */
\r
48 writel(~(GPIO23 | GPIO10 | GPIO8 | GPIO2 | GPIO1), &gpio6_base->oe);
\r
49 writel(~(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 |
\r
50 @@ -136,8 +154,6 @@ int misc_init_r(void)
\r
51 writel(GPIO31 | GPIO30 | GPIO29 | GPIO28 | GPIO22 | GPIO21 |
\r
52 GPIO15 | GPIO14 | GPIO13 | GPIO12, &gpio5_base->setdataout);
\r
54 - beagle_identify();
\r
59 diff --git a/cpu/arm_cortexa8/omap3/clock.c b/cpu/arm_cortexa8/omap3/clock.c
\r
60 index 174c453..d67517a 100644
\r
61 --- a/cpu/arm_cortexa8/omap3/clock.c
\r
62 +++ b/cpu/arm_cortexa8/omap3/clock.c
\r
63 @@ -402,3 +402,24 @@ void per_clocks_enable(void)
\r
69 + * Configure PRCM registers to get 720 Mhz
\r
71 + * NOTE: N value doesn't change, only M gets affected
\r
73 +void prcm_config_720mhz(void)
\r
75 + struct prcm *prcm_base = (struct prcm *)PRCM_BASE;
\r
77 + /* Unlock MPU DPLL (slows things down, and needed later) */
\r
78 + sr32(&prcm_base->clken_pll_mpu, 0, 3, PLL_LOW_POWER_BYPASS);
\r
79 + wait_on_value(ST_MPU_CLK, 0, &prcm_base->idlest_pll_mpu, LDELAY);
\r
82 + sr32(&prcm_base->clksel1_pll_mpu, 8, 11, 0x2D0);
\r
85 + sr32(&prcm_base->clken_pll_mpu, 0, 3, PLL_LOCK);
\r
86 + wait_on_value(ST_MPU_CLK, 1, &prcm_base->idlest_pll_mpu, LDELAY);
\r
88 diff --git a/drivers/power/twl4030.c b/drivers/power/twl4030.c
\r
89 index eb066cb..d68e515 100644
\r
90 --- a/drivers/power/twl4030.c
\r
91 +++ b/drivers/power/twl4030.c
\r
92 @@ -59,16 +59,9 @@ void twl4030_power_reset_init(void)
\r
100 -#define DEV_GRP_P1 0x20
\r
101 -#define VAUX3_VSEL_28 0x03
\r
102 -#define DEV_GRP_ALL 0xE0
\r
103 -#define VPLL2_VSEL_18 0x05
\r
104 -#define VDAC_VSEL_18 0x03
\r
106 void twl4030_power_init(void)
\r
108 unsigned char byte;
\r
109 @@ -98,8 +91,6 @@ void twl4030_power_init(void)
\r
110 TWL4030_PM_RECEIVER_VDAC_DEDICATED);
\r
113 -#define VMMC1_VSEL_30 0x02
\r
115 void twl4030_power_mmc_init(void)
\r
117 unsigned char byte;
\r
118 @@ -113,3 +104,18 @@ void twl4030_power_mmc_init(void)
\r
119 twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER, byte,
\r
120 TWL4030_PM_RECEIVER_VMMC1_DEDICATED);
\r
124 + * Generic function to select Device Group and Voltage
\r
126 +void twl4030_pmrecv_vsel_cfg(u8 vsel_reg, u8 vsel_val,
\r
127 + u8 dev_grp, u8 dev_grp_sel)
\r
129 + /* Select the Device Group */
\r
130 + twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER, dev_grp_sel,
\r
133 + /* Select the Voltage */
\r
134 + twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER, vsel_val,
\r
137 diff --git a/include/twl4030.h b/include/twl4030.h
\r
138 index f260ecb..b96c96c 100644
\r
139 --- a/include/twl4030.h
\r
140 +++ b/include/twl4030.h
\r
141 @@ -359,6 +359,22 @@
\r
142 #define TWL4030_USB_PHY_DPLL_CLK (1 << 0)
\r
145 + * Voltage Selection in PM Receiver Module
\r
147 +#define VAUX2_VSEL_18 0x05
\r
148 +#define VDD1_VSEL_14 0x40
\r
149 +#define VAUX3_VSEL_28 0x03
\r
150 +#define VPLL2_VSEL_18 0x05
\r
151 +#define VDAC_VSEL_18 0x03
\r
152 +#define VMMC1_VSEL_30 0x02
\r
155 + * Device Selection
\r
157 +#define DEV_GRP_P1 0x20
\r
158 +#define DEV_GRP_ALL 0xE0
\r
161 * Convience functions to read and write from TWL4030
\r
163 * chip_no is the i2c address, it must be one of the chip addresses
\r