USB: serial: io_ti: verify interrupt endpoint at probe

Verify that the required interrupt endpoint is present at probe rather
than at open to avoid allocating resources for an unusable device.

Note that the endpoint is only required when in download mode.

Signed-off-by: Johan Hovold <johan@kernel.org>
This commit is contained in:
Johan Hovold 2017-03-16 17:13:43 +01:00
parent 8d9c4d9ebf
commit 9c8299b43e
1 changed files with 2 additions and 8 deletions

View File

@ -1933,13 +1933,6 @@ static int edge_open(struct tty_struct *tty, struct usb_serial_port *port)
if (edge_serial->num_ports_open == 0) { if (edge_serial->num_ports_open == 0) {
/* we are the first port to open, post the interrupt urb */ /* we are the first port to open, post the interrupt urb */
urb = edge_serial->serial->port[0]->interrupt_in_urb; urb = edge_serial->serial->port[0]->interrupt_in_urb;
if (!urb) {
dev_err(&port->dev,
"%s - no interrupt urb present, exiting\n",
__func__);
status = -EINVAL;
goto release_es_lock;
}
urb->context = edge_serial; urb->context = edge_serial;
status = usb_submit_urb(urb, GFP_KERNEL); status = usb_submit_urb(urb, GFP_KERNEL);
if (status) { if (status) {
@ -2553,7 +2546,8 @@ static int edge_calc_num_ports(struct usb_serial *serial,
/* Make sure we have the required endpoints when in download mode. */ /* Make sure we have the required endpoints when in download mode. */
if (serial->interface->cur_altsetting->desc.bNumEndpoints > 1) { if (serial->interface->cur_altsetting->desc.bNumEndpoints > 1) {
if (epds->num_bulk_in < num_ports || if (epds->num_bulk_in < num_ports ||
epds->num_bulk_out < num_ports) { epds->num_bulk_out < num_ports ||
epds->num_interrupt_in < 1) {
dev_err(dev, "required endpoints missing\n"); dev_err(dev, "required endpoints missing\n");
return -ENODEV; return -ENODEV;
} }