[PATCH] USB: OHCI, pxa27x OHCI port power tweaks

Now that it's in use on other boards, a bug in the original code needs fixing.

There is no need for the PXA27x OHCI to set usb power during init, since
the hub driver in usbcore handles that. Those platform-specific power
control functions are also incorrect, and should therefore be removed.

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

Signed-Off-By: Richard Purdie <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>

---
commit 155faf5e1e36ca3a6127bdfb5c624d58e520c411
tree c104a512de13e81d3c3c2d59b3d86e441e0de83e
parent fdd13b36c4a501d8787a27e54635fbd943f2685d
author David Brownell <[EMAIL PROTECTED]> Wed, 31 Aug 2005 11:54:09 -0700
committer Greg Kroah-Hartman <[EMAIL PROTECTED]> Mon, 12 Sep 2005 12:23:46 -0700

 drivers/usb/host/ohci-pxa27x.c |   45 ++++++----------------------------------
 1 files changed, 7 insertions(+), 38 deletions(-)

diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c
--- a/drivers/usb/host/ohci-pxa27x.c
+++ b/drivers/usb/host/ohci-pxa27x.c
@@ -75,33 +75,6 @@ static int pxa27x_ohci_select_pmm( int m
        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 @@ static void pxa27x_start_hc(struct platf
                   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 @@ int usb_hcd_pxa27x_probe (const struct h
        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
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to