mirror of https://gitee.com/openkylin/linux.git
USB: io_ti: Digi EdgePort update for new devices
This patch adds support for the most recent Digi EdgePort USB serial devices. Signed-off-by: Martin K. Petersen <mkp@mkp.net> Signed-off-by: Mike Swift <mikes@digi.com> Signed-off-by: Jeremy McBane <jmcbane@digi.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
dd4dd19e8d
commit
fc4cbd755b
File diff suppressed because it is too large
Load Diff
|
@ -48,7 +48,7 @@
|
|||
/*
|
||||
* Version Information
|
||||
*/
|
||||
#define DRIVER_VERSION "v0.7"
|
||||
#define DRIVER_VERSION "v0.7mode043006"
|
||||
#define DRIVER_AUTHOR "Greg Kroah-Hartman <greg@kroah.com> and David Iacovelli"
|
||||
#define DRIVER_DESC "Edgeport USB Serial Driver"
|
||||
|
||||
|
@ -173,8 +173,12 @@ static struct usb_device_id edgeport_2port_id_table [] = {
|
|||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_221C) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_22C) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_21C) },
|
||||
// The 4-port shows up as two 2-port devices
|
||||
/* The 4, 8 and 16 port devices show up as multiple 2 port devices */
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4S) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8S) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416B) },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -209,6 +213,10 @@ static struct usb_device_id id_table_combined [] = {
|
|||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_22C) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_21C) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_4S) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_8S) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416) },
|
||||
{ USB_DEVICE(USB_VENDOR_ID_ION, ION_DEVICE_ID_TI_EDGEPORT_416B) },
|
||||
{ }
|
||||
};
|
||||
|
||||
|
@ -231,6 +239,7 @@ static int TIStayInBootMode = 0;
|
|||
static int low_latency = EDGE_LOW_LATENCY;
|
||||
static int closing_wait = EDGE_CLOSING_WAIT;
|
||||
static int ignore_cpu_rev = 0;
|
||||
static int default_uart_mode = 0; /* RS232 */
|
||||
|
||||
|
||||
static void edge_tty_recv(struct device *dev, struct tty_struct *tty, unsigned char *data, int length);
|
||||
|
@ -241,6 +250,10 @@ static int restart_read(struct edgeport_port *edge_port);
|
|||
static void edge_set_termios (struct usb_serial_port *port, struct ktermios *old_termios);
|
||||
static void edge_send(struct usb_serial_port *port);
|
||||
|
||||
/* sysfs attributes */
|
||||
static int edge_create_sysfs_attrs(struct usb_serial_port *port);
|
||||
static int edge_remove_sysfs_attrs(struct usb_serial_port *port);
|
||||
|
||||
/* circular buffer */
|
||||
static struct edge_buf *edge_buf_alloc(unsigned int size);
|
||||
static void edge_buf_free(struct edge_buf *eb);
|
||||
|
@ -2758,7 +2771,7 @@ static int edge_startup (struct usb_serial *serial)
|
|||
edge_port->port = serial->port[i];
|
||||
edge_port->edge_serial = edge_serial;
|
||||
usb_set_serial_port_data(serial->port[i], edge_port);
|
||||
edge_port->bUartMode = 0; /* Default is RS232 */
|
||||
edge_port->bUartMode = default_uart_mode;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -2784,6 +2797,7 @@ static void edge_shutdown (struct usb_serial *serial)
|
|||
|
||||
for (i=0; i < serial->num_ports; ++i) {
|
||||
edge_port = usb_get_serial_port_data(serial->port[i]);
|
||||
edge_remove_sysfs_attrs(edge_port->port);
|
||||
if (edge_port) {
|
||||
edge_buf_free(edge_port->ep_out_buf);
|
||||
kfree(edge_port);
|
||||
|
@ -2795,6 +2809,48 @@ static void edge_shutdown (struct usb_serial *serial)
|
|||
}
|
||||
|
||||
|
||||
/* Sysfs Attributes */
|
||||
|
||||
static ssize_t show_uart_mode(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct usb_serial_port *port = to_usb_serial_port(dev);
|
||||
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
||||
|
||||
return sprintf(buf, "%d\n", edge_port->bUartMode);
|
||||
}
|
||||
|
||||
static ssize_t store_uart_mode(struct device *dev,
|
||||
struct device_attribute *attr, const char *valbuf, size_t count)
|
||||
{
|
||||
struct usb_serial_port *port = to_usb_serial_port(dev);
|
||||
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
||||
unsigned int v = simple_strtoul(valbuf, NULL, 0);
|
||||
|
||||
dbg("%s: setting uart_mode = %d", __FUNCTION__, v);
|
||||
|
||||
if (v < 256)
|
||||
edge_port->bUartMode = v;
|
||||
else
|
||||
dev_err(dev, "%s - uart_mode %d is invalid\n", __FUNCTION__, v);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(uart_mode, S_IWUSR | S_IRUGO, show_uart_mode, store_uart_mode);
|
||||
|
||||
static int edge_create_sysfs_attrs(struct usb_serial_port *port)
|
||||
{
|
||||
return device_create_file(&port->dev, &dev_attr_uart_mode);
|
||||
}
|
||||
|
||||
static int edge_remove_sysfs_attrs(struct usb_serial_port *port)
|
||||
{
|
||||
device_remove_file(&port->dev, &dev_attr_uart_mode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/* Circular Buffer */
|
||||
|
||||
/*
|
||||
|
@ -2991,6 +3047,7 @@ static struct usb_serial_driver edgeport_1port_device = {
|
|||
.unthrottle = edge_unthrottle,
|
||||
.attach = edge_startup,
|
||||
.shutdown = edge_shutdown,
|
||||
.port_probe = edge_create_sysfs_attrs,
|
||||
.ioctl = edge_ioctl,
|
||||
.set_termios = edge_set_termios,
|
||||
.tiocmget = edge_tiocmget,
|
||||
|
@ -3022,6 +3079,7 @@ static struct usb_serial_driver edgeport_2port_device = {
|
|||
.unthrottle = edge_unthrottle,
|
||||
.attach = edge_startup,
|
||||
.shutdown = edge_shutdown,
|
||||
.port_probe = edge_create_sysfs_attrs,
|
||||
.ioctl = edge_ioctl,
|
||||
.set_termios = edge_set_termios,
|
||||
.tiocmget = edge_tiocmget,
|
||||
|
@ -3085,3 +3143,6 @@ MODULE_PARM_DESC(closing_wait, "Maximum wait for data to drain, in .01 secs");
|
|||
module_param(ignore_cpu_rev, bool, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(ignore_cpu_rev, "Ignore the cpu revision when connecting to a device");
|
||||
|
||||
module_param(default_uart_mode, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(default_uart_mode, "Default uart_mode, 0=RS232, ...");
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@
|
|||
#define ION_DEVICE_ID_TI_EDGEPORT_2I 0x0207 // Edgeport/2i RS422/RS485
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_421 0x020C // Edgeport/421 4 hub 2 RS232 + Parallel (lucent on a different hub port)
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_21 0x020D // Edgeport/21 2 RS232 + Parallel (lucent on a different hub port)
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_8 0x020F // Edgeport/8 (single-CPU)
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_416 0x0212 // Edgeport/416
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_1 0x0215 // Edgeport/1 RS232
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_42 0x0217 // Edgeport/42 4 hub 2 RS232
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_22I 0x021A // Edgeport/22I is an Edgeport/4 with ports 1&2 RS422 and ports 3&4 RS232
|
||||
|
@ -143,12 +143,14 @@
|
|||
#define ION_DEVICE_ID_TI_EDGEPORT_21C 0x021E // Edgeport/21c is a TI based Edgeport/2 with lucent chip
|
||||
|
||||
// Generation 3 devices -- 3410 based edgport/1 (256 byte I2C)
|
||||
#define ION_DEVICE_ID_TI_TI3410_EDGEPORT_1 0x240 // Edgeport/1 RS232
|
||||
#define ION_DEVICE_ID_TI_TI3410_EDGEPORT_1I 0x241 // Edgeport/1i- RS422 model
|
||||
#define ION_DEVICE_ID_TI_TI3410_EDGEPORT_1 0x0240 // Edgeport/1 RS232
|
||||
#define ION_DEVICE_ID_TI_TI3410_EDGEPORT_1I 0x0241 // Edgeport/1i- RS422 model
|
||||
|
||||
// Ti based software switchable RS232/RS422/RS485 devices
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_4S 0x242 // Edgeport/4s - software switchable model
|
||||
#define ION_DEVICE_ID_IT_EDGEPORT_8S 0x243 // Edgeport/8s - software switchable model
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_4S 0x0242 // Edgeport/4s - software switchable model
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_8S 0x0243 // Edgeport/8s - software switchable model
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_8 0x0244 // Edgeport/8 (single-CPU)
|
||||
#define ION_DEVICE_ID_TI_EDGEPORT_416B 0x0247 // Edgeport/416
|
||||
|
||||
|
||||
/************************************************************************
|
||||
|
|
Loading…
Reference in New Issue