lkml.org 
[lkml]   [2021]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/7] USB: serial: xr: add support for XR2280X devices
    Date
    There's nothing special on those devices either. They just
    use a different set of registers.

    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    ---
    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 78722502da63..63a45a2451f9 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.29.2
    \
     
     \ /
      Last update: 2021-02-26 14:33    [W:8.334 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site