diff options
| -rw-r--r-- | arch/arm/mach-omap2/clock34xx.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/clock34xx.c b/arch/arm/mach-omap2/clock34xx.c index fafcd32e6907..489556eecbd1 100644 --- a/arch/arm/mach-omap2/clock34xx.c +++ b/arch/arm/mach-omap2/clock34xx.c | |||
| @@ -338,6 +338,13 @@ static struct omap_clk omap34xx_clks[] = { | |||
| 338 | */ | 338 | */ |
| 339 | #define SDRC_MPURATE_LOOPS 96 | 339 | #define SDRC_MPURATE_LOOPS 96 |
| 340 | 340 | ||
| 341 | /* | ||
| 342 | * DPLL5_FREQ_FOR_USBHOST: USBHOST and USBTLL are the only clocks | ||
| 343 | * that are sourced by DPLL5, and both of these require this clock | ||
| 344 | * to be at 120 MHz for proper operation. | ||
| 345 | */ | ||
| 346 | #define DPLL5_FREQ_FOR_USBHOST 120000000 | ||
| 347 | |||
| 341 | /** | 348 | /** |
| 342 | * omap3430es2_clk_ssi_find_idlest - return CM_IDLEST info for SSI | 349 | * omap3430es2_clk_ssi_find_idlest - return CM_IDLEST info for SSI |
| 343 | * @clk: struct clk * being enabled | 350 | * @clk: struct clk * being enabled |
| @@ -1056,6 +1063,28 @@ void omap2_clk_prepare_for_reboot(void) | |||
| 1056 | #endif | 1063 | #endif |
| 1057 | } | 1064 | } |
| 1058 | 1065 | ||
| 1066 | static void omap3_clk_lock_dpll5(void) | ||
| 1067 | { | ||
| 1068 | struct clk *dpll5_clk; | ||
| 1069 | struct clk *dpll5_m2_clk; | ||
| 1070 | |||
| 1071 | dpll5_clk = clk_get(NULL, "dpll5_ck"); | ||
| 1072 | clk_set_rate(dpll5_clk, DPLL5_FREQ_FOR_USBHOST); | ||
| 1073 | clk_enable(dpll5_clk); | ||
| 1074 | |||
| 1075 | /* Enable autoidle to allow it to enter low power bypass */ | ||
| 1076 | omap3_dpll_allow_idle(dpll5_clk); | ||
| 1077 | |||
| 1078 | /* Program dpll5_m2_clk divider for no division */ | ||
| 1079 | dpll5_m2_clk = clk_get(NULL, "dpll5_m2_ck"); | ||
| 1080 | clk_enable(dpll5_m2_clk); | ||
| 1081 | clk_set_rate(dpll5_m2_clk, DPLL5_FREQ_FOR_USBHOST); | ||
| 1082 | |||
| 1083 | clk_disable(dpll5_m2_clk); | ||
| 1084 | clk_disable(dpll5_clk); | ||
| 1085 | return; | ||
| 1086 | } | ||
| 1087 | |||
| 1059 | /* REVISIT: Move this init stuff out into clock.c */ | 1088 | /* REVISIT: Move this init stuff out into clock.c */ |
| 1060 | 1089 | ||
| 1061 | /* | 1090 | /* |
| @@ -1148,6 +1177,12 @@ int __init omap2_clk_init(void) | |||
| 1148 | */ | 1177 | */ |
| 1149 | clk_enable_init_clocks(); | 1178 | clk_enable_init_clocks(); |
| 1150 | 1179 | ||
| 1180 | /* | ||
| 1181 | * Lock DPLL5 and put it in autoidle. | ||
| 1182 | */ | ||
| 1183 | if (omap_rev() >= OMAP3430_REV_ES2_0) | ||
| 1184 | omap3_clk_lock_dpll5(); | ||
| 1185 | |||
| 1151 | /* Avoid sleeping during omap2_clk_prepare_for_reboot() */ | 1186 | /* Avoid sleeping during omap2_clk_prepare_for_reboot() */ |
| 1152 | /* REVISIT: not yet ready for 343x */ | 1187 | /* REVISIT: not yet ready for 343x */ |
| 1153 | #if 0 | 1188 | #if 0 |
