summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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
-rw-r--r--include/linux/usb/gadget.h16
26 files changed, 111 insertions, 117 deletions
diff --git a/drivers/usb/gadget/dbgp.c b/drivers/usb/gadget/dbgp.c
index dbe92ee88477..052209e89271 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 bd6226cbae86..d04b4a68220d 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 8ee330a2ab58..02a02700b51d 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 544257a89ed2..7c996f271ccb 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 b3c304290150..fea8e3b08b5f 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 19fffccc370d..c161a9aaeb7e 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 598e7e2ab80c..12879b6f787c 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 b37960f9e753..34e3ccaf0884 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 efb58f9f5aa9..4eee43412121 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 86902a60bcdb..06daa1bc9ffd 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 8f8c64371475..a6dbda090ca5 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 5e1495097ec3..dc63f161a10a 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 fa12ec8364ef..4646254a8924 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 490b00b01a7d..a9ce6261d156 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 e403a534dd55..0ffddd33a55c 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 8675ca415329..aecaed1724aa 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 be446b7e7eaa..df74d0311910 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 83bee30cdb94..738591a64bb4 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 47b86b99d449..4f40f1467438 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 a56876aaf76c..a9a455692397 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 271ef94668e7..00e5f19c75ba 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 2ac1d2147325..b91363e88db7 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 b56e1e7d423c..c966440ddd70 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 40f7716b31fc..a8aa46962d81 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 300f0ed9475d..9b0fe6450fbf 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 */
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 18979cfb6d66..fe50912585f8 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -132,8 +132,9 @@ struct usb_ep_ops {
132 * @maxpacket:The maximum packet size used on this endpoint. The initial 132 * @maxpacket:The maximum packet size used on this endpoint. The initial
133 * value can sometimes be reduced (hardware allowing), according to 133 * value can sometimes be reduced (hardware allowing), according to
134 * the endpoint descriptor used to configure the endpoint. 134 * the endpoint descriptor used to configure the endpoint.
135 * @driver_data:for use by the gadget driver. all other fields are 135 * @driver_data:for use by the gadget driver.
136 * read-only to gadget drivers. 136 * @desc: endpoint descriptor. This pointer is set before the endpoint is
137 * enabled and remains valid until the endpoint is disabled.
137 * 138 *
138 * the bus controller driver lists all the general purpose endpoints in 139 * the bus controller driver lists all the general purpose endpoints in
139 * gadget->ep_list. the control endpoint (gadget->ep0) is not in that list, 140 * gadget->ep_list. the control endpoint (gadget->ep0) is not in that list,
@@ -146,6 +147,7 @@ struct usb_ep {
146 const struct usb_ep_ops *ops; 147 const struct usb_ep_ops *ops;
147 struct list_head ep_list; 148 struct list_head ep_list;
148 unsigned maxpacket:16; 149 unsigned maxpacket:16;
150 const struct usb_endpoint_descriptor *desc;
149}; 151};
150 152
151/*-------------------------------------------------------------------------*/ 153/*-------------------------------------------------------------------------*/
@@ -154,11 +156,8 @@ struct usb_ep {
154 * usb_ep_enable - configure endpoint, making it usable 156 * usb_ep_enable - configure endpoint, making it usable
155 * @ep:the endpoint being configured. may not be the endpoint named "ep0". 157 * @ep:the endpoint being configured. may not be the endpoint named "ep0".
156 * drivers discover endpoints through the ep_list of a usb_gadget. 158 * drivers discover endpoints through the ep_list of a usb_gadget.
157 * @desc:descriptor for desired behavior. caller guarantees this pointer
158 * remains valid until the endpoint is disabled; the data byte order
159 * is little-endian (usb-standard).
160 * 159 *
161 * when configurations are set, or when interface settings change, the driver 160 * When configurations are set, or when interface settings change, the driver
162 * will enable or disable the relevant endpoints. while it is enabled, an 161 * will enable or disable the relevant endpoints. while it is enabled, an
163 * endpoint may be used for i/o until the driver receives a disconnect() from 162 * endpoint may be used for i/o until the driver receives a disconnect() from
164 * the host or until the endpoint is disabled. 163 * the host or until the endpoint is disabled.
@@ -173,10 +172,9 @@ struct usb_ep {
173 * 172 *
174 * returns zero, or a negative error code. 173 * returns zero, or a negative error code.
175 */ 174 */
176static inline int usb_ep_enable(struct usb_ep *ep, 175static inline int usb_ep_enable(struct usb_ep *ep)
177 const struct usb_endpoint_descriptor *desc)
178{ 176{
179 return ep->ops->enable(ep, desc); 177 return ep->ops->enable(ep, ep->desc);
180} 178}
181 179
182/** 180/**