diff options
author | Moiz Sonasath <m-sonasath@ti.com> | 2012-05-15 22:02:06 +0300 |
---|---|---|
committer | Ziyann <jaraidaniel@gmail.com> | 2014-10-01 12:59:40 +0200 |
commit | 51000fdb4cacc60e96e7a954f1a98ac4c7fdee9c (patch) | |
tree | 63750a2ec8091f736fa8a42c0992714121ce63be | |
parent | 00741a7f703a2682eaf8b0d9bce63bd00aa4d6cd (diff) | |
download | kernel_samsung_tuna-51000fdb4cacc60e96e7a954f1a98ac4c7fdee9c.zip kernel_samsung_tuna-51000fdb4cacc60e96e7a954f1a98ac4c7fdee9c.tar.gz kernel_samsung_tuna-51000fdb4cacc60e96e7a954f1a98ac4c7fdee9c.tar.bz2 |
OMAP4: DPLL cascading: MUSB core: USB handling during DPLL casacading
System can enter DPLL cascading mode only when USB is unplugged.
When USB is plugged, system left DPLL cascading
[Andrii Tseglytskyi <andrii.tseglytskyi@ti.com>:
Ported and adapted to p-android-omap-3.0]
Change-Id: I83c887a278f48962446a3b17ec0d60f853506f90
Signed-off-by: Moiz Sonasath <m-sonasath@ti.com>
Signed-off-by: Andrii Tseglytskyi <andrii.tseglytskyi@ti.com>
-rw-r--r-- | drivers/usb/musb/musb_core.c | 24 | ||||
-rw-r--r-- | drivers/usb/musb/musb_core.h | 3 |
2 files changed, 27 insertions, 0 deletions
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c index 16a5038..dd5bee2 100644 --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -102,6 +102,10 @@ #include "musb_core.h" +#ifdef CONFIG_OMAP4_DPLL_CASCADING +#include <mach/omap4-common.h> +#endif + #define TA_WAIT_BCON(m) max_t(int, (m)->a_wait_bcon, OTG_TIME_A_WAIT_BCON) @@ -400,6 +404,9 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, { irqreturn_t handled = IRQ_NONE; +#ifdef CONFIG_OMAP4_DPLL_CASCADING + musb->event = -1; +#endif dev_dbg(musb->controller, "<== Power=%02x, DevCtl=%02x, int_usb=0x%x\n", power, devctl, int_usb); @@ -662,6 +669,9 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb, musb->ep0_stage = MUSB_EP0_START; +#ifdef CONFIG_OMAP4_DPLL_CASCADING + musb->event = USB_EVENT_ID; +#endif #ifdef CONFIG_USB_MUSB_OTG /* flush endpoints when transitioning from Device Mode */ if (is_peripheral_active(musb)) { @@ -727,6 +737,9 @@ b_host: MUSB_MODE(musb), devctl); handled = IRQ_HANDLED; +#ifdef CONFIG_OMAP4_DPLL_CASCADING + musb->event = USB_EVENT_NONE; +#endif switch (musb->xceiv->state) { #ifdef CONFIG_USB_MUSB_HDRC_HCD case OTG_STATE_A_HOST: @@ -796,6 +809,9 @@ b_host: } else if (is_peripheral_capable()) { dev_dbg(musb->controller, "BUS RESET as %s\n", otg_state_string(musb->xceiv->state)); +#ifdef CONFIG_OMAP4_DPLL_CASCADING + musb->event = USB_EVENT_VBUS; +#endif switch (musb->xceiv->state) { #ifdef CONFIG_USB_OTG case OTG_STATE_A_SUSPEND: @@ -1806,6 +1822,14 @@ static void musb_irq_work(struct work_struct *data) old_state = musb->xceiv->state; sysfs_notify(&musb->controller->kobj, NULL, "mode"); } +#ifdef CONFIG_OMAP4_DPLL_CASCADING + if (USB_EVENT_VBUS == musb->event) + omap4_dpll_cascading_blocker_hold(musb->controller); + else if (USB_EVENT_ID == musb->event) + omap4_dpll_cascading_blocker_hold(musb->controller); + else if (USB_EVENT_NONE == musb->event) + omap4_dpll_cascading_blocker_release(musb->controller); +#endif } /* -------------------------------------------------------------------------- diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index ee3034c..b9e818b 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -548,6 +548,9 @@ struct musb { #ifdef MUSB_CONFIG_PROC_FS struct proc_dir_entry *proc_entry; #endif +#ifdef CONFIG_OMAP4_DPLL_CASCADING + int event; +#endif }; struct musb_otg_work { |