diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-22 13:20:20 -0700 | 
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-08-22 13:20:31 -0700 | 
| commit | b978d51ac3342dfdb089503b64feea8da69e5c15 (patch) | |
| tree | 135d0b7abde4495abbfca459904ff4f14827d204 | |
| parent | ea8c7fd9b0b479ef8f831d19b66c5cb246aec496 (diff) | |
| parent | 200b0182f95a1f97c9fefee88707fb15ce87c22d (diff) | |
Merge branch 'for-greg' of master.kernel.org:/pub/scm/linux/kernel/git/balbi/usb into usb-linus
* 'for-greg' of master.kernel.org:/pub/scm/linux/kernel/git/balbi/usb:
  usb: musb: gadget: fix error path
  usb: gadget: f_phonet: unlock in error case
  usb: musb: blackfin: include prefetch head file
  usb: musb: tusb6010: fix compilation
  usb: gadget: renesas_usbhs: fix DMA build by including dma-mapping.h
  usb: musb: cppi: fix build errors due to DBG and missing musb variable
  usb: musb: ux500: replace missing DBG with dev_dbg
  usb: musb: ux500: set dma config for both src and dst
  usb: musb: fix oops on musb_gadget_pullup
  usb: host: ehci-omap: fix .remove and failure handling path of .probe(v1)
  usb: gadget: hid: don't STALL when processing a HID Descriptor request
  usb: musb: fix Kconfig
  usb: musb: tusb6010_omap: fix build failure: error: 'musb' undeclared
  usb: gadget: composite: fix bMaxPacketSize for SuperSpeed
  usb: gadget: fusb300: remove #if 0 block
  usb: gadget: s3c2410_udc: fix unterminated platform_device_id table
