Problem with OHCI on OMAP4430

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[Changed the Subject: line to something that makes more sense]

On Wed, 24 Oct 2012, Mohan V wrote:

> Hello All,
> 
> We are working on OMAP4430 based board which has EHCI and OHCI ports and
> are testing OHCI functionality. We are using kernel-3.4.
> 
> When the USB bus is in suspend, a device connected to OHCI port does
> not get detected, whereas the device connected to EHCI port is getting detected.

Can you provide a dmesg log showing the OHCI problem with 
CONFIG_USB_DEBUG enabled?

> We are testing using the below commands:
> 
> echo enabled > /sys/bus/usb/devices/usb2/power/wakeup
> echo enabled > /sys/bus/usb/devices/2-2/power/wakeup

The wakeup settings are irrelevant here because you are not putting 
your system to sleep.

> echo auto > /sys/bus/usb/devices/usb2/power/control
> echo auto > /sys/bus/usb/devices/2-2/power/control

What is the 2-2 device?  Is it a hub?  If it is, do you plug the new 
device into the hub or directly into the OHCI controller?

> We see that after making the below change in "ohci_irq", the device
> gets detected.
> ---------------------------------------------------------------------------------------------------
> --- a/drivers/usb/host/ohci-hcd.c
> +++ b/drivers/usb/host/ohci-hcd.c
> @@ -819,7 +819,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
>  	 * to turn on RHSC along with RD.  But for remote wakeup events
>  	 * this might not happen.
>  	 */
> -	else if (ints & OHCI_INTR_RD) {
> +	if (ints & OHCI_INTR_RD) {
> ---------------------------------------------------------------------------------------------------
> Even in the OHCI specification (Sec 5.3 page 80), it is recommended to
> check individual bits
> (RHSC and RD).

The driver does check the individual bits.  (And are you sure you don't 
mean page 82?)

> Can you please let us know if this change is valid and will not cause
> any regression?

Yes, it is likely to cause a regression.  To understand why, you should 
read the original commit that added the code you want to change (commit 
583ceada075597a5b6acab1140d61ac81586a2a6, USB: OHCI: fix root-hub 
resume bug).  In short, your proposed change would cause the driver to 
try to resume the root hub twice.

More to the point, why doesn't the current code work?  It appears that 
the OHCI_INTR_RHCS bit is set, so the handler should call 
usb_hcd_poll_rh_status(), which in turn calls ohci_hub_status_data(), 
which calls ohci_root_hub_state_changes(), which should call 
usb_hcd_resume_root_hub().  If this isn't happening, maybe you can add 
some debugging statements to find out what's going wrong.

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux