| .. | .. |
|---|
| 19 | 19 | #define CHIP_ID2 0x21 |
|---|
| 20 | 20 | #define CHIP_ID_F81865 0x0407 |
|---|
| 21 | 21 | #define CHIP_ID_F81866 0x1010 |
|---|
| 22 | +#define CHIP_ID_F81966 0x0215 |
|---|
| 22 | 23 | #define CHIP_ID_F81216AD 0x1602 |
|---|
| 23 | 24 | #define CHIP_ID_F81216H 0x0501 |
|---|
| 24 | 25 | #define CHIP_ID_F81216 0x0802 |
|---|
| .. | .. |
|---|
| 62 | 63 | #define F81216_LDN_HIGH 0x4 |
|---|
| 63 | 64 | |
|---|
| 64 | 65 | /* |
|---|
| 65 | | - * F81866 registers |
|---|
| 66 | + * F81866/966 registers |
|---|
| 66 | 67 | * |
|---|
| 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. |
|---|
| 68 | 69 | * Level/Low: IRQ_MODE0:0, IRQ_MODE1:0 |
|---|
| 69 | 70 | * Edge/High: IRQ_MODE0:1, IRQ_MODE1:0 |
|---|
| 70 | 71 | * |
|---|
| .. | .. |
|---|
| 155 | 156 | switch (chip) { |
|---|
| 156 | 157 | case CHIP_ID_F81865: |
|---|
| 157 | 158 | case CHIP_ID_F81866: |
|---|
| 159 | + case CHIP_ID_F81966: |
|---|
| 158 | 160 | case CHIP_ID_F81216AD: |
|---|
| 159 | 161 | case CHIP_ID_F81216H: |
|---|
| 160 | 162 | case CHIP_ID_F81216: |
|---|
| .. | .. |
|---|
| 171 | 173 | int *max) |
|---|
| 172 | 174 | { |
|---|
| 173 | 175 | switch (pdata->pid) { |
|---|
| 176 | + case CHIP_ID_F81966: |
|---|
| 174 | 177 | case CHIP_ID_F81865: |
|---|
| 175 | 178 | case CHIP_ID_F81866: |
|---|
| 176 | 179 | *min = F81866_LDN_LOW; |
|---|
| .. | .. |
|---|
| 197 | 200 | if (!pdata) |
|---|
| 198 | 201 | return -EINVAL; |
|---|
| 199 | 202 | |
|---|
| 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; |
|---|
| 204 | 203 | |
|---|
| 205 | 204 | 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; |
|---|
| 206 | 209 | memset(rs485->padding, 0, sizeof(rs485->padding)); |
|---|
| 207 | 210 | config |= RS485_URA; |
|---|
| 208 | 211 | } else { |
|---|
| .. | .. |
|---|
| 248 | 251 | sio_write_reg(pdata, LDN, pdata->index); |
|---|
| 249 | 252 | |
|---|
| 250 | 253 | switch (pdata->pid) { |
|---|
| 254 | + case CHIP_ID_F81966: |
|---|
| 251 | 255 | case CHIP_ID_F81866: |
|---|
| 252 | 256 | sio_write_mask_reg(pdata, F81866_FIFO_CTRL, F81866_IRQ_MODE1, |
|---|
| 253 | 257 | 0); |
|---|
| 254 | | - /* fall through */ |
|---|
| 258 | + fallthrough; |
|---|
| 255 | 259 | case CHIP_ID_F81865: |
|---|
| 256 | 260 | sio_write_mask_reg(pdata, F81866_IRQ_MODE, F81866_IRQ_SHARE, |
|---|
| 257 | 261 | F81866_IRQ_SHARE); |
|---|
| .. | .. |
|---|
| 274 | 278 | { |
|---|
| 275 | 279 | switch (pdata->pid) { |
|---|
| 276 | 280 | case CHIP_ID_F81216H: /* 128Bytes FIFO */ |
|---|
| 281 | + case CHIP_ID_F81966: |
|---|
| 277 | 282 | case CHIP_ID_F81866: |
|---|
| 278 | 283 | sio_write_mask_reg(pdata, FIFO_CTRL, |
|---|
| 279 | 284 | FIFO_MODE_MASK | RXFTHR_MODE_MASK, |
|---|
| .. | .. |
|---|
| 285 | 290 | } |
|---|
| 286 | 291 | } |
|---|
| 287 | 292 | |
|---|
| 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) |
|---|
| 308 | 296 | { |
|---|
| 309 | 297 | struct fintek_8250 *pdata = port->private_data; |
|---|
| 310 | 298 | unsigned int baud = tty_termios_baud_rate(termios); |
|---|
| .. | .. |
|---|
| 326 | 314 | case CHIP_ID_F81216H: |
|---|
| 327 | 315 | reg = RS485; |
|---|
| 328 | 316 | break; |
|---|
| 317 | + case CHIP_ID_F81966: |
|---|
| 329 | 318 | case CHIP_ID_F81866: |
|---|
| 330 | 319 | reg = F81866_UART_CLK; |
|---|
| 331 | 320 | break; |
|---|
| .. | .. |
|---|
| 372 | 361 | |
|---|
| 373 | 362 | switch (pdata->pid) { |
|---|
| 374 | 363 | case CHIP_ID_F81216H: |
|---|
| 364 | + case CHIP_ID_F81966: |
|---|
| 375 | 365 | case CHIP_ID_F81866: |
|---|
| 376 | 366 | uart->port.set_termios = fintek_8250_set_termios; |
|---|
| 377 | 367 | break; |
|---|
| .. | .. |
|---|
| 421 | 411 | |
|---|
| 422 | 412 | fintek_8250_set_irq_mode(pdata, level_mode); |
|---|
| 423 | 413 | fintek_8250_set_max_fifo(pdata); |
|---|
| 424 | | - fintek_8250_goto_highspeed(uart, pdata); |
|---|
| 425 | 414 | |
|---|
| 426 | 415 | fintek_8250_exit_key(addr[i]); |
|---|
| 427 | 416 | |
|---|
| .. | .. |
|---|
| 442 | 431 | switch (pdata->pid) { |
|---|
| 443 | 432 | case CHIP_ID_F81216AD: |
|---|
| 444 | 433 | case CHIP_ID_F81216H: |
|---|
| 434 | + case CHIP_ID_F81966: |
|---|
| 445 | 435 | case CHIP_ID_F81866: |
|---|
| 446 | 436 | case CHIP_ID_F81865: |
|---|
| 447 | 437 | uart->port.rs485_config = fintek_8250_rs485_config; |
|---|