Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB Serial Sierra: TRU-Install feature update

Moves responsbility of TRU-Install (i.e. ZeroCD) to the usb-storage
driver. See patch 04/04 of this set.

Signed-off-by: Kevin Lloyd <klloyd@sierrawireless.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Kevin Lloyd and committed by
Greg Kroah-Hartman
0585e4df e3173b22

+7 -35
+4 -3
drivers/usb/serial/Kconfig
··· 499 499 config USB_SERIAL_SIERRAWIRELESS 500 500 tristate "USB Sierra Wireless Driver" 501 501 help 502 - Say M here if you want to use a Sierra Wireless device (if 503 - using an PC 5220 or AC580 please use the Airprime driver 504 - instead). 502 + Say M here if you want to use Sierra Wireless devices. 503 + 504 + Many deviecs have a feature known as TRU-Install, for those devices 505 + to work properly the USB Storage Sierra feature must be enabled. 505 506 506 507 To compile this driver as a module, choose M here: the 507 508 module will be called sierra.
+3 -32
drivers/usb/serial/sierra.c
··· 14 14 Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org> 15 15 */ 16 16 17 - #define DRIVER_VERSION "v.1.2.9c" 17 + #define DRIVER_VERSION "v.1.2.13a" 18 18 #define DRIVER_AUTHOR "Kevin Lloyd <klloyd@sierrawireless.com>" 19 19 #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems" 20 20 ··· 31 31 #define SWIMS_USB_REQUEST_SetPower 0x00 32 32 #define SWIMS_USB_REQUEST_SetNmea 0x07 33 33 #define SWIMS_USB_REQUEST_SetMode 0x0B 34 + #define SWIMS_USB_REQUEST_GetSwocInfo 0x0A 34 35 #define SWIMS_SET_MODE_Modem 0x0001 35 36 36 37 /* per port private data */ ··· 41 40 42 41 static int debug; 43 42 static int nmea; 44 - static int truinstall = 1; 45 - 46 - enum devicetype { 47 - DEVICE_3_PORT = 0, 48 - DEVICE_1_PORT = 1, 49 - DEVICE_INSTALLER = 2, 50 - }; 51 43 52 44 static int sierra_set_power_state(struct usb_device *udev, __u16 swiState) 53 45 { ··· 54 60 NULL, /* void *data */ 55 61 0, /* __u16 size */ 56 62 USB_CTRL_SET_TIMEOUT); /* int timeout */ 57 - return result; 58 - } 59 - 60 - static int sierra_set_ms_mode(struct usb_device *udev, __u16 eSWocMode) 61 - { 62 - int result; 63 - dev_dbg(&udev->dev, "%s", __func__); 64 - result = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 65 - SWIMS_USB_REQUEST_SetMode, /* __u8 request */ 66 - USB_TYPE_VENDOR, /* __u8 request type */ 67 - eSWocMode, /* __u16 value */ 68 - 0x0000, /* __u16 index */ 69 - NULL, /* void *data */ 70 - 0, /* __u16 size */ 71 - USB_CTRL_SET_TIMEOUT); /* int timeout */ 72 63 return result; 73 64 } 74 65 ··· 142 163 usb_set_interface(udev, ifnum, 1); 143 164 } 144 165 145 - /* Check if in installer mode */ 146 - if (truinstall && id->driver_info == DEVICE_INSTALLER) { 147 - dev_dbg(&udev->dev, "%s", "FOUND TRU-INSTALL DEVICE(SW)\n"); 148 - result = sierra_set_ms_mode(udev, SWIMS_SET_MODE_Modem); 149 - /* Don't bind to the device when in installer mode */ 150 - kfree(num_ports); 151 - return -EIO; 152 166 /* Dummy interface present on some SKUs should be ignored */ 153 - } else if (ifnum == 0x99) 167 + if (ifnum == 0x99) 154 168 *num_ports = 0; 155 169 else if (numendpoints <= 3) 156 170 *num_ports = 1; ··· 209 237 { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */ 210 238 { USB_DEVICE(0x0F3D, 0x0112) }, /* Airprime/Sierra PC 5220 */ 211 239 212 - { USB_DEVICE(0x1199, 0x0FFF), .driver_info = DEVICE_INSTALLER}, 213 240 { } 214 241 }; 215 242 MODULE_DEVICE_TABLE(usb, id_table);