[adm5120] USB driver cleanups, no it is still not finished
[openwrt-10.03/.git] / target / linux / adm5120 / files / drivers / usb / host / adm5120-hub.c
index f8bda82e00b2ae71a7f365285f3908dc7cd79bbe..d1e7d43a4f4808d4423ee506f33609fba4844bde 100644 (file)
@@ -261,58 +261,16 @@ static void start_hnp(struct admhcd *ahcd);
 static inline int admhc_port_reset(struct admhcd *ahcd, unsigned port)
 {
        u32 t;
-       int c;
 
        admhc_vdbg(ahcd, "reset port%d\n", port);
-
        t = admhc_read_portstatus(ahcd, port);
        if (!(t & ADMHC_PS_CCS))
                return -ENODEV;
 
-       if ((t & ADMHC_PS_PRS))
-               return 0;
-
-       admhc_write_portstatus(ahcd, port, ADMHC_PS_PRS);
-       c = 0;
-       do {
-               t = admhc_read_portstatus(ahcd, port);
-               if (t & ADMHC_PS_PRSC)
-                       break;
-
-               if (++c > 20) {
-                       admhc_err(ahcd, "port%d reset timed out\n",port);
-                       return -EPIPE;
-               }
-
-               mdelay(PORT_RESET_HW_MSEC);
-       } while (1);
-       admhc_vdbg(ahcd, "port%d reset completed within %dms\n", port,
-                       c * PORT_RESET_HW_MSEC);
-
-       t = admhc_read_portstatus(ahcd, port);
-       if (!(t & ADMHC_PS_CCS)) {
-               admhc_err(ahcd, "port%d is not connected after reset\n",port);
-               return -ENODEV;
-       }
-
-       admhc_write_portstatus(ahcd, port, ADMHC_PS_SPE);
-       c = 0;
-       do {
-               t = admhc_read_portstatus(ahcd, port);
-               if (t & ADMHC_PS_PESC)
-                       break;
-
-               if (++c > 20) {
-                       admhc_err(ahcd, "port%d enable timed out\n",port);
-                       return -EPIPE;
-               }
-
-               mdelay(PORT_RESET_HW_MSEC);
-       } while (1);
-       admhc_vdbg(ahcd, "port%d enable completed within %dms\n", port,
-                       c * PORT_RESET_HW_MSEC);
-
-       admhc_write_portstatus(ahcd, port, ADMHC_PS_CSC);
+       admhc_write_portstatus(ahcd, port, ADMHC_PS_SPR);
+       mdelay(10);
+       admhc_write_portstatus(ahcd, port, (ADMHC_PS_SPE | ADMHC_PS_CSC));
+       mdelay(100);
 
        return 0;
 }
@@ -340,7 +298,7 @@ static inline int admhc_port_disable(struct admhcd *ahcd, unsigned port)
        if (!(t & ADMHC_PS_CCS))
                return -ENODEV;
 
-       admhc_write_portstatus(ahcd, ADMHC_PS_CPE, port);
+       admhc_write_portstatus(ahcd, port, ADMHC_PS_CPE);
 
        return 0;
 }
@@ -348,7 +306,9 @@ static inline int admhc_port_disable(struct admhcd *ahcd, unsigned port)
 static inline int admhc_port_write(struct admhcd *ahcd, unsigned port,
                u32 val)
 {
+#ifdef ADMHC_VERBOSE_DEBUG
        dbg_port_write(ahcd, "write", port, val);
+#endif
        admhc_write_portstatus(ahcd, port, val);
 
        return 0;