[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <95d517a2de1f2a1974fdcd2df757efac7781a59e.1614345081.git.mchehab+huawei@kernel.org>
Date: Fri, 26 Feb 2021 14:28:32 +0100
From: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
To: Johan Hovold <johan@...nel.org>
Cc: Mauro Carvalho Chehab <mchehab+huawei@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org
Subject: [PATCH 6/7] USB: serial: xr: add support for XR2280X devices
There's nothing special on those devices either. They just
use a different set of registers.
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@...nel.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
Powered by blists - more mailing lists