forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
kernel/drivers/tty/serial/8250/8250_fintek.c
....@@ -19,6 +19,7 @@
1919 #define CHIP_ID2 0x21
2020 #define CHIP_ID_F81865 0x0407
2121 #define CHIP_ID_F81866 0x1010
22
+#define CHIP_ID_F81966 0x0215
2223 #define CHIP_ID_F81216AD 0x1602
2324 #define CHIP_ID_F81216H 0x0501
2425 #define CHIP_ID_F81216 0x0802
....@@ -62,9 +63,9 @@
6263 #define F81216_LDN_HIGH 0x4
6364
6465 /*
65
- * F81866 registers
66
+ * F81866/966 registers
6667 *
67
- * The IRQ setting mode of F81866 is not the same with F81216 series.
68
+ * The IRQ setting mode of F81866/966 is not the same with F81216 series.
6869 * Level/Low: IRQ_MODE0:0, IRQ_MODE1:0
6970 * Edge/High: IRQ_MODE0:1, IRQ_MODE1:0
7071 *
....@@ -155,6 +156,7 @@
155156 switch (chip) {
156157 case CHIP_ID_F81865:
157158 case CHIP_ID_F81866:
159
+ case CHIP_ID_F81966:
158160 case CHIP_ID_F81216AD:
159161 case CHIP_ID_F81216H:
160162 case CHIP_ID_F81216:
....@@ -171,6 +173,7 @@
171173 int *max)
172174 {
173175 switch (pdata->pid) {
176
+ case CHIP_ID_F81966:
174177 case CHIP_ID_F81865:
175178 case CHIP_ID_F81866:
176179 *min = F81866_LDN_LOW;
....@@ -197,12 +200,12 @@
197200 if (!pdata)
198201 return -EINVAL;
199202
200
- /* Hardware do not support same RTS level on send and receive */
201
- if (!(rs485->flags & SER_RS485_RTS_ON_SEND) ==
202
- !(rs485->flags & SER_RS485_RTS_AFTER_SEND))
203
- return -EINVAL;
204203
205204 if (rs485->flags & SER_RS485_ENABLED) {
205
+ /* Hardware do not support same RTS level on send and receive */
206
+ if (!(rs485->flags & SER_RS485_RTS_ON_SEND) ==
207
+ !(rs485->flags & SER_RS485_RTS_AFTER_SEND))
208
+ return -EINVAL;
206209 memset(rs485->padding, 0, sizeof(rs485->padding));
207210 config |= RS485_URA;
208211 } else {
....@@ -248,10 +251,11 @@
248251 sio_write_reg(pdata, LDN, pdata->index);
249252
250253 switch (pdata->pid) {
254
+ case CHIP_ID_F81966:
251255 case CHIP_ID_F81866:
252256 sio_write_mask_reg(pdata, F81866_FIFO_CTRL, F81866_IRQ_MODE1,
253257 0);
254
- /* fall through */
258
+ fallthrough;
255259 case CHIP_ID_F81865:
256260 sio_write_mask_reg(pdata, F81866_IRQ_MODE, F81866_IRQ_SHARE,
257261 F81866_IRQ_SHARE);
....@@ -274,6 +278,7 @@
274278 {
275279 switch (pdata->pid) {
276280 case CHIP_ID_F81216H: /* 128Bytes FIFO */
281
+ case CHIP_ID_F81966:
277282 case CHIP_ID_F81866:
278283 sio_write_mask_reg(pdata, FIFO_CTRL,
279284 FIFO_MODE_MASK | RXFTHR_MODE_MASK,
....@@ -285,26 +290,9 @@
285290 }
286291 }
287292
288
-static void fintek_8250_goto_highspeed(struct uart_8250_port *uart,
289
- struct fintek_8250 *pdata)
290
-{
291
- sio_write_reg(pdata, LDN, pdata->index);
292
-
293
- switch (pdata->pid) {
294
- case CHIP_ID_F81866: /* set uart clock for high speed serial mode */
295
- sio_write_mask_reg(pdata, F81866_UART_CLK,
296
- F81866_UART_CLK_MASK,
297
- F81866_UART_CLK_14_769MHZ);
298
-
299
- uart->port.uartclk = 921600 * 16;
300
- break;
301
- default: /* leave clock speed untouched */
302
- break;
303
- }
304
-}
305
-
306
-void fintek_8250_set_termios(struct uart_port *port, struct ktermios *termios,
307
- struct ktermios *old)
293
+static void fintek_8250_set_termios(struct uart_port *port,
294
+ struct ktermios *termios,
295
+ struct ktermios *old)
308296 {
309297 struct fintek_8250 *pdata = port->private_data;
310298 unsigned int baud = tty_termios_baud_rate(termios);
....@@ -326,6 +314,7 @@
326314 case CHIP_ID_F81216H:
327315 reg = RS485;
328316 break;
317
+ case CHIP_ID_F81966:
329318 case CHIP_ID_F81866:
330319 reg = F81866_UART_CLK;
331320 break;
....@@ -372,6 +361,7 @@
372361
373362 switch (pdata->pid) {
374363 case CHIP_ID_F81216H:
364
+ case CHIP_ID_F81966:
375365 case CHIP_ID_F81866:
376366 uart->port.set_termios = fintek_8250_set_termios;
377367 break;
....@@ -421,7 +411,6 @@
421411
422412 fintek_8250_set_irq_mode(pdata, level_mode);
423413 fintek_8250_set_max_fifo(pdata);
424
- fintek_8250_goto_highspeed(uart, pdata);
425414
426415 fintek_8250_exit_key(addr[i]);
427416
....@@ -442,6 +431,7 @@
442431 switch (pdata->pid) {
443432 case CHIP_ID_F81216AD:
444433 case CHIP_ID_F81216H:
434
+ case CHIP_ID_F81966:
445435 case CHIP_ID_F81866:
446436 case CHIP_ID_F81865:
447437 uart->port.rs485_config = fintek_8250_rs485_config;