diff --git a/drivers/staging/greybus/es2.c b/drivers/staging/greybus/es2.c index 4b1f34fe1a605929155bc396c6446e5bcf7c8d43..909ca6acae1c765d175df12e5f572a9529a3c807 100644 --- a/drivers/staging/greybus/es2.c +++ b/drivers/staging/greybus/es2.c @@ -108,7 +108,7 @@ struct es1_ap_dev { bool cport_out_urb_cancelled[NUM_CPORT_OUT_URB]; spinlock_t cport_out_urb_lock; - int cport_to_ep[CPORT_COUNT]; + int *cport_to_ep; }; struct cport_to_ep { @@ -443,6 +443,7 @@ static void ap_disconnect(struct usb_interface *interface) usb_set_intfdata(interface, NULL); udev = es1->usb_dev; greybus_remove_hd(es1->hd); + kfree(es1->cport_to_ep); usb_put_dev(udev); } @@ -678,6 +679,13 @@ static int ap_probe(struct usb_interface *interface, endpoint = &udev->ep0.desc; es1->control_endpoint = endpoint->bEndpointAddress; + es1->cport_to_ep = kcalloc(hd->num_cports, sizeof(*es1->cport_to_ep), + GFP_KERNEL); + if (!es1->cport_to_ep) { + retval = -ENOMEM; + goto error; + } + /* find all 3 of our endpoints */ iface_desc = interface->cur_altsetting; for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {