Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6580cd59 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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/
+8 −2
Original line number Diff line number Diff line
@@ -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)
+3 −3
Original line number Diff line number Diff line
@@ -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;
+16 −4
Original line number Diff line number Diff line
@@ -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 */


+6 −0
Original line number Diff line number Diff line
@@ -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
Loading