Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

Linux/drivers/usb/serial/cp210x.c

  1 /*
  2  * Silicon Laboratories CP210x USB to RS232 serial adaptor driver
  3  *
  4  * Copyright (C) 2005 Craig Shelley (craig@microtron.org.uk)
  5  *
  6  *      This program is free software; you can redistribute it and/or
  7  *      modify it under the terms of the GNU General Public License version
  8  *      2 as published by the Free Software Foundation.
  9  *
 10  * Support to set flow control line levels using TIOCMGET and TIOCMSET
 11  * thanks to Karl Hiramoto karl@hiramoto.org. RTSCTS hardware flow
 12  * control thanks to Munir Nassar nassarmu@real-time.com
 13  *
 14  */
 15 
 16 #include <linux/kernel.h>
 17 #include <linux/errno.h>
 18 #include <linux/slab.h>
 19 #include <linux/tty.h>
 20 #include <linux/tty_flip.h>
 21 #include <linux/module.h>
 22 #include <linux/moduleparam.h>
 23 #include <linux/usb.h>
 24 #include <linux/uaccess.h>
 25 #include <linux/usb/serial.h>
 26 #include <linux/gpio/driver.h>
 27 #include <linux/bitops.h>
 28 #include <linux/mutex.h>
 29 
 30 #define DRIVER_DESC "Silicon Labs CP210x RS232 serial adaptor driver"
 31 
 32 /*
 33  * Function Prototypes
 34  */
 35 static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *);
 36 static void cp210x_close(struct usb_serial_port *);
 37 static void cp210x_get_termios(struct tty_struct *, struct usb_serial_port *);
 38 static void cp210x_get_termios_port(struct usb_serial_port *port,
 39         tcflag_t *cflagp, unsigned int *baudp);
 40 static void cp210x_change_speed(struct tty_struct *, struct usb_serial_port *,
 41                                                         struct ktermios *);
 42 static void cp210x_set_termios(struct tty_struct *, struct usb_serial_port *,
 43                                                         struct ktermios*);
 44 static bool cp210x_tx_empty(struct usb_serial_port *port);
 45 static int cp210x_tiocmget(struct tty_struct *);
 46 static int cp210x_tiocmset(struct tty_struct *, unsigned int, unsigned int);
 47 static int cp210x_tiocmset_port(struct usb_serial_port *port,
 48                 unsigned int, unsigned int);
 49 static void cp210x_break_ctl(struct tty_struct *, int);
 50 static int cp210x_attach(struct usb_serial *);
 51 static void cp210x_disconnect(struct usb_serial *);
 52 static void cp210x_release(struct usb_serial *);
 53 static int cp210x_port_probe(struct usb_serial_port *);
 54 static int cp210x_port_remove(struct usb_serial_port *);
 55 static void cp210x_dtr_rts(struct usb_serial_port *p, int on);
 56 
 57 static const struct usb_device_id id_table[] = {
 58         { USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */
 59         { USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */
 60         { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
 61         { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
 62         { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
 63         { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */
 64         { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
 65         { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
 66         { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */
 67         { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
 68         { USB_DEVICE(0x0BED, 0x1101) }, /* MEI series 2000 Combo Acceptor */
 69         { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */
 70         { USB_DEVICE(0x0FCF, 0x1004) }, /* Dynastream ANT2USB */
 71         { USB_DEVICE(0x0FCF, 0x1006) }, /* Dynastream ANT development board */
 72         { USB_DEVICE(0x0FDE, 0xCA05) }, /* OWL Wireless Electricity Monitor CM-160 */
 73         { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */
 74         { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
 75         { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
 76         { USB_DEVICE(0x10C4, 0x0F91) }, /* Vstabi */
 77         { USB_DEVICE(0x10C4, 0x1101) }, /* Arkham Technology DS101 Bus Monitor */
 78         { USB_DEVICE(0x10C4, 0x1601) }, /* Arkham Technology DS101 Adapter */
 79         { USB_DEVICE(0x10C4, 0x800A) }, /* SPORTident BSM7-D-USB main station */
 80         { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */
 81         { USB_DEVICE(0x10C4, 0x8044) }, /* Cygnal Debug Adapter */
 82         { USB_DEVICE(0x10C4, 0x804E) }, /* Software Bisque Paramount ME build-in converter */
 83         { USB_DEVICE(0x10C4, 0x8053) }, /* Enfora EDG1228 */
 84         { USB_DEVICE(0x10C4, 0x8054) }, /* Enfora GSM2228 */
 85         { USB_DEVICE(0x10C4, 0x8066) }, /* Argussoft In-System Programmer */
 86         { USB_DEVICE(0x10C4, 0x806F) }, /* IMS USB to RS422 Converter Cable */
 87         { USB_DEVICE(0x10C4, 0x807A) }, /* Crumb128 board */
 88         { USB_DEVICE(0x10C4, 0x80C4) }, /* Cygnal Integrated Products, Inc., Optris infrared thermometer */
 89         { USB_DEVICE(0x10C4, 0x80CA) }, /* Degree Controls Inc */
 90         { USB_DEVICE(0x10C4, 0x80DD) }, /* Tracient RFID */
 91         { USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
 92         { USB_DEVICE(0x10C4, 0x8115) }, /* Arygon NFC/Mifare Reader */
 93         { USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */
 94         { USB_DEVICE(0x10C4, 0x813F) }, /* Tams Master Easy Control */
 95         { USB_DEVICE(0x10C4, 0x814A) }, /* West Mountain Radio RIGblaster P&P */
 96         { USB_DEVICE(0x10C4, 0x814B) }, /* West Mountain Radio RIGtalk */
 97         { USB_DEVICE(0x2405, 0x0003) }, /* West Mountain Radio RIGblaster Advantage */
 98         { USB_DEVICE(0x10C4, 0x8156) }, /* B&G H3000 link cable */
 99         { USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
100         { USB_DEVICE(0x10C4, 0x815F) }, /* Timewave HamLinkUSB */
101         { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */
102         { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
103         { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
104         { USB_DEVICE(0x10C4, 0x81A9) }, /* Multiplex RC Interface */
105         { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */
106         { USB_DEVICE(0x10C4, 0x81AD) }, /* INSYS USB Modem */
107         { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
108         { USB_DEVICE(0x10C4, 0x81D7) }, /* IAI Corp. RCB-CV-USB USB to RS485 Adaptor */
109         { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */
110         { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */
111         { USB_DEVICE(0x10C4, 0x81E8) }, /* Zephyr Bioharness */
112         { USB_DEVICE(0x10C4, 0x81F2) }, /* C1007 HF band RFID controller */
113         { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
114         { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */
115         { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
116         { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
117         { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
118         { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
119         { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
120         { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
121         { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
122         { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */
123         { USB_DEVICE(0x10C4, 0x83D8) }, /* DekTec DTA Plus VHF/UHF Booster/Attenuator */
124         { USB_DEVICE(0x10C4, 0x8411) }, /* Kyocera GPS Module */
125         { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
126         { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
127         { USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */
128         { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
129         { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
130         { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
131         { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
132         { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
133         { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
134         { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
135         { USB_DEVICE(0x10C4, 0x8856) }, /* CEL EM357 ZigBee USB Stick - LR */
136         { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */
137         { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
138         { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
139         { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
140         { USB_DEVICE(0x10C4, 0x8962) }, /* Brim Brothers charging dock */
141         { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
142         { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
143         { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
144         { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
145         { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
146         { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
147         { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */
148         { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */
149         { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */
150         { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */
151         { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
152         { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
153         { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
154         { USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */
155         { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
156         { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
157         { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
158         { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
159         { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */
160         { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
161         { USB_DEVICE(0x166A, 0x0304) }, /* Clipsal 5000CT2 C-Bus Black and White Touchscreen */
162         { USB_DEVICE(0x166A, 0x0305) }, /* Clipsal C-5000CT2 C-Bus Spectrum Colour Touchscreen */
163         { USB_DEVICE(0x166A, 0x0401) }, /* Clipsal L51xx C-Bus Architectural Dimmer */
164         { USB_DEVICE(0x166A, 0x0101) }, /* Clipsal 5560884 C-Bus Multi-room Audio Matrix Switcher */
165         { USB_DEVICE(0x16C0, 0x09B0) }, /* Lunatico Seletek */
166         { USB_DEVICE(0x16C0, 0x09B1) }, /* Lunatico Seletek */
167         { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
168         { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */
169         { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
170         { USB_DEVICE(0x16DC, 0x0012) }, /* W-IE-NE-R Plein & Baus GmbH MPOD Multi Channel Power Supply */
171         { USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
172         { USB_DEVICE(0x17A8, 0x0001) }, /* Kamstrup Optical Eye/3-wire */
173         { USB_DEVICE(0x17A8, 0x0005) }, /* Kamstrup M-Bus Master MultiPort 250D */
174         { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
175         { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
176         { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
177         { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */
178         { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */
179         { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */
180         { USB_DEVICE(0x1901, 0x0194) }, /* GE Healthcare Remote Alarm Box */
181         { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */
182         { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
183         { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
184         { USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */
185         { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
186         { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */
187         { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
188         { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
189         { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */
190         { USB_DEVICE(0x1FB9, 0x0200) }, /* Lake Shore Model 218A Temperature Monitor */
191         { USB_DEVICE(0x1FB9, 0x0201) }, /* Lake Shore Model 219 Temperature Monitor */
192         { USB_DEVICE(0x1FB9, 0x0202) }, /* Lake Shore Model 233 Temperature Transmitter */
193         { USB_DEVICE(0x1FB9, 0x0203) }, /* Lake Shore Model 235 Temperature Transmitter */
194         { USB_DEVICE(0x1FB9, 0x0300) }, /* Lake Shore Model 335 Temperature Controller */
195         { USB_DEVICE(0x1FB9, 0x0301) }, /* Lake Shore Model 336 Temperature Controller */
196         { USB_DEVICE(0x1FB9, 0x0302) }, /* Lake Shore Model 350 Temperature Controller */
197         { USB_DEVICE(0x1FB9, 0x0303) }, /* Lake Shore Model 371 AC Bridge */
198         { USB_DEVICE(0x1FB9, 0x0400) }, /* Lake Shore Model 411 Handheld Gaussmeter */
199         { USB_DEVICE(0x1FB9, 0x0401) }, /* Lake Shore Model 425 Gaussmeter */
200         { USB_DEVICE(0x1FB9, 0x0402) }, /* Lake Shore Model 455A Gaussmeter */
201         { USB_DEVICE(0x1FB9, 0x0403) }, /* Lake Shore Model 475A Gaussmeter */
202         { USB_DEVICE(0x1FB9, 0x0404) }, /* Lake Shore Model 465 Three Axis Gaussmeter */
203         { USB_DEVICE(0x1FB9, 0x0600) }, /* Lake Shore Model 625A Superconducting MPS */
204         { USB_DEVICE(0x1FB9, 0x0601) }, /* Lake Shore Model 642A Magnet Power Supply */
205         { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */
206         { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */
207         { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */
208         { USB_DEVICE(0x2626, 0xEA60) }, /* Aruba Networks 7xxx USB Serial Console */
209         { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
210         { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
211         { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
212         { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
213         { } /* Terminating Entry */
214 };
215 
216 MODULE_DEVICE_TABLE(usb, id_table);
217 
218 struct cp210x_serial_private {
219 #ifdef CONFIG_GPIOLIB
220         struct gpio_chip        gc;
221         u8                      config;
222         u8                      gpio_mode;
223         bool                    gpio_registered;
224 #endif
225         u8                      partnum;
226 };
227 
228 struct cp210x_port_private {
229         __u8                    bInterfaceNumber;
230         bool                    has_swapped_line_ctl;
231 };
232 
233 static struct usb_serial_driver cp210x_device = {
234         .driver = {
235                 .owner =        THIS_MODULE,
236                 .name =         "cp210x",
237         },
238         .id_table               = id_table,
239         .num_ports              = 1,
240         .bulk_in_size           = 256,
241         .bulk_out_size          = 256,
242         .open                   = cp210x_open,
243         .close                  = cp210x_close,
244         .break_ctl              = cp210x_break_ctl,
245         .set_termios            = cp210x_set_termios,
246         .tx_empty               = cp210x_tx_empty,
247         .tiocmget               = cp210x_tiocmget,
248         .tiocmset               = cp210x_tiocmset,
249         .attach                 = cp210x_attach,
250         .disconnect             = cp210x_disconnect,
251         .release                = cp210x_release,
252         .port_probe             = cp210x_port_probe,
253         .port_remove            = cp210x_port_remove,
254         .dtr_rts                = cp210x_dtr_rts
255 };
256 
257 static struct usb_serial_driver * const serial_drivers[] = {
258         &cp210x_device, NULL
259 };
260 
261 /* Config request types */
262 #define REQTYPE_HOST_TO_INTERFACE       0x41
263 #define REQTYPE_INTERFACE_TO_HOST       0xc1
264 #define REQTYPE_HOST_TO_DEVICE  0x40
265 #define REQTYPE_DEVICE_TO_HOST  0xc0
266 
267 /* Config request codes */
268 #define CP210X_IFC_ENABLE       0x00
269 #define CP210X_SET_BAUDDIV      0x01
270 #define CP210X_GET_BAUDDIV      0x02
271 #define CP210X_SET_LINE_CTL     0x03
272 #define CP210X_GET_LINE_CTL     0x04
273 #define CP210X_SET_BREAK        0x05
274 #define CP210X_IMM_CHAR         0x06
275 #define CP210X_SET_MHS          0x07
276 #define CP210X_GET_MDMSTS       0x08
277 #define CP210X_SET_XON          0x09
278 #define CP210X_SET_XOFF         0x0A
279 #define CP210X_SET_EVENTMASK    0x0B
280 #define CP210X_GET_EVENTMASK    0x0C
281 #define CP210X_SET_CHAR         0x0D
282 #define CP210X_GET_CHARS        0x0E
283 #define CP210X_GET_PROPS        0x0F
284 #define CP210X_GET_COMM_STATUS  0x10
285 #define CP210X_RESET            0x11
286 #define CP210X_PURGE            0x12
287 #define CP210X_SET_FLOW         0x13
288 #define CP210X_GET_FLOW         0x14
289 #define CP210X_EMBED_EVENTS     0x15
290 #define CP210X_GET_EVENTSTATE   0x16
291 #define CP210X_SET_CHARS        0x19
292 #define CP210X_GET_BAUDRATE     0x1D
293 #define CP210X_SET_BAUDRATE     0x1E
294 #define CP210X_VENDOR_SPECIFIC  0xFF
295 
296 /* CP210X_IFC_ENABLE */
297 #define UART_ENABLE             0x0001
298 #define UART_DISABLE            0x0000
299 
300 /* CP210X_(SET|GET)_BAUDDIV */
301 #define BAUD_RATE_GEN_FREQ      0x384000
302 
303 /* CP210X_(SET|GET)_LINE_CTL */
304 #define BITS_DATA_MASK          0X0f00
305 #define BITS_DATA_5             0X0500
306 #define BITS_DATA_6             0X0600
307 #define BITS_DATA_7             0X0700
308 #define BITS_DATA_8             0X0800
309 #define BITS_DATA_9             0X0900
310 
311 #define BITS_PARITY_MASK        0x00f0
312 #define BITS_PARITY_NONE        0x0000
313 #define BITS_PARITY_ODD         0x0010
314 #define BITS_PARITY_EVEN        0x0020
315 #define BITS_PARITY_MARK        0x0030
316 #define BITS_PARITY_SPACE       0x0040
317 
318 #define BITS_STOP_MASK          0x000f
319 #define BITS_STOP_1             0x0000
320 #define BITS_STOP_1_5           0x0001
321 #define BITS_STOP_2             0x0002
322 
323 /* CP210X_SET_BREAK */
324 #define BREAK_ON                0x0001
325 #define BREAK_OFF               0x0000
326 
327 /* CP210X_(SET_MHS|GET_MDMSTS) */
328 #define CONTROL_DTR             0x0001
329 #define CONTROL_RTS             0x0002
330 #define CONTROL_CTS             0x0010
331 #define CONTROL_DSR             0x0020
332 #define CONTROL_RING            0x0040
333 #define CONTROL_DCD             0x0080
334 #define CONTROL_WRITE_DTR       0x0100
335 #define CONTROL_WRITE_RTS       0x0200
336 
337 /* CP210X_VENDOR_SPECIFIC values */
338 #define CP210X_READ_LATCH       0x00C2
339 #define CP210X_GET_PARTNUM      0x370B
340 #define CP210X_GET_PORTCONFIG   0x370C
341 #define CP210X_GET_DEVICEMODE   0x3711
342 #define CP210X_WRITE_LATCH      0x37E1
343 
344 /* Part number definitions */
345 #define CP210X_PARTNUM_CP2101   0x01
346 #define CP210X_PARTNUM_CP2102   0x02
347 #define CP210X_PARTNUM_CP2103   0x03
348 #define CP210X_PARTNUM_CP2104   0x04
349 #define CP210X_PARTNUM_CP2105   0x05
350 #define CP210X_PARTNUM_CP2108   0x08
351 
352 /* CP210X_GET_COMM_STATUS returns these 0x13 bytes */
353 struct cp210x_comm_status {
354         __le32   ulErrors;
355         __le32   ulHoldReasons;
356         __le32   ulAmountInInQueue;
357         __le32   ulAmountInOutQueue;
358         u8       bEofReceived;
359         u8       bWaitForImmediate;
360         u8       bReserved;
361 } __packed;
362 
363 /*
364  * CP210X_PURGE - 16 bits passed in wValue of USB request.
365  * SiLabs app note AN571 gives a strange description of the 4 bits:
366  * bit 0 or bit 2 clears the transmit queue and 1 or 3 receive.
367  * writing 1 to all, however, purges cp2108 well enough to avoid the hang.
368  */
369 #define PURGE_ALL               0x000f
370 
371 /* CP210X_GET_FLOW/CP210X_SET_FLOW read/write these 0x10 bytes */
372 struct cp210x_flow_ctl {
373         __le32  ulControlHandshake;
374         __le32  ulFlowReplace;
375         __le32  ulXonLimit;
376         __le32  ulXoffLimit;
377 } __packed;
378 
379 /* cp210x_flow_ctl::ulControlHandshake */
380 #define CP210X_SERIAL_DTR_MASK          GENMASK(1, 0)
381 #define CP210X_SERIAL_DTR_SHIFT(_mode)  (_mode)
382 #define CP210X_SERIAL_CTS_HANDSHAKE     BIT(3)
383 #define CP210X_SERIAL_DSR_HANDSHAKE     BIT(4)
384 #define CP210X_SERIAL_DCD_HANDSHAKE     BIT(5)
385 #define CP210X_SERIAL_DSR_SENSITIVITY   BIT(6)
386 
387 /* values for cp210x_flow_ctl::ulControlHandshake::CP210X_SERIAL_DTR_MASK */
388 #define CP210X_SERIAL_DTR_INACTIVE      0
389 #define CP210X_SERIAL_DTR_ACTIVE        1
390 #define CP210X_SERIAL_DTR_FLOW_CTL      2
391 
392 /* cp210x_flow_ctl::ulFlowReplace */
393 #define CP210X_SERIAL_AUTO_TRANSMIT     BIT(0)
394 #define CP210X_SERIAL_AUTO_RECEIVE      BIT(1)
395 #define CP210X_SERIAL_ERROR_CHAR        BIT(2)
396 #define CP210X_SERIAL_NULL_STRIPPING    BIT(3)
397 #define CP210X_SERIAL_BREAK_CHAR        BIT(4)
398 #define CP210X_SERIAL_RTS_MASK          GENMASK(7, 6)
399 #define CP210X_SERIAL_RTS_SHIFT(_mode)  (_mode << 6)
400 #define CP210X_SERIAL_XOFF_CONTINUE     BIT(31)
401 
402 /* values for cp210x_flow_ctl::ulFlowReplace::CP210X_SERIAL_RTS_MASK */
403 #define CP210X_SERIAL_RTS_INACTIVE      0
404 #define CP210X_SERIAL_RTS_ACTIVE        1
405 #define CP210X_SERIAL_RTS_FLOW_CTL      2
406 
407 /* CP210X_VENDOR_SPECIFIC, CP210X_GET_DEVICEMODE call reads these 0x2 bytes. */
408 struct cp210x_pin_mode {
409         u8      eci;
410         u8      sci;
411 } __packed;
412 
413 #define CP210X_PIN_MODE_MODEM           0
414 #define CP210X_PIN_MODE_GPIO            BIT(0)
415 
416 /*
417  * CP210X_VENDOR_SPECIFIC, CP210X_GET_PORTCONFIG call reads these 0xf bytes.
418  * Structure needs padding due to unused/unspecified bytes.
419  */
420 struct cp210x_config {
421         __le16  gpio_mode;
422         u8      __pad0[2];
423         __le16  reset_state;
424         u8      __pad1[4];
425         __le16  suspend_state;
426         u8      sci_cfg;
427         u8      eci_cfg;
428         u8      device_cfg;
429 } __packed;
430 
431 /* GPIO modes */
432 #define CP210X_SCI_GPIO_MODE_OFFSET     9
433 #define CP210X_SCI_GPIO_MODE_MASK       GENMASK(11, 9)
434 
435 #define CP210X_ECI_GPIO_MODE_OFFSET     2
436 #define CP210X_ECI_GPIO_MODE_MASK       GENMASK(3, 2)
437 
438 /* CP2105 port configuration values */
439 #define CP2105_GPIO0_TXLED_MODE         BIT(0)
440 #define CP2105_GPIO1_RXLED_MODE         BIT(1)
441 #define CP2105_GPIO1_RS485_MODE         BIT(2)
442 
443 /* CP210X_VENDOR_SPECIFIC, CP210X_WRITE_LATCH call writes these 0x2 bytes. */
444 struct cp210x_gpio_write {
445         u8      mask;
446         u8      state;
447 } __packed;
448 
449 /*
450  * Helper to get interface number when we only have struct usb_serial.
451  */
452 static u8 cp210x_interface_num(struct usb_serial *serial)
453 {
454         struct usb_host_interface *cur_altsetting;
455 
456         cur_altsetting = serial->interface->cur_altsetting;
457 
458         return cur_altsetting->desc.bInterfaceNumber;
459 }
460 
461 /*
462  * Reads a variable-sized block of CP210X_ registers, identified by req.
463  * Returns data into buf in native USB byte order.
464  */
465 static int cp210x_read_reg_block(struct usb_serial_port *port, u8 req,
466                 void *buf, int bufsize)
467 {
468         struct usb_serial *serial = port->serial;
469         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
470         void *dmabuf;
471         int result;
472 
473         dmabuf = kmalloc(bufsize, GFP_KERNEL);
474         if (!dmabuf) {
475                 /*
476                  * FIXME Some callers don't bother to check for error,
477                  * at least give them consistent junk until they are fixed
478                  */
479                 memset(buf, 0, bufsize);
480                 return -ENOMEM;
481         }
482 
483         result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
484                         req, REQTYPE_INTERFACE_TO_HOST, 0,
485                         port_priv->bInterfaceNumber, dmabuf, bufsize,
486                         USB_CTRL_SET_TIMEOUT);
487         if (result == bufsize) {
488                 memcpy(buf, dmabuf, bufsize);
489                 result = 0;
490         } else {
491                 dev_err(&port->dev, "failed get req 0x%x size %d status: %d\n",
492                                 req, bufsize, result);
493                 if (result >= 0)
494                         result = -EIO;
495 
496                 /*
497                  * FIXME Some callers don't bother to check for error,
498                  * at least give them consistent junk until they are fixed
499                  */
500                 memset(buf, 0, bufsize);
501         }
502 
503         kfree(dmabuf);
504 
505         return result;
506 }
507 
508 /*
509  * Reads any 32-bit CP210X_ register identified by req.
510  */
511 static int cp210x_read_u32_reg(struct usb_serial_port *port, u8 req, u32 *val)
512 {
513         __le32 le32_val;
514         int err;
515 
516         err = cp210x_read_reg_block(port, req, &le32_val, sizeof(le32_val));
517         if (err) {
518                 /*
519                  * FIXME Some callers don't bother to check for error,
520                  * at least give them consistent junk until they are fixed
521                  */
522                 *val = 0;
523                 return err;
524         }
525 
526         *val = le32_to_cpu(le32_val);
527 
528         return 0;
529 }
530 
531 /*
532  * Reads any 16-bit CP210X_ register identified by req.
533  */
534 static int cp210x_read_u16_reg(struct usb_serial_port *port, u8 req, u16 *val)
535 {
536         __le16 le16_val;
537         int err;
538 
539         err = cp210x_read_reg_block(port, req, &le16_val, sizeof(le16_val));
540         if (err)
541                 return err;
542 
543         *val = le16_to_cpu(le16_val);
544 
545         return 0;
546 }
547 
548 /*
549  * Reads any 8-bit CP210X_ register identified by req.
550  */
551 static int cp210x_read_u8_reg(struct usb_serial_port *port, u8 req, u8 *val)
552 {
553         return cp210x_read_reg_block(port, req, val, sizeof(*val));
554 }
555 
556 /*
557  * Reads a variable-sized vendor block of CP210X_ registers, identified by val.
558  * Returns data into buf in native USB byte order.
559  */
560 static int cp210x_read_vendor_block(struct usb_serial *serial, u8 type, u16 val,
561                                     void *buf, int bufsize)
562 {
563         void *dmabuf;
564         int result;
565 
566         dmabuf = kmalloc(bufsize, GFP_KERNEL);
567         if (!dmabuf)
568                 return -ENOMEM;
569 
570         result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
571                                  CP210X_VENDOR_SPECIFIC, type, val,
572                                  cp210x_interface_num(serial), dmabuf, bufsize,
573                                  USB_CTRL_GET_TIMEOUT);
574         if (result == bufsize) {
575                 memcpy(buf, dmabuf, bufsize);
576                 result = 0;
577         } else {
578                 dev_err(&serial->interface->dev,
579                         "failed to get vendor val 0x%04x size %d: %d\n", val,
580                         bufsize, result);
581                 if (result >= 0)
582                         result = -EIO;
583         }
584 
585         kfree(dmabuf);
586 
587         return result;
588 }
589 
590 /*
591  * Writes any 16-bit CP210X_ register (req) whose value is passed
592  * entirely in the wValue field of the USB request.
593  */
594 static int cp210x_write_u16_reg(struct usb_serial_port *port, u8 req, u16 val)
595 {
596         struct usb_serial *serial = port->serial;
597         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
598         int result;
599 
600         result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
601                         req, REQTYPE_HOST_TO_INTERFACE, val,
602                         port_priv->bInterfaceNumber, NULL, 0,
603                         USB_CTRL_SET_TIMEOUT);
604         if (result < 0) {
605                 dev_err(&port->dev, "failed set request 0x%x status: %d\n",
606                                 req, result);
607         }
608 
609         return result;
610 }
611 
612 /*
613  * Writes a variable-sized block of CP210X_ registers, identified by req.
614  * Data in buf must be in native USB byte order.
615  */
616 static int cp210x_write_reg_block(struct usb_serial_port *port, u8 req,
617                 void *buf, int bufsize)
618 {
619         struct usb_serial *serial = port->serial;
620         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
621         void *dmabuf;
622         int result;
623 
624         dmabuf = kmemdup(buf, bufsize, GFP_KERNEL);
625         if (!dmabuf)
626                 return -ENOMEM;
627 
628         result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
629                         req, REQTYPE_HOST_TO_INTERFACE, 0,
630                         port_priv->bInterfaceNumber, dmabuf, bufsize,
631                         USB_CTRL_SET_TIMEOUT);
632 
633         kfree(dmabuf);
634 
635         if (result == bufsize) {
636                 result = 0;
637         } else {
638                 dev_err(&port->dev, "failed set req 0x%x size %d status: %d\n",
639                                 req, bufsize, result);
640                 if (result >= 0)
641                         result = -EIO;
642         }
643 
644         return result;
645 }
646 
647 /*
648  * Writes any 32-bit CP210X_ register identified by req.
649  */
650 static int cp210x_write_u32_reg(struct usb_serial_port *port, u8 req, u32 val)
651 {
652         __le32 le32_val;
653 
654         le32_val = cpu_to_le32(val);
655 
656         return cp210x_write_reg_block(port, req, &le32_val, sizeof(le32_val));
657 }
658 
659 #ifdef CONFIG_GPIOLIB
660 /*
661  * Writes a variable-sized vendor block of CP210X_ registers, identified by val.
662  * Data in buf must be in native USB byte order.
663  */
664 static int cp210x_write_vendor_block(struct usb_serial *serial, u8 type,
665                                      u16 val, void *buf, int bufsize)
666 {
667         void *dmabuf;
668         int result;
669 
670         dmabuf = kmemdup(buf, bufsize, GFP_KERNEL);
671         if (!dmabuf)
672                 return -ENOMEM;
673 
674         result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
675                                  CP210X_VENDOR_SPECIFIC, type, val,
676                                  cp210x_interface_num(serial), dmabuf, bufsize,
677                                  USB_CTRL_SET_TIMEOUT);
678 
679         kfree(dmabuf);
680 
681         if (result == bufsize) {
682                 result = 0;
683         } else {
684                 dev_err(&serial->interface->dev,
685                         "failed to set vendor val 0x%04x size %d: %d\n", val,
686                         bufsize, result);
687                 if (result >= 0)
688                         result = -EIO;
689         }
690 
691         return result;
692 }
693 #endif
694 
695 /*
696  * Detect CP2108 GET_LINE_CTL bug and activate workaround.
697  * Write a known good value 0x800, read it back.
698  * If it comes back swapped the bug is detected.
699  * Preserve the original register value.
700  */
701 static int cp210x_detect_swapped_line_ctl(struct usb_serial_port *port)
702 {
703         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
704         u16 line_ctl_save;
705         u16 line_ctl_test;
706         int err;
707 
708         err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, &line_ctl_save);
709         if (err)
710                 return err;
711 
712         err = cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, 0x800);
713         if (err)
714                 return err;
715 
716         err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, &line_ctl_test);
717         if (err)
718                 return err;
719 
720         if (line_ctl_test == 8) {
721                 port_priv->has_swapped_line_ctl = true;
722                 line_ctl_save = swab16(line_ctl_save);
723         }
724 
725         return cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, line_ctl_save);
726 }
727 
728 /*
729  * Must always be called instead of cp210x_read_u16_reg(CP210X_GET_LINE_CTL)
730  * to workaround cp2108 bug and get correct value.
731  */
732 static int cp210x_get_line_ctl(struct usb_serial_port *port, u16 *ctl)
733 {
734         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
735         int err;
736 
737         err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, ctl);
738         if (err)
739                 return err;
740 
741         /* Workaround swapped bytes in 16-bit value from CP210X_GET_LINE_CTL */
742         if (port_priv->has_swapped_line_ctl)
743                 *ctl = swab16(*ctl);
744 
745         return 0;
746 }
747 
748 /*
749  * cp210x_quantise_baudrate
750  * Quantises the baud rate as per AN205 Table 1
751  */
752 static unsigned int cp210x_quantise_baudrate(unsigned int baud)
753 {
754         if (baud <= 300)
755                 baud = 300;
756         else if (baud <= 600)      baud = 600;
757         else if (baud <= 1200)     baud = 1200;
758         else if (baud <= 1800)     baud = 1800;
759         else if (baud <= 2400)     baud = 2400;
760         else if (baud <= 4000)     baud = 4000;
761         else if (baud <= 4803)     baud = 4800;
762         else if (baud <= 7207)     baud = 7200;
763         else if (baud <= 9612)     baud = 9600;
764         else if (baud <= 14428)    baud = 14400;
765         else if (baud <= 16062)    baud = 16000;
766         else if (baud <= 19250)    baud = 19200;
767         else if (baud <= 28912)    baud = 28800;
768         else if (baud <= 38601)    baud = 38400;
769         else if (baud <= 51558)    baud = 51200;
770         else if (baud <= 56280)    baud = 56000;
771         else if (baud <= 58053)    baud = 57600;
772         else if (baud <= 64111)    baud = 64000;
773         else if (baud <= 77608)    baud = 76800;
774         else if (baud <= 117028)   baud = 115200;
775         else if (baud <= 129347)   baud = 128000;
776         else if (baud <= 156868)   baud = 153600;
777         else if (baud <= 237832)   baud = 230400;
778         else if (baud <= 254234)   baud = 250000;
779         else if (baud <= 273066)   baud = 256000;
780         else if (baud <= 491520)   baud = 460800;
781         else if (baud <= 567138)   baud = 500000;
782         else if (baud <= 670254)   baud = 576000;
783         else if (baud < 1000000)
784                 baud = 921600;
785         else if (baud > 2000000)
786                 baud = 2000000;
787         return baud;
788 }
789 
790 static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
791 {
792         int result;
793 
794         result = cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_ENABLE);
795         if (result) {
796                 dev_err(&port->dev, "%s - Unable to enable UART\n", __func__);
797                 return result;
798         }
799 
800         /* Configure the termios structure */
801         cp210x_get_termios(tty, port);
802 
803         /* The baud rate must be initialised on cp2104 */
804         if (tty)
805                 cp210x_change_speed(tty, port, NULL);
806 
807         return usb_serial_generic_open(tty, port);
808 }
809 
810 static void cp210x_close(struct usb_serial_port *port)
811 {
812         usb_serial_generic_close(port);
813 
814         /* Clear both queues; cp2108 needs this to avoid an occasional hang */
815         cp210x_write_u16_reg(port, CP210X_PURGE, PURGE_ALL);
816 
817         cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_DISABLE);
818 }
819 
820 /*
821  * Read how many bytes are waiting in the TX queue.
822  */
823 static int cp210x_get_tx_queue_byte_count(struct usb_serial_port *port,
824                 u32 *count)
825 {
826         struct usb_serial *serial = port->serial;
827         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
828         struct cp210x_comm_status *sts;
829         int result;
830 
831         sts = kmalloc(sizeof(*sts), GFP_KERNEL);
832         if (!sts)
833                 return -ENOMEM;
834 
835         result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
836                         CP210X_GET_COMM_STATUS, REQTYPE_INTERFACE_TO_HOST,
837                         0, port_priv->bInterfaceNumber, sts, sizeof(*sts),
838                         USB_CTRL_GET_TIMEOUT);
839         if (result == sizeof(*sts)) {
840                 *count = le32_to_cpu(sts->ulAmountInOutQueue);
841                 result = 0;
842         } else {
843                 dev_err(&port->dev, "failed to get comm status: %d\n", result);
844                 if (result >= 0)
845                         result = -EIO;
846         }
847 
848         kfree(sts);
849 
850         return result;
851 }
852 
853 static bool cp210x_tx_empty(struct usb_serial_port *port)
854 {
855         int err;
856         u32 count;
857 
858         err = cp210x_get_tx_queue_byte_count(port, &count);
859         if (err)
860                 return true;
861 
862         return !count;
863 }
864 
865 /*
866  * cp210x_get_termios
867  * Reads the baud rate, data bits, parity, stop bits and flow control mode
868  * from the device, corrects any unsupported values, and configures the
869  * termios structure to reflect the state of the device
870  */
871 static void cp210x_get_termios(struct tty_struct *tty,
872         struct usb_serial_port *port)
873 {
874         unsigned int baud;
875 
876         if (tty) {
877                 cp210x_get_termios_port(tty->driver_data,
878                         &tty->termios.c_cflag, &baud);
879                 tty_encode_baud_rate(tty, baud, baud);
880         } else {
881                 tcflag_t cflag;
882                 cflag = 0;
883                 cp210x_get_termios_port(port, &cflag, &baud);
884         }
885 }
886 
887 /*
888  * cp210x_get_termios_port
889  * This is the heart of cp210x_get_termios which always uses a &usb_serial_port.
890  */
891 static void cp210x_get_termios_port(struct usb_serial_port *port,
892         tcflag_t *cflagp, unsigned int *baudp)
893 {
894         struct device *dev = &port->dev;
895         tcflag_t cflag;
896         struct cp210x_flow_ctl flow_ctl;
897         u32 baud;
898         u16 bits;
899         u32 ctl_hs;
900 
901         cp210x_read_u32_reg(port, CP210X_GET_BAUDRATE, &baud);
902 
903         dev_dbg(dev, "%s - baud rate = %d\n", __func__, baud);
904         *baudp = baud;
905 
906         cflag = *cflagp;
907 
908         cp210x_get_line_ctl(port, &bits);
909         cflag &= ~CSIZE;
910         switch (bits & BITS_DATA_MASK) {
911         case BITS_DATA_5:
912                 dev_dbg(dev, "%s - data bits = 5\n", __func__);
913                 cflag |= CS5;
914                 break;
915         case BITS_DATA_6:
916                 dev_dbg(dev, "%s - data bits = 6\n", __func__);
917                 cflag |= CS6;
918                 break;
919         case BITS_DATA_7:
920                 dev_dbg(dev, "%s - data bits = 7\n", __func__);
921                 cflag |= CS7;
922                 break;
923         case BITS_DATA_8:
924                 dev_dbg(dev, "%s - data bits = 8\n", __func__);
925                 cflag |= CS8;
926                 break;
927         case BITS_DATA_9:
928                 dev_dbg(dev, "%s - data bits = 9 (not supported, using 8 data bits)\n", __func__);
929                 cflag |= CS8;
930                 bits &= ~BITS_DATA_MASK;
931                 bits |= BITS_DATA_8;
932                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
933                 break;
934         default:
935                 dev_dbg(dev, "%s - Unknown number of data bits, using 8\n", __func__);
936                 cflag |= CS8;
937                 bits &= ~BITS_DATA_MASK;
938                 bits |= BITS_DATA_8;
939                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
940                 break;
941         }
942 
943         switch (bits & BITS_PARITY_MASK) {
944         case BITS_PARITY_NONE:
945                 dev_dbg(dev, "%s - parity = NONE\n", __func__);
946                 cflag &= ~PARENB;
947                 break;
948         case BITS_PARITY_ODD:
949                 dev_dbg(dev, "%s - parity = ODD\n", __func__);
950                 cflag |= (PARENB|PARODD);
951                 break;
952         case BITS_PARITY_EVEN:
953                 dev_dbg(dev, "%s - parity = EVEN\n", __func__);
954                 cflag &= ~PARODD;
955                 cflag |= PARENB;
956                 break;
957         case BITS_PARITY_MARK:
958                 dev_dbg(dev, "%s - parity = MARK\n", __func__);
959                 cflag |= (PARENB|PARODD|CMSPAR);
960                 break;
961         case BITS_PARITY_SPACE:
962                 dev_dbg(dev, "%s - parity = SPACE\n", __func__);
963                 cflag &= ~PARODD;
964                 cflag |= (PARENB|CMSPAR);
965                 break;
966         default:
967                 dev_dbg(dev, "%s - Unknown parity mode, disabling parity\n", __func__);
968                 cflag &= ~PARENB;
969                 bits &= ~BITS_PARITY_MASK;
970                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
971                 break;
972         }
973 
974         cflag &= ~CSTOPB;
975         switch (bits & BITS_STOP_MASK) {
976         case BITS_STOP_1:
977                 dev_dbg(dev, "%s - stop bits = 1\n", __func__);
978                 break;
979         case BITS_STOP_1_5:
980                 dev_dbg(dev, "%s - stop bits = 1.5 (not supported, using 1 stop bit)\n", __func__);
981                 bits &= ~BITS_STOP_MASK;
982                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
983                 break;
984         case BITS_STOP_2:
985                 dev_dbg(dev, "%s - stop bits = 2\n", __func__);
986                 cflag |= CSTOPB;
987                 break;
988         default:
989                 dev_dbg(dev, "%s - Unknown number of stop bits, using 1 stop bit\n", __func__);
990                 bits &= ~BITS_STOP_MASK;
991                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
992                 break;
993         }
994 
995         cp210x_read_reg_block(port, CP210X_GET_FLOW, &flow_ctl,
996                         sizeof(flow_ctl));
997         ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake);
998         if (ctl_hs & CP210X_SERIAL_CTS_HANDSHAKE) {
999                 dev_dbg(dev, "%s - flow control = CRTSCTS\n", __func__);
1000                 cflag |= CRTSCTS;
1001         } else {
1002                 dev_dbg(dev, "%s - flow control = NONE\n", __func__);
1003                 cflag &= ~CRTSCTS;
1004         }
1005 
1006         *cflagp = cflag;
1007 }
1008 
1009 /*
1010  * CP2101 supports the following baud rates:
1011  *
1012  *      300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 28800,
1013  *      38400, 56000, 57600, 115200, 128000, 230400, 460800, 921600
1014  *
1015  * CP2102 and CP2103 support the following additional rates:
1016  *
1017  *      4000, 16000, 51200, 64000, 76800, 153600, 250000, 256000, 500000,
1018  *      576000
1019  *
1020  * The device will map a requested rate to a supported one, but the result
1021  * of requests for rates greater than 1053257 is undefined (see AN205).
1022  *
1023  * CP2104, CP2105 and CP2110 support most rates up to 2M, 921k and 1M baud,
1024  * respectively, with an error less than 1%. The actual rates are determined
1025  * by
1026  *
1027  *      div = round(freq / (2 x prescale x request))
1028  *      actual = freq / (2 x prescale x div)
1029  *
1030  * For CP2104 and CP2105 freq is 48Mhz and prescale is 4 for request <= 365bps
1031  * or 1 otherwise.
1032  * For CP2110 freq is 24Mhz and prescale is 4 for request <= 300bps or 1
1033  * otherwise.
1034  */
1035 static void cp210x_change_speed(struct tty_struct *tty,
1036                 struct usb_serial_port *port, struct ktermios *old_termios)
1037 {
1038         u32 baud;
1039 
1040         baud = tty->termios.c_ospeed;
1041 
1042         /* This maps the requested rate to a rate valid on cp2102 or cp2103,
1043          * or to an arbitrary rate in [1M,2M].
1044          *
1045          * NOTE: B0 is not implemented.
1046          */
1047         baud = cp210x_quantise_baudrate(baud);
1048 
1049         dev_dbg(&port->dev, "%s - setting baud rate to %u\n", __func__, baud);
1050         if (cp210x_write_u32_reg(port, CP210X_SET_BAUDRATE, baud)) {
1051                 dev_warn(&port->dev, "failed to set baud rate to %u\n", baud);
1052                 if (old_termios)
1053                         baud = old_termios->c_ospeed;
1054                 else
1055                         baud = 9600;
1056         }
1057 
1058         tty_encode_baud_rate(tty, baud, baud);
1059 }
1060 
1061 static void cp210x_set_termios(struct tty_struct *tty,
1062                 struct usb_serial_port *port, struct ktermios *old_termios)
1063 {
1064         struct device *dev = &port->dev;
1065         unsigned int cflag, old_cflag;
1066         u16 bits;
1067 
1068         cflag = tty->termios.c_cflag;
1069         old_cflag = old_termios->c_cflag;
1070 
1071         if (tty->termios.c_ospeed != old_termios->c_ospeed)
1072                 cp210x_change_speed(tty, port, old_termios);
1073 
1074         /* If the number of data bits is to be updated */
1075         if ((cflag & CSIZE) != (old_cflag & CSIZE)) {
1076                 cp210x_get_line_ctl(port, &bits);
1077                 bits &= ~BITS_DATA_MASK;
1078                 switch (cflag & CSIZE) {
1079                 case CS5:
1080                         bits |= BITS_DATA_5;
1081                         dev_dbg(dev, "%s - data bits = 5\n", __func__);
1082                         break;
1083                 case CS6:
1084                         bits |= BITS_DATA_6;
1085                         dev_dbg(dev, "%s - data bits = 6\n", __func__);
1086                         break;
1087                 case CS7:
1088                         bits |= BITS_DATA_7;
1089                         dev_dbg(dev, "%s - data bits = 7\n", __func__);
1090                         break;
1091                 case CS8:
1092                 default:
1093                         bits |= BITS_DATA_8;
1094                         dev_dbg(dev, "%s - data bits = 8\n", __func__);
1095                         break;
1096                 }
1097                 if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits))
1098                         dev_dbg(dev, "Number of data bits requested not supported by device\n");
1099         }
1100 
1101         if ((cflag     & (PARENB|PARODD|CMSPAR)) !=
1102             (old_cflag & (PARENB|PARODD|CMSPAR))) {
1103                 cp210x_get_line_ctl(port, &bits);
1104                 bits &= ~BITS_PARITY_MASK;
1105                 if (cflag & PARENB) {
1106                         if (cflag & CMSPAR) {
1107                                 if (cflag & PARODD) {
1108                                         bits |= BITS_PARITY_MARK;
1109                                         dev_dbg(dev, "%s - parity = MARK\n", __func__);
1110                                 } else {
1111                                         bits |= BITS_PARITY_SPACE;
1112                                         dev_dbg(dev, "%s - parity = SPACE\n", __func__);
1113                                 }
1114                         } else {
1115                                 if (cflag & PARODD) {
1116                                         bits |= BITS_PARITY_ODD;
1117                                         dev_dbg(dev, "%s - parity = ODD\n", __func__);
1118                                 } else {
1119                                         bits |= BITS_PARITY_EVEN;
1120                                         dev_dbg(dev, "%s - parity = EVEN\n", __func__);
1121                                 }
1122                         }
1123                 }
1124                 if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits))
1125                         dev_dbg(dev, "Parity mode not supported by device\n");
1126         }
1127 
1128         if ((cflag & CSTOPB) != (old_cflag & CSTOPB)) {
1129                 cp210x_get_line_ctl(port, &bits);
1130                 bits &= ~BITS_STOP_MASK;
1131                 if (cflag & CSTOPB) {
1132                         bits |= BITS_STOP_2;
1133                         dev_dbg(dev, "%s - stop bits = 2\n", __func__);
1134                 } else {
1135                         bits |= BITS_STOP_1;
1136                         dev_dbg(dev, "%s - stop bits = 1\n", __func__);
1137                 }
1138                 if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits))
1139                         dev_dbg(dev, "Number of stop bits requested not supported by device\n");
1140         }
1141 
1142         if ((cflag & CRTSCTS) != (old_cflag & CRTSCTS)) {
1143                 struct cp210x_flow_ctl flow_ctl;
1144                 u32 ctl_hs;
1145                 u32 flow_repl;
1146 
1147                 cp210x_read_reg_block(port, CP210X_GET_FLOW, &flow_ctl,
1148                                 sizeof(flow_ctl));
1149                 ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake);
1150                 flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace);
1151                 dev_dbg(dev, "%s - read ulControlHandshake=0x%08x, ulFlowReplace=0x%08x\n",
1152                                 __func__, ctl_hs, flow_repl);
1153 
1154                 ctl_hs &= ~CP210X_SERIAL_DSR_HANDSHAKE;
1155                 ctl_hs &= ~CP210X_SERIAL_DCD_HANDSHAKE;
1156                 ctl_hs &= ~CP210X_SERIAL_DSR_SENSITIVITY;
1157                 ctl_hs &= ~CP210X_SERIAL_DTR_MASK;
1158                 ctl_hs |= CP210X_SERIAL_DTR_SHIFT(CP210X_SERIAL_DTR_ACTIVE);
1159                 if (cflag & CRTSCTS) {
1160                         ctl_hs |= CP210X_SERIAL_CTS_HANDSHAKE;
1161 
1162                         flow_repl &= ~CP210X_SERIAL_RTS_MASK;
1163                         flow_repl |= CP210X_SERIAL_RTS_SHIFT(
1164                                         CP210X_SERIAL_RTS_FLOW_CTL);
1165                         dev_dbg(dev, "%s - flow control = CRTSCTS\n", __func__);
1166                 } else {
1167                         ctl_hs &= ~CP210X_SERIAL_CTS_HANDSHAKE;
1168 
1169                         flow_repl &= ~CP210X_SERIAL_RTS_MASK;
1170                         flow_repl |= CP210X_SERIAL_RTS_SHIFT(
1171                                         CP210X_SERIAL_RTS_ACTIVE);
1172                         dev_dbg(dev, "%s - flow control = NONE\n", __func__);
1173                 }
1174 
1175                 dev_dbg(dev, "%s - write ulControlHandshake=0x%08x, ulFlowReplace=0x%08x\n",
1176                                 __func__, ctl_hs, flow_repl);
1177                 flow_ctl.ulControlHandshake = cpu_to_le32(ctl_hs);
1178                 flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
1179                 cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl,
1180                                 sizeof(flow_ctl));
1181         }
1182 
1183 }
1184 
1185 static int cp210x_tiocmset(struct tty_struct *tty,
1186                 unsigned int set, unsigned int clear)
1187 {
1188         struct usb_serial_port *port = tty->driver_data;
1189         return cp210x_tiocmset_port(port, set, clear);
1190 }
1191 
1192 static int cp210x_tiocmset_port(struct usb_serial_port *port,
1193                 unsigned int set, unsigned int clear)
1194 {
1195         u16 control = 0;
1196 
1197         if (set & TIOCM_RTS) {
1198                 control |= CONTROL_RTS;
1199                 control |= CONTROL_WRITE_RTS;
1200         }
1201         if (set & TIOCM_DTR) {
1202                 control |= CONTROL_DTR;
1203                 control |= CONTROL_WRITE_DTR;
1204         }
1205         if (clear & TIOCM_RTS) {
1206                 control &= ~CONTROL_RTS;
1207                 control |= CONTROL_WRITE_RTS;
1208         }
1209         if (clear & TIOCM_DTR) {
1210                 control &= ~CONTROL_DTR;
1211                 control |= CONTROL_WRITE_DTR;
1212         }
1213 
1214         dev_dbg(&port->dev, "%s - control = 0x%.4x\n", __func__, control);
1215 
1216         return cp210x_write_u16_reg(port, CP210X_SET_MHS, control);
1217 }
1218 
1219 static void cp210x_dtr_rts(struct usb_serial_port *p, int on)
1220 {
1221         if (on)
1222                 cp210x_tiocmset_port(p, TIOCM_DTR|TIOCM_RTS, 0);
1223         else
1224                 cp210x_tiocmset_port(p, 0, TIOCM_DTR|TIOCM_RTS);
1225 }
1226 
1227 static int cp210x_tiocmget(struct tty_struct *tty)
1228 {
1229         struct usb_serial_port *port = tty->driver_data;
1230         u8 control;
1231         int result;
1232 
1233         result = cp210x_read_u8_reg(port, CP210X_GET_MDMSTS, &control);
1234         if (result)
1235                 return result;
1236 
1237         result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0)
1238                 |((control & CONTROL_RTS) ? TIOCM_RTS : 0)
1239                 |((control & CONTROL_CTS) ? TIOCM_CTS : 0)
1240                 |((control & CONTROL_DSR) ? TIOCM_DSR : 0)
1241                 |((control & CONTROL_RING)? TIOCM_RI  : 0)
1242                 |((control & CONTROL_DCD) ? TIOCM_CD  : 0);
1243 
1244         dev_dbg(&port->dev, "%s - control = 0x%.2x\n", __func__, control);
1245 
1246         return result;
1247 }
1248 
1249 static void cp210x_break_ctl(struct tty_struct *tty, int break_state)
1250 {
1251         struct usb_serial_port *port = tty->driver_data;
1252         u16 state;
1253 
1254         if (break_state == 0)
1255                 state = BREAK_OFF;
1256         else
1257                 state = BREAK_ON;
1258         dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
1259                 state == BREAK_OFF ? "off" : "on");
1260         cp210x_write_u16_reg(port, CP210X_SET_BREAK, state);
1261 }
1262 
1263 #ifdef CONFIG_GPIOLIB
1264 static int cp210x_gpio_request(struct gpio_chip *gc, unsigned int offset)
1265 {
1266         struct usb_serial *serial = gpiochip_get_data(gc);
1267         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1268 
1269         switch (offset) {
1270         case 0:
1271                 if (priv->config & CP2105_GPIO0_TXLED_MODE)
1272                         return -ENODEV;
1273                 break;
1274         case 1:
1275                 if (priv->config & (CP2105_GPIO1_RXLED_MODE |
1276                                     CP2105_GPIO1_RS485_MODE))
1277                         return -ENODEV;
1278                 break;
1279         }
1280 
1281         return 0;
1282 }
1283 
1284 static int cp210x_gpio_get(struct gpio_chip *gc, unsigned int gpio)
1285 {
1286         struct usb_serial *serial = gpiochip_get_data(gc);
1287         int result;
1288         u8 buf;
1289 
1290         result = cp210x_read_vendor_block(serial, REQTYPE_INTERFACE_TO_HOST,
1291                                           CP210X_READ_LATCH, &buf, sizeof(buf));
1292         if (result < 0)
1293                 return result;
1294 
1295         return !!(buf & BIT(gpio));
1296 }
1297 
1298 static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
1299 {
1300         struct usb_serial *serial = gpiochip_get_data(gc);
1301         struct cp210x_gpio_write buf;
1302 
1303         if (value == 1)
1304                 buf.state = BIT(gpio);
1305         else
1306                 buf.state = 0;
1307 
1308         buf.mask = BIT(gpio);
1309 
1310         cp210x_write_vendor_block(serial, REQTYPE_HOST_TO_INTERFACE,
1311                                   CP210X_WRITE_LATCH, &buf, sizeof(buf));
1312 }
1313 
1314 static int cp210x_gpio_direction_get(struct gpio_chip *gc, unsigned int gpio)
1315 {
1316         /* Hardware does not support an input mode */
1317         return 0;
1318 }
1319 
1320 static int cp210x_gpio_direction_input(struct gpio_chip *gc, unsigned int gpio)
1321 {
1322         /* Hardware does not support an input mode */
1323         return -ENOTSUPP;
1324 }
1325 
1326 static int cp210x_gpio_direction_output(struct gpio_chip *gc, unsigned int gpio,
1327                                         int value)
1328 {
1329         return 0;
1330 }
1331 
1332 static int cp210x_gpio_set_single_ended(struct gpio_chip *gc, unsigned int gpio,
1333                                         enum single_ended_mode mode)
1334 {
1335         struct usb_serial *serial = gpiochip_get_data(gc);
1336         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1337 
1338         /* Succeed only if in correct mode (this can't be set at runtime) */
1339         if ((mode == LINE_MODE_PUSH_PULL) && (priv->gpio_mode & BIT(gpio)))
1340                 return 0;
1341 
1342         if ((mode == LINE_MODE_OPEN_DRAIN) && !(priv->gpio_mode & BIT(gpio)))
1343                 return 0;
1344 
1345         return -ENOTSUPP;
1346 }
1347 
1348 /*
1349  * This function is for configuring GPIO using shared pins, where other signals
1350  * are made unavailable by configuring the use of GPIO. This is believed to be
1351  * only applicable to the cp2105 at this point, the other devices supported by
1352  * this driver that provide GPIO do so in a way that does not impact other
1353  * signals and are thus expected to have very different initialisation.
1354  */
1355 static int cp2105_shared_gpio_init(struct usb_serial *serial)
1356 {
1357         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1358         struct cp210x_pin_mode mode;
1359         struct cp210x_config config;
1360         u8 intf_num = cp210x_interface_num(serial);
1361         int result;
1362 
1363         result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
1364                                           CP210X_GET_DEVICEMODE, &mode,
1365                                           sizeof(mode));
1366         if (result < 0)
1367                 return result;
1368 
1369         result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
1370                                           CP210X_GET_PORTCONFIG, &config,
1371                                           sizeof(config));
1372         if (result < 0)
1373                 return result;
1374 
1375         /*  2 banks of GPIO - One for the pins taken from each serial port */
1376         if (intf_num == 0) {
1377                 if (mode.eci == CP210X_PIN_MODE_MODEM)
1378                         return 0;
1379 
1380                 priv->config = config.eci_cfg;
1381                 priv->gpio_mode = (u8)((le16_to_cpu(config.gpio_mode) &
1382                                                 CP210X_ECI_GPIO_MODE_MASK) >>
1383                                                 CP210X_ECI_GPIO_MODE_OFFSET);
1384                 priv->gc.ngpio = 2;
1385         } else if (intf_num == 1) {
1386                 if (mode.sci == CP210X_PIN_MODE_MODEM)
1387                         return 0;
1388 
1389                 priv->config = config.sci_cfg;
1390                 priv->gpio_mode = (u8)((le16_to_cpu(config.gpio_mode) &
1391                                                 CP210X_SCI_GPIO_MODE_MASK) >>
1392                                                 CP210X_SCI_GPIO_MODE_OFFSET);
1393                 priv->gc.ngpio = 3;
1394         } else {
1395                 return -ENODEV;
1396         }
1397 
1398         priv->gc.label = "cp210x";
1399         priv->gc.request = cp210x_gpio_request;
1400         priv->gc.get_direction = cp210x_gpio_direction_get;
1401         priv->gc.direction_input = cp210x_gpio_direction_input;
1402         priv->gc.direction_output = cp210x_gpio_direction_output;
1403         priv->gc.get = cp210x_gpio_get;
1404         priv->gc.set = cp210x_gpio_set;
1405         priv->gc.set_single_ended = cp210x_gpio_set_single_ended;
1406         priv->gc.owner = THIS_MODULE;
1407         priv->gc.parent = &serial->interface->dev;
1408         priv->gc.base = -1;
1409         priv->gc.can_sleep = true;
1410 
1411         result = gpiochip_add_data(&priv->gc, serial);
1412         if (!result)
1413                 priv->gpio_registered = true;
1414 
1415         return result;
1416 }
1417 
1418 static void cp210x_gpio_remove(struct usb_serial *serial)
1419 {
1420         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1421 
1422         if (priv->gpio_registered) {
1423                 gpiochip_remove(&priv->gc);
1424                 priv->gpio_registered = false;
1425         }
1426 }
1427 
1428 #else
1429 
1430 static int cp2105_shared_gpio_init(struct usb_serial *serial)
1431 {
1432         return 0;
1433 }
1434 
1435 static void cp210x_gpio_remove(struct usb_serial *serial)
1436 {
1437         /* Nothing to do */
1438 }
1439 
1440 #endif
1441 
1442 static int cp210x_port_probe(struct usb_serial_port *port)
1443 {
1444         struct usb_serial *serial = port->serial;
1445         struct cp210x_port_private *port_priv;
1446         int ret;
1447 
1448         port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
1449         if (!port_priv)
1450                 return -ENOMEM;
1451 
1452         port_priv->bInterfaceNumber = cp210x_interface_num(serial);
1453 
1454         usb_set_serial_port_data(port, port_priv);
1455 
1456         ret = cp210x_detect_swapped_line_ctl(port);
1457         if (ret) {
1458                 kfree(port_priv);
1459                 return ret;
1460         }
1461 
1462         return 0;
1463 }
1464 
1465 static int cp210x_port_remove(struct usb_serial_port *port)
1466 {
1467         struct cp210x_port_private *port_priv;
1468 
1469         port_priv = usb_get_serial_port_data(port);
1470         kfree(port_priv);
1471 
1472         return 0;
1473 }
1474 
1475 static int cp210x_attach(struct usb_serial *serial)
1476 {
1477         int result;
1478         struct cp210x_serial_private *priv;
1479 
1480         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1481         if (!priv)
1482                 return -ENOMEM;
1483 
1484         result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
1485                                           CP210X_GET_PARTNUM, &priv->partnum,
1486                                           sizeof(priv->partnum));
1487         if (result < 0)
1488                 goto err_free_priv;
1489 
1490         usb_set_serial_data(serial, priv);
1491 
1492         if (priv->partnum == CP210X_PARTNUM_CP2105) {
1493                 result = cp2105_shared_gpio_init(serial);
1494                 if (result < 0) {
1495                         dev_err(&serial->interface->dev,
1496                                 "GPIO initialisation failed, continuing without GPIO support\n");
1497                 }
1498         }
1499 
1500         return 0;
1501 err_free_priv:
1502         kfree(priv);
1503 
1504         return result;
1505 }
1506 
1507 static void cp210x_disconnect(struct usb_serial *serial)
1508 {
1509         cp210x_gpio_remove(serial);
1510 }
1511 
1512 static void cp210x_release(struct usb_serial *serial)
1513 {
1514         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1515 
1516         cp210x_gpio_remove(serial);
1517 
1518         kfree(priv);
1519 }
1520 
1521 module_usb_serial_driver(serial_drivers, id_table);
1522 
1523 MODULE_DESCRIPTION(DRIVER_DESC);
1524 MODULE_LICENSE("GPL");
1525 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us