| -rw-r--r-- | drivers/usb/gadget/f_phonet.c | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/blackfin.c | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/cppi_dma.c | 26 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_core.h | 12 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_gadget.c | 4 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_regs.h | 6 | ||||
| -rw-r--r-- | drivers/usb/musb/tusb6010.c | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/tusb6010_omap.c | 1 | ||||
| -rw-r--r-- | drivers/usb/musb/ux500_dma.c | 38 | 
9 files changed, 57 insertions, 33 deletions
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c index 8f8d3f6cd89e..8f3eab1af885 100644 --- a/drivers/usb/gadget/f_phonet.c +++ b/drivers/usb/gadget/f_phonet.c @@ -434,6 +434,7 @@ static int pn_set_alt(struct usb_function *f, unsigned intf, unsigned alt)  			    config_ep_by_speed(gadget, f, fp->out_ep)) {  				fp->in_ep->desc = NULL;  				fp->out_ep->desc = NULL; +				spin_unlock(&port->lock);  				return -EINVAL;  			}  			usb_ep_enable(fp->out_ep); diff --git a/drivers/usb/musb/blackfin.c b/drivers/usb/musb/blackfin.c index ae8c39617743..5e7cfba5b079 100644 --- a/drivers/usb/musb/blackfin.c +++ b/drivers/usb/musb/blackfin.c @@ -17,6 +17,7 @@  #include <linux/io.h>  #include <linux/platform_device.h>  #include <linux/dma-mapping.h> +#include <linux/prefetch.h>  #include <asm/cacheflush.h> diff --git a/drivers/usb/musb/cppi_dma.c b/drivers/usb/musb/cppi_dma.c index 149f3f310a0a..318fb4e8a885 100644 --- a/drivers/usb/musb/cppi_dma.c +++ b/drivers/usb/musb/cppi_dma.c @@ -226,8 +226,10 @@ static int cppi_controller_stop(struct dma_controller *c)  	struct cppi		*controller;  	void __iomem		*tibase;  	int			i; +	struct musb		*musb;  	controller = container_of(c, struct cppi, controller); +	musb = controller->musb;  	tibase = controller->tibase;  	/* DISABLE INDIVIDUAL CHANNEL Interrupts */ @@ -289,9 +291,11 @@ cppi_channel_allocate(struct dma_controller *c,  	u8			index;  	struct cppi_channel	*cppi_ch;  	void __iomem		*tibase; +	struct musb		*musb;  	controller = container_of(c, struct cppi, controller);  	tibase = controller->tibase; +	musb = controller->musb;  	/* ep0 doesn't use DMA; remember cppi indices are 0..N-1 */  	index = ep->epnum - 1; @@ -339,7 +343,8 @@ static void cppi_channel_release(struct dma_channel *channel)  	c = container_of(channel, struct cppi_channel, channel);  	tibase = c->controller->tibase;  	if (!c->hw_ep) -		dev_dbg(musb->controller, "releasing idle DMA channel %p\n", c); +		dev_dbg(c->controller->musb->controller, +			"releasing idle DMA channel %p\n", c);  	else if (!c->transmit)  		core_rxirq_enable(tibase, c->index + 1); @@ -357,10 +362,11 @@ cppi_dump_rx(int level, struct cppi_channel *c, const char *tag)  	musb_ep_select(base, c->index + 1); -	DBG(level, "RX DMA%d%s: %d left, csr %04x, " -			"%08x H%08x S%08x C%08x, " -			"B%08x L%08x %08x .. %08x" -			"\n", +	dev_dbg(c->controller->musb->controller, +		"RX DMA%d%s: %d left, csr %04x, " +		"%08x H%08x S%08x C%08x, " +		"B%08x L%08x %08x .. %08x" +		"\n",  		c->index, tag,  		musb_readl(c->controller->tibase,  			DAVINCI_RXCPPI_BUFCNT0_REG + 4 * c->index), @@ -387,10 +393,11 @@ cppi_dump_tx(int level, struct cppi_channel *c, const char *tag)  	musb_ep_select(base, c->index + 1); -	DBG(level, "TX DMA%d%s: csr %04x, " -			"H%08x S%08x C%08x %08x, " -			"F%08x L%08x .. %08x" -			"\n", +	dev_dbg(c->controller->musb->controller, +		"TX DMA%d%s: csr %04x, " +		"H%08x S%08x C%08x %08x, " +		"F%08x L%08x .. %08x" +		"\n",  		c->index, tag,  		musb_readw(c->hw_ep->regs, MUSB_TXCSR), @@ -1022,6 +1029,7 @@ static bool cppi_rx_scan(struct cppi *cppi, unsigned ch)  	int				i;  	dma_addr_t			safe2ack;  	void __iomem			*regs = rx->hw_ep->regs; +	struct musb			*musb = cppi->musb;  	cppi_dump_rx(6, rx, "/K"); diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index 668eeef601ae..b3c065ab9dbc 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h @@ -172,7 +172,8 @@ enum musb_g_ep0_state {  #endif  /* TUSB mapping: "flat" plus ep0 special cases */ -#if	defined(CONFIG_USB_MUSB_TUSB6010) +#if defined(CONFIG_USB_MUSB_TUSB6010) || \ +	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  #define musb_ep_select(_mbase, _epnum) \  	musb_writeb((_mbase), MUSB_INDEX, (_epnum))  #define	MUSB_EP_OFFSET			MUSB_TUSB_OFFSET @@ -241,7 +242,8 @@ struct musb_hw_ep {  	void __iomem		*fifo;  	void __iomem		*regs; -#ifdef CONFIG_USB_MUSB_TUSB6010 +#if defined(CONFIG_USB_MUSB_TUSB6010) || \ +	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  	void __iomem		*conf;  #endif @@ -258,7 +260,8 @@ struct musb_hw_ep {  	struct dma_channel	*tx_channel;  	struct dma_channel	*rx_channel; -#ifdef CONFIG_USB_MUSB_TUSB6010 +#if defined(CONFIG_USB_MUSB_TUSB6010) || \ +	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  	/* TUSB has "asynchronous" and "synchronous" dma modes */  	dma_addr_t		fifo_async;  	dma_addr_t		fifo_sync; @@ -356,7 +359,8 @@ struct musb {  	void __iomem		*ctrl_base;  	void __iomem		*mregs; -#ifdef CONFIG_USB_MUSB_TUSB6010 +#if defined(CONFIG_USB_MUSB_TUSB6010) || \ +	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  	dma_addr_t		async;  	dma_addr_t		sync;  	void __iomem		*sync_va; diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index 8c41a2e6ea77..e81820370d6f 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c @@ -1856,6 +1856,7 @@ int __init musb_gadget_setup(struct musb *musb)  	return 0;  err: +	musb->g.dev.parent = NULL;  	device_unregister(&musb->g.dev);  	return status;  } @@ -1863,7 +1864,8 @@ err:  void musb_gadget_cleanup(struct musb *musb)  {  	usb_del_gadget_udc(&musb->g); -	device_unregister(&musb->g.dev); +	if (musb->g.dev.parent) +		device_unregister(&musb->g.dev);  }  /* diff --git a/drivers/usb/musb/musb_regs.h b/drivers/usb/musb/musb_regs.h index 82410703dcd3..03f2655af290 100644 --- a/drivers/usb/musb/musb_regs.h +++ b/drivers/usb/musb/musb_regs.h @@ -234,7 +234,8 @@  #define MUSB_TESTMODE		0x0F	/* 8 bit */  /* Get offset for a given FIFO from musb->mregs */ -#ifdef	CONFIG_USB_MUSB_TUSB6010 +#if defined(CONFIG_USB_MUSB_TUSB6010) ||	\ +	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  #define MUSB_FIFO_OFFSET(epnum)	(0x200 + ((epnum) * 0x20))  #else  #define MUSB_FIFO_OFFSET(epnum)	(0x20 + ((epnum) * 4)) @@ -295,7 +296,8 @@  #define MUSB_FLAT_OFFSET(_epnum, _offset)	\  	(0x100 + (0x10*(_epnum)) + (_offset)) -#ifdef CONFIG_USB_MUSB_TUSB6010 +#if defined(CONFIG_USB_MUSB_TUSB6010) ||	\ +	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)  /* TUSB6010 EP0 configuration register is special */  #define MUSB_TUSB_OFFSET(_epnum, _offset)	\  	(0x10 + _offset) diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c index 9eec41fbf3a4..ec1480191f78 100644 --- a/drivers/usb/musb/tusb6010.c +++ b/drivers/usb/musb/tusb6010.c @@ -18,6 +18,7 @@  #include <linux/kernel.h>  #include <linux/errno.h>  #include <linux/init.h> +#include <linux/prefetch.h>  #include <linux/usb.h>  #include <linux/irq.h>  #include <linux/platform_device.h> diff --git a/drivers/usb/musb/tusb6010_omap.c b/drivers/usb/musb/tusb6010_omap.c index 07c8a73dfe41..b67b4bc596c1 100644 --- a/drivers/usb/musb/tusb6010_omap.c +++ b/drivers/usb/musb/tusb6010_omap.c @@ -20,6 +20,7 @@  #include <plat/mux.h>  #include "musb_core.h" +#include "tusb6010.h"  #define to_chdat(c)		((struct tusb_omap_dma_ch *)(c)->private_data) diff --git a/drivers/usb/musb/ux500_dma.c b/drivers/usb/musb/ux500_dma.c index cecace411832..ef4333f4bbe0 100644 --- a/drivers/usb/musb/ux500_dma.c +++ b/drivers/usb/musb/ux500_dma.c @@ -65,7 +65,8 @@ static void ux500_tx_work(struct work_struct *data)  	struct musb *musb = hw_ep->musb;  	unsigned long flags; -	DBG(4, "DMA tx transfer done on hw_ep=%d\n", hw_ep->epnum); +	dev_dbg(musb->controller, "DMA tx transfer done on hw_ep=%d\n", +		hw_ep->epnum);  	spin_lock_irqsave(&musb->lock, flags);  	ux500_channel->channel.actual_len = ux500_channel->cur_len; @@ -84,7 +85,8 @@ static void ux500_rx_work(struct work_struct *data)  	struct musb *musb = hw_ep->musb;  	unsigned long flags; -	DBG(4, "DMA rx transfer done on hw_ep=%d\n", hw_ep->epnum); +	dev_dbg(musb->controller, "DMA rx transfer done on hw_ep=%d\n", +		hw_ep->epnum);  	spin_lock_irqsave(&musb->lock, flags);  	ux500_channel->channel.actual_len = ux500_channel->cur_len; @@ -116,9 +118,11 @@ static bool ux500_configure_channel(struct dma_channel *channel,  	enum dma_slave_buswidth addr_width;  	dma_addr_t usb_fifo_addr = (MUSB_FIFO_OFFSET(hw_ep->epnum) +  					ux500_channel->controller->phy_base); +	struct musb *musb = ux500_channel->controller->private_data; -	DBG(4, "packet_sz=%d, mode=%d, dma_addr=0x%x, len=%d is_tx=%d\n", -			packet_sz, mode, dma_addr, len, ux500_channel->is_tx); +	dev_dbg(musb->controller, +		"packet_sz=%d, mode=%d, dma_addr=0x%x, len=%d is_tx=%d\n", +		packet_sz, mode, dma_addr, len, ux500_channel->is_tx);  	ux500_channel->cur_len = len; @@ -133,15 +137,13 @@ static bool ux500_configure_channel(struct dma_channel *channel,  					DMA_SLAVE_BUSWIDTH_4_BYTES;  	slave_conf.direction = direction; -	if (direction == DMA_FROM_DEVICE) { -		slave_conf.src_addr = usb_fifo_addr; -		slave_conf.src_addr_width = addr_width; -		slave_conf.src_maxburst = 16; -	} else { -		slave_conf.dst_addr = usb_fifo_addr; -		slave_conf.dst_addr_width = addr_width; -		slave_conf.dst_maxburst = 16; -	} +	slave_conf.src_addr = usb_fifo_addr; +	slave_conf.src_addr_width = addr_width; +	slave_conf.src_maxburst = 16; +	slave_conf.dst_addr = usb_fifo_addr; +	slave_conf.dst_addr_width = addr_width; +	slave_conf.dst_maxburst = 16; +  	dma_chan->device->device_control(dma_chan, DMA_SLAVE_CONFIG,  					     (unsigned long) &slave_conf); @@ -166,6 +168,7 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,  	struct ux500_dma_controller *controller = container_of(c,  			struct ux500_dma_controller, controller);  	struct ux500_dma_channel *ux500_channel = NULL; +	struct musb *musb = controller->private_data;  	u8 ch_num = hw_ep->epnum - 1;  	u32 max_ch; @@ -192,7 +195,7 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,  	ux500_channel->hw_ep = hw_ep;  	ux500_channel->is_allocated = 1; -	DBG(7, "hw_ep=%d, is_tx=0x%x, channel=%d\n", +	dev_dbg(musb->controller, "hw_ep=%d, is_tx=0x%x, channel=%d\n",  		hw_ep->epnum, is_tx, ch_num);  	return &(ux500_channel->channel); @@ -201,8 +204,9 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,  static void ux500_dma_channel_release(struct dma_channel *channel)  {  	struct ux500_dma_channel *ux500_channel = channel->private_data; +	struct musb *musb = ux500_channel->controller->private_data; -	DBG(7, "channel=%d\n", ux500_channel->ch_num); +	dev_dbg(musb->controller, "channel=%d\n", ux500_channel->ch_num);  	if (ux500_channel->is_allocated) {  		ux500_channel->is_allocated = 0; @@ -252,8 +256,8 @@ static int ux500_dma_channel_abort(struct dma_channel *channel)  	void __iomem *epio = musb->endpoints[ux500_channel->hw_ep->epnum].regs;  	u16 csr; -	DBG(4, "channel=%d, is_tx=%d\n", ux500_channel->ch_num, -						ux500_channel->is_tx); +	dev_dbg(musb->controller, "channel=%d, is_tx=%d\n", +		ux500_channel->ch_num, ux500_channel->is_tx);  	if (channel->status == MUSB_DMA_STATUS_BUSY) {  		if (ux500_channel->is_tx) {  | 
