aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohan Hovold <johan@kernel.org>2017-02-06 10:28:14 -0500
committerJohan Hovold <johan@kernel.org>2017-02-06 12:29:17 -0500
commit16620b483eaf7750413bae472f4363b6b959fcaa (patch)
tree5cb6ba8dcd84f040baea6684f869b0eaadc94cba
parenta6bb1e17a39818b01b55d8e6238b4b5f06d55038 (diff)
USB: serial: sierra: fix bogus alternate-setting assumption
Interface numbers do not change when enabling alternate settings as comment and code in this driver suggested. Remove the confusing comment and redundant retrieval of the interface number in probe, while simplifying and renaming the interface-number helper. Fixes: 4db2299da213 ("sierra: driver interface blacklisting") Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Johan Hovold <johan@kernel.org>
-rw-r--r--drivers/usb/serial/sierra.c28
1 files changed, 5 insertions, 23 deletions
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c
index e1994e264cc0..465e851b2815 100644
--- a/drivers/usb/serial/sierra.c
+++ b/drivers/usb/serial/sierra.c
@@ -137,24 +137,9 @@ static int is_himemory(const u8 ifnum,
137 return 0; 137 return 0;
138} 138}
139 139
140static int sierra_calc_interface(struct usb_serial *serial) 140static u8 sierra_interface_num(struct usb_serial *serial)
141{ 141{
142 int interface; 142 return serial->interface->cur_altsetting->desc.bInterfaceNumber;
143 struct usb_interface *p_interface;
144 struct usb_host_interface *p_host_interface;
145
146 /* Get the interface structure pointer from the serial struct */
147 p_interface = serial->interface;
148
149 /* Get a pointer to the host interface structure */
150 p_host_interface = p_interface->cur_altsetting;
151
152 /* read the interface descriptor for this active altsetting
153 * to find out the interface number we are on
154 */
155 interface = p_host_interface->desc.bInterfaceNumber;
156
157 return interface;
158} 143}
159 144
160static int sierra_probe(struct usb_serial *serial, 145static int sierra_probe(struct usb_serial *serial,
@@ -165,7 +150,7 @@ static int sierra_probe(struct usb_serial *serial,
165 u8 ifnum; 150 u8 ifnum;
166 151
167 udev = serial->dev; 152 udev = serial->dev;
168 ifnum = sierra_calc_interface(serial); 153 ifnum = sierra_interface_num(serial);
169 154
170 /* 155 /*
171 * If this interface supports more than 1 alternate 156 * If this interface supports more than 1 alternate
@@ -178,9 +163,6 @@ static int sierra_probe(struct usb_serial *serial,
178 usb_set_interface(udev, ifnum, 1); 163 usb_set_interface(udev, ifnum, 1);
179 } 164 }
180 165
181 /* ifnum could have changed - by calling usb_set_interface */
182 ifnum = sierra_calc_interface(serial);
183
184 if (is_blacklisted(ifnum, 166 if (is_blacklisted(ifnum,
185 (struct sierra_iface_info *)id->driver_info)) { 167 (struct sierra_iface_info *)id->driver_info)) {
186 dev_dbg(&serial->dev->dev, 168 dev_dbg(&serial->dev->dev,
@@ -342,7 +324,7 @@ static int sierra_send_setup(struct usb_serial_port *port)
342 324
343 /* If composite device then properly report interface */ 325 /* If composite device then properly report interface */
344 if (serial->num_ports == 1) { 326 if (serial->num_ports == 1) {
345 interface = sierra_calc_interface(serial); 327 interface = sierra_interface_num(serial);
346 /* Control message is sent only to interfaces with 328 /* Control message is sent only to interfaces with
347 * interrupt_in endpoints 329 * interrupt_in endpoints
348 */ 330 */
@@ -916,7 +898,7 @@ static int sierra_port_probe(struct usb_serial_port *port)
916 /* Determine actual memory requirements */ 898 /* Determine actual memory requirements */
917 if (serial->num_ports == 1) { 899 if (serial->num_ports == 1) {
918 /* Get interface number for composite device */ 900 /* Get interface number for composite device */
919 ifnum = sierra_calc_interface(serial); 901 ifnum = sierra_interface_num(serial);
920 himemoryp = &typeB_interface_list; 902 himemoryp = &typeB_interface_list;
921 } else { 903 } else {
922 /* This is really the usb-serial port number of the interface 904 /* This is really the usb-serial port number of the interface