[adm5120] experimental support for 2.6.27
[openwrt.git] / target / linux / adm5120 / files / drivers / usb / host / adm5120-hub.c
index f8bda82..6ba6205 100644 (file)
@@ -1,16 +1,22 @@
 /*
- * OHCI HCD (Host Controller Driver) for USB.
+ * ADM5120 HCD (Host Controller Driver) for USB
  *
- * (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
- * (C) Copyright 2000-2004 David Brownell <dbrownell@users.sourceforge.net>
+ * Copyright (C) 2007-2008 Gabor Juhos <juhosg@openwrt.org>
+ *
+ * This file was derived from: drivers/usb/host/ohci-hub.c
+ *   (C) Copyright 1999 Roman Weissgaerber <weissg@vienna.at>
+ *   (C) Copyright 2000-2004 David Brownell <dbrownell@users.sourceforge.net>
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
  *
- * This file is licenced under GPL
  */
 
 /*-------------------------------------------------------------------------*/
 
 /*
- * OHCI Root Hub ... the nonsharable stuff
+ * ADM5120 Root Hub ... the nonsharable stuff
  */
 
 #define dbg_port(hc,label,num,value) \
@@ -261,58 +267,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 +304,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 +312,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;
This page took 0.030894 seconds and 4 git commands to generate.