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: auerswald possible memleak fix USB: ipaq: Add HTC Modem Support USB: Fixed outdated usb_get_device_descriptor() documentation usb-storage: Remove duplicated unusual_devs.h entries for Sony Ericsson P990i USB: hid-core: Add quirk for new Apple keyboard/trackpad USB Storage: unusual_devs.h entry for Sony Ericsson P990i USB: correct keymapping on Powerbook built-in USB ISO keyboards USB: OHCI: fix root-hub resume bug USB: Fix UCR-61S2B unusual_dev entry USB: ftdi driver pid for dmx-interfaces USB: ftdi_sio: adds vendor/product id for a RFID construction kit OHCI: disallow autostop when wakeup is not available
This commit is contained in:
Коммит
0e12c5e85e
|
@ -828,10 +828,7 @@ char *usb_cache_string(struct usb_device *udev, int index)
|
|||
* Context: !in_interrupt ()
|
||||
*
|
||||
* Updates the copy of the device descriptor stored in the device structure,
|
||||
* which dedicates space for this purpose. Note that several fields are
|
||||
* converted to the host CPU's byte order: the USB version (bcdUSB), and
|
||||
* vendors product and version fields (idVendor, idProduct, and bcdDevice).
|
||||
* That lets device drivers compare against non-byteswapped constants.
|
||||
* which dedicates space for this purpose.
|
||||
*
|
||||
* Not exported, only for use by the core. If drivers really want to read
|
||||
* the device descriptor directly, they can call usb_get_descriptor() with
|
||||
|
|
|
@ -715,13 +715,6 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
|||
return IRQ_NOTMINE;
|
||||
}
|
||||
|
||||
if (ints & OHCI_INTR_RHSC) {
|
||||
ohci_vdbg (ohci, "rhsc\n");
|
||||
ohci->next_statechange = jiffies + STATECHANGE_DELAY;
|
||||
ohci_writel (ohci, OHCI_INTR_RHSC, ®s->intrstatus);
|
||||
usb_hcd_poll_rh_status(hcd);
|
||||
}
|
||||
|
||||
if (ints & OHCI_INTR_UE) {
|
||||
disable (ohci);
|
||||
ohci_err (ohci, "OHCI Unrecoverable Error, disabled\n");
|
||||
|
@ -731,9 +724,21 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
|
|||
ohci_usb_reset (ohci);
|
||||
}
|
||||
|
||||
if (ints & OHCI_INTR_RD) {
|
||||
ohci_vdbg (ohci, "resume detect\n");
|
||||
ohci_writel (ohci, OHCI_INTR_RD, ®s->intrstatus);
|
||||
if (ints & OHCI_INTR_RHSC) {
|
||||
ohci_vdbg(ohci, "rhsc\n");
|
||||
ohci->next_statechange = jiffies + STATECHANGE_DELAY;
|
||||
ohci_writel(ohci, OHCI_INTR_RD | OHCI_INTR_RHSC,
|
||||
®s->intrstatus);
|
||||
usb_hcd_poll_rh_status(hcd);
|
||||
}
|
||||
|
||||
/* For connect and disconnect events, we expect the controller
|
||||
* to turn on RHSC along with RD. But for remote wakeup events
|
||||
* this might not happen.
|
||||
*/
|
||||
else if (ints & OHCI_INTR_RD) {
|
||||
ohci_vdbg(ohci, "resume detect\n");
|
||||
ohci_writel(ohci, OHCI_INTR_RD, ®s->intrstatus);
|
||||
hcd->poll_rh = 1;
|
||||
if (ohci->autostop) {
|
||||
spin_lock (&ohci->lock);
|
||||
|
|
|
@ -169,7 +169,8 @@ __acquires(ohci->lock)
|
|||
break;
|
||||
case OHCI_USB_RESUME:
|
||||
/* HCFS changes sometime after INTR_RD */
|
||||
ohci_info (ohci, "wakeup\n");
|
||||
ohci_info(ohci, "%swakeup\n",
|
||||
autostopped ? "auto-" : "");
|
||||
break;
|
||||
case OHCI_USB_OPER:
|
||||
/* this can happen after resuming a swsusp snapshot */
|
||||
|
@ -422,7 +423,8 @@ ohci_hub_status_data (struct usb_hcd *hcd, char *buf)
|
|||
ohci->autostop = 0;
|
||||
ohci->next_statechange = jiffies +
|
||||
STATECHANGE_DELAY;
|
||||
} else if (time_after_eq (jiffies,
|
||||
} else if (device_may_wakeup(&hcd->self.root_hub->dev)
|
||||
&& time_after_eq(jiffies,
|
||||
ohci->next_statechange)
|
||||
&& !ohci->ed_rm_list
|
||||
&& !(ohci->hc_control &
|
||||
|
|
|
@ -1797,11 +1797,12 @@ static const struct hid_blacklist {
|
|||
{ USB_VENDOR_ID_APPLE, 0x020E, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x020F, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x0214, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x0215, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
|
||||
{ USB_VENDOR_ID_APPLE, 0x0216, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x0217, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x0218, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x0218, HID_QUIRK_POWERBOOK_HAS_FN | HID_QUIRK_POWERBOOK_ISO_KEYBOARD},
|
||||
{ USB_VENDOR_ID_APPLE, 0x0219, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x021B, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x030A, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
{ USB_VENDOR_ID_APPLE, 0x030B, HID_QUIRK_POWERBOOK_HAS_FN },
|
||||
|
||||
|
|
|
@ -121,6 +121,12 @@ static struct hidinput_key_translation powerbook_numlock_keys[] = {
|
|||
{ }
|
||||
};
|
||||
|
||||
static struct hidinput_key_translation powerbook_iso_keyboard[] = {
|
||||
{ KEY_GRAVE, KEY_102ND },
|
||||
{ KEY_102ND, KEY_GRAVE },
|
||||
{ }
|
||||
};
|
||||
|
||||
static int usbhid_pb_fnmode = 1;
|
||||
module_param_named(pb_fnmode, usbhid_pb_fnmode, int, 0644);
|
||||
MODULE_PARM_DESC(pb_fnmode,
|
||||
|
@ -195,6 +201,14 @@ static int hidinput_pb_event(struct hid_device *hid, struct input_dev *input,
|
|||
}
|
||||
}
|
||||
|
||||
if (hid->quirks & HID_QUIRK_POWERBOOK_ISO_KEYBOARD) {
|
||||
trans = find_translation(powerbook_iso_keyboard, usage->code);
|
||||
if (trans) {
|
||||
input_event(input, usage->type, trans->to, value);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -210,6 +224,9 @@ static void hidinput_pb_setup(struct input_dev *input)
|
|||
|
||||
for (trans = powerbook_numlock_keys; trans->from; trans++)
|
||||
set_bit(trans->to, input->keybit);
|
||||
|
||||
for (trans = powerbook_iso_keyboard; trans->from; trans++)
|
||||
set_bit(trans->to, input->keybit);
|
||||
}
|
||||
#else
|
||||
static inline int hidinput_pb_event(struct hid_device *hid, struct input_dev *input,
|
||||
|
|
|
@ -260,6 +260,7 @@ struct hid_item {
|
|||
#define HID_QUIRK_POWERBOOK_HAS_FN 0x00001000
|
||||
#define HID_QUIRK_POWERBOOK_FN_ON 0x00002000
|
||||
#define HID_QUIRK_INVERT_HWHEEL 0x00004000
|
||||
#define HID_QUIRK_POWERBOOK_ISO_KEYBOARD 0x00008000
|
||||
|
||||
/*
|
||||
* This is the global environment of the parser. This information is
|
||||
|
|
|
@ -780,7 +780,7 @@ static int auerbuf_setup (pauerbufctl_t bcp, unsigned int numElements, unsigned
|
|||
|
||||
bl_fail:/* not enough memory. Free allocated elements */
|
||||
dbg ("auerbuf_setup: no more memory");
|
||||
kfree(bep);
|
||||
auerbuf_free(bep);
|
||||
auerbuf_free_buffers (bcp);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
|
|
@ -311,6 +311,7 @@ static struct usb_device_id id_table_combined [] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_DMX4ALL) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_SIO_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_8U232AM_ALT_PID) },
|
||||
|
@ -511,6 +512,7 @@ static struct usb_device_id id_table_combined [] = {
|
|||
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13M_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13S_PID) },
|
||||
{ USB_DEVICE(FTDI_VID, FTDI_TACTRIX_OPENPORT_13U_PID) },
|
||||
{ USB_DEVICE(ELEKTOR_VID, ELEKTOR_FT323R_PID) },
|
||||
{ }, /* Optional parameter entry */
|
||||
{ } /* Terminating entry */
|
||||
};
|
||||
|
|
|
@ -55,6 +55,9 @@
|
|||
/* iPlus device */
|
||||
#define FTDI_IPLUS_PID 0xD070 /* Product Id */
|
||||
|
||||
/* DMX4ALL DMX Interfaces */
|
||||
#define FTDI_DMX4ALL 0xC850
|
||||
|
||||
/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
|
||||
/* they use the ftdi chipset for the USB interface and the vendor id is the same */
|
||||
#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
|
||||
|
@ -174,10 +177,16 @@
|
|||
*/
|
||||
#define FTDI_ASK_RDR400_PID 0xC991 /* ASK RDR 400 series card reader */
|
||||
|
||||
/*
|
||||
* FTDI USB UART chips used in construction projects from the
|
||||
* Elektor Electronics magazine (http://elektor-electronics.co.uk)
|
||||
*/
|
||||
#define ELEKTOR_VID 0x0C7D
|
||||
#define ELEKTOR_FT323R_PID 0x0005 /* RFID-Reader, issue 09-2006 */
|
||||
|
||||
/*
|
||||
* DSS-20 Sync Station for Sony Ericsson P800
|
||||
*/
|
||||
|
||||
#define FTDI_DSS20_PID 0xFC82
|
||||
|
||||
/*
|
||||
|
|
|
@ -320,6 +320,7 @@ static struct usb_device_id ipaq_id_table [] = {
|
|||
{ USB_DEVICE(0x0B05, 0x9200) }, /* ASUS USB Sync */
|
||||
{ USB_DEVICE(0x0B05, 0x9202) }, /* ASUS USB Sync */
|
||||
{ USB_DEVICE(0x0BB4, 0x00CE) }, /* HTC USB Sync */
|
||||
{ USB_DEVICE(0x0BB4, 0x00CF) }, /* HTC USB Modem */
|
||||
{ USB_DEVICE(0x0BB4, 0x0A01) }, /* PocketPC USB Sync */
|
||||
{ USB_DEVICE(0x0BB4, 0x0A02) }, /* PocketPC USB Sync */
|
||||
{ USB_DEVICE(0x0BB4, 0x0A03) }, /* PocketPC USB Sync */
|
||||
|
|
|
@ -1306,25 +1306,13 @@ UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000,
|
|||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_FIX_CAPACITY ),
|
||||
|
||||
/* Reported by Jan Mate <mate@fiit.stuba.sk> */
|
||||
UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000,
|
||||
"Sony Ericsson",
|
||||
"P990i",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_FIX_CAPACITY ),
|
||||
|
||||
/* Reported by Jan Mate <mate@fiit.stuba.sk> */
|
||||
UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000,
|
||||
"Sony Ericsson",
|
||||
"P990i",
|
||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||
US_FL_FIX_CAPACITY ),
|
||||
|
||||
/* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu>
|
||||
* Tested on hardware version 1.10.
|
||||
* Entry is needed only for the initializer function override.
|
||||
* Devices with bcd > 110 seem to not need it while those
|
||||
* with bcd < 110 appear to need it.
|
||||
*/
|
||||
UNUSUAL_DEV( 0x1019, 0x0c55, 0x0110, 0x0110,
|
||||
UNUSUAL_DEV( 0x1019, 0x0c55, 0x0000, 0x0110,
|
||||
"Desknote",
|
||||
"UCR-61S2B",
|
||||
US_SC_DEVICE, US_PR_DEVICE, usb_stor_ucr61s2b_init,
|
||||
|
|
Загрузка…
Ссылка в новой задаче