From d3e8ea419c137eff86517cefe086549600800449 Mon Sep 17 00:00:00 2001 From: David Brownell Date: Wed, 8 Dec 2004 20:35:50 -0800 Subject: [PATCH] USB: sl811-hcd driver, replaces hc_sl811 This patch provides a new "sl811-hcd" driver, which should replace the older one from Cypress (which has been broken for ages, even on SA-1100). Key features of this new driver: - Small, relatively tight code; - Uses the 2.6 platform_device and usbcore HCD infrastructures; - Compiles (x86, ARM) and works (ARM/PXA255); - Passed a day's worth of "usbtest" stress testing (on 2.6.9). I've enumerated over a dozen different devices with it, and actually tested mice, hubs, keyboards, and usb-storage. There's a hardware erratum that prevents this chip from working with certain external hubs. There's scope yet for some performance work here; and some IRQ quirks linger. This PIO-only driver should serve as a model for some other non-DMA USB host controllers (like isp1161, isp1362, td243) used in embedded Linuxes ... in particular, showing how to maintain async and periodic schedules without pointless emulation of OHCI DMA queues and/or registers. The driver should handle ISO, but since it doesn't implement the special urb->iso_frame_desc[] "pseudo-queue" model (and since Linux can't guarantee low enough IRQ latencies!), ISO is disabled. Signed-off-by: David Brownell Signed-off-by: Greg Kroah-Hartman --- include/linux/usb_sl811.h | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 include/linux/usb_sl811.h (limited to 'include/linux') diff --git a/include/linux/usb_sl811.h b/include/linux/usb_sl811.h new file mode 100644 index 000000000000..4f2d012d7309 --- /dev/null +++ b/include/linux/usb_sl811.h @@ -0,0 +1,26 @@ + +/* + * board initialization should put one of these into dev->platform_data + * and place the sl811hs onto platform_bus named "sl811-hcd". + */ + +struct sl811_platform_data { + unsigned can_wakeup:1; + + /* given port_power, msec/2 after power on till power good */ + u8 potpg; + + /* mA/2 power supplied on this port (max = default = 250) */ + u8 power; + + /* sl811 relies on an external source of VBUS current */ + void (*port_power)(struct device *dev, int is_on); + + /* pulse sl811 nRST (probably with a GPIO) */ + void (*reset)(struct device *dev); + + // some boards need something like these: + // int (*check_overcurrent)(struct device *dev); + // void (*clock_enable)(struct device *dev, int is_on); +}; + -- cgit v1.2.3