Commit 6580cd59 authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6:
  usb-serial: ftdi_sio: fix reference counting of ftdi_private
  USB: unusual_devs: extend nokia 6288 bcd range
  USB: Gadget: fix UTF conversion in the usbstring library
  USB: Fix makefile so that CONFIG_WDM and CONFIG_TMC work.
  USB: ftdi_sio: add vendor/product id for the Marvell SheevaPlug
  USB: cxacru: Fix negative dB output
parents 0016effb c45d6320
...@@ -27,6 +27,8 @@ obj-$(CONFIG_USB_WUSB) += wusbcore/ ...@@ -27,6 +27,8 @@ obj-$(CONFIG_USB_WUSB) += wusbcore/
obj-$(CONFIG_USB_ACM) += class/ obj-$(CONFIG_USB_ACM) += class/
obj-$(CONFIG_USB_PRINTER) += class/ obj-$(CONFIG_USB_PRINTER) += class/
obj-$(CONFIG_USB_WDM) += class/
obj-$(CONFIG_USB_TMC) += class/
obj-$(CONFIG_USB_STORAGE) += storage/ obj-$(CONFIG_USB_STORAGE) += storage/
obj-$(CONFIG_USB) += storage/ obj-$(CONFIG_USB) += storage/
......
...@@ -227,8 +227,14 @@ static ssize_t cxacru_sysfs_showattr_s8(s8 value, char *buf) ...@@ -227,8 +227,14 @@ static ssize_t cxacru_sysfs_showattr_s8(s8 value, char *buf)
static ssize_t cxacru_sysfs_showattr_dB(s16 value, char *buf) static ssize_t cxacru_sysfs_showattr_dB(s16 value, char *buf)
{ {
return snprintf(buf, PAGE_SIZE, "%d.%02u\n", if (likely(value >= 0)) {
value / 100, abs(value) % 100); return snprintf(buf, PAGE_SIZE, "%u.%02u\n",
value / 100, value % 100);
} else {
value = -value;
return snprintf(buf, PAGE_SIZE, "-%u.%02u\n",
value / 100, value % 100);
}
} }
static ssize_t cxacru_sysfs_showattr_bool(u32 value, char *buf) static ssize_t cxacru_sysfs_showattr_bool(u32 value, char *buf)
......
...@@ -38,7 +38,7 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len) ...@@ -38,7 +38,7 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
uchar = (c & 0x1f) << 6; uchar = (c & 0x1f) << 6;
c = (u8) *s++; c = (u8) *s++;
if ((c & 0xc0) != 0xc0) if ((c & 0xc0) != 0x80)
goto fail; goto fail;
c &= 0x3f; c &= 0x3f;
uchar |= c; uchar |= c;
...@@ -49,13 +49,13 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len) ...@@ -49,13 +49,13 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
uchar = (c & 0x0f) << 12; uchar = (c & 0x0f) << 12;
c = (u8) *s++; c = (u8) *s++;
if ((c & 0xc0) != 0xc0) if ((c & 0xc0) != 0x80)
goto fail; goto fail;
c &= 0x3f; c &= 0x3f;
uchar |= c << 6; uchar |= c << 6;
c = (u8) *s++; c = (u8) *s++;
if ((c & 0xc0) != 0xc0) if ((c & 0xc0) != 0x80)
goto fail; goto fail;
c &= 0x3f; c &= 0x3f;
uchar |= c; uchar |= c;
......
...@@ -56,6 +56,7 @@ static __u16 vendor = FTDI_VID; ...@@ -56,6 +56,7 @@ static __u16 vendor = FTDI_VID;
static __u16 product; static __u16 product;
struct ftdi_private { struct ftdi_private {
struct kref kref;
ftdi_chip_type_t chip_type; ftdi_chip_type_t chip_type;
/* type of device, either SIO or FT8U232AM */ /* type of device, either SIO or FT8U232AM */
int baud_base; /* baud base clock for divisor setting */ int baud_base; /* baud base clock for divisor setting */
...@@ -669,6 +670,8 @@ static struct usb_device_id id_table_combined [] = { ...@@ -669,6 +670,8 @@ static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(ADI_VID, ADI_GNICE_PID), { USB_DEVICE(ADI_VID, ADI_GNICE_PID),
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ USB_DEVICE(JETI_VID, JETI_SPC1201_PID) }, { USB_DEVICE(JETI_VID, JETI_SPC1201_PID) },
{ USB_DEVICE(MARVELL_VID, MARVELL_SHEEVAPLUG_PID),
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
{ }, /* Optional parameter entry */ { }, /* Optional parameter entry */
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
...@@ -1352,6 +1355,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port) ...@@ -1352,6 +1355,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
return -ENOMEM; return -ENOMEM;
} }
kref_init(&priv->kref);
spin_lock_init(&priv->rx_lock); spin_lock_init(&priv->rx_lock);
spin_lock_init(&priv->tx_lock); spin_lock_init(&priv->tx_lock);
init_waitqueue_head(&priv->delta_msr_wait); init_waitqueue_head(&priv->delta_msr_wait);
...@@ -1468,6 +1472,13 @@ static void ftdi_shutdown(struct usb_serial *serial) ...@@ -1468,6 +1472,13 @@ static void ftdi_shutdown(struct usb_serial *serial)
dbg("%s", __func__); dbg("%s", __func__);
} }
static void ftdi_sio_priv_release(struct kref *k)
{
struct ftdi_private *priv = container_of(k, struct ftdi_private, kref);
kfree(priv);
}
static int ftdi_sio_port_remove(struct usb_serial_port *port) static int ftdi_sio_port_remove(struct usb_serial_port *port)
{ {
struct ftdi_private *priv = usb_get_serial_port_data(port); struct ftdi_private *priv = usb_get_serial_port_data(port);
...@@ -1482,7 +1493,7 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port) ...@@ -1482,7 +1493,7 @@ static int ftdi_sio_port_remove(struct usb_serial_port *port)
if (priv) { if (priv) {
usb_set_serial_port_data(port, NULL); usb_set_serial_port_data(port, NULL);
kfree(priv); kref_put(&priv->kref, ftdi_sio_priv_release);
} }
return 0; return 0;
...@@ -1547,7 +1558,8 @@ static int ftdi_open(struct tty_struct *tty, ...@@ -1547,7 +1558,8 @@ static int ftdi_open(struct tty_struct *tty,
dev_err(&port->dev, dev_err(&port->dev,
"%s - failed submitting read urb, error %d\n", "%s - failed submitting read urb, error %d\n",
__func__, result); __func__, result);
else
kref_get(&priv->kref);
return result; return result;
} /* ftdi_open */ } /* ftdi_open */
...@@ -1589,11 +1601,11 @@ static void ftdi_close(struct tty_struct *tty, ...@@ -1589,11 +1601,11 @@ static void ftdi_close(struct tty_struct *tty,
mutex_unlock(&port->serial->disc_mutex); mutex_unlock(&port->serial->disc_mutex);
/* cancel any scheduled reading */ /* cancel any scheduled reading */
cancel_delayed_work(&priv->rx_work); cancel_delayed_work_sync(&priv->rx_work);
flush_scheduled_work();
/* shutdown our bulk read */ /* shutdown our bulk read */
usb_kill_urb(port->read_urb); usb_kill_urb(port->read_urb);
kref_put(&priv->kref, ftdi_sio_priv_release);
} /* ftdi_close */ } /* ftdi_close */
......
...@@ -919,6 +919,12 @@ ...@@ -919,6 +919,12 @@
#define JETI_VID 0x0c6c #define JETI_VID 0x0c6c
#define JETI_SPC1201_PID 0x04b2 #define JETI_SPC1201_PID 0x04b2
/*
* Marvell SheevaPlug
*/
#define MARVELL_VID 0x9e88
#define MARVELL_SHEEVAPLUG_PID 0x9e8f
/* /*
* BmRequestType: 1100 0000b * BmRequestType: 1100 0000b
* bRequest: FTDI_E2_READ * bRequest: FTDI_E2_READ
......
...@@ -160,8 +160,9 @@ UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100, ...@@ -160,8 +160,9 @@ UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_IGNORE_RESIDUE ), US_FL_IGNORE_RESIDUE ),
/* Reported by Andrew Nayenko <relan@bk.ru> */ /* Reported by Andrew Nayenko <relan@bk.ru>
UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592, * Updated for new firmware by Phillip Potter <phillipinda@hotmail.com> */
UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0610,
"Nokia", "Nokia",
"Nokia 6288", "Nokia 6288",
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment