On Tue, 13 Feb 2007, Raphael Assenat wrote:

> Hello,
> I have some pxa270 based single board computers which have an 
> IT8152G companion chip. This chip has a built-in USB Host controller 
> which is (according to the datasheet) register compatible with OHCI 
> specification version 1.0.
> 
> During boot, I see that the OHCI controller is detected properly. 
> Devices that were already connected to the USB ports handled by this 
> chip are also detected at boot time. And they work correcly.
> 
> But when I connect a new device to a free port, nothing happens.

Is that true even if there was also a device attached at boot time, or 
does it happen only when you connect a new device and all the ports are 
unoccupied?

>  No 
> messages in dmesg, and the device does not seem to initialize. (eg: 
> Led under optical mouse does not turn on). I have verified, and 
> there is power on the USB power pins. If I disconnect a device that 
> was present at boot time and reconnect it, it is not re-detected.
> 
> Here is a list of kernel version I was able to test with, and the 
> results:
> 2.6.20 -> Same problems as described above.
> 2.6.18 -> Same problems as described above.
> 2.6.17.5 -> Same problems as described above.
> 2.6.16.12 -> Everything works fine.
> 
> Suspecting that this could be a bug in the chip's implementation 
> exposed by some new features, I started looking at the code in the 
> hope to find stuff like controller specific work arounds, quirks, 
> etc to try. but I found nothing that was applicable to my problem...

It sounds like your chip doesn't obey the RHSC bit in the
HcInterruptEnable register.  But the problem might be something else.

> I eventually decided to try the modification below, and now it works 
> correctly! But I dont understand why as I have very little knowledge 
> on the subject.
> 
> Any ideas?
> 
> --- linux-2.6.20/drivers/usb/host/ohci-hub.c
> +++ linux-2.6.20-8d/drivers/usb/host/ohci-hub.c
> @@ -413,7 +413,7 @@
>   {
>      struct ohci_hcd *ohci = hcd_to_ohci (hcd);
>      int     i, changed = 0, length = 1;
> -   int     any_connected = 0;
> +   int     any_connected = RH_PS_CCS;

That variable is a binary value.  You might as well just set it to 1; 
storing RH_PS_CCS there means nothing.

> Detection messages:
> ohci_hcd: 2006 August 04 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
> ohci_hcd 0000:00:01.4: OHCI Host Controller
> ohci_hcd 0000:00:01.4: new USB bus registered, assigned bus number 2
> ohci_hcd 0000:00:01.4: irq 167, io mem 0x10000000

If you want to get useful information from the system log, you have to 
turn on CONFIG_USB_DEBUG.

Alan Stern


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
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