]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
usb: musb: Get rid of omap2430_musb_set_vbus()
authorTony Lindgren <tony@atomide.com>
Wed, 15 Jan 2020 13:25:32 +0000 (07:25 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Jan 2020 13:46:56 +0000 (14:46 +0100)
Now that we've removed direct calls from interrupt handler to
omap2430_musb_set_vbus(), let's make things less confusing and
configure VBUS directly in omap_musb_set_mailbox().

We have omap_musb_set_mailbox() called from the PHYs, and that's
all we need.

Note that we can now also drop the check for MUSB_INTERFACE_UTMI,
we've been already calling otg_set_vbus(musb->xceiv->otg, 0)
unconditionally via omap2430_musb_set_vbus() and we should only
need to call it once.

And we want to disable VBUS unconditionally on disconnect even
without musb->gadget_driver, so let's drop that check too.

Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Bin Liu <b-liu@ti.com>
Link: https://lore.kernel.org/r/20200115132547.364-11-b-liu@ti.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/musb/omap2430.c

index bc5810e14ebbeb264e88bce39e57b34772c746bd..d62c78b97cadb3f0947c90a535a539550973cd59 100644 (file)
@@ -38,42 +38,6 @@ struct omap2430_glue {
 
 static struct omap2430_glue    *_glue;
 
-/*
- * HDRC controls CPEN, but beware current surges during device connect.
- * They can trigger transient overcurrent conditions that must be ignored.
- *
- * Note that we're skipping A_WAIT_VFALL -> A_IDLE and jumping right to B_IDLE
- * as set by musb_set_peripheral().
- */
-static void omap2430_musb_set_vbus(struct musb *musb, int is_on)
-{
-       struct usb_otg *otg = musb->xceiv->otg;
-       int error;
-
-       if (is_on) {
-               switch (musb->xceiv->otg->state) {
-               case OTG_STATE_A_IDLE:
-                       error = musb_set_host(musb);
-                       if (!error) {
-                               musb->xceiv->otg->state =
-                                               OTG_STATE_A_WAIT_VRISE;
-                               otg_set_vbus(otg, 1);
-                       }
-                       break;
-               default:
-                       otg_set_vbus(otg, 1);
-                       break;
-               }
-       } else {
-               error = musb_set_peripheral(musb);
-               otg_set_vbus(otg, 0);
-       }
-
-       dev_dbg(musb->controller, "VBUS %s, devctl %02x\n",
-               usb_otg_state_string(musb->xceiv->otg->state),
-               musb_readb(musb->mregs, MUSB_DEVCTL));
-}
-
 static inline void omap2430_low_level_exit(struct musb *musb)
 {
        u32 l;
@@ -113,27 +77,42 @@ static int omap2430_musb_mailbox(enum musb_vbus_id_status status)
        return 0;
 }
 
+/*
+ * HDRC controls CPEN, but beware current surges during device connect.
+ * They can trigger transient overcurrent conditions that must be ignored.
+ *
+ * Note that we're skipping A_WAIT_VFALL -> A_IDLE and jumping right to B_IDLE
+ * as set by musb_set_peripheral().
+ */
 static void omap_musb_set_mailbox(struct omap2430_glue *glue)
 {
        struct musb *musb = glue_to_musb(glue);
-       struct musb_hdrc_platform_data *pdata =
-               dev_get_platdata(musb->controller);
-       struct omap_musb_board_data *data = pdata->board_data;
+       int error;
 
        pm_runtime_get_sync(musb->controller);
+
+       dev_dbg(musb->controller, "VBUS %s, devctl %02x\n",
+               usb_otg_state_string(musb->xceiv->otg->state),
+               musb_readb(musb->mregs, MUSB_DEVCTL));
+
        switch (glue->status) {
        case MUSB_ID_GROUND:
                dev_dbg(musb->controller, "ID GND\n");
                switch (musb->xceiv->otg->state) {
+               case OTG_STATE_A_IDLE:
+                       error = musb_set_host(musb);
+                       if (error)
+                               break;
+                       musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
+                       /* Fall through */
                case OTG_STATE_A_WAIT_VRISE:
                case OTG_STATE_A_WAIT_BCON:
                case OTG_STATE_A_HOST:
-               case OTG_STATE_A_IDLE:
                        /*
                         * On multiple ID ground interrupts just keep enabling
                         * VBUS. At least cpcap VBUS shuts down otherwise.
                         */
-                       omap2430_musb_set_vbus(musb, 1);
+                       otg_set_vbus(musb->xceiv->otg, 1);
                        break;
                default:
                        musb->xceiv->otg->state = OTG_STATE_A_IDLE;
@@ -141,7 +120,7 @@ static void omap_musb_set_mailbox(struct omap2430_glue *glue)
                        if (musb->gadget_driver) {
                                omap_control_usb_set_mode(glue->control_otghs,
                                                          USB_MODE_HOST);
-                               omap2430_musb_set_vbus(musb, 1);
+                               otg_set_vbus(musb->xceiv->otg, 1);
                        }
                        break;
                }
@@ -160,12 +139,8 @@ static void omap_musb_set_mailbox(struct omap2430_glue *glue)
                dev_dbg(musb->controller, "VBUS Disconnect\n");
 
                musb->xceiv->last_event = USB_EVENT_NONE;
-               if (musb->gadget_driver)
-                       omap2430_musb_set_vbus(musb, 0);
-
-               if (data->interface_type == MUSB_INTERFACE_UTMI)
-                       otg_set_vbus(musb->xceiv->otg, 0);
-
+               musb_set_peripheral(musb);
+               otg_set_vbus(musb->xceiv->otg, 0);
                omap_control_usb_set_mode(glue->control_otghs,
                        USB_MODE_DISCONNECT);
                break;