Hi

don't know if you have already fixed this, anyway,
i finally solved with this patch,

iff --git a/drivers/usb/musb/da8xx.c b/../linux-3.17/drivers/usb/musb/da8xx.c
index 4e13fe2..058775e 100644
--- a/drivers/usb/musb/da8xx.c
+++ b/../linux-3.17/drivers/usb/musb/da8xx.c
@@ -184,11 +184,6 @@ static void da8xx_musb_set_vbus(struct musb *musb, int is_on)
 #define    POLL_SECONDS    2

 static struct timer_list otg_workaround;
-/*
- * angelo,
- * usb host fix must triggered from inside interrupt
- */
-static int reset_fix = 0;

 static void otg_timer(unsigned long _musb)
 {
@@ -254,33 +249,6 @@ static void otg_timer(unsigned long _musb)
             mod_timer(&otg_workaround, jiffies + POLL_SECONDS * HZ);
         else
             musb->xceiv->state = OTG_STATE_A_IDLE;
-
-        if (reset_fix) {
-            u32 cfgchip2;
-
-            reset_fix = 0;
-
-            MUSB_HST_MODE(musb);
-            musb->xceiv->state = OTG_STATE_A_WAIT_VRISE;
-
-            cfgchip2 = __raw_readl(
-                DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG));
-
-            /*
-             * angelo, fix step 2
-             *
-             * after have set force_host in a first step,
-             * we need now to set as OTG and re-enable
-             * bus comparators so that DRVVBUS interrupt
-             * can be triggered at 5V presence
-             */
-            cfgchip2 &= ~CFGCHIP2_OTGMODE;
-            cfgchip2 |= (CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN);
-
-            __raw_writel(cfgchip2,
-                DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG));
-        }
-
         break;
     default:
         break;
@@ -388,25 +356,6 @@ static irqreturn_t da8xx_musb_interrupt(int irq, void *hci)
             otg->default_a = 0;
             musb->xceiv->state = OTG_STATE_B_IDLE;
             portstate(musb->port1_status &= ~USB_PORT_STAT_POWER);
-
-            if (devctl == 0x98) {
-                u32 cfgchip2;
-                /*
-                 * angelo, fix, part 2
-                 * - set host mode only
-                 * - override vbus / id comparators
-                 */
-                cfgchip2 = __raw_readl(
- DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG));
-
-                cfgchip2 |=   CFGCHIP2_FORCE_HOST;
-                cfgchip2 &= ~(CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN);
-
-                __raw_writel(cfgchip2,
- DA8XX_SYSCFG0_VIRT(DA8XX_CFGCHIP2_REG));
-
-                reset_fix = 1;
-            }
         }

         dev_dbg(musb->controller, "VBUS %s (%s)%s, devctl %02x\n",



In this way i can have the VBUS interrupt to happen again at next
reinsertion.

Regards





--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to