]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
serial: 8250_fintek: Add support for F81216E
authorFilip Brozovic <fbrozovic@gmail.com>
Sun, 10 Nov 2024 11:17:00 +0000 (12:17 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 12 Nov 2024 12:05:38 +0000 (13:05 +0100)
The F81216E is a LPC/eSPI to 4 UART Super I/O and is mostly compatible with
the F81216H, but does not support RS-485 auto-direction delays on any port.

Signed-off-by: Filip Brozovic <fbrozovic@gmail.com>
Cc: stable <stable@kernel.org>
Link: https://lore.kernel.org/r/20241110111703.15494-1-fbrozovic@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_fintek.c

index f59c01f484804968bfc06c751f551cc8304f3851..b4461a89b8d0caa56939dd85fc1947d2fba43988 100644 (file)
@@ -21,6 +21,7 @@
 #define CHIP_ID_F81866 0x1010
 #define CHIP_ID_F81966 0x0215
 #define CHIP_ID_F81216AD 0x1602
+#define CHIP_ID_F81216E 0x1617
 #define CHIP_ID_F81216H 0x0501
 #define CHIP_ID_F81216 0x0802
 #define VENDOR_ID1 0x23
@@ -158,6 +159,7 @@ static int fintek_8250_check_id(struct fintek_8250 *pdata)
        case CHIP_ID_F81866:
        case CHIP_ID_F81966:
        case CHIP_ID_F81216AD:
+       case CHIP_ID_F81216E:
        case CHIP_ID_F81216H:
        case CHIP_ID_F81216:
                break;
@@ -181,6 +183,7 @@ static int fintek_8250_get_ldn_range(struct fintek_8250 *pdata, int *min,
                return 0;
 
        case CHIP_ID_F81216AD:
+       case CHIP_ID_F81216E:
        case CHIP_ID_F81216H:
        case CHIP_ID_F81216:
                *min = F81216_LDN_LOW;
@@ -250,6 +253,7 @@ static void fintek_8250_set_irq_mode(struct fintek_8250 *pdata, bool is_level)
                break;
 
        case CHIP_ID_F81216AD:
+       case CHIP_ID_F81216E:
        case CHIP_ID_F81216H:
        case CHIP_ID_F81216:
                sio_write_mask_reg(pdata, FINTEK_IRQ_MODE, IRQ_SHARE,
@@ -263,7 +267,8 @@ static void fintek_8250_set_irq_mode(struct fintek_8250 *pdata, bool is_level)
 static void fintek_8250_set_max_fifo(struct fintek_8250 *pdata)
 {
        switch (pdata->pid) {
-       case CHIP_ID_F81216H: /* 128Bytes FIFO */
+       case CHIP_ID_F81216E: /* 128Bytes FIFO */
+       case CHIP_ID_F81216H:
        case CHIP_ID_F81966:
        case CHIP_ID_F81866:
                sio_write_mask_reg(pdata, FIFO_CTRL,
@@ -297,6 +302,7 @@ static void fintek_8250_set_termios(struct uart_port *port,
                goto exit;
 
        switch (pdata->pid) {
+       case CHIP_ID_F81216E:
        case CHIP_ID_F81216H:
                reg = RS485;
                break;
@@ -346,6 +352,7 @@ static void fintek_8250_set_termios_handler(struct uart_8250_port *uart)
        struct fintek_8250 *pdata = uart->port.private_data;
 
        switch (pdata->pid) {
+       case CHIP_ID_F81216E:
        case CHIP_ID_F81216H:
        case CHIP_ID_F81966:
        case CHIP_ID_F81866:
@@ -438,6 +445,11 @@ static void fintek_8250_set_rs485_handler(struct uart_8250_port *uart)
                        uart->port.rs485_supported = fintek_8250_rs485_supported;
                break;
 
+       case CHIP_ID_F81216E: /* F81216E does not support RS485 delays */
+               uart->port.rs485_config = fintek_8250_rs485_config;
+               uart->port.rs485_supported = fintek_8250_rs485_supported;
+               break;
+
        default: /* No RS485 Auto direction functional */
                break;
        }