Commit 2f3fd2c5 authored by Tony Lindgren's avatar Tony Lindgren Committed by Greg Kroah-Hartman

usb: musb: Prepare dsps glue layer for PM runtime support

We want to be polling the state when nothing is connected.
Let's change the polling logic in preparation for PM runtime
support.
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
[b-liu@ti.com: undo unnecessary line leading whitespace change]
Signed-off-by: default avatarBin Liu <b-liu@ti.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 467d5c98
...@@ -247,6 +247,10 @@ static void otg_timer(unsigned long _musb) ...@@ -247,6 +247,10 @@ static void otg_timer(unsigned long _musb)
spin_lock_irqsave(&musb->lock, flags); spin_lock_irqsave(&musb->lock, flags);
switch (musb->xceiv->otg->state) { switch (musb->xceiv->otg->state) {
case OTG_STATE_A_WAIT_VRISE:
mod_timer(&glue->timer, jiffies +
msecs_to_jiffies(wrp->poll_timeout));
break;
case OTG_STATE_A_WAIT_BCON: case OTG_STATE_A_WAIT_BCON:
musb_writeb(musb->mregs, MUSB_DEVCTL, 0); musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
skip_session = 1; skip_session = 1;
...@@ -338,7 +342,8 @@ static irqreturn_t dsps_interrupt(int irq, void *hci) ...@@ -338,7 +342,8 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
MUSB_HST_MODE(musb); MUSB_HST_MODE(musb);
musb->xceiv->otg->default_a = 1; musb->xceiv->otg->default_a = 1;
musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE; musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
del_timer(&glue->timer); mod_timer(&glue->timer, jiffies +
msecs_to_jiffies(wrp->poll_timeout));
} else { } else {
musb->is_active = 0; musb->is_active = 0;
MUSB_DEV_MODE(musb); MUSB_DEV_MODE(musb);
...@@ -358,11 +363,17 @@ static irqreturn_t dsps_interrupt(int irq, void *hci) ...@@ -358,11 +363,17 @@ static irqreturn_t dsps_interrupt(int irq, void *hci)
if (musb->int_tx || musb->int_rx || musb->int_usb) if (musb->int_tx || musb->int_rx || musb->int_usb)
ret |= musb_interrupt(musb); ret |= musb_interrupt(musb);
/* Poll for ID change in OTG port mode */ /* Poll for ID change and connect */
if (musb->xceiv->otg->state == OTG_STATE_B_IDLE && switch (musb->xceiv->otg->state) {
musb->port_mode == MUSB_PORT_MODE_DUAL_ROLE) case OTG_STATE_B_IDLE:
case OTG_STATE_A_WAIT_BCON:
mod_timer(&glue->timer, jiffies + mod_timer(&glue->timer, jiffies +
msecs_to_jiffies(wrp->poll_timeout)); msecs_to_jiffies(wrp->poll_timeout));
break;
default:
break;
}
out: out:
spin_unlock_irqrestore(&musb->lock, flags); spin_unlock_irqrestore(&musb->lock, flags);
...@@ -461,6 +472,9 @@ static int dsps_musb_init(struct musb *musb) ...@@ -461,6 +472,9 @@ static int dsps_musb_init(struct musb *musb)
musb_writeb(musb->mregs, MUSB_BABBLE_CTL, val); musb_writeb(musb->mregs, MUSB_BABBLE_CTL, val);
} }
mod_timer(&glue->timer, jiffies +
msecs_to_jiffies(glue->wrp->poll_timeout));
return dsps_musb_dbg_init(musb, glue); return dsps_musb_dbg_init(musb, glue);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment