usbgadget: lpc32xx: Various fixes and improvements
authorKevin Wells <wellsk40@gmail.com>
Sat, 19 Feb 2011 00:03:07 +0000 (16:03 -0800)
committerKevin Wells <wellsk40@gmail.com>
Sat, 19 Feb 2011 00:03:07 +0000 (16:03 -0800)
commite55be168df280332491efee95893a10914ceb435
tree2c27884a32042298e6cbb93b007cd275febfba85
parent0a78db231cc6f81f308375984500594f8d145a56
usbgadget: lpc32xx: Various fixes and improvements

This patch fixes many problems with the LPC32xx USB gadget driver.
Most of the fixes fix issues reported by multiple sources.

A complete list of the fixes is below:
 - Removed unused fields in lpc32xx_udc structure
 - Switched I2C control functions to work queues to prevent blocked
   I2C transactions during USB operation. This effects VBUS control,
   power control, and the USB pullup
 - Re-write of all the spinlock handling to work around spinlock issues
 - All non-DMA code has been removed. Driver is now DMA only.
 - Remove isp1301 references to support Micrel and Max parts
 - Fixed some of the state logic for the protocol engine
 - All while() loops now have timeouts, they should never hit them
 - Fixed an issue with USB speed variable that would kill connection
 - Changed "Device error" from an error to a warning. These messages
   usually indicate problems (noisy transfers, bad cable, etc), but
   usually self-correcting
 - Revised IN EP ZLP transfer to send ZLP when transfer size is 2x
   or greater than the max packet size and is an exact divider of
   the MAXP size. The ZLP will be sent right away if buffer space
   is available, but will be handled by the EP status IRQ if it has
   to be deferred.
 - Removed un-needed checks from udc_read_hwep() and udc_write_hwep()
 - Fixed isochronous EP support with OUT packets
 - Added extra checks in udc_handle_eps() to guard against spurious
   or unexpected interrupts, calls with requests, or calls when the
   FIFO is full
 - Removed unused and incorrect code about the 'wierd underrun issue'
 - Rewrite of lpc32xx_vbus_session to wait for gadget to fully shut
   down all EPs
 - Fixed an issue in the IRQ handlers where a status in DEVSTAT
   could get inadertently cleared and unhandled

Reported-by: Andy Green <andy@warmcat.com>
Reported-by: Trevor Willington <twellington@smarttech.com>
Signed-off-by: Bakki Srinivas <srinivas.bakki@nxp.com>
Signed-off-by: Kevin Wells <kevin.wells@nxp.com>

modified:   drivers/usb/gadget/lpc32xx_udc.c
modified:   drivers/usb/gadget/lpc32xx_udc.h
drivers/usb/gadget/lpc32xx_udc.c
drivers/usb/gadget/lpc32xx_udc.h