Commit 64bea46e authored by Aleksander Morgado's avatar Aleksander Morgado Committed by David S. Miller

hso: always read interface number from the current altsetting

Always read bInterfaceNumber from the current altsetting, not from the first one
available in the altsetting array. This is coming from code review, not related
to any specific bug.
Signed-off-by: default avatarAleksander Morgado <aleksander@aleksander.es>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 216fa18f
...@@ -1477,6 +1477,7 @@ static void tiocmget_intr_callback(struct urb *urb) ...@@ -1477,6 +1477,7 @@ static void tiocmget_intr_callback(struct urb *urb)
struct uart_icount *icount; struct uart_icount *icount;
struct hso_serial_state_notification *serial_state_notification; struct hso_serial_state_notification *serial_state_notification;
struct usb_device *usb; struct usb_device *usb;
struct usb_interface *interface;
int if_num; int if_num;
/* Sanity checks */ /* Sanity checks */
...@@ -1494,7 +1495,9 @@ static void tiocmget_intr_callback(struct urb *urb) ...@@ -1494,7 +1495,9 @@ static void tiocmget_intr_callback(struct urb *urb)
BUG_ON((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM); BUG_ON((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM);
usb = serial->parent->usb; usb = serial->parent->usb;
if_num = serial->parent->interface->altsetting->desc.bInterfaceNumber; interface = serial->parent->interface;
if_num = interface->cur_altsetting->desc.bInterfaceNumber;
/* wIndex should be the USB interface number of the port to which the /* wIndex should be the USB interface number of the port to which the
* notification applies, which should always be the Modem port. * notification applies, which should always be the Modem port.
...@@ -1675,6 +1678,7 @@ static int hso_serial_tiocmset(struct tty_struct *tty, ...@@ -1675,6 +1678,7 @@ static int hso_serial_tiocmset(struct tty_struct *tty,
unsigned long flags; unsigned long flags;
int if_num; int if_num;
struct hso_serial *serial = tty->driver_data; struct hso_serial *serial = tty->driver_data;
struct usb_interface *interface;
/* sanity check */ /* sanity check */
if (!serial) { if (!serial) {
...@@ -1685,7 +1689,8 @@ static int hso_serial_tiocmset(struct tty_struct *tty, ...@@ -1685,7 +1689,8 @@ static int hso_serial_tiocmset(struct tty_struct *tty,
if ((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM) if ((serial->parent->port_spec & HSO_PORT_MASK) != HSO_PORT_MODEM)
return -EINVAL; return -EINVAL;
if_num = serial->parent->interface->altsetting->desc.bInterfaceNumber; interface = serial->parent->interface;
if_num = interface->cur_altsetting->desc.bInterfaceNumber;
spin_lock_irqsave(&serial->serial_lock, flags); spin_lock_irqsave(&serial->serial_lock, flags);
if (set & TIOCM_RTS) if (set & TIOCM_RTS)
...@@ -2808,7 +2813,7 @@ static int hso_get_config_data(struct usb_interface *interface) ...@@ -2808,7 +2813,7 @@ static int hso_get_config_data(struct usb_interface *interface)
{ {
struct usb_device *usbdev = interface_to_usbdev(interface); struct usb_device *usbdev = interface_to_usbdev(interface);
u8 *config_data = kmalloc(17, GFP_KERNEL); u8 *config_data = kmalloc(17, GFP_KERNEL);
u32 if_num = interface->altsetting->desc.bInterfaceNumber; u32 if_num = interface->cur_altsetting->desc.bInterfaceNumber;
s32 result; s32 result;
if (!config_data) if (!config_data)
...@@ -2886,7 +2891,7 @@ static int hso_probe(struct usb_interface *interface, ...@@ -2886,7 +2891,7 @@ static int hso_probe(struct usb_interface *interface,
return -ENODEV; return -ENODEV;
} }
if_num = interface->altsetting->desc.bInterfaceNumber; if_num = interface->cur_altsetting->desc.bInterfaceNumber;
/* Get the interface/port specification from either driver_info or from /* Get the interface/port specification from either driver_info or from
* the device itself */ * the device itself */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment