diff options
Diffstat (limited to 'drivers/usb/gadget/f_loopback.c')
| -rw-r--r-- | drivers/usb/gadget/f_loopback.c | 28 | 
1 files changed, 13 insertions, 15 deletions
diff --git a/drivers/usb/gadget/f_loopback.c b/drivers/usb/gadget/f_loopback.c index 7275706caeb..bb39cb2bb3a 100644 --- a/drivers/usb/gadget/f_loopback.c +++ b/drivers/usb/gadget/f_loopback.c @@ -177,6 +177,7 @@ loopback_bind(struct usb_configuration *c, struct usb_function *f)  	struct usb_composite_dev *cdev = c->cdev;  	struct f_loopback	*loop = func_to_loop(f);  	int			id; +	int ret;  	/* allocate interface ID(s) */  	id = usb_interface_id(c, f); @@ -201,22 +202,19 @@ autoconf_fail:  	loop->out_ep->driver_data = cdev;	/* claim */  	/* support high speed hardware */ -	if (gadget_is_dualspeed(c->cdev->gadget)) { -		hs_loop_source_desc.bEndpointAddress = -				fs_loop_source_desc.bEndpointAddress; -		hs_loop_sink_desc.bEndpointAddress = -				fs_loop_sink_desc.bEndpointAddress; -		f->hs_descriptors = hs_loopback_descs; -	} +	hs_loop_source_desc.bEndpointAddress = +		fs_loop_source_desc.bEndpointAddress; +	hs_loop_sink_desc.bEndpointAddress = fs_loop_sink_desc.bEndpointAddress;  	/* support super speed hardware */ -	if (gadget_is_superspeed(c->cdev->gadget)) { -		ss_loop_source_desc.bEndpointAddress = -				fs_loop_source_desc.bEndpointAddress; -		ss_loop_sink_desc.bEndpointAddress = -				fs_loop_sink_desc.bEndpointAddress; -		f->ss_descriptors = ss_loopback_descs; -	} +	ss_loop_source_desc.bEndpointAddress = +		fs_loop_source_desc.bEndpointAddress; +	ss_loop_sink_desc.bEndpointAddress = fs_loop_sink_desc.bEndpointAddress; + +	ret = usb_assign_descriptors(f, fs_loopback_descs, hs_loopback_descs, +			ss_loopback_descs); +	if (ret) +		return ret;  	DBG(cdev, "%s speed %s: IN/%s, OUT/%s\n",  	    (gadget_is_superspeed(c->cdev->gadget) ? "super" : @@ -228,6 +226,7 @@ autoconf_fail:  static void  loopback_unbind(struct usb_configuration *c, struct usb_function *f)  { +	usb_free_all_descriptors(f);  	kfree(func_to_loop(f));  } @@ -379,7 +378,6 @@ static int __init loopback_bind_config(struct usb_configuration *c)  		return -ENOMEM;  	loop->function.name = "loopback"; -	loop->function.descriptors = fs_loopback_descs;  	loop->function.bind = loopback_bind;  	loop->function.unbind = loopback_unbind;  	loop->function.set_alt = loopback_set_alt;  |