Mention branches and keyring.
[releases.git] / usb / serial / cp210x.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Silicon Laboratories CP210x USB to RS232 serial adaptor driver
4  *
5  * Copyright (C) 2005 Craig Shelley (craig@microtron.org.uk)
6  *
7  * Support to set flow control line levels using TIOCMGET and TIOCMSET
8  * thanks to Karl Hiramoto karl@hiramoto.org. RTSCTS hardware flow
9  * control thanks to Munir Nassar nassarmu@real-time.com
10  *
11  */
12
13 #include <linux/kernel.h>
14 #include <linux/errno.h>
15 #include <linux/slab.h>
16 #include <linux/tty.h>
17 #include <linux/tty_flip.h>
18 #include <linux/module.h>
19 #include <linux/moduleparam.h>
20 #include <linux/usb.h>
21 #include <linux/uaccess.h>
22 #include <linux/usb/serial.h>
23 #include <linux/gpio/driver.h>
24 #include <linux/bitops.h>
25 #include <linux/mutex.h>
26
27 #define DRIVER_DESC "Silicon Labs CP210x RS232 serial adaptor driver"
28
29 /*
30  * Function Prototypes
31  */
32 static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *);
33 static void cp210x_close(struct usb_serial_port *);
34 static void cp210x_get_termios(struct tty_struct *, struct usb_serial_port *);
35 static void cp210x_get_termios_port(struct usb_serial_port *port,
36         tcflag_t *cflagp, unsigned int *baudp);
37 static void cp210x_change_speed(struct tty_struct *, struct usb_serial_port *,
38                                                         struct ktermios *);
39 static void cp210x_set_termios(struct tty_struct *, struct usb_serial_port *,
40                                                         struct ktermios*);
41 static bool cp210x_tx_empty(struct usb_serial_port *port);
42 static int cp210x_tiocmget(struct tty_struct *);
43 static int cp210x_tiocmset(struct tty_struct *, unsigned int, unsigned int);
44 static int cp210x_tiocmset_port(struct usb_serial_port *port,
45                 unsigned int, unsigned int);
46 static void cp210x_break_ctl(struct tty_struct *, int);
47 static int cp210x_attach(struct usb_serial *);
48 static void cp210x_disconnect(struct usb_serial *);
49 static void cp210x_release(struct usb_serial *);
50 static int cp210x_port_probe(struct usb_serial_port *);
51 static int cp210x_port_remove(struct usb_serial_port *);
52 static void cp210x_dtr_rts(struct usb_serial_port *p, int on);
53
54 static const struct usb_device_id id_table[] = {
55         { USB_DEVICE(0x045B, 0x0053) }, /* Renesas RX610 RX-Stick */
56         { USB_DEVICE(0x0471, 0x066A) }, /* AKTAKOM ACE-1001 cable */
57         { USB_DEVICE(0x0489, 0xE000) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
58         { USB_DEVICE(0x0489, 0xE003) }, /* Pirelli Broadband S.p.A, DP-L10 SIP/GSM Mobile */
59         { USB_DEVICE(0x0745, 0x1000) }, /* CipherLab USB CCD Barcode Scanner 1000 */
60         { USB_DEVICE(0x0846, 0x1100) }, /* NetGear Managed Switch M4100 series, M5300 series, M7100 series */
61         { USB_DEVICE(0x08e6, 0x5501) }, /* Gemalto Prox-PU/CU contactless smartcard reader */
62         { USB_DEVICE(0x08FD, 0x000A) }, /* Digianswer A/S , ZigBee/802.15.4 MAC Device */
63         { USB_DEVICE(0x0908, 0x01FF) }, /* Siemens RUGGEDCOM USB Serial Console */
64         { USB_DEVICE(0x0988, 0x0578) }, /* Teraoka AD2000 */
65         { USB_DEVICE(0x0B00, 0x3070) }, /* Ingenico 3070 */
66         { USB_DEVICE(0x0BED, 0x1100) }, /* MEI (TM) Cashflow-SC Bill/Voucher Acceptor */
67         { USB_DEVICE(0x0BED, 0x1101) }, /* MEI series 2000 Combo Acceptor */
68         { USB_DEVICE(0x0FCF, 0x1003) }, /* Dynastream ANT development board */
69         { USB_DEVICE(0x0FCF, 0x1004) }, /* Dynastream ANT2USB */
70         { USB_DEVICE(0x0FCF, 0x1006) }, /* Dynastream ANT development board */
71         { USB_DEVICE(0x0FDE, 0xCA05) }, /* OWL Wireless Electricity Monitor CM-160 */
72         { USB_DEVICE(0x10A6, 0xAA26) }, /* Knock-off DCU-11 cable */
73         { USB_DEVICE(0x10AB, 0x10C5) }, /* Siemens MC60 Cable */
74         { USB_DEVICE(0x10B5, 0xAC70) }, /* Nokia CA-42 USB */
75         { USB_DEVICE(0x10C4, 0x0F91) }, /* Vstabi */
76         { USB_DEVICE(0x10C4, 0x1101) }, /* Arkham Technology DS101 Bus Monitor */
77         { USB_DEVICE(0x10C4, 0x1601) }, /* Arkham Technology DS101 Adapter */
78         { USB_DEVICE(0x10C4, 0x800A) }, /* SPORTident BSM7-D-USB main station */
79         { USB_DEVICE(0x10C4, 0x803B) }, /* Pololu USB-serial converter */
80         { USB_DEVICE(0x10C4, 0x8044) }, /* Cygnal Debug Adapter */
81         { USB_DEVICE(0x10C4, 0x804E) }, /* Software Bisque Paramount ME build-in converter */
82         { USB_DEVICE(0x10C4, 0x8053) }, /* Enfora EDG1228 */
83         { USB_DEVICE(0x10C4, 0x8054) }, /* Enfora GSM2228 */
84         { USB_DEVICE(0x10C4, 0x8056) }, /* Lorenz Messtechnik devices */
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, 0x817C) }, /* CESINEL MEDCAL N Power Quality Monitor */
102         { USB_DEVICE(0x10C4, 0x817D) }, /* CESINEL MEDCAL NT Power Quality Monitor */
103         { USB_DEVICE(0x10C4, 0x817E) }, /* CESINEL MEDCAL S Power Quality Monitor */
104         { USB_DEVICE(0x10C4, 0x818B) }, /* AVIT Research USB to TTL */
105         { USB_DEVICE(0x10C4, 0x819F) }, /* MJS USB Toslink Switcher */
106         { USB_DEVICE(0x10C4, 0x81A6) }, /* ThinkOptics WavIt */
107         { USB_DEVICE(0x10C4, 0x81A9) }, /* Multiplex RC Interface */
108         { USB_DEVICE(0x10C4, 0x81AC) }, /* MSD Dash Hawk */
109         { USB_DEVICE(0x10C4, 0x81AD) }, /* INSYS USB Modem */
110         { USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
111         { USB_DEVICE(0x10C4, 0x81D7) }, /* IAI Corp. RCB-CV-USB USB to RS485 Adaptor */
112         { USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */
113         { USB_DEVICE(0x10C4, 0x81E7) }, /* Aerocomm Radio */
114         { USB_DEVICE(0x10C4, 0x81E8) }, /* Zephyr Bioharness */
115         { USB_DEVICE(0x10C4, 0x81F2) }, /* C1007 HF band RFID controller */
116         { USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
117         { USB_DEVICE(0x10C4, 0x822B) }, /* Modem EDGE(GSM) Comander 2 */
118         { USB_DEVICE(0x10C4, 0x826B) }, /* Cygnal Integrated Products, Inc., Fasttrax GPS demonstration module */
119         { USB_DEVICE(0x10C4, 0x8281) }, /* Nanotec Plug & Drive */
120         { USB_DEVICE(0x10C4, 0x8293) }, /* Telegesis ETRX2USB */
121         { USB_DEVICE(0x10C4, 0x82EF) }, /* CESINEL FALCO 6105 AC Power Supply */
122         { USB_DEVICE(0x10C4, 0x82F1) }, /* CESINEL MEDCAL EFD Earth Fault Detector */
123         { USB_DEVICE(0x10C4, 0x82F2) }, /* CESINEL MEDCAL ST Network Analyzer */
124         { USB_DEVICE(0x10C4, 0x82F4) }, /* Starizona MicroTouch */
125         { USB_DEVICE(0x10C4, 0x82F9) }, /* Procyon AVS */
126         { USB_DEVICE(0x10C4, 0x8341) }, /* Siemens MC35PU GPRS Modem */
127         { USB_DEVICE(0x10C4, 0x8382) }, /* Cygnal Integrated Products, Inc. */
128         { USB_DEVICE(0x10C4, 0x83A8) }, /* Amber Wireless AMB2560 */
129         { USB_DEVICE(0x10C4, 0x83AA) }, /* Mark-10 Digital Force Gauge */
130         { USB_DEVICE(0x10C4, 0x83D8) }, /* DekTec DTA Plus VHF/UHF Booster/Attenuator */
131         { USB_DEVICE(0x10C4, 0x8411) }, /* Kyocera GPS Module */
132         { USB_DEVICE(0x10C4, 0x8418) }, /* IRZ Automation Teleport SG-10 GSM/GPRS Modem */
133         { USB_DEVICE(0x10C4, 0x846E) }, /* BEI USB Sensor Interface (VCP) */
134         { USB_DEVICE(0x10C4, 0x8470) }, /* Juniper Networks BX Series System Console */
135         { USB_DEVICE(0x10C4, 0x8477) }, /* Balluff RFID */
136         { USB_DEVICE(0x10C4, 0x84B6) }, /* Starizona Hyperion */
137         { USB_DEVICE(0x10C4, 0x851E) }, /* CESINEL MEDCAL PT Network Analyzer */
138         { USB_DEVICE(0x10C4, 0x85A7) }, /* LifeScan OneTouch Verio IQ */
139         { USB_DEVICE(0x10C4, 0x85B8) }, /* CESINEL ReCon T Energy Logger */
140         { USB_DEVICE(0x10C4, 0x85EA) }, /* AC-Services IBUS-IF */
141         { USB_DEVICE(0x10C4, 0x85EB) }, /* AC-Services CIS-IBUS */
142         { USB_DEVICE(0x10C4, 0x85F8) }, /* Virtenio Preon32 */
143         { USB_DEVICE(0x10C4, 0x8664) }, /* AC-Services CAN-IF */
144         { USB_DEVICE(0x10C4, 0x8665) }, /* AC-Services OBD-IF */
145         { USB_DEVICE(0x10C4, 0x8856) }, /* CEL EM357 ZigBee USB Stick - LR */
146         { USB_DEVICE(0x10C4, 0x8857) }, /* CEL EM357 ZigBee USB Stick */
147         { USB_DEVICE(0x10C4, 0x88A4) }, /* MMB Networks ZigBee USB Device */
148         { USB_DEVICE(0x10C4, 0x88A5) }, /* Planet Innovation Ingeni ZigBee USB Device */
149         { USB_DEVICE(0x10C4, 0x88D8) }, /* Acuity Brands nLight Air Adapter */
150         { USB_DEVICE(0x10C4, 0x88FB) }, /* CESINEL MEDCAL STII Network Analyzer */
151         { USB_DEVICE(0x10C4, 0x8938) }, /* CESINEL MEDCAL S II Network Analyzer */
152         { USB_DEVICE(0x10C4, 0x8946) }, /* Ketra N1 Wireless Interface */
153         { USB_DEVICE(0x10C4, 0x8962) }, /* Brim Brothers charging dock */
154         { USB_DEVICE(0x10C4, 0x8977) }, /* CEL MeshWorks DevKit Device */
155         { USB_DEVICE(0x10C4, 0x8998) }, /* KCF Technologies PRN */
156         { USB_DEVICE(0x10C4, 0x89A4) }, /* CESINEL FTBC Flexible Thyristor Bridge Controller */
157         { USB_DEVICE(0x10C4, 0x89FB) }, /* Qivicon ZigBee USB Radio Stick */
158         { USB_DEVICE(0x10C4, 0x8A2A) }, /* HubZ dual ZigBee and Z-Wave dongle */
159         { USB_DEVICE(0x10C4, 0x8A5B) }, /* CEL EM3588 ZigBee USB Stick */
160         { USB_DEVICE(0x10C4, 0x8A5E) }, /* CEL EM3588 ZigBee USB Stick Long Range */
161         { USB_DEVICE(0x10C4, 0x8B34) }, /* Qivicon ZigBee USB Radio Stick */
162         { USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
163         { USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
164         { USB_DEVICE(0x10C4, 0xEA63) }, /* Silicon Labs Windows Update (CP2101-4/CP2102N) */
165         { USB_DEVICE(0x10C4, 0xEA70) }, /* Silicon Labs factory default */
166         { USB_DEVICE(0x10C4, 0xEA71) }, /* Infinity GPS-MIC-1 Radio Monophone */
167         { USB_DEVICE(0x10C4, 0xEA7A) }, /* Silicon Labs Windows Update (CP2105) */
168         { USB_DEVICE(0x10C4, 0xEA7B) }, /* Silicon Labs Windows Update (CP2108) */
169         { USB_DEVICE(0x10C4, 0xF001) }, /* Elan Digital Systems USBscope50 */
170         { USB_DEVICE(0x10C4, 0xF002) }, /* Elan Digital Systems USBwave12 */
171         { USB_DEVICE(0x10C4, 0xF003) }, /* Elan Digital Systems USBpulse100 */
172         { USB_DEVICE(0x10C4, 0xF004) }, /* Elan Digital Systems USBcount50 */
173         { USB_DEVICE(0x10C5, 0xEA61) }, /* Silicon Labs MobiData GPRS USB Modem */
174         { USB_DEVICE(0x10CE, 0xEA6A) }, /* Silicon Labs MobiData GPRS USB Modem 100EU */
175         { USB_DEVICE(0x12B8, 0xEC60) }, /* Link G4 ECU */
176         { USB_DEVICE(0x12B8, 0xEC62) }, /* Link G4+ ECU */
177         { USB_DEVICE(0x13AD, 0x9999) }, /* Baltech card reader */
178         { USB_DEVICE(0x1555, 0x0004) }, /* Owen AC4 USB-RS485 Converter */
179         { USB_DEVICE(0x155A, 0x1006) }, /* ELDAT Easywave RX09 */
180         { USB_DEVICE(0x166A, 0x0201) }, /* Clipsal 5500PACA C-Bus Pascal Automation Controller */
181         { USB_DEVICE(0x166A, 0x0301) }, /* Clipsal 5800PC C-Bus Wireless PC Interface */
182         { USB_DEVICE(0x166A, 0x0303) }, /* Clipsal 5500PCU C-Bus USB interface */
183         { USB_DEVICE(0x166A, 0x0304) }, /* Clipsal 5000CT2 C-Bus Black and White Touchscreen */
184         { USB_DEVICE(0x166A, 0x0305) }, /* Clipsal C-5000CT2 C-Bus Spectrum Colour Touchscreen */
185         { USB_DEVICE(0x166A, 0x0401) }, /* Clipsal L51xx C-Bus Architectural Dimmer */
186         { USB_DEVICE(0x166A, 0x0101) }, /* Clipsal 5560884 C-Bus Multi-room Audio Matrix Switcher */
187         { USB_DEVICE(0x16C0, 0x09B0) }, /* Lunatico Seletek */
188         { USB_DEVICE(0x16C0, 0x09B1) }, /* Lunatico Seletek */
189         { USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
190         { USB_DEVICE(0x16DC, 0x0010) }, /* W-IE-NE-R Plein & Baus GmbH PL512 Power Supply */
191         { USB_DEVICE(0x16DC, 0x0011) }, /* W-IE-NE-R Plein & Baus GmbH RCM Remote Control for MARATON Power Supply */
192         { USB_DEVICE(0x16DC, 0x0012) }, /* W-IE-NE-R Plein & Baus GmbH MPOD Multi Channel Power Supply */
193         { USB_DEVICE(0x16DC, 0x0015) }, /* W-IE-NE-R Plein & Baus GmbH CML Control, Monitoring and Data Logger */
194         { USB_DEVICE(0x17A8, 0x0001) }, /* Kamstrup Optical Eye/3-wire */
195         { USB_DEVICE(0x17A8, 0x0005) }, /* Kamstrup M-Bus Master MultiPort 250D */
196         { USB_DEVICE(0x17F4, 0xAAAA) }, /* Wavesense Jazz blood glucose meter */
197         { USB_DEVICE(0x1843, 0x0200) }, /* Vaisala USB Instrument Cable */
198         { USB_DEVICE(0x18EF, 0xE00F) }, /* ELV USB-I2C-Interface */
199         { USB_DEVICE(0x18EF, 0xE025) }, /* ELV Marble Sound Board 1 */
200         { USB_DEVICE(0x18EF, 0xE030) }, /* ELV ALC 8xxx Battery Charger */
201         { USB_DEVICE(0x18EF, 0xE032) }, /* ELV TFD500 Data Logger */
202         { USB_DEVICE(0x1901, 0x0190) }, /* GE B850 CP2105 Recorder interface */
203         { USB_DEVICE(0x1901, 0x0193) }, /* GE B650 CP2104 PMC interface */
204         { USB_DEVICE(0x1901, 0x0194) }, /* GE Healthcare Remote Alarm Box */
205         { USB_DEVICE(0x1901, 0x0195) }, /* GE B850/B650/B450 CP2104 DP UART interface */
206         { USB_DEVICE(0x1901, 0x0196) }, /* GE B850 CP2105 DP UART interface */
207         { USB_DEVICE(0x1901, 0x0197) }, /* GE CS1000 M.2 Key E serial interface */
208         { USB_DEVICE(0x1901, 0x0198) }, /* GE CS1000 Display serial interface */
209         { USB_DEVICE(0x199B, 0xBA30) }, /* LORD WSDA-200-USB */
210         { USB_DEVICE(0x19CF, 0x3000) }, /* Parrot NMEA GPS Flight Recorder */
211         { USB_DEVICE(0x1ADB, 0x0001) }, /* Schweitzer Engineering C662 Cable */
212         { USB_DEVICE(0x1B1C, 0x1C00) }, /* Corsair USB Dongle */
213         { USB_DEVICE(0x1BA4, 0x0002) }, /* Silicon Labs 358x factory default */
214         { USB_DEVICE(0x1BE3, 0x07A6) }, /* WAGO 750-923 USB Service Cable */
215         { USB_DEVICE(0x1D6F, 0x0010) }, /* Seluxit ApS RF Dongle */
216         { USB_DEVICE(0x1E29, 0x0102) }, /* Festo CPX-USB */
217         { USB_DEVICE(0x1E29, 0x0501) }, /* Festo CMSP */
218         { USB_DEVICE(0x1FB9, 0x0100) }, /* Lake Shore Model 121 Current Source */
219         { USB_DEVICE(0x1FB9, 0x0200) }, /* Lake Shore Model 218A Temperature Monitor */
220         { USB_DEVICE(0x1FB9, 0x0201) }, /* Lake Shore Model 219 Temperature Monitor */
221         { USB_DEVICE(0x1FB9, 0x0202) }, /* Lake Shore Model 233 Temperature Transmitter */
222         { USB_DEVICE(0x1FB9, 0x0203) }, /* Lake Shore Model 235 Temperature Transmitter */
223         { USB_DEVICE(0x1FB9, 0x0300) }, /* Lake Shore Model 335 Temperature Controller */
224         { USB_DEVICE(0x1FB9, 0x0301) }, /* Lake Shore Model 336 Temperature Controller */
225         { USB_DEVICE(0x1FB9, 0x0302) }, /* Lake Shore Model 350 Temperature Controller */
226         { USB_DEVICE(0x1FB9, 0x0303) }, /* Lake Shore Model 371 AC Bridge */
227         { USB_DEVICE(0x1FB9, 0x0400) }, /* Lake Shore Model 411 Handheld Gaussmeter */
228         { USB_DEVICE(0x1FB9, 0x0401) }, /* Lake Shore Model 425 Gaussmeter */
229         { USB_DEVICE(0x1FB9, 0x0402) }, /* Lake Shore Model 455A Gaussmeter */
230         { USB_DEVICE(0x1FB9, 0x0403) }, /* Lake Shore Model 475A Gaussmeter */
231         { USB_DEVICE(0x1FB9, 0x0404) }, /* Lake Shore Model 465 Three Axis Gaussmeter */
232         { USB_DEVICE(0x1FB9, 0x0600) }, /* Lake Shore Model 625A Superconducting MPS */
233         { USB_DEVICE(0x1FB9, 0x0601) }, /* Lake Shore Model 642A Magnet Power Supply */
234         { USB_DEVICE(0x1FB9, 0x0602) }, /* Lake Shore Model 648 Magnet Power Supply */
235         { USB_DEVICE(0x1FB9, 0x0700) }, /* Lake Shore Model 737 VSM Controller */
236         { USB_DEVICE(0x1FB9, 0x0701) }, /* Lake Shore Model 776 Hall Matrix */
237         { USB_DEVICE(0x2184, 0x0030) }, /* GW Instek GDM-834x Digital Multimeter */
238         { USB_DEVICE(0x2626, 0xEA60) }, /* Aruba Networks 7xxx USB Serial Console */
239         { USB_DEVICE(0x3195, 0xF190) }, /* Link Instruments MSO-19 */
240         { USB_DEVICE(0x3195, 0xF280) }, /* Link Instruments MSO-28 */
241         { USB_DEVICE(0x3195, 0xF281) }, /* Link Instruments MSO-28 */
242         { USB_DEVICE(0x3923, 0x7A0B) }, /* National Instruments USB Serial Console */
243         { USB_DEVICE(0x413C, 0x9500) }, /* DW700 GPS USB interface */
244         { } /* Terminating Entry */
245 };
246
247 MODULE_DEVICE_TABLE(usb, id_table);
248
249 struct cp210x_serial_private {
250 #ifdef CONFIG_GPIOLIB
251         struct gpio_chip        gc;
252         bool                    gpio_registered;
253         u8                      gpio_pushpull;
254         u8                      gpio_altfunc;
255         u8                      gpio_input;
256 #endif
257         u8                      partnum;
258         speed_t                 max_speed;
259         bool                    use_actual_rate;
260 };
261
262 struct cp210x_port_private {
263         __u8                    bInterfaceNumber;
264         bool                    has_swapped_line_ctl;
265 };
266
267 static struct usb_serial_driver cp210x_device = {
268         .driver = {
269                 .owner =        THIS_MODULE,
270                 .name =         "cp210x",
271         },
272         .id_table               = id_table,
273         .num_ports              = 1,
274         .bulk_in_size           = 256,
275         .bulk_out_size          = 256,
276         .open                   = cp210x_open,
277         .close                  = cp210x_close,
278         .break_ctl              = cp210x_break_ctl,
279         .set_termios            = cp210x_set_termios,
280         .tx_empty               = cp210x_tx_empty,
281         .throttle               = usb_serial_generic_throttle,
282         .unthrottle             = usb_serial_generic_unthrottle,
283         .tiocmget               = cp210x_tiocmget,
284         .tiocmset               = cp210x_tiocmset,
285         .attach                 = cp210x_attach,
286         .disconnect             = cp210x_disconnect,
287         .release                = cp210x_release,
288         .port_probe             = cp210x_port_probe,
289         .port_remove            = cp210x_port_remove,
290         .dtr_rts                = cp210x_dtr_rts
291 };
292
293 static struct usb_serial_driver * const serial_drivers[] = {
294         &cp210x_device, NULL
295 };
296
297 /* Config request types */
298 #define REQTYPE_HOST_TO_INTERFACE       0x41
299 #define REQTYPE_INTERFACE_TO_HOST       0xc1
300 #define REQTYPE_HOST_TO_DEVICE  0x40
301 #define REQTYPE_DEVICE_TO_HOST  0xc0
302
303 /* Config request codes */
304 #define CP210X_IFC_ENABLE       0x00
305 #define CP210X_SET_BAUDDIV      0x01
306 #define CP210X_GET_BAUDDIV      0x02
307 #define CP210X_SET_LINE_CTL     0x03
308 #define CP210X_GET_LINE_CTL     0x04
309 #define CP210X_SET_BREAK        0x05
310 #define CP210X_IMM_CHAR         0x06
311 #define CP210X_SET_MHS          0x07
312 #define CP210X_GET_MDMSTS       0x08
313 #define CP210X_SET_XON          0x09
314 #define CP210X_SET_XOFF         0x0A
315 #define CP210X_SET_EVENTMASK    0x0B
316 #define CP210X_GET_EVENTMASK    0x0C
317 #define CP210X_SET_CHAR         0x0D
318 #define CP210X_GET_CHARS        0x0E
319 #define CP210X_GET_PROPS        0x0F
320 #define CP210X_GET_COMM_STATUS  0x10
321 #define CP210X_RESET            0x11
322 #define CP210X_PURGE            0x12
323 #define CP210X_SET_FLOW         0x13
324 #define CP210X_GET_FLOW         0x14
325 #define CP210X_EMBED_EVENTS     0x15
326 #define CP210X_GET_EVENTSTATE   0x16
327 #define CP210X_SET_CHARS        0x19
328 #define CP210X_GET_BAUDRATE     0x1D
329 #define CP210X_SET_BAUDRATE     0x1E
330 #define CP210X_VENDOR_SPECIFIC  0xFF
331
332 /* CP210X_IFC_ENABLE */
333 #define UART_ENABLE             0x0001
334 #define UART_DISABLE            0x0000
335
336 /* CP210X_(SET|GET)_BAUDDIV */
337 #define BAUD_RATE_GEN_FREQ      0x384000
338
339 /* CP210X_(SET|GET)_LINE_CTL */
340 #define BITS_DATA_MASK          0X0f00
341 #define BITS_DATA_5             0X0500
342 #define BITS_DATA_6             0X0600
343 #define BITS_DATA_7             0X0700
344 #define BITS_DATA_8             0X0800
345 #define BITS_DATA_9             0X0900
346
347 #define BITS_PARITY_MASK        0x00f0
348 #define BITS_PARITY_NONE        0x0000
349 #define BITS_PARITY_ODD         0x0010
350 #define BITS_PARITY_EVEN        0x0020
351 #define BITS_PARITY_MARK        0x0030
352 #define BITS_PARITY_SPACE       0x0040
353
354 #define BITS_STOP_MASK          0x000f
355 #define BITS_STOP_1             0x0000
356 #define BITS_STOP_1_5           0x0001
357 #define BITS_STOP_2             0x0002
358
359 /* CP210X_SET_BREAK */
360 #define BREAK_ON                0x0001
361 #define BREAK_OFF               0x0000
362
363 /* CP210X_(SET_MHS|GET_MDMSTS) */
364 #define CONTROL_DTR             0x0001
365 #define CONTROL_RTS             0x0002
366 #define CONTROL_CTS             0x0010
367 #define CONTROL_DSR             0x0020
368 #define CONTROL_RING            0x0040
369 #define CONTROL_DCD             0x0080
370 #define CONTROL_WRITE_DTR       0x0100
371 #define CONTROL_WRITE_RTS       0x0200
372
373 /* CP210X_VENDOR_SPECIFIC values */
374 #define CP210X_READ_2NCONFIG    0x000E
375 #define CP210X_READ_LATCH       0x00C2
376 #define CP210X_GET_PARTNUM      0x370B
377 #define CP210X_GET_PORTCONFIG   0x370C
378 #define CP210X_GET_DEVICEMODE   0x3711
379 #define CP210X_WRITE_LATCH      0x37E1
380
381 /* Part number definitions */
382 #define CP210X_PARTNUM_CP2101   0x01
383 #define CP210X_PARTNUM_CP2102   0x02
384 #define CP210X_PARTNUM_CP2103   0x03
385 #define CP210X_PARTNUM_CP2104   0x04
386 #define CP210X_PARTNUM_CP2105   0x05
387 #define CP210X_PARTNUM_CP2108   0x08
388 #define CP210X_PARTNUM_CP2102N_QFN28    0x20
389 #define CP210X_PARTNUM_CP2102N_QFN24    0x21
390 #define CP210X_PARTNUM_CP2102N_QFN20    0x22
391 #define CP210X_PARTNUM_UNKNOWN  0xFF
392
393 /* CP210X_GET_COMM_STATUS returns these 0x13 bytes */
394 struct cp210x_comm_status {
395         __le32   ulErrors;
396         __le32   ulHoldReasons;
397         __le32   ulAmountInInQueue;
398         __le32   ulAmountInOutQueue;
399         u8       bEofReceived;
400         u8       bWaitForImmediate;
401         u8       bReserved;
402 } __packed;
403
404 /*
405  * CP210X_PURGE - 16 bits passed in wValue of USB request.
406  * SiLabs app note AN571 gives a strange description of the 4 bits:
407  * bit 0 or bit 2 clears the transmit queue and 1 or 3 receive.
408  * writing 1 to all, however, purges cp2108 well enough to avoid the hang.
409  */
410 #define PURGE_ALL               0x000f
411
412 /* CP210X_GET_FLOW/CP210X_SET_FLOW read/write these 0x10 bytes */
413 struct cp210x_flow_ctl {
414         __le32  ulControlHandshake;
415         __le32  ulFlowReplace;
416         __le32  ulXonLimit;
417         __le32  ulXoffLimit;
418 } __packed;
419
420 /* cp210x_flow_ctl::ulControlHandshake */
421 #define CP210X_SERIAL_DTR_MASK          GENMASK(1, 0)
422 #define CP210X_SERIAL_DTR_SHIFT(_mode)  (_mode)
423 #define CP210X_SERIAL_CTS_HANDSHAKE     BIT(3)
424 #define CP210X_SERIAL_DSR_HANDSHAKE     BIT(4)
425 #define CP210X_SERIAL_DCD_HANDSHAKE     BIT(5)
426 #define CP210X_SERIAL_DSR_SENSITIVITY   BIT(6)
427
428 /* values for cp210x_flow_ctl::ulControlHandshake::CP210X_SERIAL_DTR_MASK */
429 #define CP210X_SERIAL_DTR_INACTIVE      0
430 #define CP210X_SERIAL_DTR_ACTIVE        1
431 #define CP210X_SERIAL_DTR_FLOW_CTL      2
432
433 /* cp210x_flow_ctl::ulFlowReplace */
434 #define CP210X_SERIAL_AUTO_TRANSMIT     BIT(0)
435 #define CP210X_SERIAL_AUTO_RECEIVE      BIT(1)
436 #define CP210X_SERIAL_ERROR_CHAR        BIT(2)
437 #define CP210X_SERIAL_NULL_STRIPPING    BIT(3)
438 #define CP210X_SERIAL_BREAK_CHAR        BIT(4)
439 #define CP210X_SERIAL_RTS_MASK          GENMASK(7, 6)
440 #define CP210X_SERIAL_RTS_SHIFT(_mode)  (_mode << 6)
441 #define CP210X_SERIAL_XOFF_CONTINUE     BIT(31)
442
443 /* values for cp210x_flow_ctl::ulFlowReplace::CP210X_SERIAL_RTS_MASK */
444 #define CP210X_SERIAL_RTS_INACTIVE      0
445 #define CP210X_SERIAL_RTS_ACTIVE        1
446 #define CP210X_SERIAL_RTS_FLOW_CTL      2
447
448 /* CP210X_VENDOR_SPECIFIC, CP210X_GET_DEVICEMODE call reads these 0x2 bytes. */
449 struct cp210x_pin_mode {
450         u8      eci;
451         u8      sci;
452 } __packed;
453
454 #define CP210X_PIN_MODE_MODEM           0
455 #define CP210X_PIN_MODE_GPIO            BIT(0)
456
457 /*
458  * CP210X_VENDOR_SPECIFIC, CP210X_GET_PORTCONFIG call reads these 0xf bytes.
459  * Structure needs padding due to unused/unspecified bytes.
460  */
461 struct cp210x_config {
462         __le16  gpio_mode;
463         u8      __pad0[2];
464         __le16  reset_state;
465         u8      __pad1[4];
466         __le16  suspend_state;
467         u8      sci_cfg;
468         u8      eci_cfg;
469         u8      device_cfg;
470 } __packed;
471
472 /* GPIO modes */
473 #define CP210X_SCI_GPIO_MODE_OFFSET     9
474 #define CP210X_SCI_GPIO_MODE_MASK       GENMASK(11, 9)
475
476 #define CP210X_ECI_GPIO_MODE_OFFSET     2
477 #define CP210X_ECI_GPIO_MODE_MASK       GENMASK(3, 2)
478
479 /* CP2105 port configuration values */
480 #define CP2105_GPIO0_TXLED_MODE         BIT(0)
481 #define CP2105_GPIO1_RXLED_MODE         BIT(1)
482 #define CP2105_GPIO1_RS485_MODE         BIT(2)
483
484 /* CP2102N configuration array indices */
485 #define CP210X_2NCONFIG_CONFIG_VERSION_IDX      2
486 #define CP210X_2NCONFIG_GPIO_MODE_IDX           581
487 #define CP210X_2NCONFIG_GPIO_RSTLATCH_IDX       587
488 #define CP210X_2NCONFIG_GPIO_CONTROL_IDX        600
489
490 /* CP2102N QFN20 port configuration values */
491 #define CP2102N_QFN20_GPIO2_TXLED_MODE          BIT(2)
492 #define CP2102N_QFN20_GPIO3_RXLED_MODE          BIT(3)
493 #define CP2102N_QFN20_GPIO1_RS485_MODE          BIT(4)
494 #define CP2102N_QFN20_GPIO0_CLK_MODE            BIT(6)
495
496 /* CP210X_VENDOR_SPECIFIC, CP210X_WRITE_LATCH call writes these 0x2 bytes. */
497 struct cp210x_gpio_write {
498         u8      mask;
499         u8      state;
500 } __packed;
501
502 /*
503  * Helper to get interface number when we only have struct usb_serial.
504  */
505 static u8 cp210x_interface_num(struct usb_serial *serial)
506 {
507         struct usb_host_interface *cur_altsetting;
508
509         cur_altsetting = serial->interface->cur_altsetting;
510
511         return cur_altsetting->desc.bInterfaceNumber;
512 }
513
514 /*
515  * Reads a variable-sized block of CP210X_ registers, identified by req.
516  * Returns data into buf in native USB byte order.
517  */
518 static int cp210x_read_reg_block(struct usb_serial_port *port, u8 req,
519                 void *buf, int bufsize)
520 {
521         struct usb_serial *serial = port->serial;
522         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
523         void *dmabuf;
524         int result;
525
526         dmabuf = kmalloc(bufsize, GFP_KERNEL);
527         if (!dmabuf) {
528                 /*
529                  * FIXME Some callers don't bother to check for error,
530                  * at least give them consistent junk until they are fixed
531                  */
532                 memset(buf, 0, bufsize);
533                 return -ENOMEM;
534         }
535
536         result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
537                         req, REQTYPE_INTERFACE_TO_HOST, 0,
538                         port_priv->bInterfaceNumber, dmabuf, bufsize,
539                         USB_CTRL_SET_TIMEOUT);
540         if (result == bufsize) {
541                 memcpy(buf, dmabuf, bufsize);
542                 result = 0;
543         } else {
544                 dev_err(&port->dev, "failed get req 0x%x size %d status: %d\n",
545                                 req, bufsize, result);
546                 if (result >= 0)
547                         result = -EIO;
548
549                 /*
550                  * FIXME Some callers don't bother to check for error,
551                  * at least give them consistent junk until they are fixed
552                  */
553                 memset(buf, 0, bufsize);
554         }
555
556         kfree(dmabuf);
557
558         return result;
559 }
560
561 /*
562  * Reads any 32-bit CP210X_ register identified by req.
563  */
564 static int cp210x_read_u32_reg(struct usb_serial_port *port, u8 req, u32 *val)
565 {
566         __le32 le32_val;
567         int err;
568
569         err = cp210x_read_reg_block(port, req, &le32_val, sizeof(le32_val));
570         if (err) {
571                 /*
572                  * FIXME Some callers don't bother to check for error,
573                  * at least give them consistent junk until they are fixed
574                  */
575                 *val = 0;
576                 return err;
577         }
578
579         *val = le32_to_cpu(le32_val);
580
581         return 0;
582 }
583
584 /*
585  * Reads any 16-bit CP210X_ register identified by req.
586  */
587 static int cp210x_read_u16_reg(struct usb_serial_port *port, u8 req, u16 *val)
588 {
589         __le16 le16_val;
590         int err;
591
592         err = cp210x_read_reg_block(port, req, &le16_val, sizeof(le16_val));
593         if (err)
594                 return err;
595
596         *val = le16_to_cpu(le16_val);
597
598         return 0;
599 }
600
601 /*
602  * Reads any 8-bit CP210X_ register identified by req.
603  */
604 static int cp210x_read_u8_reg(struct usb_serial_port *port, u8 req, u8 *val)
605 {
606         return cp210x_read_reg_block(port, req, val, sizeof(*val));
607 }
608
609 /*
610  * Reads a variable-sized vendor block of CP210X_ registers, identified by val.
611  * Returns data into buf in native USB byte order.
612  */
613 static int cp210x_read_vendor_block(struct usb_serial *serial, u8 type, u16 val,
614                                     void *buf, int bufsize)
615 {
616         void *dmabuf;
617         int result;
618
619         dmabuf = kmalloc(bufsize, GFP_KERNEL);
620         if (!dmabuf)
621                 return -ENOMEM;
622
623         result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
624                                  CP210X_VENDOR_SPECIFIC, type, val,
625                                  cp210x_interface_num(serial), dmabuf, bufsize,
626                                  USB_CTRL_GET_TIMEOUT);
627         if (result == bufsize) {
628                 memcpy(buf, dmabuf, bufsize);
629                 result = 0;
630         } else {
631                 dev_err(&serial->interface->dev,
632                         "failed to get vendor val 0x%04x size %d: %d\n", val,
633                         bufsize, result);
634                 if (result >= 0)
635                         result = -EIO;
636         }
637
638         kfree(dmabuf);
639
640         return result;
641 }
642
643 /*
644  * Writes any 16-bit CP210X_ register (req) whose value is passed
645  * entirely in the wValue field of the USB request.
646  */
647 static int cp210x_write_u16_reg(struct usb_serial_port *port, u8 req, u16 val)
648 {
649         struct usb_serial *serial = port->serial;
650         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
651         int result;
652
653         result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
654                         req, REQTYPE_HOST_TO_INTERFACE, val,
655                         port_priv->bInterfaceNumber, NULL, 0,
656                         USB_CTRL_SET_TIMEOUT);
657         if (result < 0) {
658                 dev_err(&port->dev, "failed set request 0x%x status: %d\n",
659                                 req, result);
660         }
661
662         return result;
663 }
664
665 /*
666  * Writes a variable-sized block of CP210X_ registers, identified by req.
667  * Data in buf must be in native USB byte order.
668  */
669 static int cp210x_write_reg_block(struct usb_serial_port *port, u8 req,
670                 void *buf, int bufsize)
671 {
672         struct usb_serial *serial = port->serial;
673         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
674         void *dmabuf;
675         int result;
676
677         dmabuf = kmemdup(buf, bufsize, GFP_KERNEL);
678         if (!dmabuf)
679                 return -ENOMEM;
680
681         result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
682                         req, REQTYPE_HOST_TO_INTERFACE, 0,
683                         port_priv->bInterfaceNumber, dmabuf, bufsize,
684                         USB_CTRL_SET_TIMEOUT);
685
686         kfree(dmabuf);
687
688         if (result == bufsize) {
689                 result = 0;
690         } else {
691                 dev_err(&port->dev, "failed set req 0x%x size %d status: %d\n",
692                                 req, bufsize, result);
693                 if (result >= 0)
694                         result = -EIO;
695         }
696
697         return result;
698 }
699
700 /*
701  * Writes any 32-bit CP210X_ register identified by req.
702  */
703 static int cp210x_write_u32_reg(struct usb_serial_port *port, u8 req, u32 val)
704 {
705         __le32 le32_val;
706
707         le32_val = cpu_to_le32(val);
708
709         return cp210x_write_reg_block(port, req, &le32_val, sizeof(le32_val));
710 }
711
712 #ifdef CONFIG_GPIOLIB
713 /*
714  * Writes a variable-sized vendor block of CP210X_ registers, identified by val.
715  * Data in buf must be in native USB byte order.
716  */
717 static int cp210x_write_vendor_block(struct usb_serial *serial, u8 type,
718                                      u16 val, void *buf, int bufsize)
719 {
720         void *dmabuf;
721         int result;
722
723         dmabuf = kmemdup(buf, bufsize, GFP_KERNEL);
724         if (!dmabuf)
725                 return -ENOMEM;
726
727         result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
728                                  CP210X_VENDOR_SPECIFIC, type, val,
729                                  cp210x_interface_num(serial), dmabuf, bufsize,
730                                  USB_CTRL_SET_TIMEOUT);
731
732         kfree(dmabuf);
733
734         if (result == bufsize) {
735                 result = 0;
736         } else {
737                 dev_err(&serial->interface->dev,
738                         "failed to set vendor val 0x%04x size %d: %d\n", val,
739                         bufsize, result);
740                 if (result >= 0)
741                         result = -EIO;
742         }
743
744         return result;
745 }
746 #endif
747
748 /*
749  * Detect CP2108 GET_LINE_CTL bug and activate workaround.
750  * Write a known good value 0x800, read it back.
751  * If it comes back swapped the bug is detected.
752  * Preserve the original register value.
753  */
754 static int cp210x_detect_swapped_line_ctl(struct usb_serial_port *port)
755 {
756         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
757         u16 line_ctl_save;
758         u16 line_ctl_test;
759         int err;
760
761         err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, &line_ctl_save);
762         if (err)
763                 return err;
764
765         err = cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, 0x800);
766         if (err)
767                 return err;
768
769         err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, &line_ctl_test);
770         if (err)
771                 return err;
772
773         if (line_ctl_test == 8) {
774                 port_priv->has_swapped_line_ctl = true;
775                 line_ctl_save = swab16(line_ctl_save);
776         }
777
778         return cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, line_ctl_save);
779 }
780
781 /*
782  * Must always be called instead of cp210x_read_u16_reg(CP210X_GET_LINE_CTL)
783  * to workaround cp2108 bug and get correct value.
784  */
785 static int cp210x_get_line_ctl(struct usb_serial_port *port, u16 *ctl)
786 {
787         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
788         int err;
789
790         err = cp210x_read_u16_reg(port, CP210X_GET_LINE_CTL, ctl);
791         if (err)
792                 return err;
793
794         /* Workaround swapped bytes in 16-bit value from CP210X_GET_LINE_CTL */
795         if (port_priv->has_swapped_line_ctl)
796                 *ctl = swab16(*ctl);
797
798         return 0;
799 }
800
801 static int cp210x_open(struct tty_struct *tty, struct usb_serial_port *port)
802 {
803         int result;
804
805         result = cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_ENABLE);
806         if (result) {
807                 dev_err(&port->dev, "%s - Unable to enable UART\n", __func__);
808                 return result;
809         }
810
811         /* Configure the termios structure */
812         cp210x_get_termios(tty, port);
813
814         /* The baud rate must be initialised on cp2104 */
815         if (tty)
816                 cp210x_change_speed(tty, port, NULL);
817
818         return usb_serial_generic_open(tty, port);
819 }
820
821 static void cp210x_close(struct usb_serial_port *port)
822 {
823         usb_serial_generic_close(port);
824
825         /* Clear both queues; cp2108 needs this to avoid an occasional hang */
826         cp210x_write_u16_reg(port, CP210X_PURGE, PURGE_ALL);
827
828         cp210x_write_u16_reg(port, CP210X_IFC_ENABLE, UART_DISABLE);
829 }
830
831 /*
832  * Read how many bytes are waiting in the TX queue.
833  */
834 static int cp210x_get_tx_queue_byte_count(struct usb_serial_port *port,
835                 u32 *count)
836 {
837         struct usb_serial *serial = port->serial;
838         struct cp210x_port_private *port_priv = usb_get_serial_port_data(port);
839         struct cp210x_comm_status *sts;
840         int result;
841
842         sts = kmalloc(sizeof(*sts), GFP_KERNEL);
843         if (!sts)
844                 return -ENOMEM;
845
846         result = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
847                         CP210X_GET_COMM_STATUS, REQTYPE_INTERFACE_TO_HOST,
848                         0, port_priv->bInterfaceNumber, sts, sizeof(*sts),
849                         USB_CTRL_GET_TIMEOUT);
850         if (result == sizeof(*sts)) {
851                 *count = le32_to_cpu(sts->ulAmountInOutQueue);
852                 result = 0;
853         } else {
854                 dev_err(&port->dev, "failed to get comm status: %d\n", result);
855                 if (result >= 0)
856                         result = -EIO;
857         }
858
859         kfree(sts);
860
861         return result;
862 }
863
864 static bool cp210x_tx_empty(struct usb_serial_port *port)
865 {
866         int err;
867         u32 count;
868
869         err = cp210x_get_tx_queue_byte_count(port, &count);
870         if (err)
871                 return true;
872
873         return !count;
874 }
875
876 /*
877  * cp210x_get_termios
878  * Reads the baud rate, data bits, parity, stop bits and flow control mode
879  * from the device, corrects any unsupported values, and configures the
880  * termios structure to reflect the state of the device
881  */
882 static void cp210x_get_termios(struct tty_struct *tty,
883         struct usb_serial_port *port)
884 {
885         unsigned int baud;
886
887         if (tty) {
888                 cp210x_get_termios_port(tty->driver_data,
889                         &tty->termios.c_cflag, &baud);
890                 tty_encode_baud_rate(tty, baud, baud);
891         } else {
892                 tcflag_t cflag;
893                 cflag = 0;
894                 cp210x_get_termios_port(port, &cflag, &baud);
895         }
896 }
897
898 /*
899  * cp210x_get_termios_port
900  * This is the heart of cp210x_get_termios which always uses a &usb_serial_port.
901  */
902 static void cp210x_get_termios_port(struct usb_serial_port *port,
903         tcflag_t *cflagp, unsigned int *baudp)
904 {
905         struct device *dev = &port->dev;
906         tcflag_t cflag;
907         struct cp210x_flow_ctl flow_ctl;
908         u32 baud;
909         u16 bits;
910         u32 ctl_hs;
911         u32 flow_repl;
912
913         cp210x_read_u32_reg(port, CP210X_GET_BAUDRATE, &baud);
914
915         dev_dbg(dev, "%s - baud rate = %d\n", __func__, baud);
916         *baudp = baud;
917
918         cflag = *cflagp;
919
920         cp210x_get_line_ctl(port, &bits);
921         cflag &= ~CSIZE;
922         switch (bits & BITS_DATA_MASK) {
923         case BITS_DATA_5:
924                 dev_dbg(dev, "%s - data bits = 5\n", __func__);
925                 cflag |= CS5;
926                 break;
927         case BITS_DATA_6:
928                 dev_dbg(dev, "%s - data bits = 6\n", __func__);
929                 cflag |= CS6;
930                 break;
931         case BITS_DATA_7:
932                 dev_dbg(dev, "%s - data bits = 7\n", __func__);
933                 cflag |= CS7;
934                 break;
935         case BITS_DATA_8:
936                 dev_dbg(dev, "%s - data bits = 8\n", __func__);
937                 cflag |= CS8;
938                 break;
939         case BITS_DATA_9:
940                 dev_dbg(dev, "%s - data bits = 9 (not supported, using 8 data bits)\n", __func__);
941                 cflag |= CS8;
942                 bits &= ~BITS_DATA_MASK;
943                 bits |= BITS_DATA_8;
944                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
945                 break;
946         default:
947                 dev_dbg(dev, "%s - Unknown number of data bits, using 8\n", __func__);
948                 cflag |= CS8;
949                 bits &= ~BITS_DATA_MASK;
950                 bits |= BITS_DATA_8;
951                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
952                 break;
953         }
954
955         switch (bits & BITS_PARITY_MASK) {
956         case BITS_PARITY_NONE:
957                 dev_dbg(dev, "%s - parity = NONE\n", __func__);
958                 cflag &= ~PARENB;
959                 break;
960         case BITS_PARITY_ODD:
961                 dev_dbg(dev, "%s - parity = ODD\n", __func__);
962                 cflag |= (PARENB|PARODD);
963                 break;
964         case BITS_PARITY_EVEN:
965                 dev_dbg(dev, "%s - parity = EVEN\n", __func__);
966                 cflag &= ~PARODD;
967                 cflag |= PARENB;
968                 break;
969         case BITS_PARITY_MARK:
970                 dev_dbg(dev, "%s - parity = MARK\n", __func__);
971                 cflag |= (PARENB|PARODD|CMSPAR);
972                 break;
973         case BITS_PARITY_SPACE:
974                 dev_dbg(dev, "%s - parity = SPACE\n", __func__);
975                 cflag &= ~PARODD;
976                 cflag |= (PARENB|CMSPAR);
977                 break;
978         default:
979                 dev_dbg(dev, "%s - Unknown parity mode, disabling parity\n", __func__);
980                 cflag &= ~PARENB;
981                 bits &= ~BITS_PARITY_MASK;
982                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
983                 break;
984         }
985
986         cflag &= ~CSTOPB;
987         switch (bits & BITS_STOP_MASK) {
988         case BITS_STOP_1:
989                 dev_dbg(dev, "%s - stop bits = 1\n", __func__);
990                 break;
991         case BITS_STOP_1_5:
992                 dev_dbg(dev, "%s - stop bits = 1.5 (not supported, using 1 stop bit)\n", __func__);
993                 bits &= ~BITS_STOP_MASK;
994                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
995                 break;
996         case BITS_STOP_2:
997                 dev_dbg(dev, "%s - stop bits = 2\n", __func__);
998                 cflag |= CSTOPB;
999                 break;
1000         default:
1001                 dev_dbg(dev, "%s - Unknown number of stop bits, using 1 stop bit\n", __func__);
1002                 bits &= ~BITS_STOP_MASK;
1003                 cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits);
1004                 break;
1005         }
1006
1007         cp210x_read_reg_block(port, CP210X_GET_FLOW, &flow_ctl,
1008                         sizeof(flow_ctl));
1009         ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake);
1010         if (ctl_hs & CP210X_SERIAL_CTS_HANDSHAKE) {
1011                 dev_dbg(dev, "%s - flow control = CRTSCTS\n", __func__);
1012                 /*
1013                  * When the port is closed, the CP210x hardware disables
1014                  * auto-RTS and RTS is deasserted but it leaves auto-CTS when
1015                  * in hardware flow control mode. When re-opening the port, if
1016                  * auto-CTS is enabled on the cp210x, then auto-RTS must be
1017                  * re-enabled in the driver.
1018                  */
1019                 flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace);
1020                 flow_repl &= ~CP210X_SERIAL_RTS_MASK;
1021                 flow_repl |= CP210X_SERIAL_RTS_SHIFT(CP210X_SERIAL_RTS_FLOW_CTL);
1022                 flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
1023                 cp210x_write_reg_block(port,
1024                                 CP210X_SET_FLOW,
1025                                 &flow_ctl,
1026                                 sizeof(flow_ctl));
1027
1028                 cflag |= CRTSCTS;
1029         } else {
1030                 dev_dbg(dev, "%s - flow control = NONE\n", __func__);
1031                 cflag &= ~CRTSCTS;
1032         }
1033
1034         *cflagp = cflag;
1035 }
1036
1037 struct cp210x_rate {
1038         speed_t rate;
1039         speed_t high;
1040 };
1041
1042 static const struct cp210x_rate cp210x_an205_table1[] = {
1043         { 300, 300 },
1044         { 600, 600 },
1045         { 1200, 1200 },
1046         { 1800, 1800 },
1047         { 2400, 2400 },
1048         { 4000, 4000 },
1049         { 4800, 4803 },
1050         { 7200, 7207 },
1051         { 9600, 9612 },
1052         { 14400, 14428 },
1053         { 16000, 16062 },
1054         { 19200, 19250 },
1055         { 28800, 28912 },
1056         { 38400, 38601 },
1057         { 51200, 51558 },
1058         { 56000, 56280 },
1059         { 57600, 58053 },
1060         { 64000, 64111 },
1061         { 76800, 77608 },
1062         { 115200, 117028 },
1063         { 128000, 129347 },
1064         { 153600, 156868 },
1065         { 230400, 237832 },
1066         { 250000, 254234 },
1067         { 256000, 273066 },
1068         { 460800, 491520 },
1069         { 500000, 567138 },
1070         { 576000, 670254 },
1071         { 921600, UINT_MAX }
1072 };
1073
1074 /*
1075  * Quantises the baud rate as per AN205 Table 1
1076  */
1077 static speed_t cp210x_get_an205_rate(speed_t baud)
1078 {
1079         int i;
1080
1081         for (i = 0; i < ARRAY_SIZE(cp210x_an205_table1); ++i) {
1082                 if (baud <= cp210x_an205_table1[i].high)
1083                         break;
1084         }
1085
1086         return cp210x_an205_table1[i].rate;
1087 }
1088
1089 static speed_t cp210x_get_actual_rate(struct usb_serial *serial, speed_t baud)
1090 {
1091         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1092         unsigned int prescale = 1;
1093         unsigned int div;
1094
1095         baud = clamp(baud, 300u, priv->max_speed);
1096
1097         if (baud <= 365)
1098                 prescale = 4;
1099
1100         div = DIV_ROUND_CLOSEST(48000000, 2 * prescale * baud);
1101         baud = 48000000 / (2 * prescale * div);
1102
1103         return baud;
1104 }
1105
1106 /*
1107  * CP2101 supports the following baud rates:
1108  *
1109  *      300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 28800,
1110  *      38400, 56000, 57600, 115200, 128000, 230400, 460800, 921600
1111  *
1112  * CP2102 and CP2103 support the following additional rates:
1113  *
1114  *      4000, 16000, 51200, 64000, 76800, 153600, 250000, 256000, 500000,
1115  *      576000
1116  *
1117  * The device will map a requested rate to a supported one, but the result
1118  * of requests for rates greater than 1053257 is undefined (see AN205).
1119  *
1120  * CP2104, CP2105 and CP2110 support most rates up to 2M, 921k and 1M baud,
1121  * respectively, with an error less than 1%. The actual rates are determined
1122  * by
1123  *
1124  *      div = round(freq / (2 x prescale x request))
1125  *      actual = freq / (2 x prescale x div)
1126  *
1127  * For CP2104 and CP2105 freq is 48Mhz and prescale is 4 for request <= 365bps
1128  * or 1 otherwise.
1129  * For CP2110 freq is 24Mhz and prescale is 4 for request <= 300bps or 1
1130  * otherwise.
1131  */
1132 static void cp210x_change_speed(struct tty_struct *tty,
1133                 struct usb_serial_port *port, struct ktermios *old_termios)
1134 {
1135         struct usb_serial *serial = port->serial;
1136         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1137         u32 baud;
1138
1139         baud = tty->termios.c_ospeed;
1140
1141         /*
1142          * This maps the requested rate to the actual rate, a valid rate on
1143          * cp2102 or cp2103, or to an arbitrary rate in [1M, max_speed].
1144          *
1145          * NOTE: B0 is not implemented.
1146          */
1147         if (priv->use_actual_rate)
1148                 baud = cp210x_get_actual_rate(serial, baud);
1149         else if (baud < 1000000)
1150                 baud = cp210x_get_an205_rate(baud);
1151         else if (baud > priv->max_speed)
1152                 baud = priv->max_speed;
1153
1154         dev_dbg(&port->dev, "%s - setting baud rate to %u\n", __func__, baud);
1155         if (cp210x_write_u32_reg(port, CP210X_SET_BAUDRATE, baud)) {
1156                 dev_warn(&port->dev, "failed to set baud rate to %u\n", baud);
1157                 if (old_termios)
1158                         baud = old_termios->c_ospeed;
1159                 else
1160                         baud = 9600;
1161         }
1162
1163         tty_encode_baud_rate(tty, baud, baud);
1164 }
1165
1166 static void cp210x_set_termios(struct tty_struct *tty,
1167                 struct usb_serial_port *port, struct ktermios *old_termios)
1168 {
1169         struct device *dev = &port->dev;
1170         unsigned int cflag, old_cflag;
1171         u16 bits;
1172
1173         cflag = tty->termios.c_cflag;
1174         old_cflag = old_termios->c_cflag;
1175
1176         if (tty->termios.c_ospeed != old_termios->c_ospeed)
1177                 cp210x_change_speed(tty, port, old_termios);
1178
1179         /* If the number of data bits is to be updated */
1180         if ((cflag & CSIZE) != (old_cflag & CSIZE)) {
1181                 cp210x_get_line_ctl(port, &bits);
1182                 bits &= ~BITS_DATA_MASK;
1183                 switch (cflag & CSIZE) {
1184                 case CS5:
1185                         bits |= BITS_DATA_5;
1186                         dev_dbg(dev, "%s - data bits = 5\n", __func__);
1187                         break;
1188                 case CS6:
1189                         bits |= BITS_DATA_6;
1190                         dev_dbg(dev, "%s - data bits = 6\n", __func__);
1191                         break;
1192                 case CS7:
1193                         bits |= BITS_DATA_7;
1194                         dev_dbg(dev, "%s - data bits = 7\n", __func__);
1195                         break;
1196                 case CS8:
1197                 default:
1198                         bits |= BITS_DATA_8;
1199                         dev_dbg(dev, "%s - data bits = 8\n", __func__);
1200                         break;
1201                 }
1202                 if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits))
1203                         dev_dbg(dev, "Number of data bits requested not supported by device\n");
1204         }
1205
1206         if ((cflag     & (PARENB|PARODD|CMSPAR)) !=
1207             (old_cflag & (PARENB|PARODD|CMSPAR))) {
1208                 cp210x_get_line_ctl(port, &bits);
1209                 bits &= ~BITS_PARITY_MASK;
1210                 if (cflag & PARENB) {
1211                         if (cflag & CMSPAR) {
1212                                 if (cflag & PARODD) {
1213                                         bits |= BITS_PARITY_MARK;
1214                                         dev_dbg(dev, "%s - parity = MARK\n", __func__);
1215                                 } else {
1216                                         bits |= BITS_PARITY_SPACE;
1217                                         dev_dbg(dev, "%s - parity = SPACE\n", __func__);
1218                                 }
1219                         } else {
1220                                 if (cflag & PARODD) {
1221                                         bits |= BITS_PARITY_ODD;
1222                                         dev_dbg(dev, "%s - parity = ODD\n", __func__);
1223                                 } else {
1224                                         bits |= BITS_PARITY_EVEN;
1225                                         dev_dbg(dev, "%s - parity = EVEN\n", __func__);
1226                                 }
1227                         }
1228                 }
1229                 if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits))
1230                         dev_dbg(dev, "Parity mode not supported by device\n");
1231         }
1232
1233         if ((cflag & CSTOPB) != (old_cflag & CSTOPB)) {
1234                 cp210x_get_line_ctl(port, &bits);
1235                 bits &= ~BITS_STOP_MASK;
1236                 if (cflag & CSTOPB) {
1237                         bits |= BITS_STOP_2;
1238                         dev_dbg(dev, "%s - stop bits = 2\n", __func__);
1239                 } else {
1240                         bits |= BITS_STOP_1;
1241                         dev_dbg(dev, "%s - stop bits = 1\n", __func__);
1242                 }
1243                 if (cp210x_write_u16_reg(port, CP210X_SET_LINE_CTL, bits))
1244                         dev_dbg(dev, "Number of stop bits requested not supported by device\n");
1245         }
1246
1247         if ((cflag & CRTSCTS) != (old_cflag & CRTSCTS)) {
1248                 struct cp210x_flow_ctl flow_ctl;
1249                 u32 ctl_hs;
1250                 u32 flow_repl;
1251
1252                 cp210x_read_reg_block(port, CP210X_GET_FLOW, &flow_ctl,
1253                                 sizeof(flow_ctl));
1254                 ctl_hs = le32_to_cpu(flow_ctl.ulControlHandshake);
1255                 flow_repl = le32_to_cpu(flow_ctl.ulFlowReplace);
1256                 dev_dbg(dev, "%s - read ulControlHandshake=0x%08x, ulFlowReplace=0x%08x\n",
1257                                 __func__, ctl_hs, flow_repl);
1258
1259                 ctl_hs &= ~CP210X_SERIAL_DSR_HANDSHAKE;
1260                 ctl_hs &= ~CP210X_SERIAL_DCD_HANDSHAKE;
1261                 ctl_hs &= ~CP210X_SERIAL_DSR_SENSITIVITY;
1262                 ctl_hs &= ~CP210X_SERIAL_DTR_MASK;
1263                 ctl_hs |= CP210X_SERIAL_DTR_SHIFT(CP210X_SERIAL_DTR_ACTIVE);
1264                 if (cflag & CRTSCTS) {
1265                         ctl_hs |= CP210X_SERIAL_CTS_HANDSHAKE;
1266
1267                         flow_repl &= ~CP210X_SERIAL_RTS_MASK;
1268                         flow_repl |= CP210X_SERIAL_RTS_SHIFT(
1269                                         CP210X_SERIAL_RTS_FLOW_CTL);
1270                         dev_dbg(dev, "%s - flow control = CRTSCTS\n", __func__);
1271                 } else {
1272                         ctl_hs &= ~CP210X_SERIAL_CTS_HANDSHAKE;
1273
1274                         flow_repl &= ~CP210X_SERIAL_RTS_MASK;
1275                         flow_repl |= CP210X_SERIAL_RTS_SHIFT(
1276                                         CP210X_SERIAL_RTS_ACTIVE);
1277                         dev_dbg(dev, "%s - flow control = NONE\n", __func__);
1278                 }
1279
1280                 dev_dbg(dev, "%s - write ulControlHandshake=0x%08x, ulFlowReplace=0x%08x\n",
1281                                 __func__, ctl_hs, flow_repl);
1282                 flow_ctl.ulControlHandshake = cpu_to_le32(ctl_hs);
1283                 flow_ctl.ulFlowReplace = cpu_to_le32(flow_repl);
1284                 cp210x_write_reg_block(port, CP210X_SET_FLOW, &flow_ctl,
1285                                 sizeof(flow_ctl));
1286         }
1287
1288 }
1289
1290 static int cp210x_tiocmset(struct tty_struct *tty,
1291                 unsigned int set, unsigned int clear)
1292 {
1293         struct usb_serial_port *port = tty->driver_data;
1294         return cp210x_tiocmset_port(port, set, clear);
1295 }
1296
1297 static int cp210x_tiocmset_port(struct usb_serial_port *port,
1298                 unsigned int set, unsigned int clear)
1299 {
1300         u16 control = 0;
1301
1302         if (set & TIOCM_RTS) {
1303                 control |= CONTROL_RTS;
1304                 control |= CONTROL_WRITE_RTS;
1305         }
1306         if (set & TIOCM_DTR) {
1307                 control |= CONTROL_DTR;
1308                 control |= CONTROL_WRITE_DTR;
1309         }
1310         if (clear & TIOCM_RTS) {
1311                 control &= ~CONTROL_RTS;
1312                 control |= CONTROL_WRITE_RTS;
1313         }
1314         if (clear & TIOCM_DTR) {
1315                 control &= ~CONTROL_DTR;
1316                 control |= CONTROL_WRITE_DTR;
1317         }
1318
1319         dev_dbg(&port->dev, "%s - control = 0x%.4x\n", __func__, control);
1320
1321         return cp210x_write_u16_reg(port, CP210X_SET_MHS, control);
1322 }
1323
1324 static void cp210x_dtr_rts(struct usb_serial_port *p, int on)
1325 {
1326         if (on)
1327                 cp210x_tiocmset_port(p, TIOCM_DTR|TIOCM_RTS, 0);
1328         else
1329                 cp210x_tiocmset_port(p, 0, TIOCM_DTR|TIOCM_RTS);
1330 }
1331
1332 static int cp210x_tiocmget(struct tty_struct *tty)
1333 {
1334         struct usb_serial_port *port = tty->driver_data;
1335         u8 control;
1336         int result;
1337
1338         result = cp210x_read_u8_reg(port, CP210X_GET_MDMSTS, &control);
1339         if (result)
1340                 return result;
1341
1342         result = ((control & CONTROL_DTR) ? TIOCM_DTR : 0)
1343                 |((control & CONTROL_RTS) ? TIOCM_RTS : 0)
1344                 |((control & CONTROL_CTS) ? TIOCM_CTS : 0)
1345                 |((control & CONTROL_DSR) ? TIOCM_DSR : 0)
1346                 |((control & CONTROL_RING)? TIOCM_RI  : 0)
1347                 |((control & CONTROL_DCD) ? TIOCM_CD  : 0);
1348
1349         dev_dbg(&port->dev, "%s - control = 0x%.2x\n", __func__, control);
1350
1351         return result;
1352 }
1353
1354 static void cp210x_break_ctl(struct tty_struct *tty, int break_state)
1355 {
1356         struct usb_serial_port *port = tty->driver_data;
1357         u16 state;
1358
1359         if (break_state == 0)
1360                 state = BREAK_OFF;
1361         else
1362                 state = BREAK_ON;
1363         dev_dbg(&port->dev, "%s - turning break %s\n", __func__,
1364                 state == BREAK_OFF ? "off" : "on");
1365         cp210x_write_u16_reg(port, CP210X_SET_BREAK, state);
1366 }
1367
1368 #ifdef CONFIG_GPIOLIB
1369 static int cp210x_gpio_request(struct gpio_chip *gc, unsigned int offset)
1370 {
1371         struct usb_serial *serial = gpiochip_get_data(gc);
1372         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1373
1374         if (priv->gpio_altfunc & BIT(offset))
1375                 return -ENODEV;
1376
1377         return 0;
1378 }
1379
1380 static int cp210x_gpio_get(struct gpio_chip *gc, unsigned int gpio)
1381 {
1382         struct usb_serial *serial = gpiochip_get_data(gc);
1383         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1384         u8 req_type = REQTYPE_DEVICE_TO_HOST;
1385         int result;
1386         u8 buf;
1387
1388         if (priv->partnum == CP210X_PARTNUM_CP2105)
1389                 req_type = REQTYPE_INTERFACE_TO_HOST;
1390
1391         result = usb_autopm_get_interface(serial->interface);
1392         if (result)
1393                 return result;
1394
1395         result = cp210x_read_vendor_block(serial, req_type,
1396                                           CP210X_READ_LATCH, &buf, sizeof(buf));
1397         usb_autopm_put_interface(serial->interface);
1398         if (result < 0)
1399                 return result;
1400
1401         return !!(buf & BIT(gpio));
1402 }
1403
1404 static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
1405 {
1406         struct usb_serial *serial = gpiochip_get_data(gc);
1407         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1408         struct cp210x_gpio_write buf;
1409         int result;
1410
1411         if (value == 1)
1412                 buf.state = BIT(gpio);
1413         else
1414                 buf.state = 0;
1415
1416         buf.mask = BIT(gpio);
1417
1418         result = usb_autopm_get_interface(serial->interface);
1419         if (result)
1420                 goto out;
1421
1422         if (priv->partnum == CP210X_PARTNUM_CP2105) {
1423                 result = cp210x_write_vendor_block(serial,
1424                                                    REQTYPE_HOST_TO_INTERFACE,
1425                                                    CP210X_WRITE_LATCH, &buf,
1426                                                    sizeof(buf));
1427         } else {
1428                 u16 wIndex = buf.state << 8 | buf.mask;
1429
1430                 result = usb_control_msg(serial->dev,
1431                                          usb_sndctrlpipe(serial->dev, 0),
1432                                          CP210X_VENDOR_SPECIFIC,
1433                                          REQTYPE_HOST_TO_DEVICE,
1434                                          CP210X_WRITE_LATCH,
1435                                          wIndex,
1436                                          NULL, 0, USB_CTRL_SET_TIMEOUT);
1437         }
1438
1439         usb_autopm_put_interface(serial->interface);
1440 out:
1441         if (result < 0) {
1442                 dev_err(&serial->interface->dev, "failed to set GPIO value: %d\n",
1443                                 result);
1444         }
1445 }
1446
1447 static int cp210x_gpio_direction_get(struct gpio_chip *gc, unsigned int gpio)
1448 {
1449         struct usb_serial *serial = gpiochip_get_data(gc);
1450         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1451
1452         return priv->gpio_input & BIT(gpio);
1453 }
1454
1455 static int cp210x_gpio_direction_input(struct gpio_chip *gc, unsigned int gpio)
1456 {
1457         struct usb_serial *serial = gpiochip_get_data(gc);
1458         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1459
1460         if (priv->partnum == CP210X_PARTNUM_CP2105) {
1461                 /* hardware does not support an input mode */
1462                 return -ENOTSUPP;
1463         }
1464
1465         /* push-pull pins cannot be changed to be inputs */
1466         if (priv->gpio_pushpull & BIT(gpio))
1467                 return -EINVAL;
1468
1469         /* make sure to release pin if it is being driven low */
1470         cp210x_gpio_set(gc, gpio, 1);
1471
1472         priv->gpio_input |= BIT(gpio);
1473
1474         return 0;
1475 }
1476
1477 static int cp210x_gpio_direction_output(struct gpio_chip *gc, unsigned int gpio,
1478                                         int value)
1479 {
1480         struct usb_serial *serial = gpiochip_get_data(gc);
1481         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1482
1483         priv->gpio_input &= ~BIT(gpio);
1484         cp210x_gpio_set(gc, gpio, value);
1485
1486         return 0;
1487 }
1488
1489 static int cp210x_gpio_set_config(struct gpio_chip *gc, unsigned int gpio,
1490                                   unsigned long config)
1491 {
1492         struct usb_serial *serial = gpiochip_get_data(gc);
1493         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1494         enum pin_config_param param = pinconf_to_config_param(config);
1495
1496         /* Succeed only if in correct mode (this can't be set at runtime) */
1497         if ((param == PIN_CONFIG_DRIVE_PUSH_PULL) &&
1498             (priv->gpio_pushpull & BIT(gpio)))
1499                 return 0;
1500
1501         if ((param == PIN_CONFIG_DRIVE_OPEN_DRAIN) &&
1502             !(priv->gpio_pushpull & BIT(gpio)))
1503                 return 0;
1504
1505         return -ENOTSUPP;
1506 }
1507
1508 /*
1509  * This function is for configuring GPIO using shared pins, where other signals
1510  * are made unavailable by configuring the use of GPIO. This is believed to be
1511  * only applicable to the cp2105 at this point, the other devices supported by
1512  * this driver that provide GPIO do so in a way that does not impact other
1513  * signals and are thus expected to have very different initialisation.
1514  */
1515 static int cp2105_gpioconf_init(struct usb_serial *serial)
1516 {
1517         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1518         struct cp210x_pin_mode mode;
1519         struct cp210x_config config;
1520         u8 intf_num = cp210x_interface_num(serial);
1521         u8 iface_config;
1522         int result;
1523
1524         result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
1525                                           CP210X_GET_DEVICEMODE, &mode,
1526                                           sizeof(mode));
1527         if (result < 0)
1528                 return result;
1529
1530         result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
1531                                           CP210X_GET_PORTCONFIG, &config,
1532                                           sizeof(config));
1533         if (result < 0)
1534                 return result;
1535
1536         /*  2 banks of GPIO - One for the pins taken from each serial port */
1537         if (intf_num == 0) {
1538                 if (mode.eci == CP210X_PIN_MODE_MODEM) {
1539                         /* mark all GPIOs of this interface as reserved */
1540                         priv->gpio_altfunc = 0xff;
1541                         return 0;
1542                 }
1543
1544                 iface_config = config.eci_cfg;
1545                 priv->gpio_pushpull = (u8)((le16_to_cpu(config.gpio_mode) &
1546                                                 CP210X_ECI_GPIO_MODE_MASK) >>
1547                                                 CP210X_ECI_GPIO_MODE_OFFSET);
1548                 priv->gc.ngpio = 2;
1549         } else if (intf_num == 1) {
1550                 if (mode.sci == CP210X_PIN_MODE_MODEM) {
1551                         /* mark all GPIOs of this interface as reserved */
1552                         priv->gpio_altfunc = 0xff;
1553                         return 0;
1554                 }
1555
1556                 iface_config = config.sci_cfg;
1557                 priv->gpio_pushpull = (u8)((le16_to_cpu(config.gpio_mode) &
1558                                                 CP210X_SCI_GPIO_MODE_MASK) >>
1559                                                 CP210X_SCI_GPIO_MODE_OFFSET);
1560                 priv->gc.ngpio = 3;
1561         } else {
1562                 return -ENODEV;
1563         }
1564
1565         /* mark all pins which are not in GPIO mode */
1566         if (iface_config & CP2105_GPIO0_TXLED_MODE)     /* GPIO 0 */
1567                 priv->gpio_altfunc |= BIT(0);
1568         if (iface_config & (CP2105_GPIO1_RXLED_MODE |   /* GPIO 1 */
1569                         CP2105_GPIO1_RS485_MODE))
1570                 priv->gpio_altfunc |= BIT(1);
1571
1572         /* driver implementation for CP2105 only supports outputs */
1573         priv->gpio_input = 0;
1574
1575         return 0;
1576 }
1577
1578 static int cp2102n_gpioconf_init(struct usb_serial *serial)
1579 {
1580         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1581         const u16 config_size = 0x02a6;
1582         u8 gpio_rst_latch;
1583         u8 config_version;
1584         u8 gpio_pushpull;
1585         u8 *config_buf;
1586         u8 gpio_latch;
1587         u8 gpio_ctrl;
1588         int result;
1589         u8 i;
1590
1591         /*
1592          * Retrieve device configuration from the device.
1593          * The array received contains all customization settings done at the
1594          * factory/manufacturer. Format of the array is documented at the
1595          * time of writing at:
1596          * https://www.silabs.com/community/interface/knowledge-base.entry.html/2017/03/31/cp2102n_setconfig-xsfa
1597          */
1598         config_buf = kmalloc(config_size, GFP_KERNEL);
1599         if (!config_buf)
1600                 return -ENOMEM;
1601
1602         result = cp210x_read_vendor_block(serial,
1603                                           REQTYPE_DEVICE_TO_HOST,
1604                                           CP210X_READ_2NCONFIG,
1605                                           config_buf,
1606                                           config_size);
1607         if (result < 0) {
1608                 kfree(config_buf);
1609                 return result;
1610         }
1611
1612         config_version = config_buf[CP210X_2NCONFIG_CONFIG_VERSION_IDX];
1613         gpio_pushpull = config_buf[CP210X_2NCONFIG_GPIO_MODE_IDX];
1614         gpio_ctrl = config_buf[CP210X_2NCONFIG_GPIO_CONTROL_IDX];
1615         gpio_rst_latch = config_buf[CP210X_2NCONFIG_GPIO_RSTLATCH_IDX];
1616
1617         kfree(config_buf);
1618
1619         /* Make sure this is a config format we understand. */
1620         if (config_version != 0x01)
1621                 return -ENOTSUPP;
1622
1623         /*
1624          * We only support 4 GPIOs even on the QFN28 package, because
1625          * config locations of GPIOs 4-6 determined using reverse
1626          * engineering revealed conflicting offsets with other
1627          * documented functions. So we'll just play it safe for now.
1628          */
1629         priv->gc.ngpio = 4;
1630
1631         /*
1632          * Get default pin states after reset. Needed so we can determine
1633          * the direction of an open-drain pin.
1634          */
1635         gpio_latch = (gpio_rst_latch >> 3) & 0x0f;
1636
1637         /* 0 indicates open-drain mode, 1 is push-pull */
1638         priv->gpio_pushpull = (gpio_pushpull >> 3) & 0x0f;
1639
1640         /* 0 indicates GPIO mode, 1 is alternate function */
1641         if (priv->partnum == CP210X_PARTNUM_CP2102N_QFN20) {
1642                 /* QFN20 is special... */
1643                 if (gpio_ctrl & CP2102N_QFN20_GPIO0_CLK_MODE)   /* GPIO 0 */
1644                         priv->gpio_altfunc |= BIT(0);
1645                 if (gpio_ctrl & CP2102N_QFN20_GPIO1_RS485_MODE) /* GPIO 1 */
1646                         priv->gpio_altfunc |= BIT(1);
1647                 if (gpio_ctrl & CP2102N_QFN20_GPIO2_TXLED_MODE) /* GPIO 2 */
1648                         priv->gpio_altfunc |= BIT(2);
1649                 if (gpio_ctrl & CP2102N_QFN20_GPIO3_RXLED_MODE) /* GPIO 3 */
1650                         priv->gpio_altfunc |= BIT(3);
1651         } else {
1652                 priv->gpio_altfunc = (gpio_ctrl >> 2) & 0x0f;
1653         }
1654
1655         /*
1656          * The CP2102N does not strictly has input and output pin modes,
1657          * it only knows open-drain and push-pull modes which is set at
1658          * factory. An open-drain pin can function both as an
1659          * input or an output. We emulate input mode for open-drain pins
1660          * by making sure they are not driven low, and we do not allow
1661          * push-pull pins to be set as an input.
1662          */
1663         for (i = 0; i < priv->gc.ngpio; ++i) {
1664                 /*
1665                  * Set direction to "input" iff pin is open-drain and reset
1666                  * value is 1.
1667                  */
1668                 if (!(priv->gpio_pushpull & BIT(i)) && (gpio_latch & BIT(i)))
1669                         priv->gpio_input |= BIT(i);
1670         }
1671
1672         return 0;
1673 }
1674
1675 static int cp210x_gpio_init(struct usb_serial *serial)
1676 {
1677         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1678         int result;
1679
1680         switch (priv->partnum) {
1681         case CP210X_PARTNUM_CP2105:
1682                 result = cp2105_gpioconf_init(serial);
1683                 break;
1684         case CP210X_PARTNUM_CP2102N_QFN28:
1685         case CP210X_PARTNUM_CP2102N_QFN24:
1686         case CP210X_PARTNUM_CP2102N_QFN20:
1687                 result = cp2102n_gpioconf_init(serial);
1688                 break;
1689         default:
1690                 return 0;
1691         }
1692
1693         if (result < 0)
1694                 return result;
1695
1696         priv->gc.label = "cp210x";
1697         priv->gc.request = cp210x_gpio_request;
1698         priv->gc.get_direction = cp210x_gpio_direction_get;
1699         priv->gc.direction_input = cp210x_gpio_direction_input;
1700         priv->gc.direction_output = cp210x_gpio_direction_output;
1701         priv->gc.get = cp210x_gpio_get;
1702         priv->gc.set = cp210x_gpio_set;
1703         priv->gc.set_config = cp210x_gpio_set_config;
1704         priv->gc.owner = THIS_MODULE;
1705         priv->gc.parent = &serial->interface->dev;
1706         priv->gc.base = -1;
1707         priv->gc.can_sleep = true;
1708
1709         result = gpiochip_add_data(&priv->gc, serial);
1710         if (!result)
1711                 priv->gpio_registered = true;
1712
1713         return result;
1714 }
1715
1716 static void cp210x_gpio_remove(struct usb_serial *serial)
1717 {
1718         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1719
1720         if (priv->gpio_registered) {
1721                 gpiochip_remove(&priv->gc);
1722                 priv->gpio_registered = false;
1723         }
1724 }
1725
1726 #else
1727
1728 static int cp210x_gpio_init(struct usb_serial *serial)
1729 {
1730         return 0;
1731 }
1732
1733 static void cp210x_gpio_remove(struct usb_serial *serial)
1734 {
1735         /* Nothing to do */
1736 }
1737
1738 #endif
1739
1740 static int cp210x_port_probe(struct usb_serial_port *port)
1741 {
1742         struct usb_serial *serial = port->serial;
1743         struct cp210x_port_private *port_priv;
1744         int ret;
1745
1746         port_priv = kzalloc(sizeof(*port_priv), GFP_KERNEL);
1747         if (!port_priv)
1748                 return -ENOMEM;
1749
1750         port_priv->bInterfaceNumber = cp210x_interface_num(serial);
1751
1752         usb_set_serial_port_data(port, port_priv);
1753
1754         ret = cp210x_detect_swapped_line_ctl(port);
1755         if (ret) {
1756                 kfree(port_priv);
1757                 return ret;
1758         }
1759
1760         return 0;
1761 }
1762
1763 static int cp210x_port_remove(struct usb_serial_port *port)
1764 {
1765         struct cp210x_port_private *port_priv;
1766
1767         port_priv = usb_get_serial_port_data(port);
1768         kfree(port_priv);
1769
1770         return 0;
1771 }
1772
1773 static void cp210x_init_max_speed(struct usb_serial *serial)
1774 {
1775         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1776         bool use_actual_rate = false;
1777         speed_t max;
1778
1779         switch (priv->partnum) {
1780         case CP210X_PARTNUM_CP2101:
1781                 max = 921600;
1782                 break;
1783         case CP210X_PARTNUM_CP2102:
1784         case CP210X_PARTNUM_CP2103:
1785                 max = 1000000;
1786                 break;
1787         case CP210X_PARTNUM_CP2104:
1788                 use_actual_rate = true;
1789                 max = 2000000;
1790                 break;
1791         case CP210X_PARTNUM_CP2108:
1792                 max = 2000000;
1793                 break;
1794         case CP210X_PARTNUM_CP2105:
1795                 if (cp210x_interface_num(serial) == 0) {
1796                         use_actual_rate = true;
1797                         max = 2000000;  /* ECI */
1798                 } else {
1799                         max = 921600;   /* SCI */
1800                 }
1801                 break;
1802         case CP210X_PARTNUM_CP2102N_QFN28:
1803         case CP210X_PARTNUM_CP2102N_QFN24:
1804         case CP210X_PARTNUM_CP2102N_QFN20:
1805                 use_actual_rate = true;
1806                 max = 3000000;
1807                 break;
1808         default:
1809                 max = 2000000;
1810                 break;
1811         }
1812
1813         priv->max_speed = max;
1814         priv->use_actual_rate = use_actual_rate;
1815 }
1816
1817 static int cp210x_attach(struct usb_serial *serial)
1818 {
1819         int result;
1820         struct cp210x_serial_private *priv;
1821
1822         priv = kzalloc(sizeof(*priv), GFP_KERNEL);
1823         if (!priv)
1824                 return -ENOMEM;
1825
1826         result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
1827                                           CP210X_GET_PARTNUM, &priv->partnum,
1828                                           sizeof(priv->partnum));
1829         if (result < 0) {
1830                 dev_warn(&serial->interface->dev,
1831                          "querying part number failed\n");
1832                 priv->partnum = CP210X_PARTNUM_UNKNOWN;
1833         }
1834
1835         usb_set_serial_data(serial, priv);
1836
1837         cp210x_init_max_speed(serial);
1838
1839         result = cp210x_gpio_init(serial);
1840         if (result < 0) {
1841                 dev_err(&serial->interface->dev, "GPIO initialisation failed: %d\n",
1842                                 result);
1843         }
1844
1845         return 0;
1846 }
1847
1848 static void cp210x_disconnect(struct usb_serial *serial)
1849 {
1850         cp210x_gpio_remove(serial);
1851 }
1852
1853 static void cp210x_release(struct usb_serial *serial)
1854 {
1855         struct cp210x_serial_private *priv = usb_get_serial_data(serial);
1856
1857         cp210x_gpio_remove(serial);
1858
1859         kfree(priv);
1860 }
1861
1862 module_usb_serial_driver(serial_drivers, id_table);
1863
1864 MODULE_DESCRIPTION(DRIVER_DESC);
1865 MODULE_LICENSE("GPL v2");