Re: [PATCH 06/20] usb: hcd-pci: introduce pm-ops for platform-pci devs

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

 



On Thu, 25 Aug 2011, Felipe Balbi wrote:

> > > > All right, try this instead:  Merely because OMAP and a bunch of other 
> > > > SoC architectures require a bridge device between the PCI and USB 
> > > > layers, that doesn't mean the Intel implementation should be forced to 
> > > > use one.
> > > 
> > > that doesn't mean either that Intel couldn't license the same IP the ARM
> > > SoCs are licensing.
> > 
> > Of course.  And when they do, maybe adding the glue layer will be 
> > appropriate.  Until then, it isn't.
> 
> Are you sure they aren't already ?

If they are, it hasn't affected the way the kernel interacts with the 
hardware, which means the kernel isn't aware of the bridge.


> > In the end, this comes down to a tradeoff.  Do we implement a fake
> > "glue" platform device that has no real meaning in order to simplify
> > some drivers by removing their need to support the PCI bus as well as
> > the platform bus?  Or do we keep the device model data structures
> > accurate, but complicate the drivers?
> > 
> > I can't help thinking that other subsystems have solved the same
> > problem, and it might be a good idea to do what they do.  The example
> > I'm most familiar with is SCSI; it supports host adapters of any type.
> > Following the SCSI model would mean _always_ sticking a new device
> > between the controller (whether PCI or platform) and the root hub.  
> > The new device would belong to the USB bus_type, not the platform bus.
> 
> Then let's add that. Bus as of today the usb_bus_type is for USB device
> drivers (a USB camera, or USB Storage, etc). You would need to add some
> extra bus_type for USB Host Controllers and why would you add a whole
> new bus when there's already the platform bus ready to use and very well
> tested ?

No, not a new bus_type -- a new device_type.  We already have
usb_device_type, usb_intf_device_type, and usb_ep_device_type.  It
would be necessary to add usb_hc_device_type (or usb_host_device_type
or usb_controller_device_type or whatever you prefer).

The problem is that this would mean all the host controller drivers 
would have to be changed.  I'd prefer to avoid that.


With your plan, I don't see how you can hope to make a single driver
source work for all the different IP blocks.  Passing the resources via
devicetree will help, but the different hardware implementations will
still require vendor-specific code to run at various times, right?  
Otherwise all the ehci-*.c files would resemble each other more
closely.

If your main concern is getting rid of the #ifdefs in ehci-hcd.c (and
preventing the equivalent from being added to xhci.c), there's a
simpler way to accomplish it: Use conditional linking rather than
conditional compilation.  All that complexity would be moved out of the
C source files and into the Makefile instead.  That is, instead of

obj-$(CONFIG_USB_EHCI_HCD)	+= ehci-hcd.o

which is what we currently have, we could have

obj-$(CONFIG_PCI)		+= ehci-pci.o ehci-hcd.o
obj-$(CONFIG_USB_EHCI_FSL)	+= ehci-fsl.o ehci-hcd.o
obj-$(CONFIG_USB_EHCI_HCD_OMAP)	+= ehci-omap.o ehci-hcd.o
etc.

The one disadvantage would be that you couldn't have a single driver
module to handle both PCI and a platform device; they would have to be
separate drivers.

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