diff options
Diffstat (limited to 'drivers/usb/gadget')
| -rw-r--r-- | drivers/usb/gadget/at91_udc.c | 6 | ||||
| -rw-r--r-- | drivers/usb/gadget/dummy_hcd.c | 41 | ||||
| -rw-r--r-- | drivers/usb/gadget/f_fs.c | 4 | ||||
| -rw-r--r-- | drivers/usb/gadget/s3c-hsotg.c | 3 | ||||
| -rw-r--r-- | drivers/usb/gadget/u_serial.c | 4 | 
5 files changed, 49 insertions, 9 deletions
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index c9e66dfb02e..1e35963bd4e 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c @@ -475,8 +475,7 @@ static int at91_ep_enable(struct usb_ep *_ep,  	unsigned long	flags;  	if (!_ep || !ep -			|| !desc || ep->ep.desc -			|| _ep->name == ep0name +			|| !desc || _ep->name == ep0name  			|| desc->bDescriptorType != USB_DT_ENDPOINT  			|| (maxpacket = usb_endpoint_maxp(desc)) == 0  			|| maxpacket > ep->maxpacket) { @@ -530,7 +529,6 @@ ok:  	tmp |= AT91_UDP_EPEDS;  	__raw_writel(tmp, ep->creg); -	ep->ep.desc = desc;  	ep->ep.maxpacket = maxpacket;  	/* @@ -1635,7 +1633,6 @@ static int at91_start(struct usb_gadget *gadget,  	udc->driver = driver;  	udc->gadget.dev.driver = &driver->driver;  	udc->gadget.dev.of_node = udc->pdev->dev.of_node; -	dev_set_drvdata(&udc->gadget.dev, &driver->driver);  	udc->enabled = 1;  	udc->selfpowered = 1; @@ -1656,7 +1653,6 @@ static int at91_stop(struct usb_gadget *gadget,  	spin_unlock_irqrestore(&udc->lock, flags);  	udc->gadget.dev.driver = NULL; -	dev_set_drvdata(&udc->gadget.dev, NULL);  	udc->driver = NULL;  	DBG("unbound from %s\n", driver->driver.name); diff --git a/drivers/usb/gadget/dummy_hcd.c b/drivers/usb/gadget/dummy_hcd.c index b799106027a..afdbb1cbf5d 100644 --- a/drivers/usb/gadget/dummy_hcd.c +++ b/drivers/usb/gadget/dummy_hcd.c @@ -1916,6 +1916,27 @@ done:  	return retval;  } +/* usb 3.0 root hub device descriptor */ +struct { +	struct usb_bos_descriptor bos; +	struct usb_ss_cap_descriptor ss_cap; +} __packed usb3_bos_desc = { + +	.bos = { +		.bLength		= USB_DT_BOS_SIZE, +		.bDescriptorType	= USB_DT_BOS, +		.wTotalLength		= cpu_to_le16(sizeof(usb3_bos_desc)), +		.bNumDeviceCaps		= 1, +	}, +	.ss_cap = { +		.bLength		= USB_DT_USB_SS_CAP_SIZE, +		.bDescriptorType	= USB_DT_DEVICE_CAPABILITY, +		.bDevCapabilityType	= USB_SS_CAP_TYPE, +		.wSpeedSupported	= cpu_to_le16(USB_5GBPS_OPERATION), +		.bFunctionalitySupport	= ilog2(USB_5GBPS_OPERATION), +	}, +}; +  static inline void  ss_hub_descriptor(struct usb_hub_descriptor *desc)  { @@ -2006,6 +2027,18 @@ static int dummy_hub_control(  		else  			hub_descriptor((struct usb_hub_descriptor *) buf);  		break; + +	case DeviceRequest | USB_REQ_GET_DESCRIPTOR: +		if (hcd->speed != HCD_USB3) +			goto error; + +		if ((wValue >> 8) != USB_DT_BOS) +			goto error; + +		memcpy(buf, &usb3_bos_desc, sizeof(usb3_bos_desc)); +		retval = sizeof(usb3_bos_desc); +		break; +  	case GetHubStatus:  		*(__le32 *) buf = cpu_to_le32(0);  		break; @@ -2503,10 +2536,8 @@ static int dummy_hcd_probe(struct platform_device *pdev)  	hs_hcd->has_tt = 1;  	retval = usb_add_hcd(hs_hcd, 0, 0); -	if (retval != 0) { -		usb_put_hcd(hs_hcd); -		return retval; -	} +	if (retval) +		goto put_usb2_hcd;  	if (mod_data.is_super_speed) {  		ss_hcd = usb_create_shared_hcd(&dummy_hcd, &pdev->dev, @@ -2525,6 +2556,8 @@ static int dummy_hcd_probe(struct platform_device *pdev)  put_usb3_hcd:  	usb_put_hcd(ss_hcd);  dealloc_usb2_hcd: +	usb_remove_hcd(hs_hcd); +put_usb2_hcd:  	usb_put_hcd(hs_hcd);  	the_controller.hs_hcd = the_controller.ss_hcd = NULL;  	return retval; diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c index 8adc79d1b40..829aba75a6d 100644 --- a/drivers/usb/gadget/f_fs.c +++ b/drivers/usb/gadget/f_fs.c @@ -34,11 +34,15 @@  /* Debugging ****************************************************************/  #ifdef VERBOSE_DEBUG +#ifndef pr_vdebug  #  define pr_vdebug pr_debug +#endif /* pr_vdebug */  #  define ffs_dump_mem(prefix, ptr, len) \  	print_hex_dump_bytes(pr_fmt(prefix ": "), DUMP_PREFIX_NONE, ptr, len)  #else +#ifndef pr_vdebug  #  define pr_vdebug(...)                 do { } while (0) +#endif /* pr_vdebug */  #  define ffs_dump_mem(prefix, ptr, len) do { } while (0)  #endif /* VERBOSE_DEBUG */ diff --git a/drivers/usb/gadget/s3c-hsotg.c b/drivers/usb/gadget/s3c-hsotg.c index b13e0bb5f5b..0bb617e1dda 100644 --- a/drivers/usb/gadget/s3c-hsotg.c +++ b/drivers/usb/gadget/s3c-hsotg.c @@ -3599,6 +3599,7 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)  	if (hsotg->num_of_eps == 0) {  		dev_err(dev, "wrong number of EPs (zero)\n"); +		ret = -EINVAL;  		goto err_supplies;  	} @@ -3606,6 +3607,7 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)  		      GFP_KERNEL);  	if (!eps) {  		dev_err(dev, "cannot get memory\n"); +		ret = -ENOMEM;  		goto err_supplies;  	} @@ -3622,6 +3624,7 @@ static int __devinit s3c_hsotg_probe(struct platform_device *pdev)  						     GFP_KERNEL);  	if (!hsotg->ctrl_req) {  		dev_err(dev, "failed to allocate ctrl req\n"); +		ret = -ENOMEM;  		goto err_ep_mem;  	} diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c index 2b5534c2ab8..f1739526820 100644 --- a/drivers/usb/gadget/u_serial.c +++ b/drivers/usb/gadget/u_serial.c @@ -132,11 +132,15 @@ static unsigned	n_ports;  #ifdef VERBOSE_DEBUG +#ifndef pr_vdebug  #define pr_vdebug(fmt, arg...) \  	pr_debug(fmt, ##arg) +#endif /* pr_vdebug */  #else +#ifndef pr_vdebig  #define pr_vdebug(fmt, arg...) \  	({ if (0) pr_debug(fmt, ##arg); }) +#endif /* pr_vdebug */  #endif  /*-------------------------------------------------------------------------*/  |