diff options
Diffstat (limited to 'drivers/usb/serial/mos7840.c')
-rw-r--r-- | drivers/usb/serial/mos7840.c | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/drivers/usb/serial/mos7840.c b/drivers/usb/serial/mos7840.c index f11abf52be7d..2fda1c0182b7 100644 --- a/drivers/usb/serial/mos7840.c +++ b/drivers/usb/serial/mos7840.c | |||
@@ -121,8 +121,15 @@ | |||
121 | * moschip_id_table_combined | 121 | * moschip_id_table_combined |
122 | */ | 122 | */ |
123 | #define USB_VENDOR_ID_BANDB 0x0856 | 123 | #define USB_VENDOR_ID_BANDB 0x0856 |
124 | #define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 | 124 | #define BANDB_DEVICE_ID_USO9ML2_2 0xAC22 |
125 | #define BANDB_DEVICE_ID_USOPTL4_2 0xAC42 | 125 | #define BANDB_DEVICE_ID_USO9ML2_4 0xAC24 |
126 | #define BANDB_DEVICE_ID_US9ML2_2 0xAC29 | ||
127 | #define BANDB_DEVICE_ID_US9ML2_4 0xAC30 | ||
128 | #define BANDB_DEVICE_ID_USPTL4_2 0xAC31 | ||
129 | #define BANDB_DEVICE_ID_USPTL4_4 0xAC32 | ||
130 | #define BANDB_DEVICE_ID_USOPTL4_2 0xAC42 | ||
131 | #define BANDB_DEVICE_ID_USOPTL4_4 0xAC44 | ||
132 | #define BANDB_DEVICE_ID_USOPTL2_4 0xAC24 | ||
126 | 133 | ||
127 | /* This driver also supports | 134 | /* This driver also supports |
128 | * ATEN UC2324 device using Moschip MCS7840 | 135 | * ATEN UC2324 device using Moschip MCS7840 |
@@ -174,21 +181,35 @@ | |||
174 | #define URB_TRANSFER_BUFFER_SIZE 32 /* URB Size */ | 181 | #define URB_TRANSFER_BUFFER_SIZE 32 /* URB Size */ |
175 | 182 | ||
176 | 183 | ||
177 | static struct usb_device_id moschip_port_id_table[] = { | 184 | static const struct usb_device_id moschip_port_id_table[] = { |
178 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, | 185 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, |
179 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, | 186 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, |
180 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, | 187 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)}, |
188 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)}, | ||
189 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)}, | ||
190 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)}, | ||
191 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)}, | ||
192 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)}, | ||
181 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, | 193 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, |
194 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, | ||
195 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)}, | ||
182 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, | 196 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, |
183 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, | 197 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, |
184 | {} /* terminating entry */ | 198 | {} /* terminating entry */ |
185 | }; | 199 | }; |
186 | 200 | ||
187 | static __devinitdata struct usb_device_id moschip_id_table_combined[] = { | 201 | static const struct usb_device_id moschip_id_table_combined[] __devinitconst = { |
188 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, | 202 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7840)}, |
189 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, | 203 | {USB_DEVICE(USB_VENDOR_ID_MOSCHIP, MOSCHIP_DEVICE_ID_7820)}, |
190 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, | 204 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_2)}, |
205 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USO9ML2_4)}, | ||
206 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_2)}, | ||
207 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_US9ML2_4)}, | ||
208 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_2)}, | ||
209 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USPTL4_4)}, | ||
191 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, | 210 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_2)}, |
211 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL4_4)}, | ||
212 | {USB_DEVICE(USB_VENDOR_ID_BANDB, BANDB_DEVICE_ID_USOPTL2_4)}, | ||
192 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, | 213 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2324)}, |
193 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, | 214 | {USB_DEVICE(USB_VENDOR_ID_ATENINTL, ATENINTL_DEVICE_ID_UC2322)}, |
194 | {} /* terminating entry */ | 215 | {} /* terminating entry */ |
@@ -262,12 +283,19 @@ static int mos7840_get_reg_sync(struct usb_serial_port *port, __u16 reg, | |||
262 | { | 283 | { |
263 | struct usb_device *dev = port->serial->dev; | 284 | struct usb_device *dev = port->serial->dev; |
264 | int ret = 0; | 285 | int ret = 0; |
286 | u8 *buf; | ||
287 | |||
288 | buf = kmalloc(VENDOR_READ_LENGTH, GFP_KERNEL); | ||
289 | if (!buf) | ||
290 | return -ENOMEM; | ||
265 | 291 | ||
266 | ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), MCS_RDREQ, | 292 | ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), MCS_RDREQ, |
267 | MCS_RD_RTYPE, 0, reg, val, VENDOR_READ_LENGTH, | 293 | MCS_RD_RTYPE, 0, reg, buf, VENDOR_READ_LENGTH, |
268 | MOS_WDR_TIMEOUT); | 294 | MOS_WDR_TIMEOUT); |
295 | *val = buf[0]; | ||
269 | dbg("mos7840_get_reg_sync offset is %x, return val %x", reg, *val); | 296 | dbg("mos7840_get_reg_sync offset is %x, return val %x", reg, *val); |
270 | *val = (*val) & 0x00ff; | 297 | |
298 | kfree(buf); | ||
271 | return ret; | 299 | return ret; |
272 | } | 300 | } |
273 | 301 | ||
@@ -320,6 +348,11 @@ static int mos7840_get_uart_reg(struct usb_serial_port *port, __u16 reg, | |||
320 | struct usb_device *dev = port->serial->dev; | 348 | struct usb_device *dev = port->serial->dev; |
321 | int ret = 0; | 349 | int ret = 0; |
322 | __u16 Wval; | 350 | __u16 Wval; |
351 | u8 *buf; | ||
352 | |||
353 | buf = kmalloc(VENDOR_READ_LENGTH, GFP_KERNEL); | ||
354 | if (!buf) | ||
355 | return -ENOMEM; | ||
323 | 356 | ||
324 | /* dbg("application number is %4x", | 357 | /* dbg("application number is %4x", |
325 | (((__u16)port->number - (__u16)(port->serial->minor))+1)<<8); */ | 358 | (((__u16)port->number - (__u16)(port->serial->minor))+1)<<8); */ |
@@ -343,9 +376,11 @@ static int mos7840_get_uart_reg(struct usb_serial_port *port, __u16 reg, | |||
343 | } | 376 | } |
344 | } | 377 | } |
345 | ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), MCS_RDREQ, | 378 | ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), MCS_RDREQ, |
346 | MCS_RD_RTYPE, Wval, reg, val, VENDOR_READ_LENGTH, | 379 | MCS_RD_RTYPE, Wval, reg, buf, VENDOR_READ_LENGTH, |
347 | MOS_WDR_TIMEOUT); | 380 | MOS_WDR_TIMEOUT); |
348 | *val = (*val) & 0x00ff; | 381 | *val = buf[0]; |
382 | |||
383 | kfree(buf); | ||
349 | return ret; | 384 | return ret; |
350 | } | 385 | } |
351 | 386 | ||
@@ -729,7 +764,6 @@ static void mos7840_bulk_in_callback(struct urb *urb) | |||
729 | if (urb->actual_length) { | 764 | if (urb->actual_length) { |
730 | tty = tty_port_tty_get(&mos7840_port->port->port); | 765 | tty = tty_port_tty_get(&mos7840_port->port->port); |
731 | if (tty) { | 766 | if (tty) { |
732 | tty_buffer_request_room(tty, urb->actual_length); | ||
733 | tty_insert_flip_string(tty, data, urb->actual_length); | 767 | tty_insert_flip_string(tty, data, urb->actual_length); |
734 | dbg(" %s ", data); | 768 | dbg(" %s ", data); |
735 | tty_flip_buffer_push(tty); | 769 | tty_flip_buffer_push(tty); |