aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTatyana Brokhman <tlinder@codeaurora.org>2011-06-28 09:33:48 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-06-28 14:14:36 -0400
commit72c973dd2b01b212a159faa330a2bc641a3ed809 (patch)
tree2fbc36b4103678cd9b7599deaab06f89e4871de2 /drivers
parent0f91349b89f37dfad7b77f7829a105b6a0f526ec (diff)
usb: gadget: add usb_endpoint_descriptor to struct usb_ep
Change usb_ep_enable() prototype to use endpoint descriptor from usb_ep. This optimization spares the FDs from saving the endpoint chosen descriptor. This optimization is not full though. To fully exploit this change, one needs to update all the UDCs as well since in the current implementation each of them saves the endpoint descriptor in it's internal (and extended) endpoint structure. Signed-off-by: Tatyana Brokhman <tlinder@codeaurora.org> Signed-off-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/dbgp.c8
-rw-r--r--drivers/usb/gadget/f_acm.c9
-rw-r--r--drivers/usb/gadget/f_audio.c5
-rw-r--r--drivers/usb/gadget/f_ecm.c17
-rw-r--r--drivers/usb/gadget/f_eem.c10
-rw-r--r--drivers/usb/gadget/f_fs.c3
-rw-r--r--drivers/usb/gadget/f_hid.c5
-rw-r--r--drivers/usb/gadget/f_loopback.c14
-rw-r--r--drivers/usb/gadget/f_mass_storage.c3
-rw-r--r--drivers/usb/gadget/f_ncm.c17
-rw-r--r--drivers/usb/gadget/f_obex.c6
-rw-r--r--drivers/usb/gadget/f_phonet.c9
-rw-r--r--drivers/usb/gadget/f_rndis.c15
-rw-r--r--drivers/usb/gadget/f_serial.c4
-rw-r--r--drivers/usb/gadget/f_sourcesink.c10
-rw-r--r--drivers/usb/gadget/f_subset.c8
-rw-r--r--drivers/usb/gadget/f_uvc.c6
-rw-r--r--drivers/usb/gadget/file_storage.c3
-rw-r--r--drivers/usb/gadget/gmidi.c6
-rw-r--r--drivers/usb/gadget/inode.c6
-rw-r--r--drivers/usb/gadget/printer.c26
-rw-r--r--drivers/usb/gadget/u_ether.c12
-rw-r--r--drivers/usb/gadget/u_ether.h4
-rw-r--r--drivers/usb/gadget/u_serial.c4
-rw-r--r--drivers/usb/gadget/u_serial.h2
25 files changed, 104 insertions, 108 deletions
diff --git a/drivers/usb/gadget/dbgp.c b/drivers/usb/gadget/dbgp.c
index dbe92ee8847..052209e8927 100644
--- a/drivers/usb/gadget/dbgp.c
+++ b/drivers/usb/gadget/dbgp.c
@@ -173,7 +173,9 @@ fail_1:
173 173
174static int __enable_ep(struct usb_ep *ep, struct usb_endpoint_descriptor *desc) 174static int __enable_ep(struct usb_ep *ep, struct usb_endpoint_descriptor *desc)
175{ 175{
176 int err = usb_ep_enable(ep, desc); 176 int err;
177 ep->desc = desc;
178 err = usb_ep_enable(ep);
177 ep->driver_data = dbgp.gadget; 179 ep->driver_data = dbgp.gadget;
178 return err; 180 return err;
179} 181}
@@ -268,8 +270,8 @@ static int __init dbgp_configure_endpoints(struct usb_gadget *gadget)
268 dbgp.serial->in = dbgp.i_ep; 270 dbgp.serial->in = dbgp.i_ep;
269 dbgp.serial->out = dbgp.o_ep; 271 dbgp.serial->out = dbgp.o_ep;
270 272
271 dbgp.serial->in_desc = &i_desc; 273 dbgp.serial->in->desc = &i_desc;
272 dbgp.serial->out_desc = &o_desc; 274 dbgp.serial->out->desc = &o_desc;
273 275
274 if (gserial_setup(gadget, 1) < 0) { 276 if (gserial_setup(gadget, 1) < 0) {
275 stp = 3; 277 stp = 3;
diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
index bd6226cbae8..d04b4a68220 100644
--- a/drivers/usb/gadget/f_acm.c
+++ b/drivers/usb/gadget/f_acm.c
@@ -62,7 +62,6 @@ struct f_acm {
62 struct acm_ep_descs hs; 62 struct acm_ep_descs hs;
63 63
64 struct usb_ep *notify; 64 struct usb_ep *notify;
65 struct usb_endpoint_descriptor *notify_desc;
66 struct usb_request *notify_req; 65 struct usb_request *notify_req;
67 66
68 struct usb_cdc_line_coding port_line_coding; /* 8-N-1 etc */ 67 struct usb_cdc_line_coding port_line_coding; /* 8-N-1 etc */
@@ -405,11 +404,11 @@ static int acm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
405 usb_ep_disable(acm->notify); 404 usb_ep_disable(acm->notify);
406 } else { 405 } else {
407 VDBG(cdev, "init acm ctrl interface %d\n", intf); 406 VDBG(cdev, "init acm ctrl interface %d\n", intf);
408 acm->notify_desc = ep_choose(cdev->gadget, 407 acm->notify->desc = ep_choose(cdev->gadget,
409 acm->hs.notify, 408 acm->hs.notify,
410 acm->fs.notify); 409 acm->fs.notify);
411 } 410 }
412 usb_ep_enable(acm->notify, acm->notify_desc); 411 usb_ep_enable(acm->notify);
413 acm->notify->driver_data = acm; 412 acm->notify->driver_data = acm;
414 413
415 } else if (intf == acm->data_id) { 414 } else if (intf == acm->data_id) {
@@ -418,9 +417,9 @@ static int acm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
418 gserial_disconnect(&acm->port); 417 gserial_disconnect(&acm->port);
419 } else { 418 } else {
420 DBG(cdev, "activate acm ttyGS%d\n", acm->port_num); 419 DBG(cdev, "activate acm ttyGS%d\n", acm->port_num);
421 acm->port.in_desc = ep_choose(cdev->gadget, 420 acm->port.in->desc = ep_choose(cdev->gadget,
422 acm->hs.in, acm->fs.in); 421 acm->hs.in, acm->fs.in);
423 acm->port.out_desc = ep_choose(cdev->gadget, 422 acm->port.out->desc = ep_choose(cdev->gadget,
424 acm->hs.out, acm->fs.out); 423 acm->hs.out, acm->fs.out);
425 } 424 }
426 gserial_connect(&acm->port, acm->port_num); 425 gserial_connect(&acm->port, acm->port_num);
diff --git a/drivers/usb/gadget/f_audio.c b/drivers/usb/gadget/f_audio.c
index 8ee330a2ab5..02a02700b51 100644
--- a/drivers/usb/gadget/f_audio.c
+++ b/drivers/usb/gadget/f_audio.c
@@ -279,7 +279,6 @@ struct f_audio {
279 279
280 /* endpoints handle full and/or high speeds */ 280 /* endpoints handle full and/or high speeds */
281 struct usb_ep *out_ep; 281 struct usb_ep *out_ep;
282 struct usb_endpoint_descriptor *out_desc;
283 282
284 spinlock_t lock; 283 spinlock_t lock;
285 struct f_audio_buf *copy_buf; 284 struct f_audio_buf *copy_buf;
@@ -575,7 +574,7 @@ static int f_audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
575 574
576 if (intf == 1) { 575 if (intf == 1) {
577 if (alt == 1) { 576 if (alt == 1) {
578 usb_ep_enable(out_ep, audio->out_desc); 577 usb_ep_enable(out_ep);
579 out_ep->driver_data = audio; 578 out_ep->driver_data = audio;
580 audio->copy_buf = f_audio_buffer_alloc(audio_buf_size); 579 audio->copy_buf = f_audio_buffer_alloc(audio_buf_size);
581 if (IS_ERR(audio->copy_buf)) 580 if (IS_ERR(audio->copy_buf))
@@ -677,6 +676,7 @@ f_audio_bind(struct usb_configuration *c, struct usb_function *f)
677 if (!ep) 676 if (!ep)
678 goto fail; 677 goto fail;
679 audio->out_ep = ep; 678 audio->out_ep = ep;
679 audio->out_ep->desc = &as_out_ep_desc;
680 ep->driver_data = cdev; /* claim */ 680 ep->driver_data = cdev; /* claim */
681 681
682 status = -ENOMEM; 682 status = -ENOMEM;
@@ -776,7 +776,6 @@ int __init audio_bind_config(struct usb_configuration *c)
776 audio->card.func.set_alt = f_audio_set_alt; 776 audio->card.func.set_alt = f_audio_set_alt;
777 audio->card.func.setup = f_audio_setup; 777 audio->card.func.setup = f_audio_setup;
778 audio->card.func.disable = f_audio_disable; 778 audio->card.func.disable = f_audio_disable;
779 audio->out_desc = &as_out_ep_desc;
780 779
781 control_selector_init(audio); 780 control_selector_init(audio);
782 781
diff --git a/drivers/usb/gadget/f_ecm.c b/drivers/usb/gadget/f_ecm.c
index 544257a89ed..7c996f271cc 100644
--- a/drivers/usb/gadget/f_ecm.c
+++ b/drivers/usb/gadget/f_ecm.c
@@ -68,7 +68,6 @@ struct f_ecm {
68 struct ecm_ep_descs hs; 68 struct ecm_ep_descs hs;
69 69
70 struct usb_ep *notify; 70 struct usb_ep *notify;
71 struct usb_endpoint_descriptor *notify_desc;
72 struct usb_request *notify_req; 71 struct usb_request *notify_req;
73 u8 notify_state; 72 u8 notify_state;
74 bool is_open; 73 bool is_open;
@@ -466,11 +465,11 @@ static int ecm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
466 usb_ep_disable(ecm->notify); 465 usb_ep_disable(ecm->notify);
467 } else { 466 } else {
468 VDBG(cdev, "init ecm ctrl %d\n", intf); 467 VDBG(cdev, "init ecm ctrl %d\n", intf);
469 ecm->notify_desc = ep_choose(cdev->gadget, 468 ecm->notify->desc = ep_choose(cdev->gadget,
470 ecm->hs.notify, 469 ecm->hs.notify,
471 ecm->fs.notify); 470 ecm->fs.notify);
472 } 471 }
473 usb_ep_enable(ecm->notify, ecm->notify_desc); 472 usb_ep_enable(ecm->notify);
474 ecm->notify->driver_data = ecm; 473 ecm->notify->driver_data = ecm;
475 474
476 /* Data interface has two altsettings, 0 and 1 */ 475 /* Data interface has two altsettings, 0 and 1 */
@@ -483,11 +482,11 @@ static int ecm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
483 gether_disconnect(&ecm->port); 482 gether_disconnect(&ecm->port);
484 } 483 }
485 484
486 if (!ecm->port.in) { 485 if (!ecm->port.in_ep->desc) {
487 DBG(cdev, "init ecm\n"); 486 DBG(cdev, "init ecm\n");
488 ecm->port.in = ep_choose(cdev->gadget, 487 ecm->port.in_ep->desc = ep_choose(cdev->gadget,
489 ecm->hs.in, ecm->fs.in); 488 ecm->hs.in, ecm->fs.in);
490 ecm->port.out = ep_choose(cdev->gadget, 489 ecm->port.out_ep->desc = ep_choose(cdev->gadget,
491 ecm->hs.out, ecm->fs.out); 490 ecm->hs.out, ecm->fs.out);
492 } 491 }
493 492
@@ -549,7 +548,7 @@ static void ecm_disable(struct usb_function *f)
549 if (ecm->notify->driver_data) { 548 if (ecm->notify->driver_data) {
550 usb_ep_disable(ecm->notify); 549 usb_ep_disable(ecm->notify);
551 ecm->notify->driver_data = NULL; 550 ecm->notify->driver_data = NULL;
552 ecm->notify_desc = NULL; 551 ecm->notify->desc = NULL;
553 } 552 }
554} 553}
555 554
@@ -723,9 +722,9 @@ fail:
723 /* we might as well release our claims on endpoints */ 722 /* we might as well release our claims on endpoints */
724 if (ecm->notify) 723 if (ecm->notify)
725 ecm->notify->driver_data = NULL; 724 ecm->notify->driver_data = NULL;
726 if (ecm->port.out) 725 if (ecm->port.out_ep->desc)
727 ecm->port.out_ep->driver_data = NULL; 726 ecm->port.out_ep->driver_data = NULL;
728 if (ecm->port.in) 727 if (ecm->port.in_ep->desc)
729 ecm->port.in_ep->driver_data = NULL; 728 ecm->port.in_ep->driver_data = NULL;
730 729
731 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status); 730 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c
index b3c30429015..fea8e3b08b5 100644
--- a/drivers/usb/gadget/f_eem.c
+++ b/drivers/usb/gadget/f_eem.c
@@ -176,11 +176,11 @@ static int eem_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
176 gether_disconnect(&eem->port); 176 gether_disconnect(&eem->port);
177 } 177 }
178 178
179 if (!eem->port.in) { 179 if (!eem->port.in_ep->desc) {
180 DBG(cdev, "init eem\n"); 180 DBG(cdev, "init eem\n");
181 eem->port.in = ep_choose(cdev->gadget, 181 eem->port.in_ep->desc = ep_choose(cdev->gadget,
182 eem->hs.in, eem->fs.in); 182 eem->hs.in, eem->fs.in);
183 eem->port.out = ep_choose(cdev->gadget, 183 eem->port.out_ep->desc = ep_choose(cdev->gadget,
184 eem->hs.out, eem->fs.out); 184 eem->hs.out, eem->fs.out);
185 } 185 }
186 186
@@ -289,9 +289,9 @@ fail:
289 usb_free_descriptors(f->descriptors); 289 usb_free_descriptors(f->descriptors);
290 290
291 /* we might as well release our claims on endpoints */ 291 /* we might as well release our claims on endpoints */
292 if (eem->port.out) 292 if (eem->port.out_ep->desc)
293 eem->port.out_ep->driver_data = NULL; 293 eem->port.out_ep->driver_data = NULL;
294 if (eem->port.in) 294 if (eem->port.in_ep->desc)
295 eem->port.in_ep->driver_data = NULL; 295 eem->port.in_ep->driver_data = NULL;
296 296
297 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status); 297 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
diff --git a/drivers/usb/gadget/f_fs.c b/drivers/usb/gadget/f_fs.c
index 19fffccc370..c161a9aaeb7 100644
--- a/drivers/usb/gadget/f_fs.c
+++ b/drivers/usb/gadget/f_fs.c
@@ -1544,7 +1544,8 @@ static int ffs_func_eps_enable(struct ffs_function *func)
1544 ds = ep->descs[ep->descs[1] ? 1 : 0]; 1544 ds = ep->descs[ep->descs[1] ? 1 : 0];
1545 1545
1546 ep->ep->driver_data = ep; 1546 ep->ep->driver_data = ep;
1547 ret = usb_ep_enable(ep->ep, ds); 1547 ep->ep->desc = ds;
1548 ret = usb_ep_enable(ep->ep);
1548 if (likely(!ret)) { 1549 if (likely(!ret)) {
1549 epfile->ep = ep; 1550 epfile->ep = ep;
1550 epfile->in = usb_endpoint_dir_in(ds); 1551 epfile->in = usb_endpoint_dir_in(ds);
diff --git a/drivers/usb/gadget/f_hid.c b/drivers/usb/gadget/f_hid.c
index 598e7e2ab80..12879b6f787 100644
--- a/drivers/usb/gadget/f_hid.c
+++ b/drivers/usb/gadget/f_hid.c
@@ -416,7 +416,6 @@ static int hidg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
416{ 416{
417 struct usb_composite_dev *cdev = f->config->cdev; 417 struct usb_composite_dev *cdev = f->config->cdev;
418 struct f_hidg *hidg = func_to_hidg(f); 418 struct f_hidg *hidg = func_to_hidg(f);
419 const struct usb_endpoint_descriptor *ep_desc;
420 int status = 0; 419 int status = 0;
421 420
422 VDBG(cdev, "hidg_set_alt intf:%d alt:%d\n", intf, alt); 421 VDBG(cdev, "hidg_set_alt intf:%d alt:%d\n", intf, alt);
@@ -426,9 +425,9 @@ static int hidg_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
426 if (hidg->in_ep->driver_data != NULL) 425 if (hidg->in_ep->driver_data != NULL)
427 usb_ep_disable(hidg->in_ep); 426 usb_ep_disable(hidg->in_ep);
428 427
429 ep_desc = ep_choose(f->config->cdev->gadget, 428 hidg->in_ep->desc = ep_choose(f->config->cdev->gadget,
430 hidg->hs_in_ep_desc, hidg->fs_in_ep_desc); 429 hidg->hs_in_ep_desc, hidg->fs_in_ep_desc);
431 status = usb_ep_enable(hidg->in_ep, ep_desc); 430 status = usb_ep_enable(hidg->in_ep);
432 if (status < 0) { 431 if (status < 0) {
433 ERROR(cdev, "Enable endpoint FAILED!\n"); 432 ERROR(cdev, "Enable endpoint FAILED!\n");
434 goto fail; 433 goto fail;
diff --git a/drivers/usb/gadget/f_loopback.c b/drivers/usb/gadget/f_loopback.c
index b37960f9e75..34e3ccaf088 100644
--- a/drivers/usb/gadget/f_loopback.c
+++ b/drivers/usb/gadget/f_loopback.c
@@ -250,26 +250,24 @@ static int
250enable_loopback(struct usb_composite_dev *cdev, struct f_loopback *loop) 250enable_loopback(struct usb_composite_dev *cdev, struct f_loopback *loop)
251{ 251{
252 int result = 0; 252 int result = 0;
253 const struct usb_endpoint_descriptor *src, *sink;
254 struct usb_ep *ep; 253 struct usb_ep *ep;
255 struct usb_request *req; 254 struct usb_request *req;
256 unsigned i; 255 unsigned i;
257 256
258 src = ep_choose(cdev->gadget,
259 &hs_loop_source_desc, &fs_loop_source_desc);
260 sink = ep_choose(cdev->gadget,
261 &hs_loop_sink_desc, &fs_loop_sink_desc);
262
263 /* one endpoint writes data back IN to the host */ 257 /* one endpoint writes data back IN to the host */
264 ep = loop->in_ep; 258 ep = loop->in_ep;
265 result = usb_ep_enable(ep, src); 259 ep->desc = ep_choose(cdev->gadget,
260 &hs_loop_source_desc, &fs_loop_source_desc);
261 result = usb_ep_enable(ep);
266 if (result < 0) 262 if (result < 0)
267 return result; 263 return result;
268 ep->driver_data = loop; 264 ep->driver_data = loop;
269 265
270 /* one endpoint just reads OUT packets */ 266 /* one endpoint just reads OUT packets */
271 ep = loop->out_ep; 267 ep = loop->out_ep;
272 result = usb_ep_enable(ep, sink); 268 ep->desc = ep_choose(cdev->gadget,
269 &hs_loop_sink_desc, &fs_loop_sink_desc);
270 result = usb_ep_enable(ep);
273 if (result < 0) { 271 if (result < 0) {
274fail0: 272fail0:
275 ep = loop->in_ep; 273 ep = loop->in_ep;
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index efb58f9f5aa..4eee4341212 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -2330,7 +2330,8 @@ static int enable_endpoint(struct fsg_common *common, struct usb_ep *ep,
2330 int rc; 2330 int rc;
2331 2331
2332 ep->driver_data = common; 2332 ep->driver_data = common;
2333 rc = usb_ep_enable(ep, d); 2333 ep->desc = (struct usb_endpoint_descriptor *)d;
2334 rc = usb_ep_enable(ep);
2334 if (rc) 2335 if (rc)
2335 ERROR(common, "can't enable %s, result %d\n", ep->name, rc); 2336 ERROR(common, "can't enable %s, result %d\n", ep->name, rc);
2336 return rc; 2337 return rc;
diff --git a/drivers/usb/gadget/f_ncm.c b/drivers/usb/gadget/f_ncm.c
index 86902a60bcd..06daa1bc9ff 100644
--- a/drivers/usb/gadget/f_ncm.c
+++ b/drivers/usb/gadget/f_ncm.c
@@ -70,7 +70,6 @@ struct f_ncm {
70 struct ncm_ep_descs hs; 70 struct ncm_ep_descs hs;
71 71
72 struct usb_ep *notify; 72 struct usb_ep *notify;
73 struct usb_endpoint_descriptor *notify_desc;
74 struct usb_request *notify_req; 73 struct usb_request *notify_req;
75 u8 notify_state; 74 u8 notify_state;
76 bool is_open; 75 bool is_open;
@@ -804,11 +803,11 @@ static int ncm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
804 usb_ep_disable(ncm->notify); 803 usb_ep_disable(ncm->notify);
805 } else { 804 } else {
806 DBG(cdev, "init ncm ctrl %d\n", intf); 805 DBG(cdev, "init ncm ctrl %d\n", intf);
807 ncm->notify_desc = ep_choose(cdev->gadget, 806 ncm->notify->desc = ep_choose(cdev->gadget,
808 ncm->hs.notify, 807 ncm->hs.notify,
809 ncm->fs.notify); 808 ncm->fs.notify);
810 } 809 }
811 usb_ep_enable(ncm->notify, ncm->notify_desc); 810 usb_ep_enable(ncm->notify);
812 ncm->notify->driver_data = ncm; 811 ncm->notify->driver_data = ncm;
813 812
814 /* Data interface has two altsettings, 0 and 1 */ 813 /* Data interface has two altsettings, 0 and 1 */
@@ -829,12 +828,12 @@ static int ncm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
829 if (alt == 1) { 828 if (alt == 1) {
830 struct net_device *net; 829 struct net_device *net;
831 830
832 if (!ncm->port.in) { 831 if (!ncm->port.in_ep->desc) {
833 DBG(cdev, "init ncm\n"); 832 DBG(cdev, "init ncm\n");
834 ncm->port.in = ep_choose(cdev->gadget, 833 ncm->port.in_ep->desc = ep_choose(cdev->gadget,
835 ncm->hs.in, 834 ncm->hs.in,
836 ncm->fs.in); 835 ncm->fs.in);
837 ncm->port.out = ep_choose(cdev->gadget, 836 ncm->port.out_ep->desc = ep_choose(cdev->gadget,
838 ncm->hs.out, 837 ncm->hs.out,
839 ncm->fs.out); 838 ncm->fs.out);
840 } 839 }
@@ -1111,7 +1110,7 @@ static void ncm_disable(struct usb_function *f)
1111 if (ncm->notify->driver_data) { 1110 if (ncm->notify->driver_data) {
1112 usb_ep_disable(ncm->notify); 1111 usb_ep_disable(ncm->notify);
1113 ncm->notify->driver_data = NULL; 1112 ncm->notify->driver_data = NULL;
1114 ncm->notify_desc = NULL; 1113 ncm->notify->desc = NULL;
1115 } 1114 }
1116} 1115}
1117 1116
@@ -1288,9 +1287,9 @@ fail:
1288 /* we might as well release our claims on endpoints */ 1287 /* we might as well release our claims on endpoints */
1289 if (ncm->notify) 1288 if (ncm->notify)
1290 ncm->notify->driver_data = NULL; 1289 ncm->notify->driver_data = NULL;
1291 if (ncm->port.out) 1290 if (ncm->port.out_ep->desc)
1292 ncm->port.out_ep->driver_data = NULL; 1291 ncm->port.out_ep->driver_data = NULL;
1293 if (ncm->port.in) 1292 if (ncm->port.in_ep->desc)
1294 ncm->port.in_ep->driver_data = NULL; 1293 ncm->port.in_ep->driver_data = NULL;
1295 1294
1296 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status); 1295 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
diff --git a/drivers/usb/gadget/f_obex.c b/drivers/usb/gadget/f_obex.c
index 8f8c6437147..a6dbda090ca 100644
--- a/drivers/usb/gadget/f_obex.c
+++ b/drivers/usb/gadget/f_obex.c
@@ -227,11 +227,11 @@ static int obex_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
227 gserial_disconnect(&obex->port); 227 gserial_disconnect(&obex->port);
228 } 228 }
229 229
230 if (!obex->port.in_desc) { 230 if (!obex->port.in->desc) {
231 DBG(cdev, "init obex ttyGS%d\n", obex->port_num); 231 DBG(cdev, "init obex ttyGS%d\n", obex->port_num);
232 obex->port.in_desc = ep_choose(cdev->gadget, 232 obex->port.in->desc = ep_choose(cdev->gadget,
233 obex->hs.obex_in, obex->fs.obex_in); 233 obex->hs.obex_in, obex->fs.obex_in);
234 obex->port.out_desc = ep_choose(cdev->gadget, 234 obex->port.out->desc = ep_choose(cdev->gadget,
235 obex->hs.obex_out, obex->fs.obex_out); 235 obex->hs.obex_out, obex->fs.obex_out);
236 } 236 }
237 237
diff --git a/drivers/usb/gadget/f_phonet.c b/drivers/usb/gadget/f_phonet.c
index 5e1495097ec..dc63f161a10 100644
--- a/drivers/usb/gadget/f_phonet.c
+++ b/drivers/usb/gadget/f_phonet.c
@@ -427,17 +427,16 @@ static int pn_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
427 spin_lock(&port->lock); 427 spin_lock(&port->lock);
428 __pn_reset(f); 428 __pn_reset(f);
429 if (alt == 1) { 429 if (alt == 1) {
430 struct usb_endpoint_descriptor *out, *in;
431 int i; 430 int i;
432 431
433 out = ep_choose(gadget, 432 fp->out_ep->desc = ep_choose(gadget,
434 &pn_hs_sink_desc, 433 &pn_hs_sink_desc,
435 &pn_fs_sink_desc); 434 &pn_fs_sink_desc);
436 in = ep_choose(gadget, 435 fp->in_ep->desc = ep_choose(gadget,
437 &pn_hs_source_desc, 436 &pn_hs_source_desc,
438 &pn_fs_source_desc); 437 &pn_fs_source_desc);
439 usb_ep_enable(fp->out_ep, out); 438 usb_ep_enable(fp->out_ep);
440 usb_ep_enable(fp->in_ep, in); 439 usb_ep_enable(fp->in_ep);
441 440
442 port->usb = fp; 441 port->usb = fp;
443 fp->out_ep->driver_data = fp; 442 fp->out_ep->driver_data = fp;
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
index fa12ec8364e..4646254a892 100644
--- a/drivers/usb/gadget/f_rndis.c
+++ b/drivers/usb/gadget/f_rndis.c
@@ -92,7 +92,6 @@ struct f_rndis {
92 struct rndis_ep_descs hs; 92 struct rndis_ep_descs hs;
93 93
94 struct usb_ep *notify; 94 struct usb_ep *notify;
95 struct usb_endpoint_descriptor *notify_desc;
96 struct usb_request *notify_req; 95 struct usb_request *notify_req;
97 atomic_t notify_count; 96 atomic_t notify_count;
98}; 97};
@@ -486,11 +485,11 @@ static int rndis_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
486 usb_ep_disable(rndis->notify); 485 usb_ep_disable(rndis->notify);
487 } else { 486 } else {
488 VDBG(cdev, "init rndis ctrl %d\n", intf); 487 VDBG(cdev, "init rndis ctrl %d\n", intf);
489 rndis->notify_desc = ep_choose(cdev->gadget, 488 rndis->notify->desc = ep_choose(cdev->gadget,
490 rndis->hs.notify, 489 rndis->hs.notify,
491 rndis->fs.notify); 490 rndis->fs.notify);
492 } 491 }
493 usb_ep_enable(rndis->notify, rndis->notify_desc); 492 usb_ep_enable(rndis->notify);
494 rndis->notify->driver_data = rndis; 493 rndis->notify->driver_data = rndis;
495 494
496 } else if (intf == rndis->data_id) { 495 } else if (intf == rndis->data_id) {
@@ -501,11 +500,11 @@ static int rndis_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
501 gether_disconnect(&rndis->port); 500 gether_disconnect(&rndis->port);
502 } 501 }
503 502
504 if (!rndis->port.in) { 503 if (!rndis->port.in_ep->desc) {
505 DBG(cdev, "init rndis\n"); 504 DBG(cdev, "init rndis\n");
506 rndis->port.in = ep_choose(cdev->gadget, 505 rndis->port.in_ep->desc = ep_choose(cdev->gadget,
507 rndis->hs.in, rndis->fs.in); 506 rndis->hs.in, rndis->fs.in);
508 rndis->port.out = ep_choose(cdev->gadget, 507 rndis->port.out_ep->desc = ep_choose(cdev->gadget,
509 rndis->hs.out, rndis->fs.out); 508 rndis->hs.out, rndis->fs.out);
510 } 509 }
511 510
@@ -738,9 +737,9 @@ fail:
738 /* we might as well release our claims on endpoints */ 737 /* we might as well release our claims on endpoints */
739 if (rndis->notify) 738 if (rndis->notify)
740 rndis->notify->driver_data = NULL; 739 rndis->notify->driver_data = NULL;
741 if (rndis->port.out) 740 if (rndis->port.out_ep->desc)
742 rndis->port.out_ep->driver_data = NULL; 741 rndis->port.out_ep->driver_data = NULL;
743 if (rndis->port.in) 742 if (rndis->port.in_ep->desc)
744 rndis->port.in_ep->driver_data = NULL; 743 rndis->port.in_ep->driver_data = NULL;
745 744
746 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status); 745 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
diff --git a/drivers/usb/gadget/f_serial.c b/drivers/usb/gadget/f_serial.c
index 490b00b01a7..a9ce6261d15 100644
--- a/drivers/usb/gadget/f_serial.c
+++ b/drivers/usb/gadget/f_serial.c
@@ -138,9 +138,9 @@ static int gser_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
138 gserial_disconnect(&gser->port); 138 gserial_disconnect(&gser->port);
139 } else { 139 } else {
140 DBG(cdev, "activate generic ttyGS%d\n", gser->port_num); 140 DBG(cdev, "activate generic ttyGS%d\n", gser->port_num);
141 gser->port.in_desc = ep_choose(cdev->gadget, 141 gser->port.in->desc = ep_choose(cdev->gadget,
142 gser->hs.in, gser->fs.in); 142 gser->hs.in, gser->fs.in);
143 gser->port.out_desc = ep_choose(cdev->gadget, 143 gser->port.out->desc = ep_choose(cdev->gadget,
144 gser->hs.out, gser->fs.out); 144 gser->hs.out, gser->fs.out);
145 } 145 }
146 gserial_connect(&gser->port, gser->port_num); 146 gserial_connect(&gser->port, gser->port_num);
diff --git a/drivers/usb/gadget/f_sourcesink.c b/drivers/usb/gadget/f_sourcesink.c
index e403a534dd5..0ffddd33a55 100644
--- a/drivers/usb/gadget/f_sourcesink.c
+++ b/drivers/usb/gadget/f_sourcesink.c
@@ -343,15 +343,12 @@ static int
343enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss) 343enable_source_sink(struct usb_composite_dev *cdev, struct f_sourcesink *ss)
344{ 344{
345 int result = 0; 345 int result = 0;
346 const struct usb_endpoint_descriptor *src, *sink;
347 struct usb_ep *ep; 346 struct usb_ep *ep;
348 347
349 src = ep_choose(cdev->gadget, &hs_source_desc, &fs_source_desc);
350 sink = ep_choose(cdev->gadget, &hs_sink_desc, &fs_sink_desc);
351
352 /* one endpoint writes (sources) zeroes IN (to the host) */ 348 /* one endpoint writes (sources) zeroes IN (to the host) */
353 ep = ss->in_ep; 349 ep = ss->in_ep;
354 result = usb_ep_enable(ep, src); 350 ep->desc = ep_choose(cdev->gadget, &hs_source_desc, &fs_source_desc);
351 result = usb_ep_enable(ep);
355 if (result < 0) 352 if (result < 0)
356 return result; 353 return result;
357 ep->driver_data = ss; 354 ep->driver_data = ss;
@@ -367,7 +364,8 @@ fail:
367 364
368 /* one endpoint reads (sinks) anything OUT (from the host) */ 365 /* one endpoint reads (sinks) anything OUT (from the host) */
369 ep = ss->out_ep; 366 ep = ss->out_ep;
370 result = usb_ep_enable(ep, sink); 367 ep->desc = ep_choose(cdev->gadget, &hs_sink_desc, &fs_sink_desc);
368 result = usb_ep_enable(ep);
371 if (result < 0) 369 if (result < 0)
372 goto fail; 370 goto fail;
373 ep->driver_data = ss; 371 ep->driver_data = ss;
diff --git a/drivers/usb/gadget/f_subset.c b/drivers/usb/gadget/f_subset.c
index 8675ca41532..aecaed1724a 100644
--- a/drivers/usb/gadget/f_subset.c
+++ b/drivers/usb/gadget/f_subset.c
@@ -243,9 +243,9 @@ static int geth_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
243 } 243 }
244 244
245 DBG(cdev, "init + activate cdc subset\n"); 245 DBG(cdev, "init + activate cdc subset\n");
246 geth->port.in = ep_choose(cdev->gadget, 246 geth->port.in_ep->desc = ep_choose(cdev->gadget,
247 geth->hs.in, geth->fs.in); 247 geth->hs.in, geth->fs.in);
248 geth->port.out = ep_choose(cdev->gadget, 248 geth->port.out_ep->desc = ep_choose(cdev->gadget,
249 geth->hs.out, geth->fs.out); 249 geth->hs.out, geth->fs.out);
250 250
251 net = gether_connect(&geth->port); 251 net = gether_connect(&geth->port);
@@ -334,9 +334,9 @@ geth_bind(struct usb_configuration *c, struct usb_function *f)
334 334
335fail: 335fail:
336 /* we might as well release our claims on endpoints */ 336 /* we might as well release our claims on endpoints */
337 if (geth->port.out) 337 if (geth->port.out_ep->desc)
338 geth->port.out_ep->driver_data = NULL; 338 geth->port.out_ep->driver_data = NULL;
339 if (geth->port.in) 339 if (geth->port.in_ep->desc)
340 geth->port.in_ep->driver_data = NULL; 340 geth->port.in_ep->driver_data = NULL;
341 341
342 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status); 342 ERROR(cdev, "%s: can't bind, err %d\n", f->name, status);
diff --git a/drivers/usb/gadget/f_uvc.c b/drivers/usb/gadget/f_uvc.c
index be446b7e7ea..df74d031191 100644
--- a/drivers/usb/gadget/f_uvc.c
+++ b/drivers/usb/gadget/f_uvc.c
@@ -262,8 +262,10 @@ uvc_function_set_alt(struct usb_function *f, unsigned interface, unsigned alt)
262 if (uvc->state != UVC_STATE_CONNECTED) 262 if (uvc->state != UVC_STATE_CONNECTED)
263 return 0; 263 return 0;
264 264
265 if (uvc->video.ep) 265 if (uvc->video.ep) {
266 usb_ep_enable(uvc->video.ep, &uvc_streaming_ep); 266 uvc->video.ep->desc = &uvc_streaming_ep;
267 usb_ep_enable(uvc->video.ep);
268 }
267 269
268 memset(&v4l2_event, 0, sizeof(v4l2_event)); 270 memset(&v4l2_event, 0, sizeof(v4l2_event));
269 v4l2_event.type = UVC_EVENT_STREAMON; 271 v4l2_event.type = UVC_EVENT_STREAMON;
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
index 83bee30cdb9..738591a64bb 100644
--- a/drivers/usb/gadget/file_storage.c
+++ b/drivers/usb/gadget/file_storage.c
@@ -2713,7 +2713,8 @@ static int enable_endpoint(struct fsg_dev *fsg, struct usb_ep *ep,
2713 int rc; 2713 int rc;
2714 2714
2715 ep->driver_data = fsg; 2715 ep->driver_data = fsg;
2716 rc = usb_ep_enable(ep, d); 2716 ep->desc = d;
2717 rc = usb_ep_enable(ep);
2717 if (rc) 2718 if (rc)
2718 ERROR(fsg, "can't enable %s, result %d\n", ep->name, rc); 2719 ERROR(fsg, "can't enable %s, result %d\n", ep->name, rc);
2719 return rc; 2720 return rc;
diff --git a/drivers/usb/gadget/gmidi.c b/drivers/usb/gadget/gmidi.c
index 47b86b99d44..4f40f146743 100644
--- a/drivers/usb/gadget/gmidi.c
+++ b/drivers/usb/gadget/gmidi.c
@@ -537,14 +537,16 @@ static int set_gmidi_config(struct gmidi_device *dev, gfp_t gfp_flags)
537 struct usb_ep *ep; 537 struct usb_ep *ep;
538 unsigned i; 538 unsigned i;
539 539
540 err = usb_ep_enable(dev->in_ep, &bulk_in_desc); 540 dev->in_ep->desc = &bulk_in_desc;
541 err = usb_ep_enable(dev->in_ep);
541 if (err) { 542 if (err) {
542 ERROR(dev, "can't start %s: %d\n", dev->in_ep->name, err); 543 ERROR(dev, "can't start %s: %d\n", dev->in_ep->name, err);
543 goto fail; 544 goto fail;
544 } 545 }
545 dev->in_ep->driver_data = dev; 546 dev->in_ep->driver_data = dev;
546 547
547 err = usb_ep_enable(dev->out_ep, &bulk_out_desc); 548 dev->out_ep->desc = &bulk_out_desc;
549 err = usb_ep_enable(dev->out_ep);
548 if (err) { 550 if (err) {
549 ERROR(dev, "can't start %s: %d\n", dev->out_ep->name, err); 551 ERROR(dev, "can't start %s: %d\n", dev->out_ep->name, err);
550 goto fail; 552 goto fail;
diff --git a/drivers/usb/gadget/inode.c b/drivers/usb/gadget/inode.c
index a56876aaf76..a9a45569239 100644
--- a/drivers/usb/gadget/inode.c
+++ b/drivers/usb/gadget/inode.c
@@ -832,14 +832,16 @@ ep_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
832 switch (data->dev->gadget->speed) { 832 switch (data->dev->gadget->speed) {
833 case USB_SPEED_LOW: 833 case USB_SPEED_LOW:
834 case USB_SPEED_FULL: 834 case USB_SPEED_FULL:
835 value = usb_ep_enable (ep, &data->desc); 835 ep->desc = &data->desc;
836 value = usb_ep_enable(ep);
836 if (value == 0) 837 if (value == 0)
837 data->state = STATE_EP_ENABLED; 838 data->state = STATE_EP_ENABLED;
838 break; 839 break;
839#ifdef CONFIG_USB_GADGET_DUALSPEED 840#ifdef CONFIG_USB_GADGET_DUALSPEED
840 case USB_SPEED_HIGH: 841 case USB_SPEED_HIGH:
841 /* fails if caller didn't provide that descriptor... */ 842 /* fails if caller didn't provide that descriptor... */
842 value = usb_ep_enable (ep, &data->hs_desc); 843 ep->desc = &data->hs_desc;
844 value = usb_ep_enable(ep);
843 if (value == 0) 845 if (value == 0)
844 data->state = STATE_EP_ENABLED; 846 data->state = STATE_EP_ENABLED;
845 break; 847 break;
diff --git a/drivers/usb/gadget/printer.c b/drivers/usb/gadget/printer.c
index 271ef94668e..00e5f19c75b 100644
--- a/drivers/usb/gadget/printer.c
+++ b/drivers/usb/gadget/printer.c
@@ -89,8 +89,7 @@ struct printer_dev {
89 u8 config; 89 u8 config;
90 s8 interface; 90 s8 interface;
91 struct usb_ep *in_ep, *out_ep; 91 struct usb_ep *in_ep, *out_ep;
92 const struct usb_endpoint_descriptor 92
93 *in, *out;
94 struct list_head rx_reqs; /* List of free RX structs */ 93 struct list_head rx_reqs; /* List of free RX structs */
95 struct list_head rx_reqs_active; /* List of Active RX xfers */ 94 struct list_head rx_reqs_active; /* List of Active RX xfers */
96 struct list_head rx_buffers; /* List of completed xfers */ 95 struct list_head rx_buffers; /* List of completed xfers */
@@ -895,19 +894,20 @@ set_printer_interface(struct printer_dev *dev)
895{ 894{
896 int result = 0; 895 int result = 0;
897 896
898 dev->in = ep_desc(dev->gadget, &hs_ep_in_desc, &fs_ep_in_desc); 897 dev->in_ep->desc = ep_desc(dev->gadget, &hs_ep_in_desc, &fs_ep_in_desc);
899 dev->in_ep->driver_data = dev; 898 dev->in_ep->driver_data = dev;
900 899
901 dev->out = ep_desc(dev->gadget, &hs_ep_out_desc, &fs_ep_out_desc); 900 dev->out_ep->desc = ep_desc(dev->gadget, &hs_ep_out_desc,
901 &fs_ep_out_desc);
902 dev->out_ep->driver_data = dev; 902 dev->out_ep->driver_data = dev;
903 903
904 result = usb_ep_enable(dev->in_ep, dev->in); 904 result = usb_ep_enable(dev->in_ep);
905 if (result != 0) { 905 if (result != 0) {
906 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); 906 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result);
907 goto done; 907 goto done;
908 } 908 }
909 909
910 result = usb_ep_enable(dev->out_ep, dev->out); 910 result = usb_ep_enable(dev->out_ep);
911 if (result != 0) { 911 if (result != 0) {
912 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result); 912 DBG(dev, "enable %s --> %d\n", dev->in_ep->name, result);
913 goto done; 913 goto done;
@@ -918,8 +918,8 @@ done:
918 if (result != 0) { 918 if (result != 0) {
919 (void) usb_ep_disable(dev->in_ep); 919 (void) usb_ep_disable(dev->in_ep);
920 (void) usb_ep_disable(dev->out_ep); 920 (void) usb_ep_disable(dev->out_ep);
921 dev->in = NULL; 921 dev->in_ep->desc = NULL;
922 dev->out = NULL; 922 dev->out_ep->desc = NULL;
923 } 923 }
924 924
925 /* caller is responsible for cleanup on error */ 925 /* caller is responsible for cleanup on error */
@@ -933,12 +933,14 @@ static void printer_reset_interface(struct printer_dev *dev)
933 933
934 DBG(dev, "%s\n", __func__); 934 DBG(dev, "%s\n", __func__);
935 935
936 if (dev->in) 936 if (dev->in_ep->desc)
937 usb_ep_disable(dev->in_ep); 937 usb_ep_disable(dev->in_ep);
938 938
939 if (dev->out) 939 if (dev->out_ep->desc)
940 usb_ep_disable(dev->out_ep); 940 usb_ep_disable(dev->out_ep);
941 941
942 dev->in_ep->desc = NULL;
943 dev->out_ep->desc = NULL;
942 dev->interface = -1; 944 dev->interface = -1;
943} 945}
944 946
@@ -1104,9 +1106,9 @@ static void printer_soft_reset(struct printer_dev *dev)
1104 list_add(&req->list, &dev->tx_reqs); 1106 list_add(&req->list, &dev->tx_reqs);
1105 } 1107 }
1106 1108
1107 if (usb_ep_enable(dev->in_ep, dev->in)) 1109 if (usb_ep_enable(dev->in_ep))
1108 DBG(dev, "Failed to enable USB in_ep\n"); 1110 DBG(dev, "Failed to enable USB in_ep\n");
1109 if (usb_ep_enable(dev->out_ep, dev->out)) 1111 if (usb_ep_enable(dev->out_ep))
1110 DBG(dev, "Failed to enable USB out_ep\n"); 1112 DBG(dev, "Failed to enable USB out_ep\n");
1111 1113
1112 wake_up_interruptible(&dev->rx_wait); 1114 wake_up_interruptible(&dev->rx_wait);
diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c
index 2ac1d214732..b91363e88db 100644
--- a/drivers/usb/gadget/u_ether.c
+++ b/drivers/usb/gadget/u_ether.c
@@ -693,8 +693,8 @@ static int eth_stop(struct net_device *net)
693 usb_ep_disable(link->out_ep); 693 usb_ep_disable(link->out_ep);
694 if (netif_carrier_ok(net)) { 694 if (netif_carrier_ok(net)) {
695 DBG(dev, "host still using in/out endpoints\n"); 695 DBG(dev, "host still using in/out endpoints\n");
696 usb_ep_enable(link->in_ep, link->in); 696 usb_ep_enable(link->in_ep);
697 usb_ep_enable(link->out_ep, link->out); 697 usb_ep_enable(link->out_ep);
698 } 698 }
699 } 699 }
700 spin_unlock_irqrestore(&dev->lock, flags); 700 spin_unlock_irqrestore(&dev->lock, flags);
@@ -871,7 +871,7 @@ struct net_device *gether_connect(struct gether *link)
871 return ERR_PTR(-EINVAL); 871 return ERR_PTR(-EINVAL);
872 872
873 link->in_ep->driver_data = dev; 873 link->in_ep->driver_data = dev;
874 result = usb_ep_enable(link->in_ep, link->in); 874 result = usb_ep_enable(link->in_ep);
875 if (result != 0) { 875 if (result != 0) {
876 DBG(dev, "enable %s --> %d\n", 876 DBG(dev, "enable %s --> %d\n",
877 link->in_ep->name, result); 877 link->in_ep->name, result);
@@ -879,7 +879,7 @@ struct net_device *gether_connect(struct gether *link)
879 } 879 }
880 880
881 link->out_ep->driver_data = dev; 881 link->out_ep->driver_data = dev;
882 result = usb_ep_enable(link->out_ep, link->out); 882 result = usb_ep_enable(link->out_ep);
883 if (result != 0) { 883 if (result != 0) {
884 DBG(dev, "enable %s --> %d\n", 884 DBG(dev, "enable %s --> %d\n",
885 link->out_ep->name, result); 885 link->out_ep->name, result);
@@ -969,7 +969,7 @@ void gether_disconnect(struct gether *link)
969 } 969 }
970 spin_unlock(&dev->req_lock); 970 spin_unlock(&dev->req_lock);
971 link->in_ep->driver_data = NULL; 971 link->in_ep->driver_data = NULL;
972 link->in = NULL; 972 link->in_ep->desc = NULL;
973 973
974 usb_ep_disable(link->out_ep); 974 usb_ep_disable(link->out_ep);
975 spin_lock(&dev->req_lock); 975 spin_lock(&dev->req_lock);
@@ -984,7 +984,7 @@ void gether_disconnect(struct gether *link)
984 } 984 }
985 spin_unlock(&dev->req_lock); 985 spin_unlock(&dev->req_lock);
986 link->out_ep->driver_data = NULL; 986 link->out_ep->driver_data = NULL;
987 link->out = NULL; 987 link->out_ep->desc = NULL;
988 988
989 /* finish forgetting about this USB link episode */ 989 /* finish forgetting about this USB link episode */
990 dev->header_len = 0; 990 dev->header_len = 0;
diff --git a/drivers/usb/gadget/u_ether.h b/drivers/usb/gadget/u_ether.h
index b56e1e7d423..c966440ddd7 100644
--- a/drivers/usb/gadget/u_ether.h
+++ b/drivers/usb/gadget/u_ether.h
@@ -52,10 +52,6 @@ struct gether {
52 struct usb_ep *in_ep; 52 struct usb_ep *in_ep;
53 struct usb_ep *out_ep; 53 struct usb_ep *out_ep;
54 54
55 /* descriptors match device speed at gether_connect() time */
56 struct usb_endpoint_descriptor *in;
57 struct usb_endpoint_descriptor *out;
58
59 bool is_zlp_ok; 55 bool is_zlp_ok;
60 56
61 u16 cdc_filter; 57 u16 cdc_filter;
diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c
index 40f7716b31f..a8aa46962d8 100644
--- a/drivers/usb/gadget/u_serial.c
+++ b/drivers/usb/gadget/u_serial.c
@@ -1247,12 +1247,12 @@ int gserial_connect(struct gserial *gser, u8 port_num)
1247 port = ports[port_num].port; 1247 port = ports[port_num].port;
1248 1248
1249 /* activate the endpoints */ 1249 /* activate the endpoints */
1250 status = usb_ep_enable(gser->in, gser->in_desc); 1250 status = usb_ep_enable(gser->in);
1251 if (status < 0) 1251 if (status < 0)
1252 return status; 1252 return status;
1253 gser->in->driver_data = port; 1253 gser->in->driver_data = port;
1254 1254
1255 status = usb_ep_enable(gser->out, gser->out_desc); 1255 status = usb_ep_enable(gser->out);
1256 if (status < 0) 1256 if (status < 0)
1257 goto fail_out; 1257 goto fail_out;
1258 gser->out->driver_data = port; 1258 gser->out->driver_data = port;
diff --git a/drivers/usb/gadget/u_serial.h b/drivers/usb/gadget/u_serial.h
index 300f0ed9475..9b0fe6450fb 100644
--- a/drivers/usb/gadget/u_serial.h
+++ b/drivers/usb/gadget/u_serial.h
@@ -35,8 +35,6 @@ struct gserial {
35 35
36 struct usb_ep *in; 36 struct usb_ep *in;
37 struct usb_ep *out; 37 struct usb_ep *out;
38 struct usb_endpoint_descriptor *in_desc;
39 struct usb_endpoint_descriptor *out_desc;
40 38
41 /* REVISIT avoid this CDC-ACM support harder ... */ 39 /* REVISIT avoid this CDC-ACM support harder ... */
42 struct usb_cdc_line_coding port_line_coding; /* 9600-8-N-1 etc */ 40 struct usb_cdc_line_coding port_line_coding; /* 9600-8-N-1 etc */