diff options
Diffstat (limited to 'drivers/usb/serial/option.c')
-rw-r--r-- | drivers/usb/serial/option.c | 203 |
1 files changed, 90 insertions, 113 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index e9256408757f..92d0f925d053 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
@@ -45,29 +45,29 @@ | |||
45 | #include "usb-serial.h" | 45 | #include "usb-serial.h" |
46 | 46 | ||
47 | /* Function prototypes */ | 47 | /* Function prototypes */ |
48 | static int option_open (struct usb_serial_port *port, struct file *filp); | 48 | static int option_open(struct usb_serial_port *port, struct file *filp); |
49 | static void option_close (struct usb_serial_port *port, struct file *filp); | 49 | static void option_close(struct usb_serial_port *port, struct file *filp); |
50 | static int option_startup (struct usb_serial *serial); | 50 | static int option_startup(struct usb_serial *serial); |
51 | static void option_shutdown (struct usb_serial *serial); | 51 | static void option_shutdown(struct usb_serial *serial); |
52 | static void option_rx_throttle (struct usb_serial_port *port); | 52 | static void option_rx_throttle(struct usb_serial_port *port); |
53 | static void option_rx_unthrottle (struct usb_serial_port *port); | 53 | static void option_rx_unthrottle(struct usb_serial_port *port); |
54 | static int option_write_room (struct usb_serial_port *port); | 54 | static int option_write_room(struct usb_serial_port *port); |
55 | 55 | ||
56 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs); | 56 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs); |
57 | 57 | ||
58 | static int option_write (struct usb_serial_port *port, | 58 | static int option_write(struct usb_serial_port *port, |
59 | const unsigned char *buf, int count); | 59 | const unsigned char *buf, int count); |
60 | 60 | ||
61 | static int option_chars_in_buffer (struct usb_serial_port *port); | 61 | static int option_chars_in_buffer(struct usb_serial_port *port); |
62 | static int option_ioctl (struct usb_serial_port *port, struct file *file, | 62 | static int option_ioctl(struct usb_serial_port *port, struct file *file, |
63 | unsigned int cmd, unsigned long arg); | 63 | unsigned int cmd, unsigned long arg); |
64 | static void option_set_termios (struct usb_serial_port *port, | 64 | static void option_set_termios(struct usb_serial_port *port, |
65 | struct termios *old); | 65 | struct termios *old); |
66 | static void option_break_ctl (struct usb_serial_port *port, int break_state); | 66 | static void option_break_ctl(struct usb_serial_port *port, int break_state); |
67 | static int option_tiocmget (struct usb_serial_port *port, struct file *file); | 67 | static int option_tiocmget(struct usb_serial_port *port, struct file *file); |
68 | static int option_tiocmset (struct usb_serial_port *port, struct file *file, | 68 | static int option_tiocmset(struct usb_serial_port *port, struct file *file, |
69 | unsigned int set, unsigned int clear); | 69 | unsigned int set, unsigned int clear); |
70 | static int option_send_setup (struct usb_serial_port *port); | 70 | static int option_send_setup(struct usb_serial_port *port); |
71 | 71 | ||
72 | /* Vendor and product IDs */ | 72 | /* Vendor and product IDs */ |
73 | #define OPTION_VENDOR_ID 0x0AF0 | 73 | #define OPTION_VENDOR_ID 0x0AF0 |
@@ -76,7 +76,6 @@ static int option_send_setup (struct usb_serial_port *port); | |||
76 | #define OPTION_PRODUCT_FUSION 0x6000 | 76 | #define OPTION_PRODUCT_FUSION 0x6000 |
77 | #define OPTION_PRODUCT_FUSION2 0x6300 | 77 | #define OPTION_PRODUCT_FUSION2 0x6300 |
78 | 78 | ||
79 | |||
80 | static struct usb_device_id option_ids[] = { | 79 | static struct usb_device_id option_ids[] = { |
81 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) }, | 80 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_OLD) }, |
82 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION) }, | 81 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUSION) }, |
@@ -129,7 +128,6 @@ static int debug; | |||
129 | #define debug 0 | 128 | #define debug 0 |
130 | #endif | 129 | #endif |
131 | 130 | ||
132 | |||
133 | /* per port private data */ | 131 | /* per port private data */ |
134 | 132 | ||
135 | #define N_IN_URB 4 | 133 | #define N_IN_URB 4 |
@@ -156,10 +154,8 @@ struct option_port_private { | |||
156 | unsigned long tx_start_time[N_OUT_URB]; | 154 | unsigned long tx_start_time[N_OUT_URB]; |
157 | }; | 155 | }; |
158 | 156 | ||
159 | |||
160 | /* Functions used by new usb-serial code. */ | 157 | /* Functions used by new usb-serial code. */ |
161 | static int __init | 158 | static int __init option_init(void) |
162 | option_init (void) | ||
163 | { | 159 | { |
164 | int retval; | 160 | int retval; |
165 | retval = usb_serial_register(&option_3port_device); | 161 | retval = usb_serial_register(&option_3port_device); |
@@ -179,8 +175,7 @@ failed_3port_device_register: | |||
179 | return retval; | 175 | return retval; |
180 | } | 176 | } |
181 | 177 | ||
182 | static void __exit | 178 | static void __exit option_exit(void) |
183 | option_exit (void) | ||
184 | { | 179 | { |
185 | usb_deregister (&option_driver); | 180 | usb_deregister (&option_driver); |
186 | usb_serial_deregister (&option_3port_device); | 181 | usb_serial_deregister (&option_3port_device); |
@@ -189,39 +184,31 @@ option_exit (void) | |||
189 | module_init(option_init); | 184 | module_init(option_init); |
190 | module_exit(option_exit); | 185 | module_exit(option_exit); |
191 | 186 | ||
192 | static void | 187 | static void option_rx_throttle(struct usb_serial_port *port) |
193 | option_rx_throttle (struct usb_serial_port *port) | ||
194 | { | 188 | { |
195 | dbg("%s", __FUNCTION__); | 189 | dbg("%s", __FUNCTION__); |
196 | } | 190 | } |
197 | 191 | ||
198 | 192 | static void option_rx_unthrottle(struct usb_serial_port *port) | |
199 | static void | ||
200 | option_rx_unthrottle (struct usb_serial_port *port) | ||
201 | { | 193 | { |
202 | dbg("%s", __FUNCTION__); | 194 | dbg("%s", __FUNCTION__); |
203 | } | 195 | } |
204 | 196 | ||
205 | 197 | static void option_break_ctl(struct usb_serial_port *port, int break_state) | |
206 | static void | ||
207 | option_break_ctl (struct usb_serial_port *port, int break_state) | ||
208 | { | 198 | { |
209 | /* Unfortunately, I don't know how to send a break */ | 199 | /* Unfortunately, I don't know how to send a break */ |
210 | dbg("%s", __FUNCTION__); | 200 | dbg("%s", __FUNCTION__); |
211 | } | 201 | } |
212 | 202 | ||
213 | 203 | static void option_set_termios(struct usb_serial_port *port, | |
214 | static void | 204 | struct termios *old_termios) |
215 | option_set_termios (struct usb_serial_port *port, | ||
216 | struct termios *old_termios) | ||
217 | { | 205 | { |
218 | dbg("%s", __FUNCTION__); | 206 | dbg("%s", __FUNCTION__); |
219 | 207 | ||
220 | option_send_setup(port); | 208 | option_send_setup(port); |
221 | } | 209 | } |
222 | 210 | ||
223 | static int | 211 | static int option_tiocmget(struct usb_serial_port *port, struct file *file) |
224 | option_tiocmget (struct usb_serial_port *port, struct file *file) | ||
225 | { | 212 | { |
226 | unsigned int value; | 213 | unsigned int value; |
227 | struct option_port_private *portdata; | 214 | struct option_port_private *portdata; |
@@ -238,9 +225,8 @@ option_tiocmget (struct usb_serial_port *port, struct file *file) | |||
238 | return value; | 225 | return value; |
239 | } | 226 | } |
240 | 227 | ||
241 | static int | 228 | static int option_tiocmset(struct usb_serial_port *port, struct file *file, |
242 | option_tiocmset (struct usb_serial_port *port, struct file *file, | 229 | unsigned int set, unsigned int clear) |
243 | unsigned int set, unsigned int clear) | ||
244 | { | 230 | { |
245 | struct option_port_private *portdata; | 231 | struct option_port_private *portdata; |
246 | 232 | ||
@@ -258,17 +244,15 @@ option_tiocmset (struct usb_serial_port *port, struct file *file, | |||
258 | return option_send_setup(port); | 244 | return option_send_setup(port); |
259 | } | 245 | } |
260 | 246 | ||
261 | static int | 247 | static int option_ioctl(struct usb_serial_port *port, struct file *file, |
262 | option_ioctl (struct usb_serial_port *port, struct file *file, | 248 | unsigned int cmd, unsigned long arg) |
263 | unsigned int cmd, unsigned long arg) | ||
264 | { | 249 | { |
265 | return -ENOIOCTLCMD; | 250 | return -ENOIOCTLCMD; |
266 | } | 251 | } |
267 | 252 | ||
268 | /* Write */ | 253 | /* Write */ |
269 | static int | 254 | static int option_write(struct usb_serial_port *port, |
270 | option_write (struct usb_serial_port *port, | 255 | const unsigned char *buf, int count) |
271 | const unsigned char *buf, int count) | ||
272 | { | 256 | { |
273 | struct option_port_private *portdata; | 257 | struct option_port_private *portdata; |
274 | int i; | 258 | int i; |
@@ -289,28 +273,29 @@ option_write (struct usb_serial_port *port, | |||
289 | 273 | ||
290 | this_urb = portdata->out_urbs[i]; | 274 | this_urb = portdata->out_urbs[i]; |
291 | if (this_urb->status == -EINPROGRESS) { | 275 | if (this_urb->status == -EINPROGRESS) { |
292 | if (this_urb->transfer_flags & URB_ASYNC_UNLINK) | 276 | if (time_before(jiffies, |
293 | continue; | 277 | portdata->tx_start_time[i] + 10 * HZ)) |
294 | if (time_before(jiffies, portdata->tx_start_time[i] + 10 * HZ)) | ||
295 | continue; | 278 | continue; |
296 | this_urb->transfer_flags |= URB_ASYNC_UNLINK; | ||
297 | usb_unlink_urb(this_urb); | 279 | usb_unlink_urb(this_urb); |
298 | continue; | 280 | continue; |
299 | } | 281 | } |
300 | if (this_urb->status != 0) | 282 | if (this_urb->status != 0) |
301 | dbg("usb_write %p failed (err=%d)", this_urb, this_urb->status); | 283 | dbg("usb_write %p failed (err=%d)", |
284 | this_urb, this_urb->status); | ||
302 | 285 | ||
303 | dbg("%s: endpoint %d buf %d", __FUNCTION__, usb_pipeendpoint(this_urb->pipe), i); | 286 | dbg("%s: endpoint %d buf %d", __FUNCTION__, |
287 | usb_pipeendpoint(this_urb->pipe), i); | ||
304 | 288 | ||
305 | /* send the data */ | 289 | /* send the data */ |
306 | memcpy (this_urb->transfer_buffer, buf, todo); | 290 | memcpy (this_urb->transfer_buffer, buf, todo); |
307 | this_urb->transfer_buffer_length = todo; | 291 | this_urb->transfer_buffer_length = todo; |
308 | 292 | ||
309 | this_urb->transfer_flags &= ~URB_ASYNC_UNLINK; | ||
310 | this_urb->dev = port->serial->dev; | 293 | this_urb->dev = port->serial->dev; |
311 | err = usb_submit_urb(this_urb, GFP_ATOMIC); | 294 | err = usb_submit_urb(this_urb, GFP_ATOMIC); |
312 | if (err) { | 295 | if (err) { |
313 | dbg("usb_submit_urb %p (write bulk) failed (%d, has %d)", this_urb, err, this_urb->status); | 296 | dbg("usb_submit_urb %p (write bulk) failed " |
297 | "(%d, has %d)", this_urb, | ||
298 | err, this_urb->status); | ||
314 | continue; | 299 | continue; |
315 | } | 300 | } |
316 | portdata->tx_start_time[i] = jiffies; | 301 | portdata->tx_start_time[i] = jiffies; |
@@ -323,8 +308,7 @@ option_write (struct usb_serial_port *port, | |||
323 | return count; | 308 | return count; |
324 | } | 309 | } |
325 | 310 | ||
326 | static void | 311 | static void option_indat_callback(struct urb *urb, struct pt_regs *regs) |
327 | option_indat_callback (struct urb *urb, struct pt_regs *regs) | ||
328 | { | 312 | { |
329 | int i, err; | 313 | int i, err; |
330 | int endpoint; | 314 | int endpoint; |
@@ -357,14 +341,14 @@ option_indat_callback (struct urb *urb, struct pt_regs *regs) | |||
357 | if (port->open_count && urb->status != -ESHUTDOWN) { | 341 | if (port->open_count && urb->status != -ESHUTDOWN) { |
358 | err = usb_submit_urb(urb, GFP_ATOMIC); | 342 | err = usb_submit_urb(urb, GFP_ATOMIC); |
359 | if (err) | 343 | if (err) |
360 | printk(KERN_ERR "%s: resubmit read urb failed. (%d)", __FUNCTION__, err); | 344 | printk(KERN_ERR "%s: resubmit read urb failed. " |
345 | "(%d)", __FUNCTION__, err); | ||
361 | } | 346 | } |
362 | } | 347 | } |
363 | return; | 348 | return; |
364 | } | 349 | } |
365 | 350 | ||
366 | static void | 351 | static void option_outdat_callback(struct urb *urb, struct pt_regs *regs) |
367 | option_outdat_callback (struct urb *urb, struct pt_regs *regs) | ||
368 | { | 352 | { |
369 | struct usb_serial_port *port; | 353 | struct usb_serial_port *port; |
370 | 354 | ||
@@ -376,8 +360,7 @@ option_outdat_callback (struct urb *urb, struct pt_regs *regs) | |||
376 | schedule_work(&port->work); | 360 | schedule_work(&port->work); |
377 | } | 361 | } |
378 | 362 | ||
379 | static void | 363 | static void option_instat_callback(struct urb *urb, struct pt_regs *regs) |
380 | option_instat_callback (struct urb *urb, struct pt_regs *regs) | ||
381 | { | 364 | { |
382 | int err; | 365 | int err; |
383 | struct usb_serial_port *port = (struct usb_serial_port *) urb->context; | 366 | struct usb_serial_port *port = (struct usb_serial_port *) urb->context; |
@@ -395,10 +378,12 @@ option_instat_callback (struct urb *urb, struct pt_regs *regs) | |||
395 | dbg("%s: NULL req_pkt\n", __FUNCTION__); | 378 | dbg("%s: NULL req_pkt\n", __FUNCTION__); |
396 | return; | 379 | return; |
397 | } | 380 | } |
398 | if ((req_pkt->bRequestType == 0xA1) && (req_pkt->bRequest == 0x20)) { | 381 | if ((req_pkt->bRequestType == 0xA1) && |
382 | (req_pkt->bRequest == 0x20)) { | ||
399 | int old_dcd_state; | 383 | int old_dcd_state; |
400 | unsigned char signals = *((unsigned char *) | 384 | unsigned char signals = *((unsigned char *) |
401 | urb->transfer_buffer + sizeof(struct usb_ctrlrequest)); | 385 | urb->transfer_buffer + |
386 | sizeof(struct usb_ctrlrequest)); | ||
402 | 387 | ||
403 | dbg("%s: signal x%x", __FUNCTION__, signals); | 388 | dbg("%s: signal x%x", __FUNCTION__, signals); |
404 | 389 | ||
@@ -408,12 +393,13 @@ option_instat_callback (struct urb *urb, struct pt_regs *regs) | |||
408 | portdata->dsr_state = ((signals & 0x02) ? 1 : 0); | 393 | portdata->dsr_state = ((signals & 0x02) ? 1 : 0); |
409 | portdata->ri_state = ((signals & 0x08) ? 1 : 0); | 394 | portdata->ri_state = ((signals & 0x08) ? 1 : 0); |
410 | 395 | ||
411 | if (port->tty && !C_CLOCAL(port->tty) | 396 | if (port->tty && !C_CLOCAL(port->tty) && |
412 | && old_dcd_state && !portdata->dcd_state) { | 397 | old_dcd_state && !portdata->dcd_state) |
413 | tty_hangup(port->tty); | 398 | tty_hangup(port->tty); |
414 | } | 399 | } else { |
415 | } else | 400 | dbg("%s: type %x req %x", __FUNCTION__, |
416 | dbg("%s: type %x req %x", __FUNCTION__, req_pkt->bRequestType,req_pkt->bRequest); | 401 | req_pkt->bRequestType,req_pkt->bRequest); |
402 | } | ||
417 | } else | 403 | } else |
418 | dbg("%s: error %d", __FUNCTION__, urb->status); | 404 | dbg("%s: error %d", __FUNCTION__, urb->status); |
419 | 405 | ||
@@ -422,13 +408,12 @@ option_instat_callback (struct urb *urb, struct pt_regs *regs) | |||
422 | urb->dev = serial->dev; | 408 | urb->dev = serial->dev; |
423 | err = usb_submit_urb(urb, GFP_ATOMIC); | 409 | err = usb_submit_urb(urb, GFP_ATOMIC); |
424 | if (err) | 410 | if (err) |
425 | dbg("%s: resubmit intr urb failed. (%d)", __FUNCTION__, err); | 411 | dbg("%s: resubmit intr urb failed. (%d)", |
412 | __FUNCTION__, err); | ||
426 | } | 413 | } |
427 | } | 414 | } |
428 | 415 | ||
429 | 416 | static int option_write_room(struct usb_serial_port *port) | |
430 | static int | ||
431 | option_write_room (struct usb_serial_port *port) | ||
432 | { | 417 | { |
433 | struct option_port_private *portdata; | 418 | struct option_port_private *portdata; |
434 | int i; | 419 | int i; |
@@ -447,9 +432,7 @@ option_write_room (struct usb_serial_port *port) | |||
447 | return data_len; | 432 | return data_len; |
448 | } | 433 | } |
449 | 434 | ||
450 | 435 | static int option_chars_in_buffer(struct usb_serial_port *port) | |
451 | static int | ||
452 | option_chars_in_buffer (struct usb_serial_port *port) | ||
453 | { | 436 | { |
454 | struct option_port_private *portdata; | 437 | struct option_port_private *portdata; |
455 | int i; | 438 | int i; |
@@ -467,9 +450,7 @@ option_chars_in_buffer (struct usb_serial_port *port) | |||
467 | return data_len; | 450 | return data_len; |
468 | } | 451 | } |
469 | 452 | ||
470 | 453 | static int option_open(struct usb_serial_port *port, struct file *filp) | |
471 | static int | ||
472 | option_open (struct usb_serial_port *port, struct file *filp) | ||
473 | { | 454 | { |
474 | struct option_port_private *portdata; | 455 | struct option_port_private *portdata; |
475 | struct usb_serial *serial = port->serial; | 456 | struct usb_serial *serial = port->serial; |
@@ -490,17 +471,21 @@ option_open (struct usb_serial_port *port, struct file *filp) | |||
490 | if (! urb) | 471 | if (! urb) |
491 | continue; | 472 | continue; |
492 | if (urb->dev != serial->dev) { | 473 | if (urb->dev != serial->dev) { |
493 | dbg("%s: dev %p != %p", __FUNCTION__, urb->dev, serial->dev); | 474 | dbg("%s: dev %p != %p", __FUNCTION__, |
475 | urb->dev, serial->dev); | ||
494 | continue; | 476 | continue; |
495 | } | 477 | } |
496 | 478 | ||
497 | /* make sure endpoint data toggle is synchronized with the device */ | 479 | /* |
498 | 480 | * make sure endpoint data toggle is synchronized with the | |
481 | * device | ||
482 | */ | ||
499 | usb_clear_halt(urb->dev, urb->pipe); | 483 | usb_clear_halt(urb->dev, urb->pipe); |
500 | 484 | ||
501 | err = usb_submit_urb(urb, GFP_KERNEL); | 485 | err = usb_submit_urb(urb, GFP_KERNEL); |
502 | if (err) { | 486 | if (err) { |
503 | dbg("%s: submit urb %d failed (%d) %d", __FUNCTION__, i, err, | 487 | dbg("%s: submit urb %d failed (%d) %d", |
488 | __FUNCTION__, i, err, | ||
504 | urb->transfer_buffer_length); | 489 | urb->transfer_buffer_length); |
505 | } | 490 | } |
506 | } | 491 | } |
@@ -511,7 +496,8 @@ option_open (struct usb_serial_port *port, struct file *filp) | |||
511 | if (! urb) | 496 | if (! urb) |
512 | continue; | 497 | continue; |
513 | urb->dev = serial->dev; | 498 | urb->dev = serial->dev; |
514 | /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe), 0); */ | 499 | /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), |
500 | usb_pipeout(urb->pipe), 0); */ | ||
515 | } | 501 | } |
516 | 502 | ||
517 | port->tty->low_latency = 1; | 503 | port->tty->low_latency = 1; |
@@ -521,17 +507,13 @@ option_open (struct usb_serial_port *port, struct file *filp) | |||
521 | return (0); | 507 | return (0); |
522 | } | 508 | } |
523 | 509 | ||
524 | static inline void | 510 | static inline void stop_urb(struct urb *urb) |
525 | stop_urb (struct urb *urb) | ||
526 | { | 511 | { |
527 | if (urb && urb->status == -EINPROGRESS) { | 512 | if (urb && urb->status == -EINPROGRESS) |
528 | urb->transfer_flags &= ~URB_ASYNC_UNLINK; | ||
529 | usb_kill_urb(urb); | 513 | usb_kill_urb(urb); |
530 | } | ||
531 | } | 514 | } |
532 | 515 | ||
533 | static void | 516 | static void option_close(struct usb_serial_port *port, struct file *filp) |
534 | option_close (struct usb_serial_port *port, struct file *filp) | ||
535 | { | 517 | { |
536 | int i; | 518 | int i; |
537 | struct usb_serial *serial = port->serial; | 519 | struct usb_serial *serial = port->serial; |
@@ -555,12 +537,10 @@ option_close (struct usb_serial_port *port, struct file *filp) | |||
555 | port->tty = NULL; | 537 | port->tty = NULL; |
556 | } | 538 | } |
557 | 539 | ||
558 | |||
559 | /* Helper functions used by option_setup_urbs */ | 540 | /* Helper functions used by option_setup_urbs */ |
560 | static struct urb * | 541 | static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint, |
561 | option_setup_urb (struct usb_serial *serial, int endpoint, | 542 | int dir, void *ctx, char *buf, int len, |
562 | int dir, void *ctx, char *buf, int len, | 543 | void (*callback)(struct urb *, struct pt_regs *regs)) |
563 | void (*callback)(struct urb *, struct pt_regs *regs)) | ||
564 | { | 544 | { |
565 | struct urb *urb; | 545 | struct urb *urb; |
566 | 546 | ||
@@ -582,8 +562,7 @@ option_setup_urb (struct usb_serial *serial, int endpoint, | |||
582 | } | 562 | } |
583 | 563 | ||
584 | /* Setup urbs */ | 564 | /* Setup urbs */ |
585 | static void | 565 | static void option_setup_urbs(struct usb_serial *serial) |
586 | option_setup_urbs (struct usb_serial *serial) | ||
587 | { | 566 | { |
588 | int j; | 567 | int j; |
589 | struct usb_serial_port *port; | 568 | struct usb_serial_port *port; |
@@ -609,9 +588,7 @@ option_setup_urbs (struct usb_serial *serial) | |||
609 | } | 588 | } |
610 | } | 589 | } |
611 | 590 | ||
612 | 591 | static int option_send_setup(struct usb_serial_port *port) | |
613 | static int | ||
614 | option_send_setup (struct usb_serial_port *port) | ||
615 | { | 592 | { |
616 | struct usb_serial *serial = port->serial; | 593 | struct usb_serial *serial = port->serial; |
617 | struct option_port_private *portdata; | 594 | struct option_port_private *portdata; |
@@ -627,16 +604,15 @@ option_send_setup (struct usb_serial_port *port) | |||
627 | if (portdata->rts_state) | 604 | if (portdata->rts_state) |
628 | val |= 0x02; | 605 | val |= 0x02; |
629 | 606 | ||
630 | return usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), | 607 | return usb_control_msg(serial->dev, |
631 | 0x22,0x21,val,0,NULL,0,USB_CTRL_SET_TIMEOUT); | 608 | usb_rcvctrlpipe(serial->dev, 0), |
609 | 0x22,0x21,val,0,NULL,0,USB_CTRL_SET_TIMEOUT); | ||
632 | } | 610 | } |
633 | 611 | ||
634 | return 0; | 612 | return 0; |
635 | } | 613 | } |
636 | 614 | ||
637 | 615 | static int option_startup(struct usb_serial *serial) | |
638 | static int | ||
639 | option_startup (struct usb_serial *serial) | ||
640 | { | 616 | { |
641 | int i, err; | 617 | int i, err; |
642 | struct usb_serial_port *port; | 618 | struct usb_serial_port *port; |
@@ -647,9 +623,10 @@ option_startup (struct usb_serial *serial) | |||
647 | /* Now setup per port private data */ | 623 | /* Now setup per port private data */ |
648 | for (i = 0; i < serial->num_ports; i++) { | 624 | for (i = 0; i < serial->num_ports; i++) { |
649 | port = serial->port[i]; | 625 | port = serial->port[i]; |
650 | portdata = kmalloc(sizeof(struct option_port_private), GFP_KERNEL); | 626 | portdata = kmalloc(sizeof(*portdata), GFP_KERNEL); |
651 | if (!portdata) { | 627 | if (!portdata) { |
652 | dbg("%s: kmalloc for option_port_private (%d) failed!.", __FUNCTION__, i); | 628 | dbg("%s: kmalloc for option_port_private (%d) failed!.", |
629 | __FUNCTION__, i); | ||
653 | return (1); | 630 | return (1); |
654 | } | 631 | } |
655 | memset(portdata, 0, sizeof(struct option_port_private)); | 632 | memset(portdata, 0, sizeof(struct option_port_private)); |
@@ -660,7 +637,8 @@ option_startup (struct usb_serial *serial) | |||
660 | continue; | 637 | continue; |
661 | err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); | 638 | err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); |
662 | if (err) | 639 | if (err) |
663 | dbg("%s: submit irq_in urb failed %d", __FUNCTION__, err); | 640 | dbg("%s: submit irq_in urb failed %d", |
641 | __FUNCTION__, err); | ||
664 | } | 642 | } |
665 | 643 | ||
666 | option_setup_urbs(serial); | 644 | option_setup_urbs(serial); |
@@ -668,8 +646,7 @@ option_startup (struct usb_serial *serial) | |||
668 | return (0); | 646 | return (0); |
669 | } | 647 | } |
670 | 648 | ||
671 | static void | 649 | static void option_shutdown(struct usb_serial *serial) |
672 | option_shutdown (struct usb_serial *serial) | ||
673 | { | 650 | { |
674 | int i, j; | 651 | int i, j; |
675 | struct usb_serial_port *port; | 652 | struct usb_serial_port *port; |