aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoiz Sonasath <m-sonasath@ti.com>2012-05-15 22:02:06 +0300
committerZiyann <jaraidaniel@gmail.com>2014-10-01 12:59:40 +0200
commit51000fdb4cacc60e96e7a954f1a98ac4c7fdee9c (patch)
tree63750a2ec8091f736fa8a42c0992714121ce63be
parent00741a7f703a2682eaf8b0d9bce63bd00aa4d6cd (diff)
downloadkernel_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.c24
-rw-r--r--drivers/usb/musb/musb_core.h3
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 {