USB: MUSB: save hardware revision at init
authorAnand Gadiyar <gadiyar@ti.com>
Mon, 16 Nov 2009 15:39:21 +0000 (21:09 +0530)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 11 Dec 2009 19:55:25 +0000 (11:55 -0800)
MUSB: save hardware revision at init

This can be used later to flag workarounds for issues affecting
particular revisions. Saving this at init avoids having to
read the HWVERS register multiple times in code.

While at it, use macros to extract the version information
instead of using hardcoded values.

Signed-off-by: Anand Gadiyar <gadiyar@ti.com>
Cc: Ajay Kumar Gupta <ajay.gupta@ti.com>
Acked-by: Felipe Balbi <felipe.balbi@nokia.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/musb/musb_core.c
drivers/usb/musb/musb_core.h

index 547e0e3907268cc0d6f1b6b71d45d0a14e1129a8..49f2346afad3e8016d5f548e6f74d57b7322d49a 100644 (file)
@@ -1319,7 +1319,6 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb)
 #endif
        u8 reg;
        char *type;
-       u16 hwvers, rev_major, rev_minor;
        char aInfo[78], aRevision[32], aDate[12];
        void __iomem    *mbase = musb->mregs;
        int             status = 0;
@@ -1391,11 +1390,10 @@ static int __init musb_core_init(u16 musb_type, struct musb *musb)
        }
 
        /* log release info */
-       hwvers = musb_read_hwvers(mbase);
-       rev_major = (hwvers >> 10) & 0x1f;
-       rev_minor = hwvers & 0x3ff;
-       snprintf(aRevision, 32, "%d.%d%s", rev_major,
-               rev_minor, (hwvers & 0x8000) ? "RC" : "");
+       musb->hwvers = musb_read_hwvers(mbase);
+       snprintf(aRevision, 32, "%d.%d%s", MUSB_HWVERS_MAJOR(musb->hwvers),
+               MUSB_HWVERS_MINOR(musb->hwvers),
+               (musb->hwvers & MUSB_HWVERS_RC) ? "RC" : "");
        printk(KERN_DEBUG "%s: %sHDRC RTL version %s %s\n",
                        musb_driver_name, type, aRevision, aDate);
 
index 6aa5f22e52749e2325997f27e34d5e2ba366e511..03d50909b078345d5e4d82e116ee7a44b0b96280 100644 (file)
@@ -322,6 +322,14 @@ struct musb {
        struct clk              *clock;
        irqreturn_t             (*isr)(int, void *);
        struct work_struct      irq_work;
+#define MUSB_HWVERS_MAJOR(x)   ((x >> 10) & 0x1f)
+#define MUSB_HWVERS_MINOR(x)   (x & 0x3ff)
+#define MUSB_HWVERS_RC         0x8000
+#define MUSB_HWVERS_1300       0x52C
+#define MUSB_HWVERS_1400       0x590
+#define MUSB_HWVERS_1800       0x720
+#define MUSB_HWVERS_2000       0x800
+       u16                     hwvers;
 
 /* this hub status bit is reserved by USB 2.0 and not seen by usbcore */
 #define MUSB_PORT_STAT_RESUME  (1 << 31)