[PATCH 1/5] USB: Make usb_hcd_irq work for multi-role USB controllers w/ shared irq
david-b at pacbell.net
Sun Nov 25 06:06:46 EST 2007
On Friday 23 November 2007, Grant Likely wrote:
> Some multi-role (host/peripheral) USB controllers use a shared interrupt
> line for all parts of the chip.
Like the musb_hdrc code ... soonish to go upstream (it needs some
updates to catch up to usbcore urb->status changes), this is used
by the Nokia 800 and 810. In terms of chips with Linux support:
DaVinci, TUSB60x0, OMAP 2430, OMAP 3430, Blackfin BF527; and ISTR
a few less-publicised ones (including, yes, some PPC SOCs).
That driver hasn't needed to change usbcore for IRQ handling though.
> Export usb_hcd_irq so drivers can call it
> from their interrupt handler instead of duplicating code.
This seems to be the main point of this patch. I'd rather just
make that "static" though; it should already be marked that way.
That routine doesn't do enough to make me like it any more; and
with dual-role controllers, the driver lifecycle is more complex
than usbcore can be expected to mediate. Best to just call the
host side IRQ logic directly from your toplevel IRQ handler.
> Drivers pass an irqnum of 0 to usb_add_hcd to signal that the interrupt handler
> shouldn't be registerred by the core.
The current way to get that behavior is to leave hcd->driver->irq
as zero; then "irqnum" is ignored, and your dual role driver can
register its own handler.
More information about the Linuxppc-dev