From d940da559b32e730964691a1fc5593654b9f6636 Mon Sep 17 00:00:00 2001 From: smckown Date: Thu, 26 Nov 2009 04:13:51 +0000 Subject: [PATCH] Pull updates from 2.6.31 in-kernel driver * Aesthetic changes to reduce diff; no functionality changes. * Backport usb device ids. --- Makefile | 4 +- src/cp210x.c | 316 ++++++++++++++++++++++++++------------------------- 2 files changed, 166 insertions(+), 154 deletions(-) diff --git a/Makefile b/Makefile index 6a5244e..0a6c30e 100644 --- a/Makefile +++ b/Makefile @@ -4,8 +4,8 @@ # Change or override these values as necessary for each package release -PKGVER = 0.11.1 -DEBRELEASE = 3tmi +PKGVER = 0.11.2 +DEBRELEASE = 4tmi # No need to change anything below this line diff --git a/src/cp210x.c b/src/cp210x.c index f649335..a8851dd 100644 --- a/src/cp210x.c +++ b/src/cp210x.c @@ -1,5 +1,5 @@ /* - * Silicon Laboratories CP2101/CP2102/CP2103 USB to RS232 serial adaptor driver + * Silicon Laboratories CP210x USB to RS232 serial adaptor driver * * Copyright (C) 2005 Craig Shelley (craig@microtron.org.uk) * @@ -37,23 +37,23 @@ * Version Information */ #define DRIVER_VERSION "vxxPKGVERxxtmi" -#define DRIVER_DESC "Silicon Labs CP2101/CP2102/CP2103 RS232 serial adaptor driver" +#define DRIVER_DESC "Silicon Labs CP210x RS232 serial adaptor driver" /* * Function Prototypes */ -static int cp2101_open(struct usb_serial_port*, struct file*); -static void cp2101_cleanup(struct usb_serial_port*); -static void cp2101_close(struct usb_serial_port*, struct file*); -static void cp2101_get_termios(struct usb_serial_port*); -static void cp2101_set_termios(struct usb_serial_port*, struct ktermios*); -static int cp2101_tiocmget (struct usb_serial_port *, struct file *); -static int cp2101_tiocmset (struct usb_serial_port *, struct file *, +static int cp210x_open(struct usb_serial_port*, struct file*); +static void cp210x_cleanup(struct usb_serial_port*); +static void cp210x_close(struct usb_serial_port*, struct file*); +static void cp210x_get_termios(struct usb_serial_port*); +static void cp210x_set_termios(struct usb_serial_port*, struct ktermios*); +static int cp210x_tiocmget(struct usb_serial_port *, struct file *); +static int cp210x_tiocmset(struct usb_serial_port *, struct file *, unsigned int, unsigned int); -static void cp2101_break_ctl(struct usb_serial_port*, int); -static int cp2101_startup (struct usb_serial *); -static void cp2101_shutdown(struct usb_serial*); -static int cp2101_ioctl(struct usb_serial_port *, struct file *, +static void cp210x_break_ctl(struct usb_serial_port*, int); +static int cp210x_startup(struct usb_serial *); +static void cp210x_shutdown(struct usb_serial*); +static int cp210x_ioctl(struct usb_serial_port *, struct file *, unsigned int, unsigned long); static int debug; @@ -61,13 +61,18 @@ static int debug; static struct usb_device_id id_table [] = { { USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */ { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */ + { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */ { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */ + { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */ { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */ { USB_DEVICE(0x0FCF, 0x1004) }, /* Dynastream ANT2USB */ { USB_DEVICE(0x0FCF, 0x1006) }, /* Dynastream ANT development board */ { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */ { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */ { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */ + { USB_DEVICE(0x10C4, 0x0F91) }, /* Vstabi */ + { USB_DEVICE(0x10C4, 0x1101) }, /* Arkham Technology DS101 Bus Monitor */ + { USB_DEVICE(0x10C4, 0x1601) }, /* Arkham Technology DS101 Adapter */ { USB_DEVICE(0x10C4, 0x800A) }, /* SPORTident BSM7-D-USB main station */ { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */ { USB_DEVICE(0x10C4, 0x8053) }, /* Enfora EDG1228 */ @@ -79,6 +84,7 @@ static struct usb_device_id id_table [] = { { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */ { USB_DEVICE(0x10C4, 0x8115) }, /* Arygon NFC/Mifare Reader */ { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */ + { USB_DEVICE(0x10C4, 0x813F) }, /* Tams Master Easy Control */ { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */ { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */ { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */ @@ -88,12 +94,16 @@ static struct usb_device_id id_table [] = { { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */ { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */ { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */ + { USB_DEVICE(0x10C4, 0x81F2) }, /* C1007 HF band RFID controller */ { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */ { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */ { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demostration module */ { USB_DEVICE(0x10c4, 0x8293) }, /* Telegesys ETRX2USB */ + { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */ { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */ + { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */ { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */ + { USB_DEVICE(0x10C4, 0x8411) }, /* Kyocera GPS Module */ { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */ { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */ { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */ @@ -102,16 +112,18 @@ static struct usb_device_id id_table [] = { { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */ { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */ { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */ + { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */ { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */ + { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */ { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */ { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */ { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */ { } /* Terminating Entry */ }; -MODULE_DEVICE_TABLE (usb, id_table); +MODULE_DEVICE_TABLE(usb, id_table); -static struct usb_driver cp2101_driver = { +static struct usb_driver cp210x_driver = { .name = "cp210x", .probe = usb_serial_probe, .disconnect = usb_serial_disconnect, @@ -119,26 +131,26 @@ static struct usb_driver cp2101_driver = { .no_dynamic_id = 1, }; -static struct usb_serial_driver cp2101_device = { +static struct usb_serial_driver cp210x_device = { .driver = { .owner = THIS_MODULE, .name = "cp210x", }, - .usb_driver = &cp2101_driver, + .usb_driver = &cp210x_driver, .id_table = id_table, .num_interrupt_in = 0, .num_bulk_in = NUM_DONT_CARE, .num_bulk_out = NUM_DONT_CARE, .num_ports = 1, - .open = cp2101_open, - .close = cp2101_close, - .ioctl = cp2101_ioctl, - .break_ctl = cp2101_break_ctl, - .set_termios = cp2101_set_termios, - .tiocmget = cp2101_tiocmget, - .tiocmset = cp2101_tiocmset, - .attach = cp2101_startup, - .shutdown = cp2101_shutdown, + .open = cp210x_open, + .close = cp210x_close, + .ioctl = cp210x_ioctl, + .break_ctl = cp210x_break_ctl, + .set_termios = cp210x_set_termios, + .tiocmget = cp210x_tiocmget, + .tiocmset = cp210x_tiocmset, + .attach = cp210x_startup, + .shutdown = cp210x_shutdown, }; /* Config request types */ @@ -245,36 +257,36 @@ static struct usb_serial_driver cp2101_device = { /* Used to pass variable sized buffers between user and kernel space (ioctls) */ typedef struct { - char* buf; + char *buf; size_t len; -} cp2101_buffer_t; +} cp210x_buffer_t; /* Port config definitions */ typedef struct { uint16_t mode; /* Push-pull = 1, Open-drain = 0 */ uint16_t lowPower; uint16_t latch; /* Logic high = 1, Logic low = 0 */ -} cp2101_port_state_t; +} cp210x_port_state_t; typedef struct { - cp2101_port_state_t reset; - cp2101_port_state_t suspend; + cp210x_port_state_t reset; + cp210x_port_state_t suspend; uint8_t enhancedFxn; -} cp2101_port_config_t; +} cp210x_port_config_t; #define PORT_CONFIG_LEN 13 /* Because sizeof() will pad to full words */ /* - * cp2101_buf_from_user + * cp210x_buf_from_user * Copy a buffer from user space, returning the number of bytes copied * from ubuf.buf into kbuf. klen is the size of the buffer at kbuf. */ -size_t copy_buf_from_user(char *kbuf, unsigned long ubuf, size_t klen) +static size_t copy_buf_from_user(char *kbuf, unsigned long ubuf, size_t klen) { - cp2101_buffer_t t; + cp210x_buffer_t t; if (!kbuf || !ubuf || !klen || - copy_from_user(&t, (cp2101_buffer_t *)ubuf, sizeof(t))) + copy_from_user(&t, (cp210x_buffer_t *)ubuf, sizeof(t))) return 0; if (t.len < klen) klen = t.len; @@ -284,13 +296,13 @@ size_t copy_buf_from_user(char *kbuf, unsigned long ubuf, size_t klen) } /* - * cp2101_ctlmsg + * cp210x_ctlmsg * A generic usb control message interface. * Returns the actual size of the data read or written within the message, 0 * if no data were read or written, or a negative value to indicate an error. */ -static int cp2101_ctlmsg(struct usb_serial_port* port, u8 request, - u8 requestype, u16 value, u16 index, void* data, u16 size) +static int cp210x_ctlmsg(struct usb_serial_port *port, u8 request, + u8 requestype, u16 value, u16 index, void *data, u16 size) { struct usb_device *dev = port->serial->dev; u8 *tbuf; @@ -317,7 +329,7 @@ static int cp2101_ctlmsg(struct usb_serial_port* port, u8 request, return ret; } -static int cp2101_reset(struct usb_serial_port *port) +static int cp210x_reset(struct usb_serial_port *port) { dbg("%s", __FUNCTION__); @@ -327,14 +339,14 @@ static int cp2101_reset(struct usb_serial_port *port) * connections are torn down. We also ignore the error return, since * the part resets and doesn't send one... */ - cp2101_ctlmsg(port, 0xff, 0x40, 0x0008, 0x00, 0, 0); + cp210x_ctlmsg(port, 0xff, 0x40, 0x0008, 0x00, 0, 0); #else usb_reset_device(port->serial->dev); #endif return 0; } -static int cp2101_get_partnum(struct usb_serial_port *port) +static int cp210x_get_partnum(struct usb_serial_port *port) { static u8 _partnum = 0; int ret = CP210x_SUCCESS; @@ -347,7 +359,7 @@ static int cp2101_get_partnum(struct usb_serial_port *port) _partnum = 0x01; else if (addr == 0x01) { /* Must query part to determine part number */ - if (cp2101_ctlmsg(port, 0xff, 0xc0, 0x370b, 0x00, + if (cp210x_ctlmsg(port, 0xff, 0xc0, 0x370b, 0x00, &_partnum, 1) != 1) ret = CP210x_DEVICE_IO_FAILED; } else @@ -357,10 +369,10 @@ static int cp2101_get_partnum(struct usb_serial_port *port) return (ret == CP210x_SUCCESS) ? _partnum : 0; } -inline int cp2101_setu16(struct usb_serial_port *port, int cmd, +static inline int cp210x_setu16(struct usb_serial_port *port, int cmd, unsigned int value) { - return cp2101_ctlmsg(port, 0xff, 0x40, 0x3700 | (cmd & 0xff), + return cp210x_ctlmsg(port, 0xff, 0x40, 0x3700 | (cmd & 0xff), value, 0, 0); } @@ -372,13 +384,13 @@ inline int cp2101_setu16(struct usb_serial_port *port, int cmd, * does not cause data written to usbstr to overwrite data not yet read from * str. */ -static int make_usb_string(char* usbstr, size_t usblen, char* src, +static int make_usb_string(char *usbstr, size_t usblen, char *src, size_t srclen) { int len = 0; if (usbstr && usblen >= 2 && src && *src && srclen) { - char* p; + char *p; /* The usb string format uses first byte as length */ if (usblen > 256) @@ -399,31 +411,31 @@ static int make_usb_string(char* usbstr, size_t usblen, char* src, } /* - * cp2101_setstr + * cp210x_setstr * * Set a USB string descriptor using proprietary cp210x control messages. * Return the number of characters actually written. */ -inline int cp2101_setstr(struct usb_serial_port *port, int cmd, char *usbstr) +static int cp210x_setstr(struct usb_serial_port *port, int cmd, char *usbstr) { unsigned len = usbstr[0]; - int ret = cp2101_ctlmsg(port, 0xff, 0x40, 0x3700 | (cmd & 0xff), 0, + int ret = cp210x_ctlmsg(port, 0xff, 0x40, 0x3700 | (cmd & 0xff), 0, usbstr, len); dbg("%s - cmd 0x%02x len %d ret %d", __FUNCTION__, cmd, len, ret); return ret; } /* Set all gpio simultaneously */ -static int cp2101_gpioset(struct usb_serial_port *port, u8 gpio) +static int cp210x_gpioset(struct usb_serial_port *port, u8 gpio) { dbg("%s - port %d, gpio = 0x%.2x", __FUNCTION__, port->number, gpio); - return cp2101_ctlmsg(port, 0xff, 0x40, 0x37e1, + return cp210x_ctlmsg(port, 0xff, 0x40, 0x37e1, ((uint16_t)gpio << 8) | GPIO_MASK, 0, 0); } /* Set select gpio bits */ -static int cp2101_gpiosetb(struct usb_serial_port *port, u8 set, u8 clear) +static int cp210x_gpiosetb(struct usb_serial_port *port, u8 set, u8 clear) { u16 gpio = 0; @@ -448,27 +460,27 @@ static int cp2101_gpiosetb(struct usb_serial_port *port, u8 set, u8 clear) dbg("%s - port %d, gpiob = 0x%.4x", __FUNCTION__, port->number, gpio); /* FIXME: how about REQTYPE_HOST_TO_DEVICE instead of 0x40? */ - return cp2101_ctlmsg(port, 0xff, 0x40, 0x37e1, gpio, 0, 0); + return cp210x_ctlmsg(port, 0xff, 0x40, 0x37e1, gpio, 0, 0); } -static int cp2101_gpioget(struct usb_serial_port *port, u8* gpio) +static int cp210x_gpioget(struct usb_serial_port *port, u8 *gpio) { int ret; dbg("%s - port %d", __FUNCTION__, port->number); /* FIXME: how about REQTYPE_DEVICE_TO_HOST instead of 0xc0? */ - ret = cp2101_ctlmsg(port, 0xff, 0xc0, 0x00c2, 0, gpio, 1); + ret = cp210x_ctlmsg(port, 0xff, 0xc0, 0x00c2, 0, gpio, 1); dbg("%s - gpio = 0x%.2x (%d)", __FUNCTION__, *gpio, ret); return (ret == 1) ? 0 : -1; } -static int cp2101_portconfset(struct usb_serial_port *port, - cp2101_port_config_t* config) +static int cp210x_portconfset(struct usb_serial_port *port, + cp210x_port_config_t *config) { - cp2101_port_config_t lconfig; + cp210x_port_config_t lconfig; int ret; dbg("%s", __FUNCTION__); @@ -487,7 +499,7 @@ static int cp2101_portconfset(struct usb_serial_port *port, /* lconfig.suspend.lowPower = cpu_to_be16(config->suspend.lowPower); */ lconfig.suspend.latch = cpu_to_be16(config->suspend.latch); - ret = cp2101_ctlmsg(port, 0xff, 0x40, 0x370c, 0, &lconfig, + ret = cp210x_ctlmsg(port, 0xff, 0x40, 0x370c, 0, &lconfig, PORT_CONFIG_LEN); if (ret == PORT_CONFIG_LEN) return 0; @@ -497,14 +509,14 @@ static int cp2101_portconfset(struct usb_serial_port *port, return ret; } -static int cp2101_portconfget(struct usb_serial_port *port, - cp2101_port_config_t* config) +static int cp210x_portconfget(struct usb_serial_port *port, + cp210x_port_config_t *config) { int ret; dbg("%s", __FUNCTION__); - ret = cp2101_ctlmsg(port, 0xff, 0xc0, 0x370c, 0, config, + ret = cp210x_ctlmsg(port, 0xff, 0xc0, 0x370c, 0, config, PORT_CONFIG_LEN); if (ret == PORT_CONFIG_LEN) { /* Words from cp2103 are MSB */ @@ -529,13 +541,13 @@ static int cp2101_portconfget(struct usb_serial_port *port, } /* - * cp2101_get_config - * Reads from the CP2101 configuration registers + * cp210x_get_config + * Reads from the CP210x configuration registers * 'size' is specified in bytes. * 'data' is a pointer to a pre-allocated array of integers large * enough to hold 'size' bytes (with 4 bytes to each integer) */ -static int cp2101_get_config(struct usb_serial_port* port, u8 request, +static int cp210x_get_config(struct usb_serial_port *port, u8 request, unsigned int *data, int size) { struct usb_serial *serial = port->serial; @@ -555,12 +567,12 @@ static int cp2101_get_config(struct usb_serial_port* port, u8 request, request++; /* Issue the request, attempting to read 'size' bytes */ - result = usb_control_msg (serial->dev,usb_rcvctrlpipe (serial->dev, 0), + result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0), request, REQTYPE_DEVICE_TO_HOST, 0x0000, 0, buf, size, 300); /* Convert data into an array of integers */ - for (i=0; iserial; @@ -603,12 +615,12 @@ static int cp2101_set_config(struct usb_serial_port* port, u8 request, buf[i] = cpu_to_le32(data[i]); if (size > 2) { - result = usb_control_msg (serial->dev, + result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), request, REQTYPE_HOST_TO_DEVICE, 0x0000, 0, buf, size, 300); } else { - result = usb_control_msg (serial->dev, + result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), request, REQTYPE_HOST_TO_DEVICE, data[0], 0, NULL, 0, 300); @@ -624,7 +636,7 @@ static int cp2101_set_config(struct usb_serial_port* port, u8 request, } /* Single data value */ - result = usb_control_msg (serial->dev, + result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0), request, REQTYPE_HOST_TO_DEVICE, data[0], 0, NULL, 0, 300); @@ -632,31 +644,31 @@ static int cp2101_set_config(struct usb_serial_port* port, u8 request, } /* - * cp2101_set_config_single - * Convenience function for calling cp2101_set_config on single data values + * cp210x_set_config_single + * Convenience function for calling cp210x_set_config on single data values * without requiring an integer pointer */ -static inline int cp2101_set_config_single(struct usb_serial_port* port, +static inline int cp210x_set_config_single(struct usb_serial_port *port, u8 request, unsigned int data) { - return cp2101_set_config(port, request, &data, 2); + return cp210x_set_config(port, request, &data, 2); } -static int cp2101_open (struct usb_serial_port *port, struct file *filp) +static int cp210x_open(struct usb_serial_port *port, struct file *filp) { struct usb_serial *serial = port->serial; int result; dbg("%s - port %d", __FUNCTION__, port->number); - if (cp2101_set_config_single(port, CP2101_UART, UART_ENABLE)) { + if (cp210x_set_config_single(port, CP2101_UART, UART_ENABLE)) { dev_err(&port->dev, "%s - Unable to enable UART\n", __FUNCTION__); return -EPROTO; } /* Start reading from the device */ - usb_fill_bulk_urb (port->read_urb, serial->dev, + usb_fill_bulk_urb(port->read_urb, serial->dev, usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress), port->read_urb->transfer_buffer, @@ -671,15 +683,15 @@ static int cp2101_open (struct usb_serial_port *port, struct file *filp) } /* Configure the termios structure */ - cp2101_get_termios(port); + cp210x_get_termios(port); /* Set the DTR and RTS pins low */ - cp2101_tiocmset(port, NULL, TIOCM_DTR | TIOCM_RTS, 0); + cp210x_tiocmset(port, NULL, TIOCM_DTR | TIOCM_RTS, 0); return 0; } -static void cp2101_cleanup (struct usb_serial_port *port) +static void cp210x_cleanup(struct usb_serial_port *port) { struct usb_serial *serial = port->serial; @@ -694,7 +706,7 @@ static void cp2101_cleanup (struct usb_serial_port *port) } } -static void cp2101_close (struct usb_serial_port *port, struct file * filp) +static void cp210x_close(struct usb_serial_port *port, struct file *filp) { dbg("%s - port %d", __FUNCTION__, port->number); @@ -703,10 +715,10 @@ static void cp2101_close (struct usb_serial_port *port, struct file * filp) usb_kill_urb(port->write_urb); usb_kill_urb(port->read_urb); - cp2101_set_config_single(port, CP2101_UART, UART_DISABLE); + cp210x_set_config_single(port, CP2101_UART, UART_DISABLE); } -static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, +static int cp210x_ioctl(struct usb_serial_port *port, struct file *file, unsigned int cmd, unsigned long arg) { dbg("%s (%d) cmd = 0x%04x", __FUNCTION__, port->number, cmd); @@ -715,7 +727,7 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, case TIOCMGET: { - int result = cp2101_tiocmget(port, file); + int result = cp210x_tiocmget(port, file); if (copy_to_user(&arg, &result, sizeof(int))) return -EFAULT; return 0; @@ -733,7 +745,7 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, return -EFAULT; /* this looks wrong: TIOCMSET isn't going to work right */ - if (cp2101_tiocmset(port, file, cmd==TIOCMBIC ? 0 : val, + if (cp210x_tiocmset(port, file, cmd==TIOCMBIC ? 0 : val, cmd==TIOCMBIC ? val : 0)) return -EFAULT; return 0; @@ -741,9 +753,9 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, break; case IOCTL_GPIOGET: - if (cp2101_get_partnum(port) == CP210x_CP2103_VERSION) { + if (cp210x_get_partnum(port) == CP210x_CP2103_VERSION) { u8 gpio = 0; - if (!cp2101_gpioget(port, &gpio) && !copy_to_user((u8*)arg, + if (!cp210x_gpioget(port, &gpio) && !copy_to_user((u8*)arg, &gpio, sizeof(gpio))) return 0; } @@ -751,30 +763,30 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, break; case IOCTL_GPIOSET: - if (cp2101_get_partnum(port) == CP210x_CP2103_VERSION && - !cp2101_gpioset(port, arg)) + if (cp210x_get_partnum(port) == CP210x_CP2103_VERSION && + !cp210x_gpioset(port, arg)) return 0; return -EFAULT; break; case IOCTL_GPIOBIC: case IOCTL_GPIOBIS: - if (cp2101_get_partnum(port) == CP210x_CP2103_VERSION && - !cp2101_gpiosetb(port, (cmd==IOCTL_GPIOBIC) ? 0 : arg, + if (cp210x_get_partnum(port) == CP210x_CP2103_VERSION && + !cp210x_gpiosetb(port, (cmd==IOCTL_GPIOBIC) ? 0 : arg, (cmd==IOCTL_GPIOBIC) ? arg : 0)) return 0; return -EFAULT; break; case IOCTL_DEVICERESET: - return cp2101_reset(port); + return cp210x_reset(port); break; case IOCTL_PORTCONFGET: { - cp2101_port_config_t config; - if (!cp2101_portconfget(port, &config) && !copy_to_user( - (cp2101_port_config_t*)arg, &config, + cp210x_port_config_t config; + if (!cp210x_portconfget(port, &config) && !copy_to_user( + (cp210x_port_config_t*)arg, &config, sizeof(config))) return 0; } @@ -783,10 +795,10 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, case IOCTL_PORTCONFSET: { - cp2101_port_config_t config; - if (!copy_from_user(&config, (cp2101_port_config_t*)arg, + cp210x_port_config_t config; + if (!copy_from_user(&config, (cp210x_port_config_t*)arg, sizeof(config)) && - !cp2101_portconfset(port, &config)) + !cp210x_portconfset(port, &config)) return 0; return -EFAULT; } @@ -797,7 +809,7 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, unsigned int vid; if (!copy_from_user(&vid, (unsigned int *)arg, sizeof(unsigned int)) && - !cp2101_setu16(port, 0x01, vid)) + !cp210x_setu16(port, 0x01, vid)) return 0; return -EFAULT; } @@ -808,7 +820,7 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, unsigned int pid; if (!copy_from_user(&pid, (unsigned int *)arg, sizeof(unsigned int)) && - !cp2101_setu16(port, 0x02, pid)) + !cp210x_setu16(port, 0x02, pid)) return 0; return -EFAULT; } @@ -822,7 +834,7 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, CP210x_MAX_MFG_STRLEN, arg, CP210x_MAX_MFG_STRLEN); len = make_usb_string(usbstr, sizeof(usbstr), str, len); - if (len && cp2101_setstr(port, 0x00, usbstr) == len) + if (len && cp210x_setstr(port, 0x00, usbstr) == len) return 0; return -EFAULT; } @@ -832,11 +844,11 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, case IOCTL_SETPRODUCT: { char usbstr[CP210x_MAX_PRODUCT_STRLEN * 2 + 2]; - char* str = usbstr + sizeof(usbstr) - CP210x_MAX_PRODUCT_STRLEN; + char *str = usbstr + sizeof(usbstr) - CP210x_MAX_PRODUCT_STRLEN; size_t len = copy_buf_from_user(str, arg, CP210x_MAX_PRODUCT_STRLEN); len = make_usb_string(usbstr, sizeof(usbstr), str, len); - if (len && cp2101_setstr(port, 0x03, usbstr) == len) + if (len && cp210x_setstr(port, 0x03, usbstr) == len) return 0; return -EFAULT; } @@ -845,11 +857,11 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, case IOCTL_SETSERIAL: { char usbstr[CP210x_MAX_SERIAL_STRLEN * 2 + 2]; - char* str = usbstr + sizeof(usbstr) - CP210x_MAX_SERIAL_STRLEN; + char *str = usbstr + sizeof(usbstr) - CP210x_MAX_SERIAL_STRLEN; size_t len = copy_buf_from_user(str, arg, CP210x_MAX_SERIAL_STRLEN); len = make_usb_string(usbstr, sizeof(usbstr), str, len); - if (len && cp2101_setstr(port, 0x04, usbstr) == len) + if (len && cp210x_setstr(port, 0x04, usbstr) == len) return 0; return -EFAULT; } @@ -860,7 +872,7 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, unsigned int ver; if (!copy_from_user(&ver, (unsigned int *)arg, sizeof(unsigned int)) && - !cp2101_setu16(port, 0x07, ver)) + !cp210x_setu16(port, 0x07, ver)) return 0; return -EFAULT; } @@ -875,12 +887,12 @@ static int cp2101_ioctl(struct usb_serial_port *port, struct file *file, } /* - * cp2101_get_termios + * cp210x_get_termios * Reads the baud rate, data bits, parity, stop bits and flow control mode * from the device, corrects any unsupported values, and configures the * termios structure to reflect the state of the device */ -static void cp2101_get_termios (struct usb_serial_port *port) +static void cp210x_get_termios(struct usb_serial_port *port) { unsigned int cflag, modem_ctl[4]; int baud; @@ -893,7 +905,7 @@ static void cp2101_get_termios (struct usb_serial_port *port) return; } - cp2101_get_config(port, CP2101_BAUDRATE, &baud, 2); + cp210x_get_config(port, CP2101_BAUDRATE, &baud, 2); /* Convert to baudrate */ if (baud) baud = BAUD_RATE_GEN_FREQ / baud; @@ -903,7 +915,7 @@ static void cp2101_get_termios (struct usb_serial_port *port) tty_encode_baud_rate(port->tty, baud, baud); cflag = port->tty->termios->c_cflag; - cp2101_get_config(port, CP2101_BITS, &bits, 2); + cp210x_get_config(port, CP2101_BITS, &bits, 2); cflag &= ~CSIZE; switch(bits & BITS_DATA_MASK) { case BITS_DATA_5: @@ -928,7 +940,7 @@ static void cp2101_get_termios (struct usb_serial_port *port) cflag |= CS8; bits &= ~BITS_DATA_MASK; bits |= BITS_DATA_8; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; default: dbg("%s - Unknown number of data bits, " @@ -936,7 +948,7 @@ static void cp2101_get_termios (struct usb_serial_port *port) cflag |= CS8; bits &= ~BITS_DATA_MASK; bits |= BITS_DATA_8; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; } @@ -959,21 +971,21 @@ static void cp2101_get_termios (struct usb_serial_port *port) "disabling parity)", __FUNCTION__); cflag &= ~PARENB; bits &= ~BITS_PARITY_MASK; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; case BITS_PARITY_SPACE: dbg("%s - parity = SPACE (not supported, " "disabling parity)", __FUNCTION__); cflag &= ~PARENB; bits &= ~BITS_PARITY_MASK; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; default: dbg("%s - Unknown parity mode, " "disabling parity", __FUNCTION__); cflag &= ~PARENB; bits &= ~BITS_PARITY_MASK; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; } @@ -986,7 +998,7 @@ static void cp2101_get_termios (struct usb_serial_port *port) dbg("%s - stop bits = 1.5 (not supported, " "using 1 stop bit)", __FUNCTION__); bits &= ~BITS_STOP_MASK; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; case BITS_STOP_2: dbg("%s - stop bits = 2", __FUNCTION__); @@ -996,11 +1008,11 @@ static void cp2101_get_termios (struct usb_serial_port *port) dbg("%s - Unknown number of stop bits, " "using 1 stop bit", __FUNCTION__); bits &= ~BITS_STOP_MASK; - cp2101_set_config(port, CP2101_BITS, &bits, 2); + cp210x_set_config(port, CP2101_BITS, &bits, 2); break; } - cp2101_get_config(port, CP2101_MODEMCTL, modem_ctl, 16); + cp210x_get_config(port, CP2101_MODEMCTL, modem_ctl, 16); if (modem_ctl[0] & 0x0008) { dbg("%s - flow control = CRTSCTS", __FUNCTION__); cflag |= CRTSCTS; @@ -1012,11 +1024,11 @@ static void cp2101_get_termios (struct usb_serial_port *port) port->tty->termios->c_cflag = cflag; } -static void cp2101_set_termios (struct usb_serial_port *port, +static void cp210x_set_termios(struct usb_serial_port *port, struct ktermios *old_termios) { unsigned int cflag, old_cflag; - int baud=0, bits; + int baud = 0, bits; unsigned int modem_ctl[4]; dbg("%s - port %d", __FUNCTION__, port->number); @@ -1063,7 +1075,7 @@ static void cp2101_set_termios (struct usb_serial_port *port, if (baud) { dbg("%s - Setting baud rate to %d baud", __FUNCTION__, baud); - if (cp2101_set_config_single(port, CP2101_BAUDRATE, + if (cp210x_set_config_single(port, CP2101_BAUDRATE, (BAUD_RATE_GEN_FREQ / baud))) { dev_err(&port->dev, "Baud rate requested not " "supported by device\n"); @@ -1076,7 +1088,7 @@ static void cp2101_set_termios (struct usb_serial_port *port, /* If the number of data bits is to be updated */ if ((cflag & CSIZE) != (old_cflag & CSIZE)) { - cp2101_get_config(port, CP2101_BITS, &bits, 2); + cp210x_get_config(port, CP2101_BITS, &bits, 2); bits &= ~BITS_DATA_MASK; switch (cflag & CSIZE) { case CS5: @@ -1106,13 +1118,13 @@ static void cp2101_set_termios (struct usb_serial_port *port, bits |= BITS_DATA_8; break; } - if (cp2101_set_config(port, CP2101_BITS, &bits, 2)) + if (cp210x_set_config(port, CP2101_BITS, &bits, 2)) dev_err(&port->dev, "Number of data bits requested " "not supported by device\n"); } if ((cflag & (PARENB|PARODD)) != (old_cflag & (PARENB|PARODD))) { - cp2101_get_config(port, CP2101_BITS, &bits, 2); + cp210x_get_config(port, CP2101_BITS, &bits, 2); bits &= ~BITS_PARITY_MASK; if (cflag & PARENB) { if (cflag & PARODD) { @@ -1123,13 +1135,13 @@ static void cp2101_set_termios (struct usb_serial_port *port, dbg("%s - parity = EVEN", __FUNCTION__); } } - if (cp2101_set_config(port, CP2101_BITS, &bits, 2)) + if (cp210x_set_config(port, CP2101_BITS, &bits, 2)) dev_err(&port->dev, "Parity mode not supported " "by device\n"); } if ((cflag & CSTOPB) != (old_cflag & CSTOPB)) { - cp2101_get_config(port, CP2101_BITS, &bits, 2); + cp210x_get_config(port, CP2101_BITS, &bits, 2); bits &= ~BITS_STOP_MASK; if (cflag & CSTOPB) { bits |= BITS_STOP_2; @@ -1138,13 +1150,13 @@ static void cp2101_set_termios (struct usb_serial_port *port, bits |= BITS_STOP_1; dbg("%s - stop bits = 1", __FUNCTION__); } - if (cp2101_set_config(port, CP2101_BITS, &bits, 2)) + if (cp210x_set_config(port, CP2101_BITS, &bits, 2)) dev_err(&port->dev, "Number of stop bits requested " "not supported by device\n"); } if ((cflag & CRTSCTS) != (old_cflag & CRTSCTS)) { - cp2101_get_config(port, CP2101_MODEMCTL, modem_ctl, 16); + cp210x_get_config(port, CP2101_MODEMCTL, modem_ctl, 16); dbg("%s - read modem controls = 0x%.4x 0x%.4x 0x%.4x 0x%.4x", __FUNCTION__, modem_ctl[0], modem_ctl[1], modem_ctl[2], modem_ctl[3]); @@ -1164,12 +1176,12 @@ static void cp2101_set_termios (struct usb_serial_port *port, dbg("%s - write modem controls = 0x%.4x 0x%.4x 0x%.4x 0x%.4x", __FUNCTION__, modem_ctl[0], modem_ctl[1], modem_ctl[2], modem_ctl[3]); - cp2101_set_config(port, CP2101_MODEMCTL, modem_ctl, 16); + cp210x_set_config(port, CP2101_MODEMCTL, modem_ctl, 16); } } -static int cp2101_tiocmset (struct usb_serial_port *port, struct file *file, +static int cp210x_tiocmset(struct usb_serial_port *port, struct file *file, unsigned int set, unsigned int clear) { int control = 0; @@ -1195,17 +1207,17 @@ static int cp2101_tiocmset (struct usb_serial_port *port, struct file *file, dbg("%s - control = 0x%.4x", __FUNCTION__, control); - return cp2101_set_config(port, CP2101_CONTROL, &control, 2); + return cp210x_set_config(port, CP2101_CONTROL, &control, 2); } -static int cp2101_tiocmget (struct usb_serial_port *port, struct file *file) +static int cp210x_tiocmget(struct usb_serial_port *port, struct file *file) { int control, result; dbg("%s - port %d", __FUNCTION__, port->number); - cp2101_get_config(port, CP2101_CONTROL, &control, 1); + cp210x_get_config(port, CP2101_CONTROL, &control, 1); result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0) |((control & CONTROL_RTS) ? TIOCM_RTS : 0) @@ -1219,7 +1231,7 @@ static int cp2101_tiocmget (struct usb_serial_port *port, struct file *file) return result; } -static void cp2101_break_ctl (struct usb_serial_port *port, int break_state) +static void cp210x_break_ctl(struct usb_serial_port *port, int break_state) { int state; @@ -1230,40 +1242,40 @@ static void cp2101_break_ctl (struct usb_serial_port *port, int break_state) state = BREAK_ON; dbg("%s - turning break %s", __FUNCTION__, state==BREAK_OFF ? "off" : "on"); - cp2101_set_config(port, CP2101_BREAK, &state, 2); + cp210x_set_config(port, CP2101_BREAK, &state, 2); } -static int cp2101_startup (struct usb_serial *serial) +static int cp210x_startup(struct usb_serial *serial) { /* CP2101 buffers behave strangely unless device is reset */ usb_reset_device(serial->dev); return 0; } -static void cp2101_shutdown (struct usb_serial *serial) +static void cp210x_shutdown(struct usb_serial *serial) { int i; dbg("%s", __FUNCTION__); /* Stop reads and writes on all ports */ - for (i=0; i < serial->num_ports; ++i) { - cp2101_cleanup(serial->port[i]); + for (i = 0; i < serial->num_ports; ++i) { + cp210x_cleanup(serial->port[i]); } } -static int __init cp2101_init (void) +static int __init cp210x_init(void) { int retval; - retval = usb_serial_register(&cp2101_device); + retval = usb_serial_register(&cp210x_device); if (retval) return retval; /* Failed to register */ - retval = usb_register(&cp2101_driver); + retval = usb_register(&cp210x_driver); if (retval) { /* Failed to register */ - usb_serial_deregister(&cp2101_device); + usb_serial_deregister(&cp210x_device); return retval; } @@ -1272,14 +1284,14 @@ static int __init cp2101_init (void) return 0; } -static void __exit cp2101_exit (void) +static void __exit cp210x_exit(void) { - usb_deregister (&cp2101_driver); - usb_serial_deregister (&cp2101_device); + usb_deregister(&cp210x_driver); + usb_serial_deregister(&cp210x_device); } -module_init(cp2101_init); -module_exit(cp2101_exit); +module_init(cp210x_init); +module_exit(cp210x_exit); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_VERSION(DRIVER_VERSION); -- 2.39.2