aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/musb/omap2430.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/musb/omap2430.c')
-rw-r--r--drivers/usb/musb/omap2430.c54
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
260void 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
267void 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
258int musb_platform_suspend(struct musb *musb) 275int 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}