usb: musb: sunxi: Set state to A_WAIT_VRISE when enabling Vbus
When the board is powering attached usb devices via the otg port sometimes / on some devices it takes slightly too long for the Vbus detection code in phy-sun4i-usb.c to signal that Vbus is high after enabling Vbus and the musb hardware signals a MUSB_INTR_VBUSERROR interrupt. This commit sets the otg state to A_WAIT_VRISE upon enabling Vbus making musb_stage0_irq() ignore the first VBUSERR_RETRY_COUNT VBUSERROR interrupts, fixing connection issues in these cases. Signed-off-by: Hans de Goede <hdegoede@redhat.com> [b-liu@ti.com: revise subject prefix] Signed-off-by: Bin Liu <b-liu@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
37f30d887a
commit
a60d541a2d
|
@ -112,7 +112,7 @@ static void sunxi_musb_work(struct work_struct *work)
|
|||
if (test_bit(SUNXI_MUSB_FL_HOSTMODE, &glue->flags)) {
|
||||
set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags);
|
||||
musb->xceiv->otg->default_a = 1;
|
||||
musb->xceiv->otg->state = OTG_STATE_A_IDLE;
|
||||
musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
|
||||
MUSB_HST_MODE(musb);
|
||||
devctl |= MUSB_DEVCTL_SESSION;
|
||||
} else {
|
||||
|
@ -145,10 +145,12 @@ static void sunxi_musb_set_vbus(struct musb *musb, int is_on)
|
|||
{
|
||||
struct sunxi_glue *glue = dev_get_drvdata(musb->controller->parent);
|
||||
|
||||
if (is_on)
|
||||
if (is_on) {
|
||||
set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags);
|
||||
else
|
||||
musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
|
||||
} else {
|
||||
clear_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags);
|
||||
}
|
||||
|
||||
schedule_work(&glue->work);
|
||||
}
|
||||
|
@ -325,6 +327,7 @@ static int sunxi_set_mode(struct musb *musb, u8 mode)
|
|||
set_bit(SUNXI_MUSB_FL_PHY_ON, &glue->flags);
|
||||
/* Stop musb work from turning vbus off again */
|
||||
set_bit(SUNXI_MUSB_FL_VBUS_ON, &glue->flags);
|
||||
musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue