Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1399771 > unrolled thread
| Started by | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| First post | 2016-05-12 11:00 +0200 |
| Last post | 2016-05-12 11:10 +0200 |
| Articles | 15 on this page of 35 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH 00/36] usb: serial: ti_usb_3410_5052: clean driver Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 29/36] usb: serial: ti_usb_3410_5052: Set shadow msr before waking up waiters Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 17/36] usb: serial: ti_usb_3410_5052: Remove useless tty_wakeup Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 19/36] usb: serial: ti_usb_3410_5052: Do not modify interrupt context Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 15/36] usb: serial: ti_usb_3410_5052: Remove in_sync and out_sync functions Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 01/36] usb: serial: ti_usb_3410_5052: Remove useless comments Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 27/36] usb: serial: ti_usb_3410_5052: Standardize debug and error messages Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 26/36] usb: serial: ti_usb_3410_5052: Fix firmware downloading Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 24/36] usb: serial: ti_usb_3410_5052: Use usb_serial_generic_open Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 30/36] usb: serial: ti_usb_3410_5052: Remove backpointer in ti_port Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 31/36] usb: serial: ti_usb_3410_5052: Use a mutex to protect shadow mcr Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 23/36] usb: serial: ti_usb_3410_5052: Do not set shadow mcr in open callback Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 32/36] usb: serial: ti_usb_3410_5052: Remove prefixes from private structures Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 10/36] usb: serial: ti_usb_3410_5052: Remove useless NULL-testing Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 36/36] usb: serial: ti_usb_3410_5052: Add myself as an author Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 35/36] usb: serial: ti_usb_3410_5052: Remove function prototypes Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 22/36] usb: serial: ti_usb_3410_5052: Change ti_get/set_serial_info function arguments Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 33/36] usb: serial: ti_usb_3410_5052: Add CMSPAR support Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 25/36] usb: serial: ti_usb_3410_5052: Check old_termios parameter in set_termios Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 34/36] usb: serial: ti_usb_3410_5052: Fix indentation problems Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:00 +0200
[PATCH 06/36] usb: serial: ti_usb_3410_5052: Do not use __uX types Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 12/36] usb: serial: ti_usb_3410_5052: Use generic read/write callbacks Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 02/36] usb: serial: ti_usb_3410_5052: use __packed instead of __attribute__((packed)) Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 05/36] usb: serial: ti_usb_3410_5052: Remove unused data structures Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 08/36] usb: serial: ti_usb_3410_5052: Remove useless dev_dbg messages Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 16/36] usb: serial: ti_usb_3410_5052: Use bulk_out_size in TIOCGSERIAL Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 14/36] usb: serial: ti_usb_3410_5052: Use macros instead of magic values Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 07/36] usb: serial: ti_usb_3410_5052: Remove closing_wait module parameter Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 20/36] usb: serial: ti_usb_3410_5052: Remove usb_serial pointer in ti_port Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 04/36] usb: serial: ti_usb_3410_5052: Use inline functions rather than macro Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
Re: [PATCH 04/36] usb: serial: ti_usb_3410_5052: Use inline functions rather than macro Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> - 2016-05-12 14:10 +0200
[PATCH 13/36] usb: serial: ti_usb_3410_5052: Remove unused variables Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 18/36] usb: serial: ti_usb_3410_5052: Change ti_write_byte function arguments Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 11/36] usb: serial: ti_usb_3410_5052: Use C_X macros instead of c_cflag manipulation Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
[PATCH 03/36] usb: serial: ti_usb_3410_5052: Remove ti_usb_3410_5052.h Mathieu OTHACEHE <m.othacehe@gmail.com> - 2016-05-12 11:10 +0200
Page 2 of 2 — ← Prev page 1 [2]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 06/36] usb: serial: ti_usb_3410_5052: Do not use __uX types |
| Message-ID | <rxUN3-2vc-1@gated-at.bofh.it> |
| In reply to | #1399771 |
__uX types should only be used for user-space interactions.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 66 ++++++++++++++++++-----------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index af4e145..164e07b 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -179,23 +179,23 @@
/* Config struct */
struct ti_uart_config {
- __u16 wBaudRate;
- __u16 wFlags;
- __u8 bDataBits;
- __u8 bParity;
- __u8 bStopBits;
+ __be16 wBaudRate;
+ __be16 wFlags;
+ u8 bDataBits;
+ u8 bParity;
+ u8 bStopBits;
char cXon;
char cXoff;
- __u8 bUartMode;
+ u8 bUartMode;
} __packed;
/* Get port status */
struct ti_port_status {
- __u8 bCmdCode;
- __u8 bModuleId;
- __u8 bErrorCode;
- __u8 bMSR;
- __u8 bLSR;
+ u8 bCmdCode;
+ u8 bModuleId;
+ u8 bErrorCode;
+ u8 bMSR;
+ u8 bLSR;
} __packed;
/* Purge modes */
@@ -218,12 +218,12 @@ struct ti_port_status {
#define TI_RW_DATA_DOUBLE_WORD 0x04
struct ti_write_data_bytes {
- __u8 bAddrType;
- __u8 bDataType;
- __u8 bDataCounter;
+ u8 bAddrType;
+ u8 bDataType;
+ u8 bDataCounter;
__be16 wBaseAddrHi;
__be16 wBaseAddrLo;
- __u8 bData[0];
+ u8 bData[0];
} __packed;
/* Interrupt codes */
@@ -247,7 +247,7 @@ static inline int ti_get_func_from_code(unsigned char code)
/* Firmware image header */
struct ti_firmware_header {
__le16 wLength;
- __u8 bCheckSum;
+ u8 bCheckSum;
} __packed;
/* UART addresses */
@@ -277,9 +277,9 @@ struct ti_firmware_header {
struct ti_port {
int tp_is_open;
- __u8 tp_msr;
- __u8 tp_shadow_mcr;
- __u8 tp_uart_mode; /* 232 or 485 modes */
+ u8 tp_msr;
+ u8 tp_shadow_mcr;
+ u8 tp_uart_mode; /* 232 or 485 modes */
unsigned int tp_uart_base_addr;
int tp_flags;
struct ti_device *tp_tdev;
@@ -332,7 +332,7 @@ static int ti_get_serial_info(struct ti_port *tport,
struct serial_struct __user *ret_arg);
static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
struct serial_struct __user *new_arg);
-static void ti_handle_new_msr(struct ti_port *tport, __u8 msr);
+static void ti_handle_new_msr(struct ti_port *tport, u8 msr);
static void ti_stop_read(struct ti_port *tport, struct tty_struct *tty);
static int ti_restart_read(struct ti_port *tport, struct tty_struct *tty);
@@ -343,7 +343,7 @@ static int ti_command_in_sync(struct ti_device *tdev, __u8 command,
__u16 moduleid, __u16 value, __u8 *data, int size);
static int ti_write_byte(struct usb_serial_port *port, struct ti_device *tdev,
- unsigned long addr, __u8 mask, __u8 byte);
+ unsigned long addr, u8 mask, u8 byte);
static int ti_download_firmware(struct ti_device *tdev);
@@ -636,9 +636,11 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
struct urb *urb;
int port_number;
int status;
- __u16 open_settings = (__u8)(TI_PIPE_MODE_CONTINUOUS |
- TI_PIPE_TIMEOUT_ENABLE |
- (TI_TRANSFER_TIMEOUT << 2));
+ u16 open_settings;
+
+ open_settings = (TI_PIPE_MODE_CONTINUOUS |
+ TI_PIPE_TIMEOUT_ENABLE |
+ (TI_TRANSFER_TIMEOUT << 2));
if (tport == NULL)
return -ENODEV;
@@ -968,7 +970,7 @@ static void ti_set_termios(struct tty_struct *tty,
/* these flags must be set */
config->wFlags |= TI_UART_ENABLE_MS_INTS;
config->wFlags |= TI_UART_ENABLE_AUTO_START_DMA;
- config->bUartMode = (__u8)(tport->tp_uart_mode);
+ config->bUartMode = tport->tp_uart_mode;
switch (cflag & CSIZE) {
case CS5:
@@ -1169,7 +1171,7 @@ static void ti_interrupt_callback(struct urb *urb)
int function;
int status = urb->status;
int retval;
- __u8 msr;
+ u8 msr;
switch (status) {
case 0:
@@ -1502,7 +1504,7 @@ static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
}
-static void ti_handle_new_msr(struct ti_port *tport, __u8 msr)
+static void ti_handle_new_msr(struct ti_port *tport, u8 msr)
{
struct async_icount *icount;
struct tty_struct *tty;
@@ -1614,8 +1616,8 @@ static int ti_command_in_sync(struct ti_device *tdev, __u8 command,
static int ti_write_byte(struct usb_serial_port *port,
- struct ti_device *tdev, unsigned long addr,
- __u8 mask, __u8 byte)
+ struct ti_device *tdev, unsigned long addr,
+ u8 mask, u8 byte)
{
int status;
unsigned int size;
@@ -1659,10 +1661,10 @@ static int ti_do_download(struct usb_device *dev, int pipe,
int len;
for (pos = sizeof(struct ti_firmware_header); pos < size; pos++)
- cs = (__u8)(cs + buffer[pos]);
+ cs = (u8)(cs + buffer[pos]);
header = (struct ti_firmware_header *)buffer;
- header->wLength = cpu_to_le16((__u16)(size
+ header->wLength = cpu_to_le16((u16)(size
- sizeof(struct ti_firmware_header)));
header->bCheckSum = cs;
@@ -1681,7 +1683,7 @@ static int ti_download_firmware(struct ti_device *tdev)
{
int status;
int buffer_size;
- __u8 *buffer;
+ u8 *buffer;
struct usb_device *dev = tdev->td_serial->dev;
unsigned int pipe = usb_sndbulkpipe(dev,
tdev->td_serial->port[0]->bulk_out_endpointAddress);
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 12/36] usb: serial: ti_usb_3410_5052: Use generic read/write callbacks |
| Message-ID | <rxUN4-2vc-7@gated-at.bofh.it> |
| In reply to | #1399771 |
Remove read_bulk_callback, write_bulk_callback, write, write_room,
chars_in_buffer, throttle and unthrottle callbacks who uselessly
reimplements generic functions.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 315 ----------------------------------
1 file changed, 315 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 601fab6..58df42d 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -268,11 +268,6 @@ struct ti_firmware_header {
/* supported setserial flags */
#define TI_SET_SERIAL_FLAGS 0
-/* read urb states */
-#define TI_READ_URB_RUNNING 0
-#define TI_READ_URB_STOPPING 1
-#define TI_READ_URB_STOPPED 2
-
#define TI_EXTRA_VID_PID_COUNT 5
struct ti_port {
@@ -285,8 +280,6 @@ struct ti_port {
struct ti_device *tp_tdev;
struct usb_serial_port *tp_port;
spinlock_t tp_lock;
- int tp_read_urb_state;
- int tp_write_urb_in_use;
};
struct ti_device {
@@ -304,13 +297,7 @@ static int ti_port_probe(struct usb_serial_port *port);
static int ti_port_remove(struct usb_serial_port *port);
static int ti_open(struct tty_struct *tty, struct usb_serial_port *port);
static void ti_close(struct usb_serial_port *port);
-static int ti_write(struct tty_struct *tty, struct usb_serial_port *port,
- const unsigned char *data, int count);
-static int ti_write_room(struct tty_struct *tty);
-static int ti_chars_in_buffer(struct tty_struct *tty);
static bool ti_tx_empty(struct usb_serial_port *port);
-static void ti_throttle(struct tty_struct *tty);
-static void ti_unthrottle(struct tty_struct *tty);
static int ti_ioctl(struct tty_struct *tty,
unsigned int cmd, unsigned long arg);
static void ti_set_termios(struct tty_struct *tty,
@@ -320,12 +307,7 @@ static int ti_tiocmset(struct tty_struct *tty,
unsigned int set, unsigned int clear);
static void ti_break(struct tty_struct *tty, int break_state);
static void ti_interrupt_callback(struct urb *urb);
-static void ti_bulk_in_callback(struct urb *urb);
-static void ti_bulk_out_callback(struct urb *urb);
-static void ti_recv(struct usb_serial_port *port, unsigned char *data,
- int length);
-static void ti_send(struct ti_port *tport);
static int ti_set_mcr(struct ti_port *tport, unsigned int mcr);
static int ti_get_lsr(struct ti_port *tport, u8 *lsr);
static int ti_get_serial_info(struct ti_port *tport,
@@ -334,9 +316,6 @@ static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
struct serial_struct __user *new_arg);
static void ti_handle_new_msr(struct ti_port *tport, u8 msr);
-static void ti_stop_read(struct ti_port *tport, struct tty_struct *tty);
-static int ti_restart_read(struct ti_port *tport, struct tty_struct *tty);
-
static int ti_command_out_sync(struct ti_device *tdev, __u8 command,
__u16 moduleid, __u16 value, __u8 *data, int size);
static int ti_command_in_sync(struct ti_device *tdev, __u8 command,
@@ -425,12 +404,7 @@ static struct usb_serial_driver ti_1port_device = {
.port_remove = ti_port_remove,
.open = ti_open,
.close = ti_close,
- .write = ti_write,
- .write_room = ti_write_room,
- .chars_in_buffer = ti_chars_in_buffer,
.tx_empty = ti_tx_empty,
- .throttle = ti_throttle,
- .unthrottle = ti_unthrottle,
.ioctl = ti_ioctl,
.set_termios = ti_set_termios,
.tiocmget = ti_tiocmget,
@@ -439,8 +413,6 @@ static struct usb_serial_driver ti_1port_device = {
.get_icount = usb_serial_generic_get_icount,
.break_ctl = ti_break,
.read_int_callback = ti_interrupt_callback,
- .read_bulk_callback = ti_bulk_in_callback,
- .write_bulk_callback = ti_bulk_out_callback,
};
static struct usb_serial_driver ti_2port_device = {
@@ -457,12 +429,7 @@ static struct usb_serial_driver ti_2port_device = {
.port_remove = ti_port_remove,
.open = ti_open,
.close = ti_close,
- .write = ti_write,
- .write_room = ti_write_room,
- .chars_in_buffer = ti_chars_in_buffer,
.tx_empty = ti_tx_empty,
- .throttle = ti_throttle,
- .unthrottle = ti_unthrottle,
.ioctl = ti_ioctl,
.set_termios = ti_set_termios,
.tiocmget = ti_tiocmget,
@@ -471,8 +438,6 @@ static struct usb_serial_driver ti_2port_device = {
.get_icount = usb_serial_generic_get_icount,
.break_ctl = ti_break,
.read_int_callback = ti_interrupt_callback,
- .read_bulk_callback = ti_bulk_in_callback,
- .write_bulk_callback = ti_bulk_out_callback,
};
static struct usb_serial_driver * const serial_drivers[] = {
@@ -732,7 +697,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
status = -EINVAL;
goto unlink_int_urb;
}
- tport->tp_read_urb_state = TI_READ_URB_RUNNING;
urb->context = tport;
status = usb_submit_urb(urb, GFP_KERNEL);
if (status) {
@@ -771,7 +735,6 @@ static void ti_close(struct usb_serial_port *port)
usb_kill_urb(port->read_urb);
usb_kill_urb(port->write_urb);
- tport->tp_write_urb_in_use = 0;
spin_lock_irqsave(&tport->tp_lock, flags);
kfifo_reset_out(&port->write_fifo);
spin_unlock_irqrestore(&tport->tp_lock, flags);
@@ -797,56 +760,6 @@ static void ti_close(struct usb_serial_port *port)
mutex_unlock(&tdev->td_open_close_lock);
}
-
-static int ti_write(struct tty_struct *tty, struct usb_serial_port *port,
- const unsigned char *data, int count)
-{
- struct ti_port *tport = usb_get_serial_port_data(port);
-
- if (count == 0) {
- return 0;
- }
-
- if (!tport->tp_is_open)
- return -ENODEV;
-
- count = kfifo_in_locked(&port->write_fifo, data, count,
- &tport->tp_lock);
- ti_send(tport);
-
- return count;
-}
-
-
-static int ti_write_room(struct tty_struct *tty)
-{
- struct usb_serial_port *port = tty->driver_data;
- struct ti_port *tport = usb_get_serial_port_data(port);
- int room = 0;
- unsigned long flags;
-
- spin_lock_irqsave(&tport->tp_lock, flags);
- room = kfifo_avail(&port->write_fifo);
- spin_unlock_irqrestore(&tport->tp_lock, flags);
-
- return room;
-}
-
-
-static int ti_chars_in_buffer(struct tty_struct *tty)
-{
- struct usb_serial_port *port = tty->driver_data;
- struct ti_port *tport = usb_get_serial_port_data(port);
- int chars = 0;
- unsigned long flags;
-
- spin_lock_irqsave(&tport->tp_lock, flags);
- chars = kfifo_len(&port->write_fifo);
- spin_unlock_irqrestore(&tport->tp_lock, flags);
-
- return chars;
-}
-
static bool ti_tx_empty(struct usb_serial_port *port)
{
struct ti_port *tport = usb_get_serial_port_data(port);
@@ -860,31 +773,6 @@ static bool ti_tx_empty(struct usb_serial_port *port)
return true;
}
-static void ti_throttle(struct tty_struct *tty)
-{
- struct usb_serial_port *port = tty->driver_data;
- struct ti_port *tport = usb_get_serial_port_data(port);
-
- if (I_IXOFF(tty) || C_CRTSCTS(tty))
- ti_stop_read(tport, tty);
-
-}
-
-
-static void ti_unthrottle(struct tty_struct *tty)
-{
- struct usb_serial_port *port = tty->driver_data;
- struct ti_port *tport = usb_get_serial_port_data(port);
- int status;
-
- if (I_IXOFF(tty) || C_CRTSCTS(tty)) {
- status = ti_restart_read(tport, tty);
- if (status)
- dev_err(&port->dev, "%s - cannot restart read, %d\n",
- __func__, status);
- }
-}
-
static int ti_ioctl(struct tty_struct *tty,
unsigned int cmd, unsigned long arg)
{
@@ -978,8 +866,6 @@ static void ti_set_termios(struct tty_struct *tty,
if ((C_BAUD(tty)) != B0)
config->wFlags |= TI_UART_ENABLE_RTS_IN;
config->wFlags |= TI_UART_ENABLE_CTS_OUT;
- } else {
- ti_restart_read(tport, tty);
}
if (I_IXOFF(tty) || I_IXON(tty)) {
@@ -988,8 +874,6 @@ static void ti_set_termios(struct tty_struct *tty,
if (I_IXOFF(tty))
config->wFlags |= TI_UART_ENABLE_X_IN;
- else
- ti_restart_read(tport, tty);
if (I_IXON(tty))
config->wFlags |= TI_UART_ENABLE_X_OUT;
@@ -1193,168 +1077,6 @@ exit:
__func__, retval);
}
-
-static void ti_bulk_in_callback(struct urb *urb)
-{
- struct ti_port *tport = urb->context;
- struct usb_serial_port *port = tport->tp_port;
- struct device *dev = &urb->dev->dev;
- int status = urb->status;
- int retval = 0;
-
- switch (status) {
- case 0:
- break;
- case -ECONNRESET:
- case -ENOENT:
- case -ESHUTDOWN:
- dev_dbg(dev, "%s - urb shutting down, %d\n", __func__, status);
- tport->tp_tdev->td_urb_error = 1;
- return;
- default:
- dev_err(dev, "%s - nonzero urb status, %d\n",
- __func__, status);
- tport->tp_tdev->td_urb_error = 1;
- }
-
- if (status == -EPIPE)
- goto exit;
-
- if (status) {
- dev_err(dev, "%s - stopping read!\n", __func__);
- return;
- }
-
- if (urb->actual_length) {
- usb_serial_debug_data(dev, __func__, urb->actual_length,
- urb->transfer_buffer);
-
- if (!tport->tp_is_open)
- dev_dbg(dev, "%s - port closed, dropping data\n",
- __func__);
- else
- ti_recv(port, urb->transfer_buffer, urb->actual_length);
- spin_lock(&tport->tp_lock);
- port->icount.rx += urb->actual_length;
- spin_unlock(&tport->tp_lock);
- }
-
-exit:
- /* continue to read unless stopping */
- spin_lock(&tport->tp_lock);
- if (tport->tp_read_urb_state == TI_READ_URB_RUNNING)
- retval = usb_submit_urb(urb, GFP_ATOMIC);
- else if (tport->tp_read_urb_state == TI_READ_URB_STOPPING)
- tport->tp_read_urb_state = TI_READ_URB_STOPPED;
-
- spin_unlock(&tport->tp_lock);
- if (retval)
- dev_err(dev, "%s - resubmit read urb failed, %d\n",
- __func__, retval);
-}
-
-
-static void ti_bulk_out_callback(struct urb *urb)
-{
- struct ti_port *tport = urb->context;
- struct usb_serial_port *port = tport->tp_port;
- int status = urb->status;
-
- tport->tp_write_urb_in_use = 0;
-
- switch (status) {
- case 0:
- break;
- case -ECONNRESET:
- case -ENOENT:
- case -ESHUTDOWN:
- dev_dbg(&port->dev, "%s - urb shutting down, %d\n", __func__, status);
- tport->tp_tdev->td_urb_error = 1;
- return;
- default:
- dev_err_console(port, "%s - nonzero urb status, %d\n",
- __func__, status);
- tport->tp_tdev->td_urb_error = 1;
- }
-
- /* send any buffered data */
- ti_send(tport);
-}
-
-
-static void ti_recv(struct usb_serial_port *port, unsigned char *data,
- int length)
-{
- int cnt;
-
- do {
- cnt = tty_insert_flip_string(&port->port, data, length);
- if (cnt < length) {
- dev_err(&port->dev, "%s - dropping data, %d bytes lost\n",
- __func__, length - cnt);
- if (cnt == 0)
- break;
- }
- tty_flip_buffer_push(&port->port);
- data += cnt;
- length -= cnt;
- } while (length > 0);
-}
-
-
-static void ti_send(struct ti_port *tport)
-{
- int count, result;
- struct usb_serial_port *port = tport->tp_port;
- unsigned long flags;
-
- spin_lock_irqsave(&tport->tp_lock, flags);
-
- if (tport->tp_write_urb_in_use)
- goto unlock;
-
- count = kfifo_out(&port->write_fifo,
- port->write_urb->transfer_buffer,
- port->bulk_out_size);
-
- if (count == 0)
- goto unlock;
-
- tport->tp_write_urb_in_use = 1;
-
- spin_unlock_irqrestore(&tport->tp_lock, flags);
-
- usb_serial_debug_data(&port->dev, __func__, count,
- port->write_urb->transfer_buffer);
-
- usb_fill_bulk_urb(port->write_urb, port->serial->dev,
- usb_sndbulkpipe(port->serial->dev,
- port->bulk_out_endpointAddress),
- port->write_urb->transfer_buffer, count,
- ti_bulk_out_callback, tport);
-
- result = usb_submit_urb(port->write_urb, GFP_ATOMIC);
- if (result) {
- dev_err_console(port, "%s - submit write urb failed, %d\n",
- __func__, result);
- tport->tp_write_urb_in_use = 0;
- /* TODO: reschedule ti_send */
- } else {
- spin_lock_irqsave(&tport->tp_lock, flags);
- port->icount.tx += count;
- spin_unlock_irqrestore(&tport->tp_lock, flags);
- }
-
- /* more room in the buffer for new writes, wakeup */
- tty_port_tty_wakeup(&port->port);
-
- return;
-unlock:
- spin_unlock_irqrestore(&tport->tp_lock, flags);
- return;
-}
-
-
static int ti_set_mcr(struct ti_port *tport, unsigned int mcr)
{
unsigned long flags;
@@ -1490,43 +1212,6 @@ static void ti_handle_new_msr(struct ti_port *tport, u8 msr)
tty_kref_put(tty);
}
-
-static void ti_stop_read(struct ti_port *tport, struct tty_struct *tty)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&tport->tp_lock, flags);
-
- if (tport->tp_read_urb_state == TI_READ_URB_RUNNING)
- tport->tp_read_urb_state = TI_READ_URB_STOPPING;
-
- spin_unlock_irqrestore(&tport->tp_lock, flags);
-}
-
-
-static int ti_restart_read(struct ti_port *tport, struct tty_struct *tty)
-{
- struct urb *urb;
- int status = 0;
- unsigned long flags;
-
- spin_lock_irqsave(&tport->tp_lock, flags);
-
- if (tport->tp_read_urb_state == TI_READ_URB_STOPPED) {
- tport->tp_read_urb_state = TI_READ_URB_RUNNING;
- urb = tport->tp_port->read_urb;
- spin_unlock_irqrestore(&tport->tp_lock, flags);
- urb->context = tport;
- status = usb_submit_urb(urb, GFP_KERNEL);
- } else {
- tport->tp_read_urb_state = TI_READ_URB_RUNNING;
- spin_unlock_irqrestore(&tport->tp_lock, flags);
- }
-
- return status;
-}
-
-
static int ti_command_out_sync(struct ti_device *tdev, __u8 command,
__u16 moduleid, __u16 value, __u8 *data, int size)
{
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 02/36] usb: serial: ti_usb_3410_5052: use __packed instead of __attribute__((packed)) |
| Message-ID | <rxUN4-2vc-11@gated-at.bofh.it> |
| In reply to | #1399771 |
__packed is preferred over __attribute__((packed)) for portability.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.h | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.h b/drivers/usb/serial/ti_usb_3410_5052.h
index bbfd3a1..c39b13e 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.h
+++ b/drivers/usb/serial/ti_usb_3410_5052.h
@@ -174,7 +174,7 @@ struct ti_uart_config {
char cXon;
char cXoff;
__u8 bUartMode;
-} __attribute__((packed));
+} __packed;
/* Get port status */
struct ti_port_status {
@@ -183,7 +183,7 @@ struct ti_port_status {
__u8 bErrorCode;
__u8 bMSR;
__u8 bLSR;
-} __attribute__((packed));
+} __packed;
/* Purge modes */
#define TI_PURGE_OUTPUT 0x00
@@ -211,7 +211,7 @@ struct ti_write_data_bytes {
__be16 wBaseAddrHi;
__be16 wBaseAddrLo;
__u8 bData[0];
-} __attribute__((packed));
+} __packed;
struct ti_read_data_request {
__u8 bAddrType;
@@ -219,20 +219,20 @@ struct ti_read_data_request {
__u8 bDataCounter;
__be16 wBaseAddrHi;
__be16 wBaseAddrLo;
-} __attribute__((packed));
+} __packed;
struct ti_read_data_bytes {
__u8 bCmdCode;
__u8 bModuleId;
__u8 bErrorCode;
__u8 bData[0];
-} __attribute__((packed));
+} __packed;
/* Interrupt struct */
struct ti_interrupt {
__u8 bICode;
__u8 bIInfo;
-} __attribute__((packed));
+} __packed;
/* Interrupt codes */
#define TI_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
@@ -248,7 +248,7 @@ struct ti_interrupt {
struct ti_firmware_header {
__le16 wLength;
__u8 bCheckSum;
-} __attribute__((packed));
+} __packed;
/* UART addresses */
#define TI_UART1_BASE_ADDR 0xFFA0 /* UART 1 base address */
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 05/36] usb: serial: ti_usb_3410_5052: Remove unused data structures |
| Message-ID | <rxUN5-2vc-15@gated-at.bofh.it> |
| In reply to | #1399771 |
ti_read_data_request, ti_read_data_bytes and ti_interrupt are unused.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 21 ---------------------
1 file changed, 21 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 2fc3ea1..af4e145 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -226,27 +226,6 @@ struct ti_write_data_bytes {
__u8 bData[0];
} __packed;
-struct ti_read_data_request {
- __u8 bAddrType;
- __u8 bDataType;
- __u8 bDataCounter;
- __be16 wBaseAddrHi;
- __be16 wBaseAddrLo;
-} __packed;
-
-struct ti_read_data_bytes {
- __u8 bCmdCode;
- __u8 bModuleId;
- __u8 bErrorCode;
- __u8 bData[0];
-} __packed;
-
-/* Interrupt struct */
-struct ti_interrupt {
- __u8 bICode;
- __u8 bIInfo;
-} __packed;
-
/* Interrupt codes */
static inline int ti_get_port_from_code(unsigned char code)
{
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 08/36] usb: serial: ti_usb_3410_5052: Remove useless dev_dbg messages |
| Message-ID | <rxUN4-2vc-13@gated-at.bofh.it> |
| In reply to | #1399771 |
Remove useless or redundant dev_dbg messages.
Fix debug-message typos.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 28 +++++++++-------------------
1 file changed, 9 insertions(+), 19 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 1860a5a..88aacf5 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -673,7 +673,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
if (tty)
ti_set_termios(tty, port, &tty->termios);
- dev_dbg(&port->dev, "%s - sending TI_OPEN_PORT\n", __func__);
status = ti_command_out_sync(tdev, TI_OPEN_PORT,
(__u8)(TI_UART1_PORT + port_number), open_settings, NULL, 0);
if (status) {
@@ -682,7 +681,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
goto unlink_int_urb;
}
- dev_dbg(&port->dev, "%s - sending TI_START_PORT\n", __func__);
status = ti_command_out_sync(tdev, TI_START_PORT,
(__u8)(TI_UART1_PORT + port_number), 0, NULL, 0);
if (status) {
@@ -691,7 +689,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
goto unlink_int_urb;
}
- dev_dbg(&port->dev, "%s - sending TI_PURGE_PORT\n", __func__);
status = ti_command_out_sync(tdev, TI_PURGE_PORT,
(__u8)(TI_UART1_PORT + port_number), TI_PURGE_INPUT, NULL, 0);
if (status) {
@@ -715,7 +712,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
if (tty)
ti_set_termios(tty, port, &tty->termios);
- dev_dbg(&port->dev, "%s - sending TI_OPEN_PORT (2)\n", __func__);
status = ti_command_out_sync(tdev, TI_OPEN_PORT,
(__u8)(TI_UART1_PORT + port_number), open_settings, NULL, 0);
if (status) {
@@ -724,7 +720,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
goto unlink_int_urb;
}
- dev_dbg(&port->dev, "%s - sending TI_START_PORT (2)\n", __func__);
status = ti_command_out_sync(tdev, TI_START_PORT,
(__u8)(TI_UART1_PORT + port_number), 0, NULL, 0);
if (status) {
@@ -734,7 +729,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
}
/* start read urb */
- dev_dbg(&port->dev, "%s - start read urb\n", __func__);
urb = port->read_urb;
if (!urb) {
dev_err(&port->dev, "%s - no read urb\n", __func__);
@@ -760,7 +754,6 @@ unlink_int_urb:
usb_kill_urb(port->serial->port[0]->interrupt_in_urb);
release_lock:
mutex_unlock(&tdev->td_open_close_lock);
- dev_dbg(&port->dev, "%s - exit %d\n", __func__, status);
return status;
}
@@ -790,7 +783,6 @@ static void ti_close(struct usb_serial_port *port)
port_number = port->port_number;
- dev_dbg(&port->dev, "%s - sending TI_CLOSE_PORT\n", __func__);
status = ti_command_out_sync(tdev, TI_CLOSE_PORT,
(__u8)(TI_UART1_PORT + port_number), 0, NULL, 0);
if (status)
@@ -817,7 +809,6 @@ static int ti_write(struct tty_struct *tty, struct usb_serial_port *port,
struct ti_port *tport = usb_get_serial_port_data(port);
if (count == 0) {
- dev_dbg(&port->dev, "%s - write request of 0 bytes\n", __func__);
return 0;
}
@@ -846,7 +837,6 @@ static int ti_write_room(struct tty_struct *tty)
room = kfifo_avail(&port->write_fifo);
spin_unlock_irqrestore(&tport->tp_lock, flags);
- dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
return room;
}
@@ -865,7 +855,6 @@ static int ti_chars_in_buffer(struct tty_struct *tty)
chars = kfifo_len(&port->write_fifo);
spin_unlock_irqrestore(&tport->tp_lock, flags);
- dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
return chars;
}
@@ -924,11 +913,9 @@ static int ti_ioctl(struct tty_struct *tty,
switch (cmd) {
case TIOCGSERIAL:
- dev_dbg(&port->dev, "%s - TIOCGSERIAL\n", __func__);
return ti_get_serial_info(tport,
(struct serial_struct __user *)arg);
case TIOCSSERIAL:
- dev_dbg(&port->dev, "%s - TIOCSSERIAL\n", __func__);
return ti_set_serial_info(tty, tport,
(struct serial_struct __user *)arg);
}
@@ -950,9 +937,15 @@ static void ti_set_termios(struct tty_struct *tty,
cflag = tty->termios.c_cflag;
iflag = tty->termios.c_iflag;
- dev_dbg(&port->dev, "%s - cflag %08x, iflag %08x\n", __func__, cflag, iflag);
- dev_dbg(&port->dev, "%s - old clfag %08x, old iflag %08x\n", __func__,
- old_termios->c_cflag, old_termios->c_iflag);
+ dev_dbg(&port->dev,
+ "%s - cflag 0x%08x, iflag 0x%08x\n", __func__, cflag, iflag);
+
+ if (old_termios) {
+ dev_dbg(&port->dev, "%s - old clfag 0x%08x, old iflag 0x%08x\n",
+ __func__,
+ old_termios->c_cflag,
+ old_termios->c_iflag);
+ }
if (tport == NULL)
return;
@@ -1140,8 +1133,6 @@ static void ti_break(struct tty_struct *tty, int break_state)
struct ti_port *tport = usb_get_serial_port_data(port);
int status;
- dev_dbg(&port->dev, "%s - state = %d\n", __func__, break_state);
-
if (tport == NULL)
return;
@@ -1220,7 +1211,6 @@ static void ti_interrupt_callback(struct urb *urb)
case TI_CODE_MODEM_STATUS:
msr = data[1];
- dev_dbg(dev, "%s - port %d, msr 0x%02X\n", __func__, port_number, msr);
ti_handle_new_msr(tport, msr);
break;
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 16/36] usb: serial: ti_usb_3410_5052: Use bulk_out_size in TIOCGSERIAL |
| Message-ID | <rxUN5-2vc-25@gated-at.bofh.it> |
| In reply to | #1399771 |
Use bulk_out_size instead of recalculate it with kfifo_size Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com> --- drivers/usb/serial/ti_usb_3410_5052.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index eb4df1e..5ef721c 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c @@ -1205,7 +1205,7 @@ static int ti_get_serial_info(struct ti_port *tport, ret_serial.type = PORT_16550A; ret_serial.line = port->minor; ret_serial.port = port->port_number; - ret_serial.xmit_fifo_size = kfifo_size(&port->write_fifo); + ret_serial.xmit_fifo_size = port->bulk_out_size; ret_serial.baud_base = baud_base; ret_serial.closing_wait = cwait; -- 2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 14/36] usb: serial: ti_usb_3410_5052: Use macros instead of magic values |
| Message-ID | <rxUN5-2vc-27@gated-at.bofh.it> |
| In reply to | #1399771 |
Use macros to define 3410 and 5052 baud bases and remove useless casting.
Use macro to define usb download timeout.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 00ae52e..91ea1b5 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -259,10 +259,12 @@ struct ti_firmware_header {
#define TI_DRIVER_AUTHOR "Al Borchers <alborchers@steinerpoint.com>"
#define TI_DRIVER_DESC "TI USB 3410/5052 Serial Driver"
-#define TI_FIRMWARE_BUF_SIZE 16284
+#define TI_3410_BAUD_BASE 923077
+#define TI_5052_BAUD_BASE 461538
+#define TI_FIRMWARE_BUF_SIZE 16284
#define TI_TRANSFER_TIMEOUT 2
-
+#define TI_DOWNLOAD_TIMEOUT 1000
#define TI_DEFAULT_CLOSING_WAIT 4000 /* in .01 secs */
#define TI_EXTRA_VID_PID_COUNT 5
@@ -875,9 +877,9 @@ static void ti_set_termios(struct tty_struct *tty,
if (!baud)
baud = 9600;
if (tport->tp_tdev->td_is_3410)
- config->wBaudRate = (__u16)((923077 + baud/2) / baud);
+ config->wBaudRate = (TI_3410_BAUD_BASE + baud / 2) / baud;
else
- config->wBaudRate = (__u16)((461538 + baud/2) / baud);
+ config->wBaudRate = (TI_5052_BAUD_BASE + baud / 2) / baud;
/* FIXME: Should calculate resulting baud here and report it back */
if ((C_BAUD(tty)) != B0)
@@ -1123,6 +1125,7 @@ static int ti_get_serial_info(struct ti_port *tport,
struct usb_serial_port *port = tport->tp_port;
struct serial_struct ret_serial;
unsigned cwait;
+ int baud_base;
if (!ret_arg)
return -EFAULT;
@@ -1133,11 +1136,16 @@ static int ti_get_serial_info(struct ti_port *tport,
memset(&ret_serial, 0, sizeof(ret_serial));
+ if (tport->tp_tdev->td_is_3410)
+ baud_base = TI_3410_BAUD_BASE;
+ else
+ baud_base = TI_5052_BAUD_BASE;
+
ret_serial.type = PORT_16550A;
ret_serial.line = port->minor;
ret_serial.port = port->port_number;
ret_serial.xmit_fifo_size = kfifo_size(&port->write_fifo);
- ret_serial.baud_base = tport->tp_tdev->td_is_3410 ? 921600 : 460800;
+ ret_serial.baud_base = baud_base;
ret_serial.closing_wait = cwait;
if (copy_to_user(ret_arg, &ret_serial, sizeof(*ret_arg)))
@@ -1296,8 +1304,8 @@ static int ti_do_download(struct usb_device *dev, int pipe,
dev_dbg(&dev->dev, "%s - downloading firmware\n", __func__);
for (pos = 0; pos < size; pos += done) {
len = min(size - pos, TI_DOWNLOAD_MAX_PACKET_SIZE);
- status = usb_bulk_msg(dev, pipe, buffer + pos, len,
- &done, 1000);
+ status = usb_bulk_msg(dev, pipe, buffer + pos, len, &done,
+ TI_DOWNLOAD_TIMEOUT);
if (status)
break;
}
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 07/36] usb: serial: ti_usb_3410_5052: Remove closing_wait module parameter |
| Message-ID | <rxUN5-2vc-31@gated-at.bofh.it> |
| In reply to | #1399771 |
Closing wait delay is configurable per device using TIOCSSERIAL.
Also initialise tty_port closing_wait in port_probe with default value.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 164e07b..1860a5a 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -347,8 +347,6 @@ static int ti_write_byte(struct usb_serial_port *port, struct ti_device *tdev,
static int ti_download_firmware(struct ti_device *tdev);
-static int closing_wait = TI_DEFAULT_CLOSING_WAIT;
-
static const struct usb_device_id ti_id_table_3410[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_EZ430_ID) },
@@ -498,10 +496,6 @@ MODULE_FIRMWARE("moxa/moxa-1131.fw");
MODULE_FIRMWARE("moxa/moxa-1150.fw");
MODULE_FIRMWARE("moxa/moxa-1151.fw");
-module_param(closing_wait, int, S_IRUGO | S_IWUSR);
-MODULE_PARM_DESC(closing_wait,
- "Maximum wait for data to drain in close, in .01 secs, default is 4000");
-
MODULE_DEVICE_TABLE(usb, ti_id_table_combined);
module_usb_serial_driver(serial_drivers, ti_id_table_combined);
@@ -602,7 +596,7 @@ static int ti_port_probe(struct usb_serial_port *port)
tport->tp_uart_base_addr = TI_UART1_BASE_ADDR;
else
tport->tp_uart_base_addr = TI_UART2_BASE_ADDR;
- port->port.closing_wait = msecs_to_jiffies(10 * closing_wait);
+
tport->tp_port = port;
tport->tp_tdev = usb_get_serial_data(port->serial);
@@ -613,6 +607,8 @@ static int ti_port_probe(struct usb_serial_port *port)
usb_set_serial_port_data(port, tport);
+ port->port.closing_wait =
+ msecs_to_jiffies(TI_DEFAULT_CLOSING_WAIT * 10);
port->port.drain_delay = 3;
return 0;
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 20/36] usb: serial: ti_usb_3410_5052: Remove usb_serial pointer in ti_port |
| Message-ID | <rxUN6-2vc-37@gated-at.bofh.it> |
| In reply to | #1399771 |
There is no need to keep a pointer to usb_serial in ti_port
structure.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 48f9253..8350c6b 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -282,7 +282,6 @@ struct ti_port {
struct ti_device {
struct mutex td_open_close_lock;
int td_open_port_count;
- struct usb_serial *td_serial;
int td_is_3410;
bool td_rs485_only;
int td_urb_error;
@@ -312,7 +311,7 @@ static int ti_get_serial_info(struct ti_port *tport,
static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
struct serial_struct __user *new_arg);
static void ti_handle_new_msr(struct usb_serial_port *port, u8 msr);
-static int ti_download_firmware(struct ti_device *tdev);
+static int ti_download_firmware(struct usb_serial *serial);
static const struct usb_device_id ti_id_table_3410[] = {
{ USB_DEVICE(TI_VENDOR_ID, TI_3410_PRODUCT_ID) },
@@ -571,7 +570,6 @@ static int ti_startup(struct usb_serial *serial)
return -ENOMEM;
mutex_init(&tdev->td_open_close_lock);
- tdev->td_serial = serial;
usb_set_serial_data(serial, tdev);
/* determine device type */
@@ -596,7 +594,7 @@ static int ti_startup(struct usb_serial *serial)
/* if we have only 1 configuration and 1 endpoint, download firmware */
if (dev->descriptor.bNumConfigurations == 1 && num_endpoints == 1) {
- status = ti_download_firmware(tdev);
+ status = ti_download_firmware(serial);
if (status != 0)
goto free_tdev;
@@ -705,7 +703,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
/* start interrupt urb the first time a port is opened on this device */
if (tdev->td_open_port_count == 0) {
dev_dbg(&port->dev, "%s - start interrupt in urb\n", __func__);
- urb = tdev->td_serial->port[0]->interrupt_in_urb;
+ urb = serial->port[0]->interrupt_in_urb;
if (!urb) {
dev_err(&port->dev, "%s - no interrupt urb\n", __func__);
status = -EINVAL;
@@ -798,7 +796,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
unlink_int_urb:
if (tdev->td_open_port_count == 0)
- usb_kill_urb(port->serial->port[0]->interrupt_in_urb);
+ usb_kill_urb(serial->port[0]->interrupt_in_urb);
release_lock:
mutex_unlock(&tdev->td_open_close_lock);
return status;
@@ -1310,17 +1308,19 @@ static int ti_do_download(struct usb_device *dev, int pipe,
return status;
}
-static int ti_download_firmware(struct ti_device *tdev)
+static int ti_download_firmware(struct usb_serial *serial)
{
int status;
int buffer_size;
u8 *buffer;
- struct usb_device *dev = tdev->td_serial->dev;
- unsigned int pipe = usb_sndbulkpipe(dev,
- tdev->td_serial->port[0]->bulk_out_endpointAddress);
+ struct usb_device *dev = serial->dev;
+ struct ti_device *tdev = usb_get_serial_data(serial);
+ unsigned int pipe;
const struct firmware *fw_p;
char buf[32];
+ pipe = usb_sndbulkpipe(dev, serial->port[0]->bulk_out_endpointAddress);
+
if (le16_to_cpu(dev->descriptor.idVendor) == MXU1_VENDOR_ID) {
snprintf(buf,
sizeof(buf),
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 04/36] usb: serial: ti_usb_3410_5052: Use inline functions rather than macro |
| Message-ID | <rxUN6-2vc-51@gated-at.bofh.it> |
| In reply to | #1399771 |
Inline functions are preferable to macros resembling functions.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 6002e8b..2fc3ea1 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -248,8 +248,16 @@ struct ti_interrupt {
} __packed;
/* Interrupt codes */
-#define TI_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
-#define TI_GET_FUNC_FROM_CODE(c) ((c) & 0x0f)
+static inline int ti_get_port_from_code(unsigned char code)
+{
+ return (code >> 4) - 3;
+}
+
+static inline int ti_get_func_from_code(unsigned char code)
+{
+ return code & 0x0f;
+}
+
#define TI_CODE_HARDWARE_ERROR 0xFF
#define TI_CODE_DATA_ERROR 0x03
#define TI_CODE_MODEM_STATUS 0x04
@@ -1209,8 +1217,8 @@ static void ti_interrupt_callback(struct urb *urb)
goto exit;
}
- port_number = TI_GET_PORT_FROM_CODE(data[0]);
- function = TI_GET_FUNC_FROM_CODE(data[0]);
+ port_number = ti_get_port_from_code(data[0]);
+ function = ti_get_func_from_code(data[0]);
dev_dbg(dev, "%s - port_number %d, function %d, data 0x%02X\n",
__func__, port_number, function, data[1]);
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
|---|---|
| Date | 2016-05-12 14:10 +0200 |
| Subject | Re: [PATCH 04/36] usb: serial: ti_usb_3410_5052: Use inline functions rather than macro |
| Message-ID | <rxXBf-5wX-3@gated-at.bofh.it> |
| In reply to | #1399808 |
Hello.
On 5/12/2016 11:48 AM, Mathieu OTHACEHE wrote:
> Inline functions are preferable to macros resembling functions.
>
> Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
> ---
> drivers/usb/serial/ti_usb_3410_5052.c | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
> index 6002e8b..2fc3ea1 100644
> --- a/drivers/usb/serial/ti_usb_3410_5052.c
> +++ b/drivers/usb/serial/ti_usb_3410_5052.c
> @@ -248,8 +248,16 @@ struct ti_interrupt {
> } __packed;
>
> /* Interrupt codes */
> -#define TI_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
> -#define TI_GET_FUNC_FROM_CODE(c) ((c) & 0x0f)
> +static inline int ti_get_port_from_code(unsigned char code)
> +{
> + return (code >> 4) - 3;
> +}
> +
> +static inline int ti_get_func_from_code(unsigned char code)
> +{
> + return code & 0x0f;
> +}
> +
We don't specify *inline* in the .c files (only in .h), letting gcc figure
it out.
[...]
MBR, Sergei
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 13/36] usb: serial: ti_usb_3410_5052: Remove unused variables |
| Message-ID | <rxUN6-2vc-53@gated-at.bofh.it> |
| In reply to | #1399771 |
Remove variables affected but never read.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 58df42d..00ae52e 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -265,18 +265,13 @@ struct ti_firmware_header {
#define TI_DEFAULT_CLOSING_WAIT 4000 /* in .01 secs */
-/* supported setserial flags */
-#define TI_SET_SERIAL_FLAGS 0
-
#define TI_EXTRA_VID_PID_COUNT 5
struct ti_port {
- int tp_is_open;
u8 tp_msr;
u8 tp_shadow_mcr;
u8 tp_uart_mode; /* 232 or 485 modes */
unsigned int tp_uart_base_addr;
- int tp_flags;
struct ti_device *tp_tdev;
struct usb_serial_port *tp_port;
spinlock_t tp_lock;
@@ -705,7 +700,6 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
goto unlink_int_urb;
}
- tport->tp_is_open = 1;
++tdev->td_open_port_count;
goto release_lock;
@@ -731,8 +725,6 @@ static void ti_close(struct usb_serial_port *port)
tdev = usb_get_serial_data(port->serial);
tport = usb_get_serial_port_data(port);
- tport->tp_is_open = 0;
-
usb_kill_urb(port->read_urb);
usb_kill_urb(port->write_urb);
spin_lock_irqsave(&tport->tp_lock, flags);
@@ -1017,11 +1009,9 @@ static void ti_interrupt_callback(struct urb *urb)
case -ENOENT:
case -ESHUTDOWN:
dev_dbg(dev, "%s - urb shutting down, %d\n", __func__, status);
- tdev->td_urb_error = 1;
return;
default:
dev_err(dev, "%s - nonzero urb status, %d\n", __func__, status);
- tdev->td_urb_error = 1;
goto exit;
}
@@ -1146,7 +1136,6 @@ static int ti_get_serial_info(struct ti_port *tport,
ret_serial.type = PORT_16550A;
ret_serial.line = port->minor;
ret_serial.port = port->port_number;
- ret_serial.flags = tport->tp_flags;
ret_serial.xmit_fifo_size = kfifo_size(&port->write_fifo);
ret_serial.baud_base = tport->tp_tdev->td_is_3410 ? 921600 : 460800;
ret_serial.closing_wait = cwait;
@@ -1171,7 +1160,6 @@ static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
if (cwait != ASYNC_CLOSING_WAIT_NONE)
cwait = msecs_to_jiffies(10 * new_serial.closing_wait);
- tport->tp_flags = new_serial.flags & TI_SET_SERIAL_FLAGS;
tport->tp_port->port.closing_wait = cwait;
return 0;
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 18/36] usb: serial: ti_usb_3410_5052: Change ti_write_byte function arguments |
| Message-ID | <rxUN6-2vc-47@gated-at.bofh.it> |
| In reply to | #1399771 |
Remove useless ti_device pointer, and change addr to u32.
Move function upper to avoid function prototyping.
Also change size variable in function from int to size_t.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 76 ++++++++++++++++-------------------
1 file changed, 35 insertions(+), 41 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 3f2372e..9654fa3 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -312,10 +312,6 @@ static int ti_get_serial_info(struct ti_port *tport,
static int ti_set_serial_info(struct tty_struct *tty, struct ti_port *tport,
struct serial_struct __user *new_arg);
static void ti_handle_new_msr(struct ti_port *tport, u8 msr);
-
-static int ti_write_byte(struct usb_serial_port *port, struct ti_device *tdev,
- unsigned long addr, u8 mask, u8 byte);
-
static int ti_download_firmware(struct ti_device *tdev);
static const struct usb_device_id ti_id_table_3410[] = {
@@ -522,6 +518,39 @@ static int ti_recv_ctrl_data_urb(struct usb_serial *serial, u8 request,
return 0;
}
+static int ti_write_byte(struct usb_serial_port *port, u32 addr,
+ u8 mask, u8 byte)
+{
+ int status;
+ size_t size;
+ struct ti_write_data_bytes *data;
+
+ dev_dbg(&port->dev, "%s - addr 0x%08X, mask 0x%02X, byte 0x%02X\n",
+ __func__, addr, mask, byte);
+
+ size = sizeof(struct ti_write_data_bytes) + 2;
+ data = kmalloc(size, GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ data->bAddrType = TI_RW_DATA_ADDR_XDATA;
+ data->bDataType = TI_RW_DATA_BYTE;
+ data->bDataCounter = 1;
+ data->wBaseAddrHi = cpu_to_be16(addr >> 16);
+ data->wBaseAddrLo = cpu_to_be16(addr);
+ data->bData[0] = mask;
+ data->bData[1] = byte;
+
+ status = ti_send_ctrl_data_urb(port->serial, TI_WRITE_DATA, 0,
+ TI_RAM_PORT, data, size);
+ if (status < 0)
+ dev_err(&port->dev, "%s - failed, %d\n", __func__, status);
+
+ kfree(data);
+
+ return status;
+}
+
static int ti_startup(struct usb_serial *serial)
{
struct ti_device *tdev;
@@ -1042,10 +1071,9 @@ static void ti_break(struct tty_struct *tty, int break_state)
struct ti_port *tport = usb_get_serial_port_data(port);
int status;
- status = ti_write_byte(port, tport->tp_tdev,
+ status = ti_write_byte(port,
tport->tp_uart_base_addr + TI_UART_OFFSET_LCR,
TI_LCR_BREAK, break_state == -1 ? TI_LCR_BREAK : 0);
-
if (status)
dev_dbg(&port->dev, "%s - error setting break, %d\n", __func__, status);
}
@@ -1136,7 +1164,7 @@ static int ti_set_mcr(struct ti_port *tport, unsigned int mcr)
unsigned long flags;
int status;
- status = ti_write_byte(tport->tp_port, tport->tp_tdev,
+ status = ti_write_byte(tport->tp_port,
tport->tp_uart_base_addr + TI_UART_OFFSET_MCR,
TI_MCR_RTS | TI_MCR_DTR | TI_MCR_LOOP, mcr);
@@ -1260,40 +1288,6 @@ static void ti_handle_new_msr(struct ti_port *tport, u8 msr)
tport->tp_msr = msr & TI_MSR_MASK;
}
-static int ti_write_byte(struct usb_serial_port *port,
- struct ti_device *tdev, unsigned long addr,
- u8 mask, u8 byte)
-{
- int status;
- unsigned int size;
- struct ti_write_data_bytes *data;
-
- dev_dbg(&port->dev, "%s - addr 0x%08lX, mask 0x%02X, byte 0x%02X\n", __func__,
- addr, mask, byte);
-
- size = sizeof(struct ti_write_data_bytes) + 2;
- data = kmalloc(size, GFP_KERNEL);
- if (!data)
- return -ENOMEM;
-
- data->bAddrType = TI_RW_DATA_ADDR_XDATA;
- data->bDataType = TI_RW_DATA_BYTE;
- data->bDataCounter = 1;
- data->wBaseAddrHi = cpu_to_be16(addr>>16);
- data->wBaseAddrLo = cpu_to_be16(addr);
- data->bData[0] = mask;
- data->bData[1] = byte;
-
- status = ti_send_ctrl_data_urb(port->serial, TI_WRITE_DATA, 0,
- TI_RAM_PORT, data, size);
- if (status < 0)
- dev_err(&port->dev, "%s - failed, %d\n", __func__, status);
-
- kfree(data);
-
- return status;
-}
-
static int ti_do_download(struct usb_device *dev, int pipe,
u8 *buffer, int size)
{
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 11/36] usb: serial: ti_usb_3410_5052: Use C_X macros instead of c_cflag manipulation |
| Message-ID | <rxUN6-2vc-55@gated-at.bofh.it> |
| In reply to | #1399771 |
Use C_X tty.h macros to avoid direct manipulation of termios
c_cflag variable.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index ef6789b..601fab6 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -936,7 +936,7 @@ static void ti_set_termios(struct tty_struct *tty,
config->wFlags |= TI_UART_ENABLE_AUTO_START_DMA;
config->bUartMode = tport->tp_uart_mode;
- switch (cflag & CSIZE) {
+ switch (C_CSIZE(tty)) {
case CS5:
config->bDataBits = TI_UART_5_DATA_BITS;
break;
@@ -955,8 +955,8 @@ static void ti_set_termios(struct tty_struct *tty,
/* CMSPAR isn't supported by this driver */
tty->termios.c_cflag &= ~CMSPAR;
- if (cflag & PARENB) {
- if (cflag & PARODD) {
+ if (C_PARENB(tty)) {
+ if (C_PARODD(tty)) {
config->wFlags |= TI_UART_ENABLE_PARITY_CHECKING;
config->bParity = TI_UART_ODD_PARITY;
} else {
@@ -968,14 +968,14 @@ static void ti_set_termios(struct tty_struct *tty,
config->bParity = TI_UART_NO_PARITY;
}
- if (cflag & CSTOPB)
+ if (C_CSTOPB(tty))
config->bStopBits = TI_UART_2_STOP_BITS;
else
config->bStopBits = TI_UART_1_STOP_BITS;
- if (cflag & CRTSCTS) {
+ if (C_CRTSCTS(tty)) {
/* RTS flow control must be off to drop RTS for baud rate B0 */
- if ((cflag & CBAUD) != B0)
+ if ((C_BAUD(tty)) != B0)
config->wFlags |= TI_UART_ENABLE_RTS_IN;
config->wFlags |= TI_UART_ENABLE_CTS_OUT;
} else {
@@ -1004,7 +1004,7 @@ static void ti_set_termios(struct tty_struct *tty,
config->wBaudRate = (__u16)((461538 + baud/2) / baud);
/* FIXME: Should calculate resulting baud here and report it back */
- if ((cflag & CBAUD) != B0)
+ if ((C_BAUD(tty)) != B0)
tty_encode_baud_rate(tty, baud, baud);
dev_dbg(&port->dev,
@@ -1026,7 +1026,7 @@ static void ti_set_termios(struct tty_struct *tty,
/* SET_CONFIG asserts RTS and DTR, reset them correctly */
mcr = tport->tp_shadow_mcr;
/* if baud rate is B0, clear RTS and DTR */
- if ((cflag & CBAUD) == B0)
+ if (C_BAUD(tty) == B0)
mcr &= ~(TI_MCR_DTR | TI_MCR_RTS);
status = ti_set_mcr(tport, mcr);
if (status)
--
2.8.2
[toc] | [prev] | [next] | [standalone]
| From | Mathieu OTHACEHE <m.othacehe@gmail.com> |
|---|---|
| Date | 2016-05-12 11:10 +0200 |
| Subject | [PATCH 03/36] usb: serial: ti_usb_3410_5052: Remove ti_usb_3410_5052.h |
| Message-ID | <rxUN6-2vc-59@gated-at.bofh.it> |
| In reply to | #1399771 |
The definitions in ti_usb_3410_5052.h are only used in
ti_usb_3410_5052.c.
The content of the header is copied in ti_usb_3410_5052.c.
Also correct a typo in macro TI_PIPE_MODE_CONTINOUS.
Signed-off-by: Mathieu OTHACEHE <m.othacehe@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 237 +++++++++++++++++++++++++++++++++-
1 file changed, 235 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index 903b45c..6002e8b 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -34,7 +34,240 @@
#include <linux/usb.h>
#include <linux/usb/serial.h>
-#include "ti_usb_3410_5052.h"
+/* Configuration ids */
+#define TI_BOOT_CONFIG 1
+#define TI_ACTIVE_CONFIG 2
+
+/* Vendor and product ids */
+#define TI_VENDOR_ID 0x0451
+#define IBM_VENDOR_ID 0x04b3
+#define TI_3410_PRODUCT_ID 0x3410
+#define IBM_4543_PRODUCT_ID 0x4543
+#define IBM_454B_PRODUCT_ID 0x454b
+#define IBM_454C_PRODUCT_ID 0x454c
+#define TI_3410_EZ430_ID 0xF430 /* TI ez430 development tool */
+#define TI_5052_BOOT_PRODUCT_ID 0x5052 /* no EEPROM, no firmware */
+#define TI_5152_BOOT_PRODUCT_ID 0x5152 /* no EEPROM, no firmware */
+#define TI_5052_EEPROM_PRODUCT_ID 0x505A /* EEPROM, no firmware */
+#define TI_5052_FIRMWARE_PRODUCT_ID 0x505F /* firmware is running */
+#define FRI2_PRODUCT_ID 0x5053 /* Fish River Island II */
+
+/* Multi-Tech vendor and product ids */
+#define MTS_VENDOR_ID 0x06E0
+#define MTS_GSM_NO_FW_PRODUCT_ID 0xF108
+#define MTS_CDMA_NO_FW_PRODUCT_ID 0xF109
+#define MTS_CDMA_PRODUCT_ID 0xF110
+#define MTS_GSM_PRODUCT_ID 0xF111
+#define MTS_EDGE_PRODUCT_ID 0xF112
+#define MTS_MT9234MU_PRODUCT_ID 0xF114
+#define MTS_MT9234ZBA_PRODUCT_ID 0xF115
+#define MTS_MT9234ZBAOLD_PRODUCT_ID 0x0319
+
+/* Abbott Diabetics vendor and product ids */
+#define ABBOTT_VENDOR_ID 0x1a61
+#define ABBOTT_STEREO_PLUG_ID 0x3410
+#define ABBOTT_PRODUCT_ID ABBOTT_STEREO_PLUG_ID
+#define ABBOTT_STRIP_PORT_ID 0x3420
+
+/* Honeywell vendor and product IDs */
+#define HONEYWELL_VENDOR_ID 0x10ac
+#define HONEYWELL_HGI80_PRODUCT_ID 0x0102 /* Honeywell HGI80 */
+
+/* Moxa UPORT 11x0 vendor and product IDs */
+#define MXU1_VENDOR_ID 0x110a
+#define MXU1_1110_PRODUCT_ID 0x1110
+#define MXU1_1130_PRODUCT_ID 0x1130
+#define MXU1_1150_PRODUCT_ID 0x1150
+#define MXU1_1151_PRODUCT_ID 0x1151
+#define MXU1_1131_PRODUCT_ID 0x1131
+
+/* Commands */
+#define TI_GET_VERSION 0x01
+#define TI_GET_PORT_STATUS 0x02
+#define TI_GET_PORT_DEV_INFO 0x03
+#define TI_GET_CONFIG 0x04
+#define TI_SET_CONFIG 0x05
+#define TI_OPEN_PORT 0x06
+#define TI_CLOSE_PORT 0x07
+#define TI_START_PORT 0x08
+#define TI_STOP_PORT 0x09
+#define TI_TEST_PORT 0x0A
+#define TI_PURGE_PORT 0x0B
+#define TI_RESET_EXT_DEVICE 0x0C
+#define TI_WRITE_DATA 0x80
+#define TI_READ_DATA 0x81
+#define TI_REQ_TYPE_CLASS 0x82
+
+/* Module identifiers */
+#define TI_I2C_PORT 0x01
+#define TI_IEEE1284_PORT 0x02
+#define TI_UART1_PORT 0x03
+#define TI_UART2_PORT 0x04
+#define TI_RAM_PORT 0x05
+
+/* Modem status */
+#define TI_MSR_DELTA_CTS 0x01
+#define TI_MSR_DELTA_DSR 0x02
+#define TI_MSR_DELTA_RI 0x04
+#define TI_MSR_DELTA_CD 0x08
+#define TI_MSR_CTS 0x10
+#define TI_MSR_DSR 0x20
+#define TI_MSR_RI 0x40
+#define TI_MSR_CD 0x80
+#define TI_MSR_DELTA_MASK 0x0F
+#define TI_MSR_MASK 0xF0
+
+/* Line status */
+#define TI_LSR_OVERRUN_ERROR 0x01
+#define TI_LSR_PARITY_ERROR 0x02
+#define TI_LSR_FRAMING_ERROR 0x04
+#define TI_LSR_BREAK 0x08
+#define TI_LSR_ERROR 0x0F
+#define TI_LSR_RX_FULL 0x10
+#define TI_LSR_TX_EMPTY 0x20
+
+/* Line control */
+#define TI_LCR_BREAK 0x40
+
+/* Modem control */
+#define TI_MCR_LOOP 0x04
+#define TI_MCR_DTR 0x10
+#define TI_MCR_RTS 0x20
+
+/* Mask settings */
+#define TI_UART_ENABLE_RTS_IN 0x0001
+#define TI_UART_DISABLE_RTS 0x0002
+#define TI_UART_ENABLE_PARITY_CHECKING 0x0008
+#define TI_UART_ENABLE_DSR_OUT 0x0010
+#define TI_UART_ENABLE_CTS_OUT 0x0020
+#define TI_UART_ENABLE_X_OUT 0x0040
+#define TI_UART_ENABLE_XA_OUT 0x0080
+#define TI_UART_ENABLE_X_IN 0x0100
+#define TI_UART_ENABLE_DTR_IN 0x0800
+#define TI_UART_DISABLE_DTR 0x1000
+#define TI_UART_ENABLE_MS_INTS 0x2000
+#define TI_UART_ENABLE_AUTO_START_DMA 0x4000
+
+/* Parity */
+#define TI_UART_NO_PARITY 0x00
+#define TI_UART_ODD_PARITY 0x01
+#define TI_UART_EVEN_PARITY 0x02
+#define TI_UART_MARK_PARITY 0x03
+#define TI_UART_SPACE_PARITY 0x04
+
+/* Stop bits */
+#define TI_UART_1_STOP_BITS 0x00
+#define TI_UART_1_5_STOP_BITS 0x01
+#define TI_UART_2_STOP_BITS 0x02
+
+/* Bits per character */
+#define TI_UART_5_DATA_BITS 0x00
+#define TI_UART_6_DATA_BITS 0x01
+#define TI_UART_7_DATA_BITS 0x02
+#define TI_UART_8_DATA_BITS 0x03
+
+/* 232/485 modes */
+#define TI_UART_232 0x00
+#define TI_UART_485_RECEIVER_DISABLED 0x01
+#define TI_UART_485_RECEIVER_ENABLED 0x02
+
+/* Pipe transfer mode and timeout */
+#define TI_PIPE_MODE_CONTINUOUS 0x01
+#define TI_PIPE_MODE_MASK 0x03
+#define TI_PIPE_TIMEOUT_MASK 0x7C
+#define TI_PIPE_TIMEOUT_ENABLE 0x80
+
+/* Config struct */
+struct ti_uart_config {
+ __u16 wBaudRate;
+ __u16 wFlags;
+ __u8 bDataBits;
+ __u8 bParity;
+ __u8 bStopBits;
+ char cXon;
+ char cXoff;
+ __u8 bUartMode;
+} __packed;
+
+/* Get port status */
+struct ti_port_status {
+ __u8 bCmdCode;
+ __u8 bModuleId;
+ __u8 bErrorCode;
+ __u8 bMSR;
+ __u8 bLSR;
+} __packed;
+
+/* Purge modes */
+#define TI_PURGE_OUTPUT 0x00
+#define TI_PURGE_INPUT 0x80
+
+/* Read/Write data */
+#define TI_RW_DATA_ADDR_SFR 0x10
+#define TI_RW_DATA_ADDR_IDATA 0x20
+#define TI_RW_DATA_ADDR_XDATA 0x30
+#define TI_RW_DATA_ADDR_CODE 0x40
+#define TI_RW_DATA_ADDR_GPIO 0x50
+#define TI_RW_DATA_ADDR_I2C 0x60
+#define TI_RW_DATA_ADDR_FLASH 0x70
+#define TI_RW_DATA_ADDR_DSP 0x80
+
+#define TI_RW_DATA_UNSPECIFIED 0x00
+#define TI_RW_DATA_BYTE 0x01
+#define TI_RW_DATA_WORD 0x02
+#define TI_RW_DATA_DOUBLE_WORD 0x04
+
+struct ti_write_data_bytes {
+ __u8 bAddrType;
+ __u8 bDataType;
+ __u8 bDataCounter;
+ __be16 wBaseAddrHi;
+ __be16 wBaseAddrLo;
+ __u8 bData[0];
+} __packed;
+
+struct ti_read_data_request {
+ __u8 bAddrType;
+ __u8 bDataType;
+ __u8 bDataCounter;
+ __be16 wBaseAddrHi;
+ __be16 wBaseAddrLo;
+} __packed;
+
+struct ti_read_data_bytes {
+ __u8 bCmdCode;
+ __u8 bModuleId;
+ __u8 bErrorCode;
+ __u8 bData[0];
+} __packed;
+
+/* Interrupt struct */
+struct ti_interrupt {
+ __u8 bICode;
+ __u8 bIInfo;
+} __packed;
+
+/* Interrupt codes */
+#define TI_GET_PORT_FROM_CODE(c) (((c) >> 4) - 3)
+#define TI_GET_FUNC_FROM_CODE(c) ((c) & 0x0f)
+#define TI_CODE_HARDWARE_ERROR 0xFF
+#define TI_CODE_DATA_ERROR 0x03
+#define TI_CODE_MODEM_STATUS 0x04
+
+/* Download firmware max packet size */
+#define TI_DOWNLOAD_MAX_PACKET_SIZE 64
+
+/* Firmware image header */
+struct ti_firmware_header {
+ __le16 wLength;
+ __u8 bCheckSum;
+} __packed;
+
+/* UART addresses */
+#define TI_UART1_BASE_ADDR 0xFFA0 /* UART 1 base address */
+#define TI_UART2_BASE_ADDR 0xFFB0 /* UART 2 base address */
+#define TI_UART_OFFSET_LCR 0x0002 /* UART MCR register offset */
+#define TI_UART_OFFSET_MCR 0x0004 /* UART MCR register offset */
#define TI_DRIVER_AUTHOR "Al Borchers <alborchers@steinerpoint.com>"
#define TI_DRIVER_DESC "TI USB 3410/5052 Serial Driver"
@@ -416,7 +649,7 @@ static int ti_open(struct tty_struct *tty, struct usb_serial_port *port)
struct urb *urb;
int port_number;
int status;
- __u16 open_settings = (__u8)(TI_PIPE_MODE_CONTINOUS |
+ __u16 open_settings = (__u8)(TI_PIPE_MODE_CONTINUOUS |
TI_PIPE_TIMEOUT_ENABLE |
(TI_TRANSFER_TIMEOUT << 2));
--
2.8.2
[toc] | [prev] | [standalone]
Page 2 of 2 — ← Prev page 1 [2]
Back to top | Article view | linux.kernel
csiph-web