[ARM] ohci-pxa27x: introduce pxa27x_clear_otgph()
authorEric Miao <eric.miao@marvell.com>
Sat, 4 Oct 2008 04:45:39 +0000 (12:45 +0800)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 7 Oct 2008 18:12:58 +0000 (19:12 +0100)
Direct access to pxa27x specific register PSSR in a generic ohci driver
is no good, introduce pxa27x_clear_otgph() and move the implementation
into processor specific code.

Signed-off-by: Eric Miao <eric.miao@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/pxa27x.c
drivers/usb/host/ohci-pxa27x.c

index bf01e14..3e4ab22 100644 (file)
 #include "devices.h"
 #include "clock.h"
 
+void pxa27x_clear_otgph(void)
+{
+       if (cpu_is_pxa27x() && (PSSR & PSSR_OTGPH))
+               PSSR |= PSSR_OTGPH;
+}
+EXPORT_SYMBOL(pxa27x_clear_otgph);
+
 /* Crystal clock: 13MHz */
 #define BASE_CLK       13000000
 
index 8530c6e..1fd7793 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/clk.h>
 
 #include <mach/hardware.h>
-#include <mach/pxa2xx-regs.h> /* FIXME: for PSSR */
 #include <mach/ohci.h>
 
 /*
@@ -182,6 +181,12 @@ static inline void pxa27x_setup_hc(struct pxaohci_platform_data *inf)
        UHCRHDA = uhcrhda;
 }
 
+#ifdef CONFIG_CPU_PXA27x
+extern void pxa27x_clear_otgph(void);
+#else
+#define pxa27x_clear_otgph()   do {} while (0)
+#endif
+
 static int pxa27x_start_hc(struct device *dev)
 {
        int retval = 0;
@@ -212,9 +217,7 @@ static int pxa27x_start_hc(struct device *dev)
        UHCHIE = (UHCHIE_UPRIE | UHCHIE_RWIE);
 
        /* Clear any OTG Pin Hold */
-       if (cpu_is_pxa27x() && (PSSR & PSSR_OTGPH))
-               PSSR |= PSSR_OTGPH;
-
+       pxa27x_clear_otgph();
        return 0;
 }