USB-serial updates for 5.14-rc1
Here are the USB-serial updates for 5.14-rc1, including: - gpio support for CP2108 - chars_in_buffer and write_room return-value updates - chars_in_buffer and write_room clean ups Included are also various clean ups. All have been in linux-next with no reported issues. -----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQQHbPq+cpGvN/peuzMLxc3C7H1lCAUCYNRHtQAKCRALxc3C7H1l CD96AQDYFm0ssrdV61bejQLX+9LrIfNuISXNJy9cLhCxi3ZYJwD/ZLJhz0K/Xby1 +Xm4J5UVbPuIKMkNKMc0ezH0XZfURwU= =61V6 -----END PGP SIGNATURE----- Merge tag 'usb-serial-5.14-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial into usb-next Johan writes: USB-serial updates for 5.14-rc1 Here are the USB-serial updates for 5.14-rc1, including: - gpio support for CP2108 - chars_in_buffer and write_room return-value updates - chars_in_buffer and write_room clean ups Included are also various clean ups. All have been in linux-next with no reported issues. * tag 'usb-serial-5.14-rc1' of https://git.kernel.org/pub/scm/linux/kernel/git/johan/usb-serial: USB: serial: cp210x: add support for GPIOs on CP2108 USB: serial: drop irq-flags initialisations USB: serial: mos7840: drop buffer-callback return-value comments USB: serial: mos7720: drop buffer-callback sanity checks USB: serial: io_edgeport: drop buffer-callback sanity checks USB: serial: digi_acceleport: add chars_in_buffer locking USB: serial: digi_acceleport: reduce chars_in_buffer over-reporting USB: serial: make usb_serial_driver::chars_in_buffer return uint USB: serial: make usb_serial_driver::write_room return uint
This commit is contained in:
commit
8e9910c5ad
|
@ -247,9 +247,9 @@ struct cp210x_serial_private {
|
|||
#ifdef CONFIG_GPIOLIB
|
||||
struct gpio_chip gc;
|
||||
bool gpio_registered;
|
||||
u8 gpio_pushpull;
|
||||
u8 gpio_altfunc;
|
||||
u8 gpio_input;
|
||||
u16 gpio_pushpull;
|
||||
u16 gpio_altfunc;
|
||||
u16 gpio_input;
|
||||
#endif
|
||||
u8 partnum;
|
||||
u32 fw_version;
|
||||
|
@ -534,6 +534,48 @@ struct cp210x_single_port_config {
|
|||
#define CP2104_GPIO1_RXLED_MODE BIT(1)
|
||||
#define CP2104_GPIO2_RS485_MODE BIT(2)
|
||||
|
||||
struct cp210x_quad_port_state {
|
||||
__le16 gpio_mode_pb0;
|
||||
__le16 gpio_mode_pb1;
|
||||
__le16 gpio_mode_pb2;
|
||||
__le16 gpio_mode_pb3;
|
||||
__le16 gpio_mode_pb4;
|
||||
|
||||
__le16 gpio_lowpower_pb0;
|
||||
__le16 gpio_lowpower_pb1;
|
||||
__le16 gpio_lowpower_pb2;
|
||||
__le16 gpio_lowpower_pb3;
|
||||
__le16 gpio_lowpower_pb4;
|
||||
|
||||
__le16 gpio_latch_pb0;
|
||||
__le16 gpio_latch_pb1;
|
||||
__le16 gpio_latch_pb2;
|
||||
__le16 gpio_latch_pb3;
|
||||
__le16 gpio_latch_pb4;
|
||||
};
|
||||
|
||||
/*
|
||||
* CP210X_VENDOR_SPECIFIC, CP210X_GET_PORTCONFIG call reads these 0x49 bytes
|
||||
* on a CP2108 chip.
|
||||
*
|
||||
* See https://www.silabs.com/documents/public/application-notes/an978-cp210x-usb-to-uart-api-specification.pdf
|
||||
*/
|
||||
struct cp210x_quad_port_config {
|
||||
struct cp210x_quad_port_state reset_state;
|
||||
struct cp210x_quad_port_state suspend_state;
|
||||
u8 ipdelay_ifc[4];
|
||||
u8 enhancedfxn_ifc[4];
|
||||
u8 enhancedfxn_device;
|
||||
u8 extclkfreq[4];
|
||||
} __packed;
|
||||
|
||||
#define CP2108_EF_IFC_GPIO_TXLED 0x01
|
||||
#define CP2108_EF_IFC_GPIO_RXLED 0x02
|
||||
#define CP2108_EF_IFC_GPIO_RS485 0x04
|
||||
#define CP2108_EF_IFC_GPIO_RS485_LOGIC 0x08
|
||||
#define CP2108_EF_IFC_GPIO_CLOCK 0x10
|
||||
#define CP2108_EF_IFC_DYNAMIC_SUSPEND 0x40
|
||||
|
||||
/* CP2102N configuration array indices */
|
||||
#define CP210X_2NCONFIG_CONFIG_VERSION_IDX 2
|
||||
#define CP210X_2NCONFIG_GPIO_MODE_IDX 581
|
||||
|
@ -546,12 +588,24 @@ struct cp210x_single_port_config {
|
|||
#define CP2102N_QFN20_GPIO1_RS485_MODE BIT(4)
|
||||
#define CP2102N_QFN20_GPIO0_CLK_MODE BIT(6)
|
||||
|
||||
/* CP210X_VENDOR_SPECIFIC, CP210X_WRITE_LATCH call writes these 0x2 bytes. */
|
||||
/*
|
||||
* CP210X_VENDOR_SPECIFIC, CP210X_WRITE_LATCH call writes these 0x02 bytes
|
||||
* for CP2102N, CP2103, CP2104 and CP2105.
|
||||
*/
|
||||
struct cp210x_gpio_write {
|
||||
u8 mask;
|
||||
u8 state;
|
||||
};
|
||||
|
||||
/*
|
||||
* CP210X_VENDOR_SPECIFIC, CP210X_WRITE_LATCH call writes these 0x04 bytes
|
||||
* for CP2108.
|
||||
*/
|
||||
struct cp210x_gpio_write16 {
|
||||
__le16 mask;
|
||||
__le16 state;
|
||||
};
|
||||
|
||||
/*
|
||||
* Helper to get interface number when we only have struct usb_serial.
|
||||
*/
|
||||
|
@ -1434,52 +1488,84 @@ static int cp210x_gpio_get(struct gpio_chip *gc, unsigned int gpio)
|
|||
{
|
||||
struct usb_serial *serial = gpiochip_get_data(gc);
|
||||
struct cp210x_serial_private *priv = usb_get_serial_data(serial);
|
||||
u8 req_type = REQTYPE_DEVICE_TO_HOST;
|
||||
u8 req_type;
|
||||
u16 mask;
|
||||
int result;
|
||||
u8 buf;
|
||||
|
||||
if (priv->partnum == CP210X_PARTNUM_CP2105)
|
||||
req_type = REQTYPE_INTERFACE_TO_HOST;
|
||||
int len;
|
||||
|
||||
result = usb_autopm_get_interface(serial->interface);
|
||||
if (result)
|
||||
return result;
|
||||
|
||||
result = cp210x_read_vendor_block(serial, req_type,
|
||||
CP210X_READ_LATCH, &buf, sizeof(buf));
|
||||
switch (priv->partnum) {
|
||||
case CP210X_PARTNUM_CP2105:
|
||||
req_type = REQTYPE_INTERFACE_TO_HOST;
|
||||
len = 1;
|
||||
break;
|
||||
case CP210X_PARTNUM_CP2108:
|
||||
req_type = REQTYPE_INTERFACE_TO_HOST;
|
||||
len = 2;
|
||||
break;
|
||||
default:
|
||||
req_type = REQTYPE_DEVICE_TO_HOST;
|
||||
len = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
mask = 0;
|
||||
result = cp210x_read_vendor_block(serial, req_type, CP210X_READ_LATCH,
|
||||
&mask, len);
|
||||
|
||||
usb_autopm_put_interface(serial->interface);
|
||||
|
||||
if (result < 0)
|
||||
return result;
|
||||
|
||||
return !!(buf & BIT(gpio));
|
||||
le16_to_cpus(&mask);
|
||||
|
||||
return !!(mask & BIT(gpio));
|
||||
}
|
||||
|
||||
static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
|
||||
{
|
||||
struct usb_serial *serial = gpiochip_get_data(gc);
|
||||
struct cp210x_serial_private *priv = usb_get_serial_data(serial);
|
||||
struct cp210x_gpio_write16 buf16;
|
||||
struct cp210x_gpio_write buf;
|
||||
u16 mask, state;
|
||||
u16 wIndex;
|
||||
int result;
|
||||
|
||||
if (value == 1)
|
||||
buf.state = BIT(gpio);
|
||||
state = BIT(gpio);
|
||||
else
|
||||
buf.state = 0;
|
||||
state = 0;
|
||||
|
||||
buf.mask = BIT(gpio);
|
||||
mask = BIT(gpio);
|
||||
|
||||
result = usb_autopm_get_interface(serial->interface);
|
||||
if (result)
|
||||
goto out;
|
||||
|
||||
if (priv->partnum == CP210X_PARTNUM_CP2105) {
|
||||
switch (priv->partnum) {
|
||||
case CP210X_PARTNUM_CP2105:
|
||||
buf.mask = (u8)mask;
|
||||
buf.state = (u8)state;
|
||||
result = cp210x_write_vendor_block(serial,
|
||||
REQTYPE_HOST_TO_INTERFACE,
|
||||
CP210X_WRITE_LATCH, &buf,
|
||||
sizeof(buf));
|
||||
} else {
|
||||
u16 wIndex = buf.state << 8 | buf.mask;
|
||||
|
||||
break;
|
||||
case CP210X_PARTNUM_CP2108:
|
||||
buf16.mask = cpu_to_le16(mask);
|
||||
buf16.state = cpu_to_le16(state);
|
||||
result = cp210x_write_vendor_block(serial,
|
||||
REQTYPE_HOST_TO_INTERFACE,
|
||||
CP210X_WRITE_LATCH, &buf16,
|
||||
sizeof(buf16));
|
||||
break;
|
||||
default:
|
||||
wIndex = state << 8 | mask;
|
||||
result = usb_control_msg(serial->dev,
|
||||
usb_sndctrlpipe(serial->dev, 0),
|
||||
CP210X_VENDOR_SPECIFIC,
|
||||
|
@ -1487,6 +1573,7 @@ static void cp210x_gpio_set(struct gpio_chip *gc, unsigned int gpio, int value)
|
|||
CP210X_WRITE_LATCH,
|
||||
wIndex,
|
||||
NULL, 0, USB_CTRL_SET_TIMEOUT);
|
||||
break;
|
||||
}
|
||||
|
||||
usb_autopm_put_interface(serial->interface);
|
||||
|
@ -1696,6 +1783,61 @@ static int cp2104_gpioconf_init(struct usb_serial *serial)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cp2108_gpio_init(struct usb_serial *serial)
|
||||
{
|
||||
struct cp210x_serial_private *priv = usb_get_serial_data(serial);
|
||||
struct cp210x_quad_port_config config;
|
||||
u16 gpio_latch;
|
||||
int result;
|
||||
u8 i;
|
||||
|
||||
result = cp210x_read_vendor_block(serial, REQTYPE_DEVICE_TO_HOST,
|
||||
CP210X_GET_PORTCONFIG, &config,
|
||||
sizeof(config));
|
||||
if (result < 0)
|
||||
return result;
|
||||
|
||||
priv->gc.ngpio = 16;
|
||||
priv->gpio_pushpull = le16_to_cpu(config.reset_state.gpio_mode_pb1);
|
||||
gpio_latch = le16_to_cpu(config.reset_state.gpio_latch_pb1);
|
||||
|
||||
/*
|
||||
* Mark all pins which are not in GPIO mode.
|
||||
*
|
||||
* Refer to table 9.1 "GPIO Mode alternate Functions" in the datasheet:
|
||||
* https://www.silabs.com/documents/public/data-sheets/cp2108-datasheet.pdf
|
||||
*
|
||||
* Alternate functions of GPIO0 to GPIO3 are determine by enhancedfxn_ifc[0]
|
||||
* and the similarly for the other pins; enhancedfxn_ifc[1]: GPIO4 to GPIO7,
|
||||
* enhancedfxn_ifc[2]: GPIO8 to GPIO11, enhancedfxn_ifc[3]: GPIO12 to GPIO15.
|
||||
*/
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (config.enhancedfxn_ifc[i] & CP2108_EF_IFC_GPIO_TXLED)
|
||||
priv->gpio_altfunc |= BIT(i * 4);
|
||||
if (config.enhancedfxn_ifc[i] & CP2108_EF_IFC_GPIO_RXLED)
|
||||
priv->gpio_altfunc |= BIT((i * 4) + 1);
|
||||
if (config.enhancedfxn_ifc[i] & CP2108_EF_IFC_GPIO_RS485)
|
||||
priv->gpio_altfunc |= BIT((i * 4) + 2);
|
||||
if (config.enhancedfxn_ifc[i] & CP2108_EF_IFC_GPIO_CLOCK)
|
||||
priv->gpio_altfunc |= BIT((i * 4) + 3);
|
||||
}
|
||||
|
||||
/*
|
||||
* Like CP2102N, CP2108 has also no strict input and output pin
|
||||
* modes. Do the same input mode emulation as CP2102N.
|
||||
*/
|
||||
for (i = 0; i < priv->gc.ngpio; ++i) {
|
||||
/*
|
||||
* Set direction to "input" iff pin is open-drain and reset
|
||||
* value is 1.
|
||||
*/
|
||||
if (!(priv->gpio_pushpull & BIT(i)) && (gpio_latch & BIT(i)))
|
||||
priv->gpio_input |= BIT(i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int cp2102n_gpioconf_init(struct usb_serial *serial)
|
||||
{
|
||||
struct cp210x_serial_private *priv = usb_get_serial_data(serial);
|
||||
|
@ -1812,6 +1954,15 @@ static int cp210x_gpio_init(struct usb_serial *serial)
|
|||
case CP210X_PARTNUM_CP2105:
|
||||
result = cp2105_gpioconf_init(serial);
|
||||
break;
|
||||
case CP210X_PARTNUM_CP2108:
|
||||
/*
|
||||
* The GPIOs are not tied to any specific port so only register
|
||||
* once for interface 0.
|
||||
*/
|
||||
if (cp210x_interface_num(serial) != 0)
|
||||
return 0;
|
||||
result = cp2108_gpio_init(serial);
|
||||
break;
|
||||
case CP210X_PARTNUM_CP2102N_QFN28:
|
||||
case CP210X_PARTNUM_CP2102N_QFN24:
|
||||
case CP210X_PARTNUM_CP2102N_QFN20:
|
||||
|
|
|
@ -53,7 +53,7 @@ static int cyberjack_open(struct tty_struct *tty,
|
|||
static void cyberjack_close(struct usb_serial_port *port);
|
||||
static int cyberjack_write(struct tty_struct *tty,
|
||||
struct usb_serial_port *port, const unsigned char *buf, int count);
|
||||
static int cyberjack_write_room(struct tty_struct *tty);
|
||||
static unsigned int cyberjack_write_room(struct tty_struct *tty);
|
||||
static void cyberjack_read_int_callback(struct urb *urb);
|
||||
static void cyberjack_read_bulk_callback(struct urb *urb);
|
||||
static void cyberjack_write_bulk_callback(struct urb *urb);
|
||||
|
@ -240,7 +240,7 @@ static int cyberjack_write(struct tty_struct *tty,
|
|||
return count;
|
||||
}
|
||||
|
||||
static int cyberjack_write_room(struct tty_struct *tty)
|
||||
static unsigned int cyberjack_write_room(struct tty_struct *tty)
|
||||
{
|
||||
/* FIXME: .... */
|
||||
return CYBERJACK_LOCAL_BUF_SIZE;
|
||||
|
|
|
@ -122,14 +122,14 @@ static void cypress_dtr_rts(struct usb_serial_port *port, int on);
|
|||
static int cypress_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
static void cypress_send(struct usb_serial_port *port);
|
||||
static int cypress_write_room(struct tty_struct *tty);
|
||||
static unsigned int cypress_write_room(struct tty_struct *tty);
|
||||
static void cypress_earthmate_init_termios(struct tty_struct *tty);
|
||||
static void cypress_set_termios(struct tty_struct *tty,
|
||||
struct usb_serial_port *port, struct ktermios *old);
|
||||
static int cypress_tiocmget(struct tty_struct *tty);
|
||||
static int cypress_tiocmset(struct tty_struct *tty,
|
||||
unsigned int set, unsigned int clear);
|
||||
static int cypress_chars_in_buffer(struct tty_struct *tty);
|
||||
static unsigned int cypress_chars_in_buffer(struct tty_struct *tty);
|
||||
static void cypress_throttle(struct tty_struct *tty);
|
||||
static void cypress_unthrottle(struct tty_struct *tty);
|
||||
static void cypress_set_dead(struct usb_serial_port *port);
|
||||
|
@ -789,18 +789,18 @@ send:
|
|||
|
||||
|
||||
/* returns how much space is available in the soft buffer */
|
||||
static int cypress_write_room(struct tty_struct *tty)
|
||||
static unsigned int cypress_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct cypress_private *priv = usb_get_serial_port_data(port);
|
||||
int room = 0;
|
||||
unsigned int room;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
room = kfifo_avail(&priv->write_fifo);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
}
|
||||
|
||||
|
@ -970,18 +970,18 @@ static void cypress_set_termios(struct tty_struct *tty,
|
|||
|
||||
|
||||
/* returns amount of data still left in soft buffer */
|
||||
static int cypress_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int cypress_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct cypress_private *priv = usb_get_serial_port_data(port);
|
||||
int chars = 0;
|
||||
unsigned int chars;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
chars = kfifo_len(&priv->write_fifo);
|
||||
spin_unlock_irqrestore(&priv->lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, chars);
|
||||
return chars;
|
||||
}
|
||||
|
||||
|
|
|
@ -223,8 +223,8 @@ static int digi_tiocmset(struct tty_struct *tty, unsigned int set,
|
|||
static int digi_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
static void digi_write_bulk_callback(struct urb *urb);
|
||||
static int digi_write_room(struct tty_struct *tty);
|
||||
static int digi_chars_in_buffer(struct tty_struct *tty);
|
||||
static unsigned int digi_write_room(struct tty_struct *tty);
|
||||
static unsigned int digi_chars_in_buffer(struct tty_struct *tty);
|
||||
static int digi_open(struct tty_struct *tty, struct usb_serial_port *port);
|
||||
static void digi_close(struct usb_serial_port *port);
|
||||
static void digi_dtr_rts(struct usb_serial_port *port, int on);
|
||||
|
@ -372,7 +372,7 @@ static int digi_write_oob_command(struct usb_serial_port *port,
|
|||
int len;
|
||||
struct usb_serial_port *oob_port = (struct usb_serial_port *)((struct digi_serial *)(usb_get_serial_data(port->serial)))->ds_oob_port;
|
||||
struct digi_port *oob_priv = usb_get_serial_port_data(oob_port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
dev_dbg(&port->dev,
|
||||
"digi_write_oob_command: TOP: port=%d, count=%d\n",
|
||||
|
@ -430,7 +430,7 @@ static int digi_write_inb_command(struct usb_serial_port *port,
|
|||
int len;
|
||||
struct digi_port *priv = usb_get_serial_port_data(port);
|
||||
unsigned char *data = port->write_urb->transfer_buffer;
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
dev_dbg(&port->dev, "digi_write_inb_command: TOP: port=%d, count=%d\n",
|
||||
priv->dp_port_num, count);
|
||||
|
@ -511,8 +511,7 @@ static int digi_set_modem_signals(struct usb_serial_port *port,
|
|||
struct usb_serial_port *oob_port = (struct usb_serial_port *) ((struct digi_serial *)(usb_get_serial_data(port->serial)))->ds_oob_port;
|
||||
struct digi_port *oob_priv = usb_get_serial_port_data(oob_port);
|
||||
unsigned char *data = oob_port->write_urb->transfer_buffer;
|
||||
unsigned long flags = 0;
|
||||
|
||||
unsigned long flags;
|
||||
|
||||
dev_dbg(&port->dev,
|
||||
"digi_set_modem_signals: TOP: port=%d, modem_signals=0x%x\n",
|
||||
|
@ -577,7 +576,7 @@ static int digi_transmit_idle(struct usb_serial_port *port,
|
|||
int ret;
|
||||
unsigned char buf[2];
|
||||
struct digi_port *priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&priv->dp_port_lock, flags);
|
||||
priv->dp_transmit_idle = 0;
|
||||
|
@ -887,7 +886,7 @@ static int digi_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
int ret, data_len, new_len;
|
||||
struct digi_port *priv = usb_get_serial_port_data(port);
|
||||
unsigned char *data = port->write_urb->transfer_buffer;
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
dev_dbg(&port->dev, "digi_write: TOP: port=%d, count=%d\n",
|
||||
priv->dp_port_num, count);
|
||||
|
@ -1020,12 +1019,12 @@ static void digi_write_bulk_callback(struct urb *urb)
|
|||
tty_port_tty_wakeup(&port->port);
|
||||
}
|
||||
|
||||
static int digi_write_room(struct tty_struct *tty)
|
||||
static unsigned int digi_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct digi_port *priv = usb_get_serial_port_data(port);
|
||||
int room;
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
unsigned int room;
|
||||
|
||||
spin_lock_irqsave(&priv->dp_port_lock, flags);
|
||||
|
||||
|
@ -1035,27 +1034,28 @@ static int digi_write_room(struct tty_struct *tty)
|
|||
room = port->bulk_out_size - 2 - priv->dp_out_buf_len;
|
||||
|
||||
spin_unlock_irqrestore(&priv->dp_port_lock, flags);
|
||||
dev_dbg(&port->dev, "digi_write_room: port=%d, room=%d\n", priv->dp_port_num, room);
|
||||
dev_dbg(&port->dev, "digi_write_room: port=%d, room=%u\n", priv->dp_port_num, room);
|
||||
return room;
|
||||
|
||||
}
|
||||
|
||||
static int digi_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int digi_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct digi_port *priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags;
|
||||
unsigned int chars;
|
||||
|
||||
if (priv->dp_write_urb_in_use) {
|
||||
dev_dbg(&port->dev, "digi_chars_in_buffer: port=%d, chars=%d\n",
|
||||
priv->dp_port_num, port->bulk_out_size - 2);
|
||||
/* return(port->bulk_out_size - 2); */
|
||||
return 256;
|
||||
} else {
|
||||
dev_dbg(&port->dev, "digi_chars_in_buffer: port=%d, chars=%d\n",
|
||||
priv->dp_port_num, priv->dp_out_buf_len);
|
||||
return priv->dp_out_buf_len;
|
||||
}
|
||||
spin_lock_irqsave(&priv->dp_port_lock, flags);
|
||||
if (priv->dp_write_urb_in_use)
|
||||
chars = port->bulk_out_size - 2;
|
||||
else
|
||||
chars = priv->dp_out_buf_len;
|
||||
spin_unlock_irqrestore(&priv->dp_port_lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s: port=%d, chars=%d\n", __func__,
|
||||
priv->dp_port_num, chars);
|
||||
return chars;
|
||||
}
|
||||
|
||||
static void digi_dtr_rts(struct usb_serial_port *port, int on)
|
||||
|
|
|
@ -1113,7 +1113,7 @@ static int garmin_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
}
|
||||
|
||||
|
||||
static int garmin_write_room(struct tty_struct *tty)
|
||||
static unsigned int garmin_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
/*
|
||||
|
|
|
@ -230,11 +230,11 @@ int usb_serial_generic_write(struct tty_struct *tty,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(usb_serial_generic_write);
|
||||
|
||||
int usb_serial_generic_write_room(struct tty_struct *tty)
|
||||
unsigned int usb_serial_generic_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
unsigned long flags;
|
||||
int room;
|
||||
unsigned int room;
|
||||
|
||||
if (!port->bulk_out_size)
|
||||
return 0;
|
||||
|
@ -243,15 +243,15 @@ int usb_serial_generic_write_room(struct tty_struct *tty)
|
|||
room = kfifo_avail(&port->write_fifo);
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
}
|
||||
|
||||
int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
|
||||
unsigned int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
unsigned long flags;
|
||||
int chars;
|
||||
unsigned int chars;
|
||||
|
||||
if (!port->bulk_out_size)
|
||||
return 0;
|
||||
|
@ -260,7 +260,7 @@ int usb_serial_generic_chars_in_buffer(struct tty_struct *tty)
|
|||
chars = kfifo_len(&port->write_fifo) + port->tx_bytes;
|
||||
spin_unlock_irqrestore(&port->lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, chars);
|
||||
return chars;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(usb_serial_generic_chars_in_buffer);
|
||||
|
|
|
@ -1351,33 +1351,21 @@ exit_send:
|
|||
/*****************************************************************************
|
||||
* edge_write_room
|
||||
* this function is called by the tty driver when it wants to know how
|
||||
* many bytes of data we can accept for a specific port. If successful,
|
||||
* we return the amount of room that we have for this port (the txCredits)
|
||||
* otherwise we return a negative error number.
|
||||
* many bytes of data we can accept for a specific port.
|
||||
*****************************************************************************/
|
||||
static int edge_write_room(struct tty_struct *tty)
|
||||
static unsigned int edge_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
||||
int room;
|
||||
unsigned int room;
|
||||
unsigned long flags;
|
||||
|
||||
if (edge_port == NULL)
|
||||
return 0;
|
||||
if (edge_port->closePending)
|
||||
return 0;
|
||||
|
||||
if (!edge_port->open) {
|
||||
dev_dbg(&port->dev, "%s - port not opened\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* total of both buffers is still txCredit */
|
||||
spin_lock_irqsave(&edge_port->ep_lock, flags);
|
||||
room = edge_port->txCredits - edge_port->txfifo.count;
|
||||
spin_unlock_irqrestore(&edge_port->ep_lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
}
|
||||
|
||||
|
@ -1387,33 +1375,20 @@ static int edge_write_room(struct tty_struct *tty)
|
|||
* this function is called by the tty driver when it wants to know how
|
||||
* many bytes of data we currently have outstanding in the port (data that
|
||||
* has been written, but hasn't made it out the port yet)
|
||||
* If successful, we return the number of bytes left to be written in the
|
||||
* system,
|
||||
* Otherwise we return a negative error number.
|
||||
*****************************************************************************/
|
||||
static int edge_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int edge_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
||||
int num_chars;
|
||||
unsigned int num_chars;
|
||||
unsigned long flags;
|
||||
|
||||
if (edge_port == NULL)
|
||||
return 0;
|
||||
if (edge_port->closePending)
|
||||
return 0;
|
||||
|
||||
if (!edge_port->open) {
|
||||
dev_dbg(&port->dev, "%s - port not opened\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&edge_port->ep_lock, flags);
|
||||
num_chars = edge_port->maxTxCredits - edge_port->txCredits +
|
||||
edge_port->txfifo.count;
|
||||
spin_unlock_irqrestore(&edge_port->ep_lock, flags);
|
||||
if (num_chars) {
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, num_chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, num_chars);
|
||||
}
|
||||
|
||||
return num_chars;
|
||||
|
|
|
@ -2067,11 +2067,11 @@ static void edge_send(struct usb_serial_port *port, struct tty_struct *tty)
|
|||
tty_wakeup(tty);
|
||||
}
|
||||
|
||||
static int edge_write_room(struct tty_struct *tty)
|
||||
static unsigned int edge_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
||||
int room = 0;
|
||||
unsigned int room;
|
||||
unsigned long flags;
|
||||
|
||||
if (edge_port == NULL)
|
||||
|
@ -2083,15 +2083,15 @@ static int edge_write_room(struct tty_struct *tty)
|
|||
room = kfifo_avail(&port->write_fifo);
|
||||
spin_unlock_irqrestore(&edge_port->ep_lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
}
|
||||
|
||||
static int edge_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int edge_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct edgeport_port *edge_port = usb_get_serial_port_data(port);
|
||||
int chars = 0;
|
||||
unsigned int chars;
|
||||
unsigned long flags;
|
||||
if (edge_port == NULL)
|
||||
return 0;
|
||||
|
@ -2100,7 +2100,7 @@ static int edge_chars_in_buffer(struct tty_struct *tty)
|
|||
chars = kfifo_len(&port->write_fifo);
|
||||
spin_unlock_irqrestore(&edge_port->ep_lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, chars);
|
||||
return chars;
|
||||
}
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ static int xbof = -1;
|
|||
static int ir_startup (struct usb_serial *serial);
|
||||
static int ir_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
static int ir_write_room(struct tty_struct *tty);
|
||||
static unsigned int ir_write_room(struct tty_struct *tty);
|
||||
static void ir_write_bulk_callback(struct urb *urb);
|
||||
static void ir_process_read_urb(struct urb *urb);
|
||||
static void ir_set_termios(struct tty_struct *tty,
|
||||
|
@ -339,10 +339,10 @@ static void ir_write_bulk_callback(struct urb *urb)
|
|||
usb_serial_port_softint(port);
|
||||
}
|
||||
|
||||
static int ir_write_room(struct tty_struct *tty)
|
||||
static unsigned int ir_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
int count = 0;
|
||||
unsigned int count = 0;
|
||||
|
||||
if (port->bulk_out_size == 0)
|
||||
return 0;
|
||||
|
|
|
@ -1453,13 +1453,13 @@ static void usa67_glocont_callback(struct urb *urb)
|
|||
}
|
||||
}
|
||||
|
||||
static int keyspan_write_room(struct tty_struct *tty)
|
||||
static unsigned int keyspan_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct keyspan_port_private *p_priv;
|
||||
const struct keyspan_device_details *d_details;
|
||||
int flip;
|
||||
int data_len;
|
||||
unsigned int data_len;
|
||||
struct urb *this_urb;
|
||||
|
||||
p_priv = usb_get_serial_port_data(port);
|
||||
|
|
|
@ -53,7 +53,7 @@ static int kobil_open(struct tty_struct *tty, struct usb_serial_port *port);
|
|||
static void kobil_close(struct usb_serial_port *port);
|
||||
static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
static int kobil_write_room(struct tty_struct *tty);
|
||||
static unsigned int kobil_write_room(struct tty_struct *tty);
|
||||
static int kobil_ioctl(struct tty_struct *tty,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
static int kobil_tiocmget(struct tty_struct *tty);
|
||||
|
@ -358,7 +358,7 @@ static int kobil_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
}
|
||||
|
||||
|
||||
static int kobil_write_room(struct tty_struct *tty)
|
||||
static unsigned int kobil_write_room(struct tty_struct *tty)
|
||||
{
|
||||
/* FIXME */
|
||||
return 8;
|
||||
|
|
|
@ -109,9 +109,9 @@ static void metrousb_read_int_callback(struct urb *urb)
|
|||
struct usb_serial_port *port = urb->context;
|
||||
struct metrousb_private *metro_priv = usb_get_serial_port_data(port);
|
||||
unsigned char *data = urb->transfer_buffer;
|
||||
unsigned long flags;
|
||||
int throttled = 0;
|
||||
int result = 0;
|
||||
unsigned long flags = 0;
|
||||
|
||||
dev_dbg(&port->dev, "%s\n", __func__);
|
||||
|
||||
|
@ -171,7 +171,7 @@ static int metrousb_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|||
{
|
||||
struct usb_serial *serial = port->serial;
|
||||
struct metrousb_private *metro_priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
int result = 0;
|
||||
|
||||
/* Set the private data information for the port. */
|
||||
|
@ -268,7 +268,7 @@ static void metrousb_throttle(struct tty_struct *tty)
|
|||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct metrousb_private *metro_priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
/* Set the private information for the port to stop reading data. */
|
||||
spin_lock_irqsave(&metro_priv->lock, flags);
|
||||
|
@ -281,7 +281,7 @@ static int metrousb_tiocmget(struct tty_struct *tty)
|
|||
unsigned long control_state = 0;
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct metrousb_private *metro_priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&metro_priv->lock, flags);
|
||||
control_state = metro_priv->control_state;
|
||||
|
@ -296,7 +296,7 @@ static int metrousb_tiocmset(struct tty_struct *tty,
|
|||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct usb_serial *serial = port->serial;
|
||||
struct metrousb_private *metro_priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
unsigned long control_state = 0;
|
||||
|
||||
dev_dbg(&port->dev, "%s - set=%d, clear=%d\n", __func__, set, clear);
|
||||
|
@ -323,7 +323,7 @@ static void metrousb_unthrottle(struct tty_struct *tty)
|
|||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct metrousb_private *metro_priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags = 0;
|
||||
unsigned long flags;
|
||||
int result = 0;
|
||||
|
||||
/* Set the private information for the port to resume reading data. */
|
||||
|
|
|
@ -945,27 +945,20 @@ static int mos7720_open(struct tty_struct *tty, struct usb_serial_port *port)
|
|||
* this function is called by the tty driver when it wants to know how many
|
||||
* bytes of data we currently have outstanding in the port (data that has
|
||||
* been written, but hasn't made it out the port yet)
|
||||
* If successful, we return the number of bytes left to be written in the
|
||||
* system,
|
||||
* Otherwise we return a negative error number.
|
||||
*/
|
||||
static int mos7720_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int mos7720_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct moschip_port *mos7720_port = usb_get_serial_port_data(port);
|
||||
int i;
|
||||
int chars = 0;
|
||||
struct moschip_port *mos7720_port;
|
||||
|
||||
mos7720_port = usb_get_serial_port_data(port);
|
||||
if (mos7720_port == NULL)
|
||||
return 0;
|
||||
unsigned int chars = 0;
|
||||
|
||||
for (i = 0; i < NUM_URBS; ++i) {
|
||||
if (mos7720_port->write_urb_pool[i] &&
|
||||
mos7720_port->write_urb_pool[i]->status == -EINPROGRESS)
|
||||
chars += URB_TRANSFER_BUFFER_SIZE;
|
||||
}
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, chars);
|
||||
return chars;
|
||||
}
|
||||
|
||||
|
@ -1030,20 +1023,14 @@ static void mos7720_break(struct tty_struct *tty, int break_state)
|
|||
* mos7720_write_room
|
||||
* this function is called by the tty driver when it wants to know how many
|
||||
* bytes of data we can accept for a specific port.
|
||||
* If successful, we return the amount of room that we have for this port
|
||||
* Otherwise we return a negative error number.
|
||||
*/
|
||||
static int mos7720_write_room(struct tty_struct *tty)
|
||||
static unsigned int mos7720_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct moschip_port *mos7720_port;
|
||||
int room = 0;
|
||||
struct moschip_port *mos7720_port = usb_get_serial_port_data(port);
|
||||
unsigned int room = 0;
|
||||
int i;
|
||||
|
||||
mos7720_port = usb_get_serial_port_data(port);
|
||||
if (mos7720_port == NULL)
|
||||
return 0;
|
||||
|
||||
/* FIXME: Locking */
|
||||
for (i = 0; i < NUM_URBS; ++i) {
|
||||
if (mos7720_port->write_urb_pool[i] &&
|
||||
|
@ -1051,7 +1038,7 @@ static int mos7720_write_room(struct tty_struct *tty)
|
|||
room += URB_TRANSFER_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
}
|
||||
|
||||
|
|
|
@ -730,17 +730,14 @@ err:
|
|||
* this function is called by the tty driver when it wants to know how many
|
||||
* bytes of data we currently have outstanding in the port (data that has
|
||||
* been written, but hasn't made it out the port yet)
|
||||
* If successful, we return the number of bytes left to be written in the
|
||||
* system,
|
||||
* Otherwise we return zero.
|
||||
*****************************************************************************/
|
||||
|
||||
static int mos7840_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int mos7840_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct moschip_port *mos7840_port = usb_get_serial_port_data(port);
|
||||
int i;
|
||||
int chars = 0;
|
||||
unsigned int chars = 0;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&mos7840_port->pool_lock, flags);
|
||||
|
@ -751,7 +748,7 @@ static int mos7840_chars_in_buffer(struct tty_struct *tty)
|
|||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&mos7840_port->pool_lock, flags);
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, chars);
|
||||
return chars;
|
||||
|
||||
}
|
||||
|
@ -814,16 +811,14 @@ static void mos7840_break(struct tty_struct *tty, int break_state)
|
|||
* mos7840_write_room
|
||||
* this function is called by the tty driver when it wants to know how many
|
||||
* bytes of data we can accept for a specific port.
|
||||
* If successful, we return the amount of room that we have for this port
|
||||
* Otherwise we return a negative error number.
|
||||
*****************************************************************************/
|
||||
|
||||
static int mos7840_write_room(struct tty_struct *tty)
|
||||
static unsigned int mos7840_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct moschip_port *mos7840_port = usb_get_serial_port_data(port);
|
||||
int i;
|
||||
int room = 0;
|
||||
unsigned int room = 0;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&mos7840_port->pool_lock, flags);
|
||||
|
@ -834,7 +829,7 @@ static int mos7840_write_room(struct tty_struct *tty)
|
|||
spin_unlock_irqrestore(&mos7840_port->pool_lock, flags);
|
||||
|
||||
room = (room == 0) ? 0 : room - URB_TRANSFER_BUFFER_SIZE + 1;
|
||||
dev_dbg(&mos7840_port->port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&mos7840_port->port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
|
||||
}
|
||||
|
|
|
@ -267,7 +267,7 @@ error_no_buffer:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int opticon_write_room(struct tty_struct *tty)
|
||||
static unsigned int opticon_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct opticon_private *priv = usb_get_serial_port_data(port);
|
||||
|
@ -289,12 +289,12 @@ static int opticon_write_room(struct tty_struct *tty)
|
|||
return 2048;
|
||||
}
|
||||
|
||||
static int opticon_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int opticon_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct opticon_private *priv = usb_get_serial_port_data(port);
|
||||
unsigned long flags;
|
||||
int count;
|
||||
unsigned int count;
|
||||
|
||||
spin_lock_irqsave(&priv->lock, flags);
|
||||
count = priv->outstanding_bytes;
|
||||
|
|
|
@ -126,8 +126,8 @@ static void oti6858_read_bulk_callback(struct urb *urb);
|
|||
static void oti6858_write_bulk_callback(struct urb *urb);
|
||||
static int oti6858_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
static int oti6858_write_room(struct tty_struct *tty);
|
||||
static int oti6858_chars_in_buffer(struct tty_struct *tty);
|
||||
static unsigned int oti6858_write_room(struct tty_struct *tty);
|
||||
static unsigned int oti6858_chars_in_buffer(struct tty_struct *tty);
|
||||
static int oti6858_tiocmget(struct tty_struct *tty);
|
||||
static int oti6858_tiocmset(struct tty_struct *tty,
|
||||
unsigned int set, unsigned int clear);
|
||||
|
@ -363,10 +363,10 @@ static int oti6858_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
return count;
|
||||
}
|
||||
|
||||
static int oti6858_write_room(struct tty_struct *tty)
|
||||
static unsigned int oti6858_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
int room = 0;
|
||||
unsigned int room;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
@ -376,10 +376,10 @@ static int oti6858_write_room(struct tty_struct *tty)
|
|||
return room;
|
||||
}
|
||||
|
||||
static int oti6858_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int oti6858_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
int chars = 0;
|
||||
unsigned int chars;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&port->lock, flags);
|
||||
|
|
|
@ -870,12 +870,12 @@ static void qt2_update_lsr(struct usb_serial_port *port, unsigned char *ch)
|
|||
|
||||
}
|
||||
|
||||
static int qt2_write_room(struct tty_struct *tty)
|
||||
static unsigned int qt2_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct qt2_port_private *port_priv;
|
||||
unsigned long flags = 0;
|
||||
int r;
|
||||
unsigned long flags;
|
||||
unsigned int r;
|
||||
|
||||
port_priv = usb_get_serial_port_data(port);
|
||||
|
||||
|
|
|
@ -613,7 +613,7 @@ static void sierra_instat_callback(struct urb *urb)
|
|||
}
|
||||
}
|
||||
|
||||
static int sierra_write_room(struct tty_struct *tty)
|
||||
static unsigned int sierra_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct sierra_port_private *portdata = usb_get_serial_port_data(port);
|
||||
|
@ -632,19 +632,19 @@ static int sierra_write_room(struct tty_struct *tty)
|
|||
return 2048;
|
||||
}
|
||||
|
||||
static int sierra_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned int sierra_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct sierra_port_private *portdata = usb_get_serial_port_data(port);
|
||||
unsigned long flags;
|
||||
int chars;
|
||||
unsigned int chars;
|
||||
|
||||
/* NOTE: This overcounts somewhat. */
|
||||
spin_lock_irqsave(&portdata->lock, flags);
|
||||
chars = portdata->outstanding_urbs * MAX_TRANSFER;
|
||||
spin_unlock_irqrestore(&portdata->lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - %u\n", __func__, chars);
|
||||
|
||||
return chars;
|
||||
}
|
||||
|
|
|
@ -308,8 +308,8 @@ 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 unsigned int ti_write_room(struct tty_struct *tty);
|
||||
static unsigned 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);
|
||||
|
@ -813,34 +813,34 @@ static int ti_write(struct tty_struct *tty, struct usb_serial_port *port,
|
|||
}
|
||||
|
||||
|
||||
static int ti_write_room(struct tty_struct *tty)
|
||||
static unsigned 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 int room;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&tport->tp_lock, flags);
|
||||
room = kfifo_avail(&port->write_fifo);
|
||||
spin_unlock_irqrestore(&tport->tp_lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, room);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, room);
|
||||
return room;
|
||||
}
|
||||
|
||||
|
||||
static int ti_chars_in_buffer(struct tty_struct *tty)
|
||||
static unsigned 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 int chars;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&tport->tp_lock, flags);
|
||||
chars = kfifo_len(&port->write_fifo);
|
||||
spin_unlock_irqrestore(&tport->tp_lock, flags);
|
||||
|
||||
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
|
||||
dev_dbg(&port->dev, "%s - returns %u\n", __func__, chars);
|
||||
return chars;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,13 +11,13 @@ extern int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port);
|
|||
extern void usb_wwan_close(struct usb_serial_port *port);
|
||||
extern int usb_wwan_port_probe(struct usb_serial_port *port);
|
||||
extern void usb_wwan_port_remove(struct usb_serial_port *port);
|
||||
extern int usb_wwan_write_room(struct tty_struct *tty);
|
||||
extern unsigned int usb_wwan_write_room(struct tty_struct *tty);
|
||||
extern int usb_wwan_tiocmget(struct tty_struct *tty);
|
||||
extern int usb_wwan_tiocmset(struct tty_struct *tty,
|
||||
unsigned int set, unsigned int clear);
|
||||
extern int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
extern int usb_wwan_chars_in_buffer(struct tty_struct *tty);
|
||||
extern unsigned int usb_wwan_chars_in_buffer(struct tty_struct *tty);
|
||||
#ifdef CONFIG_PM
|
||||
extern int usb_wwan_suspend(struct usb_serial *serial, pm_message_t message);
|
||||
extern int usb_wwan_resume(struct usb_serial *serial);
|
||||
|
|
|
@ -278,12 +278,12 @@ static void usb_wwan_outdat_callback(struct urb *urb)
|
|||
}
|
||||
}
|
||||
|
||||
int usb_wwan_write_room(struct tty_struct *tty)
|
||||
unsigned int usb_wwan_write_room(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct usb_wwan_port_private *portdata;
|
||||
int i;
|
||||
int data_len = 0;
|
||||
unsigned int data_len = 0;
|
||||
struct urb *this_urb;
|
||||
|
||||
portdata = usb_get_serial_port_data(port);
|
||||
|
@ -294,17 +294,17 @@ int usb_wwan_write_room(struct tty_struct *tty)
|
|||
data_len += OUT_BUFLEN;
|
||||
}
|
||||
|
||||
dev_dbg(&port->dev, "%s: %d\n", __func__, data_len);
|
||||
dev_dbg(&port->dev, "%s: %u\n", __func__, data_len);
|
||||
return data_len;
|
||||
}
|
||||
EXPORT_SYMBOL(usb_wwan_write_room);
|
||||
|
||||
int usb_wwan_chars_in_buffer(struct tty_struct *tty)
|
||||
unsigned int usb_wwan_chars_in_buffer(struct tty_struct *tty)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct usb_wwan_port_private *portdata;
|
||||
int i;
|
||||
int data_len = 0;
|
||||
unsigned int data_len = 0;
|
||||
struct urb *this_urb;
|
||||
|
||||
portdata = usb_get_serial_port_data(port);
|
||||
|
@ -316,7 +316,7 @@ int usb_wwan_chars_in_buffer(struct tty_struct *tty)
|
|||
if (this_urb && test_bit(i, &portdata->out_busy))
|
||||
data_len += this_urb->transfer_buffer_length;
|
||||
}
|
||||
dev_dbg(&port->dev, "%s: %d\n", __func__, data_len);
|
||||
dev_dbg(&port->dev, "%s: %u\n", __func__, data_len);
|
||||
return data_len;
|
||||
}
|
||||
EXPORT_SYMBOL(usb_wwan_chars_in_buffer);
|
||||
|
|
|
@ -276,7 +276,7 @@ struct usb_serial_driver {
|
|||
int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
const unsigned char *buf, int count);
|
||||
/* Called only by the tty layer */
|
||||
int (*write_room)(struct tty_struct *tty);
|
||||
unsigned int (*write_room)(struct tty_struct *tty);
|
||||
int (*ioctl)(struct tty_struct *tty,
|
||||
unsigned int cmd, unsigned long arg);
|
||||
void (*get_serial)(struct tty_struct *tty, struct serial_struct *ss);
|
||||
|
@ -284,7 +284,7 @@ struct usb_serial_driver {
|
|||
void (*set_termios)(struct tty_struct *tty,
|
||||
struct usb_serial_port *port, struct ktermios *old);
|
||||
void (*break_ctl)(struct tty_struct *tty, int break_state);
|
||||
int (*chars_in_buffer)(struct tty_struct *tty);
|
||||
unsigned int (*chars_in_buffer)(struct tty_struct *tty);
|
||||
void (*wait_until_sent)(struct tty_struct *tty, long timeout);
|
||||
bool (*tx_empty)(struct usb_serial_port *port);
|
||||
void (*throttle)(struct tty_struct *tty);
|
||||
|
@ -347,8 +347,8 @@ int usb_serial_generic_write(struct tty_struct *tty, struct usb_serial_port *por
|
|||
const unsigned char *buf, int count);
|
||||
void usb_serial_generic_close(struct usb_serial_port *port);
|
||||
int usb_serial_generic_resume(struct usb_serial *serial);
|
||||
int usb_serial_generic_write_room(struct tty_struct *tty);
|
||||
int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
|
||||
unsigned int usb_serial_generic_write_room(struct tty_struct *tty);
|
||||
unsigned int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
|
||||
void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout);
|
||||
void usb_serial_generic_read_bulk_callback(struct urb *urb);
|
||||
void usb_serial_generic_write_bulk_callback(struct urb *urb);
|
||||
|
|
Loading…
Reference in New Issue