summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Hovold <johan@kernel.org>2017-03-16 17:13:43 +0100
committerJohan Hovold <johan@kernel.org>2017-03-28 11:00:11 +0200
commit9c8299b43e577828057988eb8bd4920ab656022b (patch)
treed45ee049765892944954a47ac320aba4dde334c9
parent8d9c4d9ebffe5ed7be34dad7bc4ef4ab6807c501 (diff)
downloadlinux-exynos-9c8299b43e577828057988eb8bd4920ab656022b.tar.gz
linux-exynos-9c8299b43e577828057988eb8bd4920ab656022b.tar.bz2
linux-exynos-9c8299b43e577828057988eb8bd4920ab656022b.zip
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>
-rw-r--r--drivers/usb/serial/io_ti.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/usb/serial/io_ti.c b/drivers/usb/serial/io_ti.c
index c315836793b3..a962082cf3b0 100644
--- a/drivers/usb/serial/io_ti.c
+++ b/drivers/usb/serial/io_ti.c
@@ -1933,13 +1933,6 @@ static int edge_open(struct tty_struct *tty, struct usb_serial_port *port)
if (edge_serial->num_ports_open == 0) {
/* we are the first port to open, post the interrupt 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;
status = usb_submit_urb(urb, GFP_KERNEL);
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. */
if (serial->interface->cur_altsetting->desc.bNumEndpoints > 1) {
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");
return -ENODEV;
}