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

Commit ced3985f authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6:
  USB: use MII hooks only if CONFIG_MII is enabled
  USB Storage: unusual_devs.h entry for Sony Ericsson P990i
  USB: xpad: additional USB id's added
  USB: fix compiler issues with newer gcc versions
  USB: HID: add blacklist AIRcable USB, little beautification
  USB: usblp: fix system suspend for some systems
  USB: failure in usblp's error path
  usbtouchscreen: use endpoint address from endpoint descriptor
  USB: sierra: Fix id for Sierra Wireless MC8755 in new table
  USB: new VID/PID-combos for cp2101
  hid-core: big-endian fix fix
  USB: usb-storage: Unusual_dev update
  USB: add another sierra wireless device id
parents f1f2d871 18ee91fa
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -428,12 +428,6 @@ Options supported:
  See http://www.uuhaus.de/linux/palmconnect.html for up-to-date
  information on this driver.

AIRcable USB Dongle Bluetooth driver
  If there is the cdc_acm driver loaded in the system, you will find that the
  cdc_acm claims the device before AIRcable can. This is simply corrected
  by unloading both modules and then loading the aircable module before
  cdc_acm module

Generic Serial driver

  If your device is not one of the above listed devices, compatible with
+1 −2
Original line number Diff line number Diff line
@@ -722,6 +722,7 @@ static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t
		usblp->wcomplete = 0;
		err = usb_submit_urb(usblp->writeurb, GFP_KERNEL);
		if (err) {
			usblp->wcomplete = 1;
			if (err != -ENOMEM)
				count = -EIO;
			else
@@ -1202,8 +1203,6 @@ static int usblp_suspend (struct usb_interface *intf, pm_message_t message)
	down (&usblp->sem);
	/* we take no more IO */
	usblp->sleeping = 1;
	/* we wait for anything printing */
	wait_event (usblp->wait, usblp->wcomplete || !usblp->present);
	usblp_unlink_urbs(usblp);
	up (&usblp->sem);
	mutex_unlock (&usblp_mutex);
+1 −2
Original line number Diff line number Diff line
@@ -1188,6 +1188,7 @@ static inline void show_string(struct usb_device *udev, char *id, char *string)

#ifdef	CONFIG_USB_OTG
#include "otg_whitelist.h"
static int __usb_port_suspend(struct usb_device *, int port1);
#endif

/**
@@ -1289,8 +1290,6 @@ int usb_new_device(struct usb_device *udev)
		 * (Includes HNP test device.)
		 */
		if (udev->bus->b_hnp_enable || udev->bus->is_b_host) {
			static int __usb_port_suspend(struct usb_device *,
						int port1);
			err = __usb_port_suspend(udev, udev->bus->otg_port);
			if (err < 0)
				dev_dbg(&udev->dev, "HNP fail, %d\n", err);
+46 −17
Original line number Diff line number Diff line
@@ -270,7 +270,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
 * Read data value from item.
 */

static __inline__ __u32 item_udata(struct hid_item *item)
static u32 item_udata(struct hid_item *item)
{
	switch (item->size) {
		case 1: return item->data.u8;
@@ -280,7 +280,7 @@ static __inline__ __u32 item_udata(struct hid_item *item)
	return 0;
}

static __inline__ __s32 item_sdata(struct hid_item *item)
static s32 item_sdata(struct hid_item *item)
{
	switch (item->size) {
		case 1: return item->data.s8;
@@ -727,7 +727,7 @@ static struct hid_device *hid_parse_report(__u8 *start, unsigned size)
 * done by hand.
 */

static __inline__ __s32 snto32(__u32 value, unsigned n)
static s32 snto32(__u32 value, unsigned n)
{
	switch (n) {
		case 8:  return ((__s8)value);
@@ -741,9 +741,9 @@ static __inline__ __s32 snto32(__u32 value, unsigned n)
 * Convert a signed 32-bit integer to a signed n-bit integer.
 */

static __inline__ __u32 s32ton(__s32 value, unsigned n)
static u32 s32ton(__s32 value, unsigned n)
{
	__s32 a = value >> (n - 1);
	s32 a = value >> (n - 1);
	if (a && a != -1)
		return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
	return value & ((1 << n) - 1);
@@ -751,30 +751,55 @@ static __inline__ __u32 s32ton(__s32 value, unsigned n)

/*
 * Extract/implement a data field from/to a little endian report (bit array).
 *
 * Code sort-of follows HID spec:
 *     http://www.usb.org/developers/devclass_docs/HID1_11.pdf
 *
 * While the USB HID spec allows unlimited length bit fields in "report
 * descriptors", most devices never use more than 16 bits.
 * One model of UPS is claimed to report "LINEV" as a 32-bit field.
 * Search linux-kernel and linux-usb-devel archives for "hid-core extract".
 */

static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n)
{
	u32 x;
	u64 x;

	WARN_ON(n > 32);

	report += offset >> 3;  /* adjust byte index */
	offset &= 8 - 1;
	x = get_unaligned((u32 *) report);
	x = le32_to_cpu(x);
	x = (x >> offset) & ((1 << n) - 1);
	return x;
	offset &= 7;		/* now only need bit offset into one byte */
	x = get_unaligned((u64 *) report);
	x = le64_to_cpu(x);
	x = (x >> offset) & ((1ULL << n) - 1);	/* extract bit field */
	return (u32) x;
}

/*
 * "implement" : set bits in a little endian bit stream.
 * Same concepts as "extract" (see comments above).
 * The data mangled in the bit stream remains in little endian
 * order the whole time. It make more sense to talk about
 * endianness of register values by considering a register
 * a "cached" copy of the little endiad bit stream.
 */
static __inline__ void implement(__u8 *report, unsigned offset, unsigned n, __u32 value)
{
	u32 x;
	u64 x;
	u64 m = (1ULL << n) - 1;

	WARN_ON(n > 32);

	WARN_ON(value > m);
	value &= m;

	report += offset >> 3;
	offset &= 8 - 1;
	x = get_unaligned((u32 *)report);
	x &= cpu_to_le32(~((((__u32) 1 << n) - 1) << offset));
	x |= cpu_to_le32(value << offset);
	put_unaligned(x,(u32 *)report);
	offset &= 7;

	x = get_unaligned((u64 *)report);
	x &= cpu_to_le64(~(m << offset));
	x |= cpu_to_le64(((u64) value) << offset);
	put_unaligned(x, (u64 *) report);
}

/*
@@ -1615,6 +1640,9 @@ void hid_init_reports(struct hid_device *hid)
#define USB_VENDOR_ID_SUN		0x0430
#define USB_DEVICE_ID_RARITAN_KVM_DONGLE	0xcdab

#define USB_VENDOR_ID_AIRCABLE		0x16CA
#define USB_DEVICE_ID_AIRCABLE1		0x1502

/*
 * Alphabetically sorted blacklist by quirk type.
 */
@@ -1632,6 +1660,7 @@ static const struct hid_blacklist {
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_22, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, HID_QUIRK_IGNORE },
	{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW40, HID_QUIRK_IGNORE },
+1 −1
Original line number Diff line number Diff line
@@ -640,7 +640,7 @@ static int usbtouch_probe(struct usb_interface *intf,
		                     type->max_press, 0, 0);

	usb_fill_int_urb(usbtouch->irq, usbtouch->udev,
			 usb_rcvintpipe(usbtouch->udev, 0x81),
			 usb_rcvintpipe(usbtouch->udev, endpoint->bEndpointAddress),
			 usbtouch->data, type->rept_size,
			 usbtouch_irq, usbtouch, endpoint->bInterval);

Loading