diff options
Diffstat (limited to 'drivers/usb/musb/omap2430.c')
-rw-r--r-- | drivers/usb/musb/omap2430.c | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index 34875201ee04..82592633502f 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/module.h> | 27 | #include <linux/module.h> |
28 | #include <linux/kernel.h> | 28 | #include <linux/kernel.h> |
29 | #include <linux/sched.h> | 29 | #include <linux/sched.h> |
30 | #include <linux/slab.h> | ||
31 | #include <linux/init.h> | 30 | #include <linux/init.h> |
32 | #include <linux/list.h> | 31 | #include <linux/list.h> |
33 | #include <linux/clk.h> | 32 | #include <linux/clk.h> |
@@ -35,7 +34,7 @@ | |||
35 | 34 | ||
36 | #include <asm/mach-types.h> | 35 | #include <asm/mach-types.h> |
37 | #include <mach/hardware.h> | 36 | #include <mach/hardware.h> |
38 | #include <mach/mux.h> | 37 | #include <plat/mux.h> |
39 | 38 | ||
40 | #include "musb_core.h" | 39 | #include "musb_core.h" |
41 | #include "omap2430.h" | 40 | #include "omap2430.h" |
@@ -220,7 +219,7 @@ int __init musb_platform_init(struct musb *musb) | |||
220 | 219 | ||
221 | musb_platform_resume(musb); | 220 | musb_platform_resume(musb); |
222 | 221 | ||
223 | l = omap_readl(OTG_SYSCONFIG); | 222 | l = musb_readl(musb->mregs, OTG_SYSCONFIG); |
224 | l &= ~ENABLEWAKEUP; /* disable wakeup */ | 223 | l &= ~ENABLEWAKEUP; /* disable wakeup */ |
225 | l &= ~NOSTDBY; /* remove possible nostdby */ | 224 | l &= ~NOSTDBY; /* remove possible nostdby */ |
226 | l |= SMARTSTDBY; /* enable smart standby */ | 225 | l |= SMARTSTDBY; /* enable smart standby */ |
@@ -233,17 +232,19 @@ int __init musb_platform_init(struct musb *musb) | |||
233 | */ | 232 | */ |
234 | if (!cpu_is_omap3430()) | 233 | if (!cpu_is_omap3430()) |
235 | l |= AUTOIDLE; /* enable auto idle */ | 234 | l |= AUTOIDLE; /* enable auto idle */ |
236 | omap_writel(l, OTG_SYSCONFIG); | 235 | musb_writel(musb->mregs, OTG_SYSCONFIG, l); |
237 | 236 | ||
238 | l = omap_readl(OTG_INTERFSEL); | 237 | l = musb_readl(musb->mregs, OTG_INTERFSEL); |
239 | l |= ULPI_12PIN; | 238 | l |= ULPI_12PIN; |
240 | omap_writel(l, OTG_INTERFSEL); | 239 | musb_writel(musb->mregs, OTG_INTERFSEL, l); |
241 | 240 | ||
242 | pr_debug("HS USB OTG: revision 0x%x, sysconfig 0x%02x, " | 241 | pr_debug("HS USB OTG: revision 0x%x, sysconfig 0x%02x, " |
243 | "sysstatus 0x%x, intrfsel 0x%x, simenable 0x%x\n", | 242 | "sysstatus 0x%x, intrfsel 0x%x, simenable 0x%x\n", |
244 | omap_readl(OTG_REVISION), omap_readl(OTG_SYSCONFIG), | 243 | musb_readl(musb->mregs, OTG_REVISION), |
245 | omap_readl(OTG_SYSSTATUS), omap_readl(OTG_INTERFSEL), | 244 | musb_readl(musb->mregs, OTG_SYSCONFIG), |
246 | omap_readl(OTG_SIMENABLE)); | 245 | musb_readl(musb->mregs, OTG_SYSSTATUS), |
246 | musb_readl(musb->mregs, OTG_INTERFSEL), | ||
247 | musb_readl(musb->mregs, OTG_SIMENABLE)); | ||
247 | 248 | ||
248 | omap_vbus_power(musb, musb->board_mode == MUSB_HOST, 1); | 249 | omap_vbus_power(musb, musb->board_mode == MUSB_HOST, 1); |
249 | 250 | ||
@@ -255,6 +256,22 @@ int __init musb_platform_init(struct musb *musb) | |||
255 | return 0; | 256 | return 0; |
256 | } | 257 | } |
257 | 258 | ||
259 | #ifdef CONFIG_PM | ||
260 | void musb_platform_save_context(struct musb *musb, | ||
261 | struct musb_context_registers *musb_context) | ||
262 | { | ||
263 | musb_context->otg_sysconfig = musb_readl(musb->mregs, OTG_SYSCONFIG); | ||
264 | musb_context->otg_forcestandby = musb_readl(musb->mregs, OTG_FORCESTDBY); | ||
265 | } | ||
266 | |||
267 | void musb_platform_restore_context(struct musb *musb, | ||
268 | struct musb_context_registers *musb_context) | ||
269 | { | ||
270 | musb_writel(musb->mregs, OTG_SYSCONFIG, musb_context->otg_sysconfig); | ||
271 | musb_writel(musb->mregs, OTG_FORCESTDBY, musb_context->otg_forcestandby); | ||
272 | } | ||
273 | #endif | ||
274 | |||
258 | int musb_platform_suspend(struct musb *musb) | 275 | int musb_platform_suspend(struct musb *musb) |
259 | { | 276 | { |
260 | u32 l; | 277 | u32 l; |
@@ -263,13 +280,13 @@ int musb_platform_suspend(struct musb *musb) | |||
263 | return 0; | 280 | return 0; |
264 | 281 | ||
265 | /* in any role */ | 282 | /* in any role */ |
266 | l = omap_readl(OTG_FORCESTDBY); | 283 | l = musb_readl(musb->mregs, OTG_FORCESTDBY); |
267 | l |= ENABLEFORCE; /* enable MSTANDBY */ | 284 | l |= ENABLEFORCE; /* enable MSTANDBY */ |
268 | omap_writel(l, OTG_FORCESTDBY); | 285 | musb_writel(musb->mregs, OTG_FORCESTDBY, l); |
269 | 286 | ||
270 | l = omap_readl(OTG_SYSCONFIG); | 287 | l = musb_readl(musb->mregs, OTG_SYSCONFIG); |
271 | l |= ENABLEWAKEUP; /* enable wakeup */ | 288 | l |= ENABLEWAKEUP; /* enable wakeup */ |
272 | omap_writel(l, OTG_SYSCONFIG); | 289 | musb_writel(musb->mregs, OTG_SYSCONFIG, l); |
273 | 290 | ||
274 | otg_set_suspend(musb->xceiv, 1); | 291 | otg_set_suspend(musb->xceiv, 1); |
275 | 292 | ||
@@ -295,13 +312,13 @@ static int musb_platform_resume(struct musb *musb) | |||
295 | else | 312 | else |
296 | clk_enable(musb->clock); | 313 | clk_enable(musb->clock); |
297 | 314 | ||
298 | l = omap_readl(OTG_SYSCONFIG); | 315 | l = musb_readl(musb->mregs, OTG_SYSCONFIG); |
299 | l &= ~ENABLEWAKEUP; /* disable wakeup */ | 316 | l &= ~ENABLEWAKEUP; /* disable wakeup */ |
300 | omap_writel(l, OTG_SYSCONFIG); | 317 | musb_writel(musb->mregs, OTG_SYSCONFIG, l); |
301 | 318 | ||
302 | l = omap_readl(OTG_FORCESTDBY); | 319 | l = musb_readl(musb->mregs, OTG_FORCESTDBY); |
303 | l &= ~ENABLEFORCE; /* disable MSTANDBY */ | 320 | l &= ~ENABLEFORCE; /* disable MSTANDBY */ |
304 | omap_writel(l, OTG_FORCESTDBY); | 321 | musb_writel(musb->mregs, OTG_FORCESTDBY, l); |
305 | 322 | ||
306 | return 0; | 323 | return 0; |
307 | } | 324 | } |
@@ -314,8 +331,5 @@ int musb_platform_exit(struct musb *musb) | |||
314 | 331 | ||
315 | musb_platform_suspend(musb); | 332 | musb_platform_suspend(musb); |
316 | 333 | ||
317 | clk_put(musb->clock); | ||
318 | musb->clock = 0; | ||
319 | |||
320 | return 0; | 334 | return 0; |
321 | } | 335 | } |