1
linux/drivers/usb/musb
Hema HK 7acc6197b7 usb: musb: Idle path retention and offmode support for OMAP3
This patch supports the retention and offmode support in the idle path for
musb driver using runtime pm APIs.

This is restricted to support offmode and retention only when device not
connected.When device/cable connected with gadget driver loaded,configured
to no idle/standby which will not allow the core transition to retention
or off.

There is no context save/restore done by hardware for musb in OMAP3
and OMAP4,driver has to take care of saving and restoring the context
during offmode.

Musb has a requirement of configuring sysconfig register to force
idle/standby mode and set the ENFORCE bit in module STANDBY register
for retention and offmode support.

Runtime pm and hwmod frameworks will take care of configuring to force
idle/standby when pm_runtime_put_sync is called and back to no
idle/standby when pm_runeime_get_sync is called.

Compile, boot tested and also tested the retention in the idle path on
OMAP3630Zoom3. And tested the global suspend/resume with offmode enabled.
Usb basic functionality tested on OMAP4430SDP.

There is some problem with idle path offmode in mainline, I could not test
with offmode. But I have tested this patch with resetting the controller
in the idle path when wakeup from retention just to make sure that the
context is lost, and restore path is working fine.

Removed .suspend/.resume fnction pointers and functions because there
is no need of having these functions as all required work is done
at runtime in the driver.

There is no need to call the runtime pm api with glue driver device
as glue layer device is the parent of musb core device, when runtime apis
are called for the child, parent device runtime functionality
will be invoked.

Design overview:

pm_runtime_get_sync: When called with musb core device takes care of
enabling the clock, calling runtime callback function of omap2430 glue
layer, runtime call back of musb driver and configure the musb sysconfig
to no idle/standby

pm_runtime_put: Takes care of calling runtime callback function of omap2430
glue layer, runtime call back of musb driver, Configure the musb sysconfig
to force idle/standby and disable the clock.

During musb driver load: Call pm_runtime_get_sync.

End of musb driver load: Call pm_runtime_put

During gadget driver load: Call pm_runtime_get_sync,
End of gadget driver load: Call pm_runtime_put if there is no device
or cable is connected.

During unload of the gadget driver:Call pm_runtime_get_sync if cable/device
is not connected.
End of the gadget driver unload : pm_runtime_put

During unload of musb driver : Call pm_runtime_get_sync
End of unload: Call pm_runtime_put

On connect of usb cable/device -> transceiver notification(VBUS and ID-GND):
pm_runtime_get_sync only if the gadget driver loaded.

On disconnect of the cable/device -> Disconnect Notification:
pm_runtime_put if the gadget driver is loaded.

Signed-off-by: Hema HK <hemahk@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
2011-03-01 11:35:12 +02:00
..
am35x.c musb: am35x: fix compile error due to control apis 2010-12-10 10:21:35 +02:00
blackfin.c usb: musb: disable double buffering when it's broken 2011-02-01 10:41:30 +02:00
blackfin.h
cppi_dma.c usb: musb: add names for IRQs in structure resource 2010-12-01 10:56:33 +02:00
cppi_dma.h
da8xx.c usb: musb: drop board_set_vbus 2010-12-10 10:21:33 +02:00
davinci.c usb: musb: drop board_set_vbus 2010-12-10 10:21:33 +02:00
davinci.h
Kconfig usb: musb: TWL6030: Selecting TWL6030_USB transceiver 2010-12-10 14:45:59 +02:00
Makefile usb: musb: add support for ux500 platform 2010-12-10 10:21:36 +02:00
musb_core.c usb: musb: Idle path retention and offmode support for OMAP3 2011-03-01 11:35:12 +02:00
musb_core.h usb: musb: Remove platform context save/restore API 2011-03-01 11:35:11 +02:00
musb_debug.h USB: musb: make DBG() calls actually depend on CONFIG_USB_MUSB_DEBUG 2010-10-22 10:21:52 -07:00
musb_debugfs.c headers: kobject.h redux 2011-01-10 08:51:44 -08:00
musb_dma.h usb: musb: introduce api for dma code to check compatibility with usb request 2011-02-01 10:41:30 +02:00
musb_gadget_ep0.c usb: musb: gadget: do not poke with gadget's list_head 2011-02-17 21:11:46 +02:00
musb_gadget.c usb: musb: Idle path retention and offmode support for OMAP3 2011-03-01 11:35:12 +02:00
musb_gadget.h usb: musb: gadget: do not poke with gadget's list_head 2011-02-17 21:11:46 +02:00
musb_host.c Merge 2.6.38-rc5 into usb-next 2011-02-17 09:56:55 -08:00
musb_host.h
musb_io.h usb: musb: add Kconfig options for each glue layer 2010-12-10 10:21:09 +02:00
musb_regs.h Merge branch 'usb-next' into musb-merge 2010-12-16 10:05:06 -08:00
musb_virthub.c usb: musb: make all glue layer export struct musb_platform_ops 2010-12-07 09:19:39 +02:00
musbhsdma.c Merge branch 'usb-next' into musb-merge 2010-12-16 10:05:06 -08:00
musbhsdma.h usb: musb: hsdma: change back to use musb_read/writew 2011-02-01 10:41:30 +02:00
omap2430.c usb: musb: Idle path retention and offmode support for OMAP3 2011-03-01 11:35:12 +02:00
omap2430.h
tusb6010_omap.c usb: Fix tusb6010 for DMA API 2010-04-30 09:25:09 -07:00
tusb6010.c usb: musb: move clock handling to glue layer 2010-12-10 10:21:24 +02:00
tusb6010.h
ux500.c usb: musb: add support for ux500 platform 2010-12-10 10:21:36 +02:00