There is no need to set usb power during init with the modern ohci
driver. The power control functions are also incorrect. They should
therefore be removed. (This leads into the removal of platform specific
code.)

Add a check to clear the OTG pin hold bit until such times OTG is
properly implemented.

Allow the platform to select the port power mode

Signed-Off-By: Richard Purdie <[EMAIL PROTECTED]>

Index: linux-2.6.12/drivers/usb/host/ohci-pxa27x.c
===================================================================
--- linux-2.6.12.orig/drivers/usb/host/ohci-pxa27x.c    2005-08-25 
16:22:16.000000000 +0100
+++ linux-2.6.12/drivers/usb/host/ohci-pxa27x.c 2005-08-25 16:36:39.000000000 
+0100
@@ -75,33 +75,6 @@
        return 0;
 }
 
-/*
-  If you select PMM_PERPORT_MODE, you should set the port power
- */
-static int pxa27x_ohci_set_port_power( int port )
-{
-       if ( (pxa27x_ohci_pmm_state==PMM_PERPORT_MODE)
-            && (port>0) && (port<PXA_UHC_MAX_PORTNUM) ) {
-               UHCRHPS(port) |= 0x100;
-               return 0;
-       }
-       return -1;
-}
-
-/*
-  If you select PMM_PERPORT_MODE, you should set the port power
- */
-static int pxa27x_ohci_clear_port_power( int port )
-{
-       if ( (pxa27x_ohci_pmm_state==PMM_PERPORT_MODE) 
-            && (port>0) && (port<PXA_UHC_MAX_PORTNUM) ) {
-               UHCRHPS(port) |= 0x200;
-               return 0;
-       }
-        
-       return -1;
-}
-
 extern int usb_disabled(void);
 
 /*-------------------------------------------------------------------------*/
@@ -130,11 +103,17 @@
                   Polarity Low to active low. Supply power to USB ports. */
                UHCHR = (UHCHR | UHCHR_PCPL | UHCHR_PSPL) &
                        ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSEP3 | UHCHR_SSE);
+
+               pxa27x_ohci_pmm_state=PMM_PERPORT_MODE;
        }
 
        UHCHR &= ~UHCHR_SSE;
 
        UHCHIE = (UHCHIE_UPRIE | UHCHIE_RWIE);
+
+       /* Clear any OTG Pin Hold */
+       if (PSSR & PSSR_OTGPH)
+               PSSR |= PSSR_OTGPH;
 }
 
 static void pxa27x_stop_hc(struct platform_device *dev)
@@ -198,17 +177,7 @@
        pxa27x_start_hc(dev);
 
        /* Select Power Management Mode */
-       pxa27x_ohci_select_pmm( PMM_PERPORT_MODE );
-
-       /* If choosing PMM_PERPORT_MODE, we should set the port power before we 
use it. */
-       if (pxa27x_ohci_set_port_power(1) < 0)
-               printk(KERN_ERR "Setting port 1 power failed.\n");
-
-       if (pxa27x_ohci_clear_port_power(2) < 0)
-               printk(KERN_ERR "Setting port 2 power failed.\n");
-
-       if (pxa27x_ohci_clear_port_power(3) < 0)
-               printk(KERN_ERR "Setting port 3 power failed.\n");
+       pxa27x_ohci_select_pmm(pxa27x_ohci_pmm_state);
 
        ohci_hcd_init(hcd_to_ohci(hcd));
 




-------------------------------------------------------
SF.Net email is Sponsored by the Better Software Conference & EXPO
September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices
Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA
Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to