Lines Matching full:serial
3 * Prolific PL2303 USB to serial adaptor driver
10 * See Documentation/usb/usb-serial.rst for more information on using this
20 #include <linux/serial.h>
26 #include <linux/usb/serial.h>
218 static int pl2303_vendor_read(struct usb_serial *serial, u16 value, in pl2303_vendor_read() argument
221 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_vendor_read()
222 struct device *dev = &serial->interface->dev; in pl2303_vendor_read()
231 res = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), in pl2303_vendor_read()
248 static int pl2303_vendor_write(struct usb_serial *serial, u16 value, u16 index) in pl2303_vendor_write() argument
250 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_vendor_write()
251 struct device *dev = &serial->interface->dev; in pl2303_vendor_write()
262 res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), in pl2303_vendor_write()
274 static int pl2303_update_reg(struct usb_serial *serial, u8 reg, u8 mask, u8 val) in pl2303_update_reg() argument
276 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_update_reg()
285 ret = pl2303_vendor_read(serial, reg, buf); in pl2303_update_reg()
287 ret = pl2303_vendor_read(serial, reg | 0x80, buf); in pl2303_update_reg()
295 ret = pl2303_vendor_write(serial, reg, *buf); in pl2303_update_reg()
302 static int pl2303_probe(struct usb_serial *serial, in pl2303_probe() argument
305 usb_set_serial_data(serial, (void *)id->driver_info); in pl2303_probe()
315 static int pl2303_endpoint_hack(struct usb_serial *serial, in pl2303_endpoint_hack() argument
318 struct usb_interface *interface = serial->interface; in pl2303_endpoint_hack()
319 struct usb_device *dev = serial->dev; in pl2303_endpoint_hack()
345 static int pl2303_calc_num_ports(struct usb_serial *serial, in pl2303_calc_num_ports() argument
348 unsigned long quirks = (unsigned long)usb_get_serial_data(serial); in pl2303_calc_num_ports()
349 struct device *dev = &serial->interface->dev; in pl2303_calc_num_ports()
353 ret = pl2303_endpoint_hack(serial, epds); in pl2303_calc_num_ports()
366 static int pl2303_startup(struct usb_serial *serial) in pl2303_startup() argument
383 if (serial->dev->descriptor.bDeviceClass == 0x02) in pl2303_startup()
385 else if (serial->dev->descriptor.bMaxPacketSize0 == 0x40) in pl2303_startup()
387 else if (serial->dev->descriptor.bDeviceClass == 0x00) in pl2303_startup()
389 else if (serial->dev->descriptor.bDeviceClass == 0xFF) in pl2303_startup()
391 dev_dbg(&serial->interface->dev, "device type: %d\n", type); in pl2303_startup()
394 res = usb_control_msg(serial->dev, in pl2303_startup()
395 usb_rcvctrlpipe(serial->dev, 0), in pl2303_startup()
403 spriv->quirks = (unsigned long)usb_get_serial_data(serial); in pl2303_startup()
406 usb_set_serial_data(serial, spriv); in pl2303_startup()
409 pl2303_vendor_read(serial, 0x8484, buf); in pl2303_startup()
410 pl2303_vendor_write(serial, 0x0404, 0); in pl2303_startup()
411 pl2303_vendor_read(serial, 0x8484, buf); in pl2303_startup()
412 pl2303_vendor_read(serial, 0x8383, buf); in pl2303_startup()
413 pl2303_vendor_read(serial, 0x8484, buf); in pl2303_startup()
414 pl2303_vendor_write(serial, 0x0404, 1); in pl2303_startup()
415 pl2303_vendor_read(serial, 0x8484, buf); in pl2303_startup()
416 pl2303_vendor_read(serial, 0x8383, buf); in pl2303_startup()
417 pl2303_vendor_write(serial, 0, 1); in pl2303_startup()
418 pl2303_vendor_write(serial, 1, 0); in pl2303_startup()
420 pl2303_vendor_write(serial, 2, 0x24); in pl2303_startup()
422 pl2303_vendor_write(serial, 2, 0x44); in pl2303_startup()
430 static void pl2303_release(struct usb_serial *serial) in pl2303_release() argument
432 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_release()
465 struct usb_device *dev = port->serial->dev; in pl2303_set_control_lines()
563 struct usb_serial *serial = port->serial; in pl2303_encode_baud_rate() local
564 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_encode_baud_rate()
597 struct usb_device *udev = port->serial->dev; in pl2303_get_line_request()
620 struct usb_device *udev = port->serial->dev; in pl2303_set_line_request()
664 struct usb_serial *serial = port->serial; in pl2303_set_termios() local
665 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_set_termios()
753 * Some PL2303 are known to lose bytes if you change serial settings in pl2303_set_termios()
787 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x40); in pl2303_set_termios()
789 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG, in pl2303_set_termios()
793 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0x60); in pl2303_set_termios()
797 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG, in pl2303_set_termios()
801 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0xc0); in pl2303_set_termios()
805 pl2303_update_reg(serial, PL2303_HXN_FLOWCTRL_REG, in pl2303_set_termios()
809 pl2303_update_reg(serial, 0, PL2303_FLOWCTRL_MASK, 0); in pl2303_set_termios()
842 struct usb_serial *serial = port->serial; in pl2303_open() local
843 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_open()
847 usb_clear_halt(serial->dev, port->write_urb->pipe); in pl2303_open()
848 usb_clear_halt(serial->dev, port->read_urb->pipe); in pl2303_open()
852 pl2303_vendor_write(serial, PL2303_HXN_RESET_REG, in pl2303_open()
856 pl2303_vendor_write(serial, 8, 0); in pl2303_open()
857 pl2303_vendor_write(serial, 9, 0); in pl2303_open()
959 struct usb_serial *serial = port->serial; in pl2303_set_break() local
971 result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), in pl2303_set_break()
989 struct usb_serial *serial = port->serial; in pl2303_update_line_status() local
990 struct pl2303_serial_private *spriv = usb_get_serial_data(serial); in pl2303_update_line_status()
1162 MODULE_DESCRIPTION("Prolific PL2303 USB to serial adaptor driver");