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
This commit is contained in:
commit
6580cd59f9
6 changed files with 38 additions and 11 deletions
|
@ -27,6 +27,8 @@ obj-$(CONFIG_USB_WUSB) += wusbcore/
|
|||
|
||||
obj-$(CONFIG_USB_ACM) += 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/
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%d.%02u\n",
|
||||
value / 100, abs(value) % 100);
|
||||
if (likely(value >= 0)) {
|
||||
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)
|
||||
|
|
|
@ -38,7 +38,7 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
|
|||
uchar = (c & 0x1f) << 6;
|
||||
|
||||
c = (u8) *s++;
|
||||
if ((c & 0xc0) != 0xc0)
|
||||
if ((c & 0xc0) != 0x80)
|
||||
goto fail;
|
||||
c &= 0x3f;
|
||||
uchar |= c;
|
||||
|
@ -49,13 +49,13 @@ static int utf8_to_utf16le(const char *s, __le16 *cp, unsigned len)
|
|||
uchar = (c & 0x0f) << 12;
|
||||
|
||||
c = (u8) *s++;
|
||||
if ((c & 0xc0) != 0xc0)
|
||||
if ((c & 0xc0) != 0x80)
|
||||
goto fail;
|
||||
c &= 0x3f;
|
||||
uchar |= c << 6;
|
||||
|
||||
c = (u8) *s++;
|
||||
if ((c & 0xc0) != 0xc0)
|
||||
if ((c & 0xc0) != 0x80)
|
||||
goto fail;
|
||||
c &= 0x3f;
|
||||
uchar |= c;
|
||||
|
|
|
@ -56,6 +56,7 @@ static __u16 vendor = FTDI_VID;
|
|||
static __u16 product;
|
||||
|
||||
struct ftdi_private {
|
||||
struct kref kref;
|
||||
ftdi_chip_type_t chip_type;
|
||||
/* type of device, either SIO or FT8U232AM */
|
||||
int baud_base; /* baud base clock for divisor setting */
|
||||
|
@ -669,6 +670,8 @@ static struct usb_device_id id_table_combined [] = {
|
|||
{ USB_DEVICE(ADI_VID, ADI_GNICE_PID),
|
||||
.driver_info = (kernel_ulong_t)&ftdi_jtag_quirk },
|
||||
{ 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 */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
@ -1352,6 +1355,7 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
kref_init(&priv->kref);
|
||||
spin_lock_init(&priv->rx_lock);
|
||||
spin_lock_init(&priv->tx_lock);
|
||||
init_waitqueue_head(&priv->delta_msr_wait);
|
||||
|
@ -1468,6 +1472,13 @@ static void ftdi_shutdown(struct usb_serial *serial)
|
|||
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)
|
||||
{
|
||||
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)
|
|||
|
||||
if (priv) {
|
||||
usb_set_serial_port_data(port, NULL);
|
||||
kfree(priv);
|
||||
kref_put(&priv->kref, ftdi_sio_priv_release);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1547,7 +1558,8 @@ static int ftdi_open(struct tty_struct *tty,
|
|||
dev_err(&port->dev,
|
||||
"%s - failed submitting read urb, error %d\n",
|
||||
__func__, result);
|
||||
|
||||
else
|
||||
kref_get(&priv->kref);
|
||||
|
||||
return result;
|
||||
} /* ftdi_open */
|
||||
|
@ -1589,11 +1601,11 @@ static void ftdi_close(struct tty_struct *tty,
|
|||
mutex_unlock(&port->serial->disc_mutex);
|
||||
|
||||
/* cancel any scheduled reading */
|
||||
cancel_delayed_work(&priv->rx_work);
|
||||
flush_scheduled_work();
|
||||
cancel_delayed_work_sync(&priv->rx_work);
|
||||
|
||||
/* shutdown our bulk read */
|
||||
usb_kill_urb(port->read_urb);
|
||||
kref_put(&priv->kref, ftdi_sio_priv_release);
|
||||
} /* ftdi_close */
|
||||
|
||||
|
||||
|
|
|
@ -919,6 +919,12 @@
|
|||
#define JETI_VID 0x0c6c
|
||||
#define JETI_SPC1201_PID 0x04b2
|
||||
|
||||
/*
|
||||
* Marvell SheevaPlug
|
||||
*/
|
||||
#define MARVELL_VID 0x9e88
|
||||
#define MARVELL_SHEEVAPLUG_PID 0x9e8f
|
||||
|
||||
/*
|
||||
* BmRequestType: 1100 0000b
|
||||
* bRequest: FTDI_E2_READ
|
||||
|
|
|
@ -160,8 +160,9 @@ UNUSUAL_DEV( 0x0420, 0x0001, 0x0100, 0x0100,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_IGNORE_RESIDUE ),
|
||||
|
||||
/* Reported by Andrew Nayenko <relan@bk.ru> */
|
||||
UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0592,
|
||||
/* Reported by Andrew Nayenko <relan@bk.ru>
|
||||
* Updated for new firmware by Phillip Potter <phillipinda@hotmail.com> */
|
||||
UNUSUAL_DEV( 0x0421, 0x0019, 0x0592, 0x0610,
|
||||
"Nokia",
|
||||
"Nokia 6288",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
|
|
Reference in a new issue