There's nothing special on those devices either. They just
use a different set of registers.

Signed-off-by: Mauro Carvalho Chehab <[email protected]>
---
 drivers/usb/serial/xr_serial.c | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/drivers/usb/serial/xr_serial.c b/drivers/usb/serial/xr_serial.c
index b1044dd3e994..72365ffbc1b8 100644
--- a/drivers/usb/serial/xr_serial.c
+++ b/drivers/usb/serial/xr_serial.c
@@ -99,6 +99,7 @@ struct xr_txrx_clk_mask {
 #define VIA_CDC_REGISTER               -1
 
 enum xr_model {
+       XR2280X,
        XR21B1411,
        XR21V141X,
        XR21B142X,
@@ -133,6 +134,30 @@ enum xr_hal_type {
 };
 
 static const int xr_hal_table[MAX_XR_MODELS][MAX_XR_HAL_TYPE] = {
+       [XR2280X] = {
+               [REG_ENABLE] =                          0x40,
+               [REG_FORMAT] =                          0x45,
+               [REG_FLOW_CTRL] =                       0x46,
+               [REG_XON_CHAR] =                        0x47,
+               [REG_XOFF_CHAR] =                       0x48,
+               [REG_TX_BREAK] =                        0x4a,
+               [REG_RS485_DELAY] =                     0x4b,
+               [REG_GPIO_MODE] =                       0x4c,
+               [REG_GPIO_DIR] =                        0x4d,
+               [REG_GPIO_SET] =                        0x4e,
+               [REG_GPIO_CLR] =                        0x4f,
+               [REG_GPIO_STATUS] =                     0x50,
+               [REG_GPIO_INT_MASK] =                   0x51,
+               [REG_CUSTOMIZED_INT] =                  0x52,
+               [REG_GPIO_PULL_UP_ENABLE] =             0x54,
+               [REG_GPIO_PULL_DOWN_ENABLE] =           0x55,
+               [REG_LOOPBACK] =                        0x56,
+               [REG_LOW_LATENCY] =                     0x66,
+               [REG_CUSTOM_DRIVER] =                   0x81,
+
+               [REQ_SET] =                             5,
+               [REQ_GET] =                             5,
+       },
        [XR21B1411] = {
                [REG_ENABLE] =                          0xc00,
                [REG_FORMAT] =                          VIA_CDC_REGISTER,
@@ -215,6 +240,7 @@ static int xr_set_reg(struct usb_serial_port *port, u8 
block, u8 reg, u8 val)
        int ret;
 
        switch (port_priv->model) {
+       case XR2280X:
        case XR21B1411:
                break;
        case XR21V141X:
@@ -253,6 +279,7 @@ static int xr_get_reg(struct usb_serial_port *port, u8 
block, u8 reg, u8 *val)
                return -ENOMEM;
 
        switch (port_priv->model) {
+       case XR2280X:
        case XR21B1411:
                break;
        case XR21V141X:
@@ -902,6 +929,11 @@ static void xr_disconnect(struct usb_serial *serial)
 }
 
 static const struct usb_device_id id_table[] = {
+       { USB_DEVICE(0x04e2, 0x1400), .driver_info = XR2280X},
+       { USB_DEVICE(0x04e2, 0x1401), .driver_info = XR2280X},
+       { USB_DEVICE(0x04e2, 0x1402), .driver_info = XR2280X},
+       { USB_DEVICE(0x04e2, 0x1403), .driver_info = XR2280X},
+
        { USB_DEVICE(0x04e2, 0x1410), .driver_info = XR21V141X},
        { USB_DEVICE(0x04e2, 0x1411), .driver_info = XR21B1411},
        { USB_DEVICE(0x04e2, 0x1412), .driver_info = XR21V141X},
-- 
2.30.2

Reply via email to