1 /* 2 * Prolific PL2303 USB to serial adaptor driver 3 * 4 * Copyright (C) 2001-2007 Greg Kroah-Hartman (greg@kroah.com) 5 * Copyright (C) 2003 IBM Corp. 6 * 7 * Original driver for 2.2.x by anonymous 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License version 11 * 2 as published by the Free Software Foundation. 12 * 13 * See Documentation/usb/usb-serial.txt for more information on using this 14 * driver 15 * 16 */ 17 18 #include <linux/kernel.h> 19 #include <linux/errno.h> 20 #include <linux/init.h> 21 #include <linux/slab.h> 22 #include <linux/tty.h> 23 #include <linux/tty_driver.h> 24 #include <linux/tty_flip.h> 25 #include <linux/serial.h> 26 #include <linux/module.h> 27 #include <linux/moduleparam.h> 28 #include <linux/spinlock.h> 29 #include <linux/uaccess.h> 30 #include <linux/usb.h> 31 #include <linux/usb/serial.h> 32 #include "pl2303.h" 33 34 /* 35 * Version Information 36 */ 37 #define DRIVER_DESC "Prolific PL2303 USB to serial adaptor driver" 38 39 static bool debug; 40 41 #define PL2303_CLOSING_WAIT (30*HZ) 42 43 static const struct usb_device_id id_table[] = { 44 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID) }, 45 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ2) }, 46 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_DCU11) }, 47 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, 48 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, 49 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, 50 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, 51 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_GPRS) }, 52 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_HCR331) }, 53 { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MOTOROLA) }, 54 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, 55 { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, 56 { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, 57 { USB_DEVICE(ATEN_VENDOR_ID2, ATEN_PRODUCT_ID) }, 58 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID) }, 59 { USB_DEVICE(ELCOM_VENDOR_ID, ELCOM_PRODUCT_ID_UCSGT) }, 60 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID) }, 61 { USB_DEVICE(ITEGNO_VENDOR_ID, ITEGNO_PRODUCT_ID_2080) }, 62 { USB_DEVICE(MA620_VENDOR_ID, MA620_PRODUCT_ID) }, 63 { USB_DEVICE(RATOC_VENDOR_ID, RATOC_PRODUCT_ID) }, 64 { USB_DEVICE(TRIPP_VENDOR_ID, TRIPP_PRODUCT_ID) }, 65 { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) }, 66 { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) }, 67 { USB_DEVICE(SITECOM_VENDOR_ID, SITECOM_PRODUCT_ID) }, 68 { USB_DEVICE(ALCATEL_VENDOR_ID, ALCATEL_PRODUCT_ID) }, 69 { USB_DEVICE(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_ID) }, 70 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_SX1) }, 71 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X65) }, 72 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_X75) }, 73 { USB_DEVICE(SIEMENS_VENDOR_ID, SIEMENS_PRODUCT_ID_EF81) }, 74 { USB_DEVICE(BENQ_VENDOR_ID, BENQ_PRODUCT_ID_S81) }, /* Benq/Siemens S81 */ 75 { USB_DEVICE(SYNTECH_VENDOR_ID, SYNTECH_PRODUCT_ID) }, 76 { USB_DEVICE(NOKIA_CA42_VENDOR_ID, NOKIA_CA42_PRODUCT_ID) }, 77 { USB_DEVICE(CA_42_CA42_VENDOR_ID, CA_42_CA42_PRODUCT_ID) }, 78 { USB_DEVICE(SAGEM_VENDOR_ID, SAGEM_PRODUCT_ID) }, 79 { USB_DEVICE(LEADTEK_VENDOR_ID, LEADTEK_9531_PRODUCT_ID) }, 80 { USB_DEVICE(SPEEDDRAGON_VENDOR_ID, SPEEDDRAGON_PRODUCT_ID) }, 81 { USB_DEVICE(DATAPILOT_U2_VENDOR_ID, DATAPILOT_U2_PRODUCT_ID) }, 82 { USB_DEVICE(BELKIN_VENDOR_ID, BELKIN_PRODUCT_ID) }, 83 { USB_DEVICE(ALCOR_VENDOR_ID, ALCOR_PRODUCT_ID) }, 84 { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, 85 { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, 86 { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, 87 { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, 88 { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, 89 { USB_DEVICE(CRESSI_VENDOR_ID, CRESSI_EDY_PRODUCT_ID) }, 90 { USB_DEVICE(ZEAGLE_VENDOR_ID, ZEAGLE_N2ITION3_PRODUCT_ID) }, 91 { USB_DEVICE(SONY_VENDOR_ID, SONY_QN3USB_PRODUCT_ID) }, 92 { USB_DEVICE(SANWA_VENDOR_ID, SANWA_PRODUCT_ID) }, 93 { USB_DEVICE(ADLINK_VENDOR_ID, ADLINK_ND6530_PRODUCT_ID) }, 94 { USB_DEVICE(SMART_VENDOR_ID, SMART_PRODUCT_ID) }, 95 { } /* Terminating entry */ 96 }; 97 98 MODULE_DEVICE_TABLE(usb, id_table); 99 100 static struct usb_driver pl2303_driver = { 101 .name = "pl2303", 102 .probe = usb_serial_probe, 103 .disconnect = usb_serial_disconnect, 104 .id_table = id_table, 105 .suspend = usb_serial_suspend, 106 .resume = usb_serial_resume, 107 .supports_autosuspend = 1, 108 }; 109 110 #define SET_LINE_REQUEST_TYPE 0x21 111 #define SET_LINE_REQUEST 0x20 112 113 #define SET_CONTROL_REQUEST_TYPE 0x21 114 #define SET_CONTROL_REQUEST 0x22 115 #define CONTROL_DTR 0x01 116 #define CONTROL_RTS 0x02 117 118 #define BREAK_REQUEST_TYPE 0x21 119 #define BREAK_REQUEST 0x23 120 #define BREAK_ON 0xffff 121 #define BREAK_OFF 0x0000 122 123 #define GET_LINE_REQUEST_TYPE 0xa1 124 #define GET_LINE_REQUEST 0x21 125 126 #define VENDOR_WRITE_REQUEST_TYPE 0x40 127 #define VENDOR_WRITE_REQUEST 0x01 128 129 #define VENDOR_READ_REQUEST_TYPE 0xc0 130 #define VENDOR_READ_REQUEST 0x01 131 132 #define UART_STATE 0x08 133 #define UART_STATE_TRANSIENT_MASK 0x74 134 #define UART_DCD 0x01 135 #define UART_DSR 0x02 136 #define UART_BREAK_ERROR 0x04 137 #define UART_RING 0x08 138 #define UART_FRAME_ERROR 0x10 139 #define UART_PARITY_ERROR 0x20 140 #define UART_OVERRUN_ERROR 0x40 141 #define UART_CTS 0x80 142 143 144 enum pl2303_type { 145 type_0, /* don't know the difference between type 0 and */ 146 type_1, /* type 1, until someone from prolific tells us... */ 147 HX, /* HX version of the pl2303 chip */ 148 }; 149 150 struct pl2303_private { 151 spinlock_t lock; 152 wait_queue_head_t delta_msr_wait; 153 u8 line_control; 154 u8 line_status; 155 enum pl2303_type type; 156 }; 157 158 static int pl2303_vendor_read(__u16 value, __u16 index, 159 struct usb_serial *serial, unsigned char *buf) 160 { 161 int res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 162 VENDOR_READ_REQUEST, VENDOR_READ_REQUEST_TYPE, 163 value, index, buf, 1, 100); 164 dbg("0x%x:0x%x:0x%x:0x%x %d - %x", VENDOR_READ_REQUEST_TYPE, 165 VENDOR_READ_REQUEST, value, index, res, buf[0]); 166 return res; 167 } 168 169 static int pl2303_vendor_write(__u16 value, __u16 index, 170 struct usb_serial *serial) 171 { 172 int res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 173 VENDOR_WRITE_REQUEST, VENDOR_WRITE_REQUEST_TYPE, 174 value, index, NULL, 0, 100); 175 dbg("0x%x:0x%x:0x%x:0x%x %d", VENDOR_WRITE_REQUEST_TYPE, 176 VENDOR_WRITE_REQUEST, value, index, res); 177 return res; 178 } 179 180 static int pl2303_startup(struct usb_serial *serial) 181 { 182 struct pl2303_private *priv; 183 enum pl2303_type type = type_0; 184 unsigned char *buf; 185 int i; 186 187 buf = kmalloc(10, GFP_KERNEL); 188 if (buf == NULL) 189 return -ENOMEM; 190 191 if (serial->dev->descriptor.bDeviceClass == 0x02) 192 type = type_0; 193 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40) 194 type = HX; 195 else if (serial->dev->descriptor.bDeviceClass == 0x00) 196 type = type_1; 197 else if (serial->dev->descriptor.bDeviceClass == 0xFF) 198 type = type_1; 199 dbg("device type: %d", type); 200 201 for (i = 0; i < serial->num_ports; ++i) { 202 priv = kzalloc(sizeof(struct pl2303_private), GFP_KERNEL); 203 if (!priv) 204 goto cleanup; 205 spin_lock_init(&priv->lock); 206 init_waitqueue_head(&priv->delta_msr_wait); 207 priv->type = type; 208 usb_set_serial_port_data(serial->port[i], priv); 209 } 210 211 pl2303_vendor_read(0x8484, 0, serial, buf); 212 pl2303_vendor_write(0x0404, 0, serial); 213 pl2303_vendor_read(0x8484, 0, serial, buf); 214 pl2303_vendor_read(0x8383, 0, serial, buf); 215 pl2303_vendor_read(0x8484, 0, serial, buf); 216 pl2303_vendor_write(0x0404, 1, serial); 217 pl2303_vendor_read(0x8484, 0, serial, buf); 218 pl2303_vendor_read(0x8383, 0, serial, buf); 219 pl2303_vendor_write(0, 1, serial); 220 pl2303_vendor_write(1, 0, serial); 221 if (type == HX) 222 pl2303_vendor_write(2, 0x44, serial); 223 else 224 pl2303_vendor_write(2, 0x24, serial); 225 226 kfree(buf); 227 return 0; 228 229 cleanup: 230 kfree(buf); 231 for (--i; i >= 0; --i) { 232 priv = usb_get_serial_port_data(serial->port[i]); 233 kfree(priv); 234 usb_set_serial_port_data(serial->port[i], NULL); 235 } 236 return -ENOMEM; 237 } 238 239 static int set_control_lines(struct usb_device *dev, u8 value) 240 { 241 int retval; 242 243 retval = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 244 SET_CONTROL_REQUEST, SET_CONTROL_REQUEST_TYPE, 245 value, 0, NULL, 0, 100); 246 dbg("%s - value = %d, retval = %d", __func__, value, retval); 247 return retval; 248 } 249 250 static void pl2303_set_termios(struct tty_struct *tty, 251 struct usb_serial_port *port, struct ktermios *old_termios) 252 { 253 struct usb_serial *serial = port->serial; 254 struct pl2303_private *priv = usb_get_serial_port_data(port); 255 unsigned long flags; 256 unsigned int cflag; 257 unsigned char *buf; 258 int baud; 259 int i; 260 u8 control; 261 const int baud_sup[] = { 75, 150, 300, 600, 1200, 1800, 2400, 3600, 262 4800, 7200, 9600, 14400, 19200, 28800, 38400, 263 57600, 115200, 230400, 460800, 614400, 264 921600, 1228800, 2457600, 3000000, 6000000 }; 265 int baud_floor, baud_ceil; 266 int k; 267 268 dbg("%s - port %d", __func__, port->number); 269 270 /* The PL2303 is reported to lose bytes if you change 271 serial settings even to the same values as before. Thus 272 we actually need to filter in this specific case */ 273 274 if (!tty_termios_hw_change(tty->termios, old_termios)) 275 return; 276 277 cflag = tty->termios->c_cflag; 278 279 buf = kzalloc(7, GFP_KERNEL); 280 if (!buf) { 281 dev_err(&port->dev, "%s - out of memory.\n", __func__); 282 /* Report back no change occurred */ 283 *tty->termios = *old_termios; 284 return; 285 } 286 287 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 288 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE, 289 0, 0, buf, 7, 100); 290 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i, 291 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); 292 293 if (cflag & CSIZE) { 294 switch (cflag & CSIZE) { 295 case CS5: 296 buf[6] = 5; 297 break; 298 case CS6: 299 buf[6] = 6; 300 break; 301 case CS7: 302 buf[6] = 7; 303 break; 304 default: 305 case CS8: 306 buf[6] = 8; 307 break; 308 } 309 dbg("%s - data bits = %d", __func__, buf[6]); 310 } 311 312 /* For reference buf[0]:buf[3] baud rate value */ 313 /* NOTE: Only the values defined in baud_sup are supported ! 314 * => if unsupported values are set, the PL2303 seems to use 315 * 9600 baud (at least my PL2303X always does) 316 */ 317 baud = tty_get_baud_rate(tty); 318 dbg("%s - baud requested = %d", __func__, baud); 319 if (baud) { 320 /* Set baudrate to nearest supported value */ 321 for (k=0; k<ARRAY_SIZE(baud_sup); k++) { 322 if (baud_sup[k] / baud) { 323 baud_ceil = baud_sup[k]; 324 if (k==0) { 325 baud = baud_ceil; 326 } else { 327 baud_floor = baud_sup[k-1]; 328 if ((baud_ceil % baud) 329 > (baud % baud_floor)) 330 baud = baud_floor; 331 else 332 baud = baud_ceil; 333 } 334 break; 335 } 336 } 337 if (baud > 1228800) { 338 /* type_0, type_1 only support up to 1228800 baud */ 339 if (priv->type != HX) 340 baud = 1228800; 341 else if (baud > 6000000) 342 baud = 6000000; 343 } 344 dbg("%s - baud set = %d", __func__, baud); 345 if (baud <= 115200) { 346 buf[0] = baud & 0xff; 347 buf[1] = (baud >> 8) & 0xff; 348 buf[2] = (baud >> 16) & 0xff; 349 buf[3] = (baud >> 24) & 0xff; 350 } else { 351 /* apparently the formula for higher speeds is: 352 * baudrate = 12M * 32 / (2^buf[1]) / buf[0] 353 */ 354 unsigned tmp = 12*1000*1000*32 / baud; 355 buf[3] = 0x80; 356 buf[2] = 0; 357 buf[1] = (tmp >= 256); 358 while (tmp >= 256) { 359 tmp >>= 2; 360 buf[1] <<= 1; 361 } 362 buf[0] = tmp; 363 } 364 } 365 366 /* For reference buf[4]=0 is 1 stop bits */ 367 /* For reference buf[4]=1 is 1.5 stop bits */ 368 /* For reference buf[4]=2 is 2 stop bits */ 369 if (cflag & CSTOPB) { 370 /* NOTE: Comply with "real" UARTs / RS232: 371 * use 1.5 instead of 2 stop bits with 5 data bits 372 */ 373 if ((cflag & CSIZE) == CS5) { 374 buf[4] = 1; 375 dbg("%s - stop bits = 1.5", __func__); 376 } else { 377 buf[4] = 2; 378 dbg("%s - stop bits = 2", __func__); 379 } 380 } else { 381 buf[4] = 0; 382 dbg("%s - stop bits = 1", __func__); 383 } 384 385 if (cflag & PARENB) { 386 /* For reference buf[5]=0 is none parity */ 387 /* For reference buf[5]=1 is odd parity */ 388 /* For reference buf[5]=2 is even parity */ 389 /* For reference buf[5]=3 is mark parity */ 390 /* For reference buf[5]=4 is space parity */ 391 if (cflag & PARODD) { 392 if (cflag & CMSPAR) { 393 buf[5] = 3; 394 dbg("%s - parity = mark", __func__); 395 } else { 396 buf[5] = 1; 397 dbg("%s - parity = odd", __func__); 398 } 399 } else { 400 if (cflag & CMSPAR) { 401 buf[5] = 4; 402 dbg("%s - parity = space", __func__); 403 } else { 404 buf[5] = 2; 405 dbg("%s - parity = even", __func__); 406 } 407 } 408 } else { 409 buf[5] = 0; 410 dbg("%s - parity = none", __func__); 411 } 412 413 i = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 414 SET_LINE_REQUEST, SET_LINE_REQUEST_TYPE, 415 0, 0, buf, 7, 100); 416 dbg("0x21:0x20:0:0 %d", i); 417 418 /* change control lines if we are switching to or from B0 */ 419 spin_lock_irqsave(&priv->lock, flags); 420 control = priv->line_control; 421 if ((cflag & CBAUD) == B0) 422 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS); 423 else if ((old_termios->c_cflag & CBAUD) == B0) 424 priv->line_control |= (CONTROL_DTR | CONTROL_RTS); 425 if (control != priv->line_control) { 426 control = priv->line_control; 427 spin_unlock_irqrestore(&priv->lock, flags); 428 set_control_lines(serial->dev, control); 429 } else { 430 spin_unlock_irqrestore(&priv->lock, flags); 431 } 432 433 buf[0] = buf[1] = buf[2] = buf[3] = buf[4] = buf[5] = buf[6] = 0; 434 435 i = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), 436 GET_LINE_REQUEST, GET_LINE_REQUEST_TYPE, 437 0, 0, buf, 7, 100); 438 dbg("0xa1:0x21:0:0 %d - %x %x %x %x %x %x %x", i, 439 buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6]); 440 441 if (cflag & CRTSCTS) { 442 if (priv->type == HX) 443 pl2303_vendor_write(0x0, 0x61, serial); 444 else 445 pl2303_vendor_write(0x0, 0x41, serial); 446 } else { 447 pl2303_vendor_write(0x0, 0x0, serial); 448 } 449 450 /* Save resulting baud rate */ 451 if (baud) 452 tty_encode_baud_rate(tty, baud, baud); 453 454 kfree(buf); 455 } 456 457 static void pl2303_dtr_rts(struct usb_serial_port *port, int on) 458 { 459 struct pl2303_private *priv = usb_get_serial_port_data(port); 460 unsigned long flags; 461 u8 control; 462 463 spin_lock_irqsave(&priv->lock, flags); 464 /* Change DTR and RTS */ 465 if (on) 466 priv->line_control |= (CONTROL_DTR | CONTROL_RTS); 467 else 468 priv->line_control &= ~(CONTROL_DTR | CONTROL_RTS); 469 control = priv->line_control; 470 spin_unlock_irqrestore(&priv->lock, flags); 471 set_control_lines(port->serial->dev, control); 472 } 473 474 static void pl2303_close(struct usb_serial_port *port) 475 { 476 dbg("%s - port %d", __func__, port->number); 477 478 usb_serial_generic_close(port); 479 usb_kill_urb(port->interrupt_in_urb); 480 } 481 482 static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port) 483 { 484 struct ktermios tmp_termios; 485 struct usb_serial *serial = port->serial; 486 struct pl2303_private *priv = usb_get_serial_port_data(port); 487 int result; 488 489 dbg("%s - port %d", __func__, port->number); 490 491 if (priv->type != HX) { 492 usb_clear_halt(serial->dev, port->write_urb->pipe); 493 usb_clear_halt(serial->dev, port->read_urb->pipe); 494 } else { 495 /* reset upstream data pipes */ 496 pl2303_vendor_write(8, 0, serial); 497 pl2303_vendor_write(9, 0, serial); 498 } 499 500 /* Setup termios */ 501 if (tty) 502 pl2303_set_termios(tty, port, &tmp_termios); 503 504 dbg("%s - submitting interrupt urb", __func__); 505 result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 506 if (result) { 507 dev_err(&port->dev, "%s - failed submitting interrupt urb," 508 " error %d\n", __func__, result); 509 return result; 510 } 511 512 result = usb_serial_generic_open(tty, port); 513 if (result) { 514 usb_kill_urb(port->interrupt_in_urb); 515 return result; 516 } 517 518 port->port.drain_delay = 256; 519 return 0; 520 } 521 522 static int pl2303_tiocmset(struct tty_struct *tty, 523 unsigned int set, unsigned int clear) 524 { 525 struct usb_serial_port *port = tty->driver_data; 526 struct pl2303_private *priv = usb_get_serial_port_data(port); 527 unsigned long flags; 528 u8 control; 529 530 if (!usb_get_intfdata(port->serial->interface)) 531 return -ENODEV; 532 533 spin_lock_irqsave(&priv->lock, flags); 534 if (set & TIOCM_RTS) 535 priv->line_control |= CONTROL_RTS; 536 if (set & TIOCM_DTR) 537 priv->line_control |= CONTROL_DTR; 538 if (clear & TIOCM_RTS) 539 priv->line_control &= ~CONTROL_RTS; 540 if (clear & TIOCM_DTR) 541 priv->line_control &= ~CONTROL_DTR; 542 control = priv->line_control; 543 spin_unlock_irqrestore(&priv->lock, flags); 544 545 return set_control_lines(port->serial->dev, control); 546 } 547 548 static int pl2303_tiocmget(struct tty_struct *tty) 549 { 550 struct usb_serial_port *port = tty->driver_data; 551 struct pl2303_private *priv = usb_get_serial_port_data(port); 552 unsigned long flags; 553 unsigned int mcr; 554 unsigned int status; 555 unsigned int result; 556 557 dbg("%s (%d)", __func__, port->number); 558 559 if (!usb_get_intfdata(port->serial->interface)) 560 return -ENODEV; 561 562 spin_lock_irqsave(&priv->lock, flags); 563 mcr = priv->line_control; 564 status = priv->line_status; 565 spin_unlock_irqrestore(&priv->lock, flags); 566 567 result = ((mcr & CONTROL_DTR) ? TIOCM_DTR : 0) 568 | ((mcr & CONTROL_RTS) ? TIOCM_RTS : 0) 569 | ((status & UART_CTS) ? TIOCM_CTS : 0) 570 | ((status & UART_DSR) ? TIOCM_DSR : 0) 571 | ((status & UART_RING) ? TIOCM_RI : 0) 572 | ((status & UART_DCD) ? TIOCM_CD : 0); 573 574 dbg("%s - result = %x", __func__, result); 575 576 return result; 577 } 578 579 static int pl2303_carrier_raised(struct usb_serial_port *port) 580 { 581 struct pl2303_private *priv = usb_get_serial_port_data(port); 582 if (priv->line_status & UART_DCD) 583 return 1; 584 return 0; 585 } 586 587 static int wait_modem_info(struct usb_serial_port *port, unsigned int arg) 588 { 589 struct pl2303_private *priv = usb_get_serial_port_data(port); 590 unsigned long flags; 591 unsigned int prevstatus; 592 unsigned int status; 593 unsigned int changed; 594 595 spin_lock_irqsave(&priv->lock, flags); 596 prevstatus = priv->line_status; 597 spin_unlock_irqrestore(&priv->lock, flags); 598 599 while (1) { 600 interruptible_sleep_on(&priv->delta_msr_wait); 601 /* see if a signal did it */ 602 if (signal_pending(current)) 603 return -ERESTARTSYS; 604 605 spin_lock_irqsave(&priv->lock, flags); 606 status = priv->line_status; 607 spin_unlock_irqrestore(&priv->lock, flags); 608 609 changed = prevstatus ^ status; 610 611 if (((arg & TIOCM_RNG) && (changed & UART_RING)) || 612 ((arg & TIOCM_DSR) && (changed & UART_DSR)) || 613 ((arg & TIOCM_CD) && (changed & UART_DCD)) || 614 ((arg & TIOCM_CTS) && (changed & UART_CTS))) { 615 return 0; 616 } 617 prevstatus = status; 618 } 619 /* NOTREACHED */ 620 return 0; 621 } 622 623 static int pl2303_ioctl(struct tty_struct *tty, 624 unsigned int cmd, unsigned long arg) 625 { 626 struct serial_struct ser; 627 struct usb_serial_port *port = tty->driver_data; 628 dbg("%s (%d) cmd = 0x%04x", __func__, port->number, cmd); 629 630 switch (cmd) { 631 case TIOCGSERIAL: 632 memset(&ser, 0, sizeof ser); 633 ser.type = PORT_16654; 634 ser.line = port->serial->minor; 635 ser.port = port->number; 636 ser.baud_base = 460800; 637 638 if (copy_to_user((void __user *)arg, &ser, sizeof ser)) 639 return -EFAULT; 640 641 return 0; 642 643 case TIOCMIWAIT: 644 dbg("%s (%d) TIOCMIWAIT", __func__, port->number); 645 return wait_modem_info(port, arg); 646 default: 647 dbg("%s not supported = 0x%04x", __func__, cmd); 648 break; 649 } 650 return -ENOIOCTLCMD; 651 } 652 653 static void pl2303_break_ctl(struct tty_struct *tty, int break_state) 654 { 655 struct usb_serial_port *port = tty->driver_data; 656 struct usb_serial *serial = port->serial; 657 u16 state; 658 int result; 659 660 dbg("%s - port %d", __func__, port->number); 661 662 if (break_state == 0) 663 state = BREAK_OFF; 664 else 665 state = BREAK_ON; 666 dbg("%s - turning break %s", __func__, 667 state == BREAK_OFF ? "off" : "on"); 668 669 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), 670 BREAK_REQUEST, BREAK_REQUEST_TYPE, state, 671 0, NULL, 0, 100); 672 if (result) 673 dbg("%s - error sending break = %d", __func__, result); 674 } 675 676 static void pl2303_release(struct usb_serial *serial) 677 { 678 int i; 679 struct pl2303_private *priv; 680 681 dbg("%s", __func__); 682 683 for (i = 0; i < serial->num_ports; ++i) { 684 priv = usb_get_serial_port_data(serial->port[i]); 685 kfree(priv); 686 } 687 } 688 689 static void pl2303_update_line_status(struct usb_serial_port *port, 690 unsigned char *data, 691 unsigned int actual_length) 692 { 693 694 struct pl2303_private *priv = usb_get_serial_port_data(port); 695 struct tty_struct *tty; 696 unsigned long flags; 697 u8 status_idx = UART_STATE; 698 u8 length = UART_STATE + 1; 699 u8 prev_line_status; 700 u16 idv, idp; 701 702 idv = le16_to_cpu(port->serial->dev->descriptor.idVendor); 703 idp = le16_to_cpu(port->serial->dev->descriptor.idProduct); 704 705 706 if (idv == SIEMENS_VENDOR_ID) { 707 if (idp == SIEMENS_PRODUCT_ID_X65 || 708 idp == SIEMENS_PRODUCT_ID_SX1 || 709 idp == SIEMENS_PRODUCT_ID_X75) { 710 711 length = 1; 712 status_idx = 0; 713 } 714 } 715 716 if (actual_length < length) 717 return; 718 719 /* Save off the uart status for others to look at */ 720 spin_lock_irqsave(&priv->lock, flags); 721 prev_line_status = priv->line_status; 722 priv->line_status = data[status_idx]; 723 spin_unlock_irqrestore(&priv->lock, flags); 724 if (priv->line_status & UART_BREAK_ERROR) 725 usb_serial_handle_break(port); 726 wake_up_interruptible(&priv->delta_msr_wait); 727 728 tty = tty_port_tty_get(&port->port); 729 if (!tty) 730 return; 731 if ((priv->line_status ^ prev_line_status) & UART_DCD) 732 usb_serial_handle_dcd_change(port, tty, 733 priv->line_status & UART_DCD); 734 tty_kref_put(tty); 735 } 736 737 static void pl2303_read_int_callback(struct urb *urb) 738 { 739 struct usb_serial_port *port = urb->context; 740 unsigned char *data = urb->transfer_buffer; 741 unsigned int actual_length = urb->actual_length; 742 int status = urb->status; 743 int retval; 744 745 dbg("%s (%d)", __func__, port->number); 746 747 switch (status) { 748 case 0: 749 /* success */ 750 break; 751 case -ECONNRESET: 752 case -ENOENT: 753 case -ESHUTDOWN: 754 /* this urb is terminated, clean up */ 755 dbg("%s - urb shutting down with status: %d", __func__, 756 status); 757 return; 758 default: 759 dbg("%s - nonzero urb status received: %d", __func__, 760 status); 761 goto exit; 762 } 763 764 usb_serial_debug_data(debug, &port->dev, __func__, 765 urb->actual_length, urb->transfer_buffer); 766 767 pl2303_update_line_status(port, data, actual_length); 768 769 exit: 770 retval = usb_submit_urb(urb, GFP_ATOMIC); 771 if (retval) 772 dev_err(&urb->dev->dev, 773 "%s - usb_submit_urb failed with result %d\n", 774 __func__, retval); 775 } 776 777 static void pl2303_process_read_urb(struct urb *urb) 778 { 779 struct usb_serial_port *port = urb->context; 780 struct pl2303_private *priv = usb_get_serial_port_data(port); 781 struct tty_struct *tty; 782 unsigned char *data = urb->transfer_buffer; 783 char tty_flag = TTY_NORMAL; 784 unsigned long flags; 785 u8 line_status; 786 int i; 787 788 /* update line status */ 789 spin_lock_irqsave(&priv->lock, flags); 790 line_status = priv->line_status; 791 priv->line_status &= ~UART_STATE_TRANSIENT_MASK; 792 spin_unlock_irqrestore(&priv->lock, flags); 793 wake_up_interruptible(&priv->delta_msr_wait); 794 795 if (!urb->actual_length) 796 return; 797 798 tty = tty_port_tty_get(&port->port); 799 if (!tty) 800 return; 801 802 /* break takes precedence over parity, */ 803 /* which takes precedence over framing errors */ 804 if (line_status & UART_BREAK_ERROR) 805 tty_flag = TTY_BREAK; 806 else if (line_status & UART_PARITY_ERROR) 807 tty_flag = TTY_PARITY; 808 else if (line_status & UART_FRAME_ERROR) 809 tty_flag = TTY_FRAME; 810 dbg("%s - tty_flag = %d", __func__, tty_flag); 811 812 /* overrun is special, not associated with a char */ 813 if (line_status & UART_OVERRUN_ERROR) 814 tty_insert_flip_char(tty, 0, TTY_OVERRUN); 815 816 if (port->port.console && port->sysrq) { 817 for (i = 0; i < urb->actual_length; ++i) 818 if (!usb_serial_handle_sysrq_char(port, data[i])) 819 tty_insert_flip_char(tty, data[i], tty_flag); 820 } else { 821 tty_insert_flip_string_fixed_flag(tty, data, tty_flag, 822 urb->actual_length); 823 } 824 825 tty_flip_buffer_push(tty); 826 tty_kref_put(tty); 827 } 828 829 /* All of the device info needed for the PL2303 SIO serial converter */ 830 static struct usb_serial_driver pl2303_device = { 831 .driver = { 832 .owner = THIS_MODULE, 833 .name = "pl2303", 834 }, 835 .id_table = id_table, 836 .num_ports = 1, 837 .bulk_in_size = 256, 838 .bulk_out_size = 256, 839 .open = pl2303_open, 840 .close = pl2303_close, 841 .dtr_rts = pl2303_dtr_rts, 842 .carrier_raised = pl2303_carrier_raised, 843 .ioctl = pl2303_ioctl, 844 .break_ctl = pl2303_break_ctl, 845 .set_termios = pl2303_set_termios, 846 .tiocmget = pl2303_tiocmget, 847 .tiocmset = pl2303_tiocmset, 848 .process_read_urb = pl2303_process_read_urb, 849 .read_int_callback = pl2303_read_int_callback, 850 .attach = pl2303_startup, 851 .release = pl2303_release, 852 }; 853 854 static struct usb_serial_driver * const serial_drivers[] = { 855 &pl2303_device, NULL 856 }; 857 858 module_usb_serial_driver(pl2303_driver, serial_drivers); 859 860 MODULE_DESCRIPTION(DRIVER_DESC); 861 MODULE_LICENSE("GPL"); 862 863 module_param(debug, bool, S_IRUGO | S_IWUSR); 864 MODULE_PARM_DESC(debug, "Debug enabled or not"); 865 866