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
This commit is contained in:
@@ -428,12 +428,6 @@ Options supported:
|
|||||||
See http://www.uuhaus.de/linux/palmconnect.html for up-to-date
|
See http://www.uuhaus.de/linux/palmconnect.html for up-to-date
|
||||||
information on this driver.
|
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
|
Generic Serial driver
|
||||||
|
|
||||||
If your device is not one of the above listed devices, compatible with
|
If your device is not one of the above listed devices, compatible with
|
||||||
|
@@ -722,6 +722,7 @@ static ssize_t usblp_write(struct file *file, const char __user *buffer, size_t
|
|||||||
usblp->wcomplete = 0;
|
usblp->wcomplete = 0;
|
||||||
err = usb_submit_urb(usblp->writeurb, GFP_KERNEL);
|
err = usb_submit_urb(usblp->writeurb, GFP_KERNEL);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
usblp->wcomplete = 1;
|
||||||
if (err != -ENOMEM)
|
if (err != -ENOMEM)
|
||||||
count = -EIO;
|
count = -EIO;
|
||||||
else
|
else
|
||||||
@@ -1202,8 +1203,6 @@ static int usblp_suspend (struct usb_interface *intf, pm_message_t message)
|
|||||||
down (&usblp->sem);
|
down (&usblp->sem);
|
||||||
/* we take no more IO */
|
/* we take no more IO */
|
||||||
usblp->sleeping = 1;
|
usblp->sleeping = 1;
|
||||||
/* we wait for anything printing */
|
|
||||||
wait_event (usblp->wait, usblp->wcomplete || !usblp->present);
|
|
||||||
usblp_unlink_urbs(usblp);
|
usblp_unlink_urbs(usblp);
|
||||||
up (&usblp->sem);
|
up (&usblp->sem);
|
||||||
mutex_unlock (&usblp_mutex);
|
mutex_unlock (&usblp_mutex);
|
||||||
|
@@ -1188,6 +1188,7 @@ static inline void show_string(struct usb_device *udev, char *id, char *string)
|
|||||||
|
|
||||||
#ifdef CONFIG_USB_OTG
|
#ifdef CONFIG_USB_OTG
|
||||||
#include "otg_whitelist.h"
|
#include "otg_whitelist.h"
|
||||||
|
static int __usb_port_suspend(struct usb_device *, int port1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1289,8 +1290,6 @@ int usb_new_device(struct usb_device *udev)
|
|||||||
* (Includes HNP test device.)
|
* (Includes HNP test device.)
|
||||||
*/
|
*/
|
||||||
if (udev->bus->b_hnp_enable || udev->bus->is_b_host) {
|
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);
|
err = __usb_port_suspend(udev, udev->bus->otg_port);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
dev_dbg(&udev->dev, "HNP fail, %d\n", err);
|
dev_dbg(&udev->dev, "HNP fail, %d\n", err);
|
||||||
|
@@ -270,7 +270,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
|
|||||||
* Read data value from item.
|
* 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) {
|
switch (item->size) {
|
||||||
case 1: return item->data.u8;
|
case 1: return item->data.u8;
|
||||||
@@ -280,7 +280,7 @@ static __inline__ __u32 item_udata(struct hid_item *item)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __inline__ __s32 item_sdata(struct hid_item *item)
|
static s32 item_sdata(struct hid_item *item)
|
||||||
{
|
{
|
||||||
switch (item->size) {
|
switch (item->size) {
|
||||||
case 1: return item->data.s8;
|
case 1: return item->data.s8;
|
||||||
@@ -727,7 +727,7 @@ static struct hid_device *hid_parse_report(__u8 *start, unsigned size)
|
|||||||
* done by hand.
|
* done by hand.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static __inline__ __s32 snto32(__u32 value, unsigned n)
|
static s32 snto32(__u32 value, unsigned n)
|
||||||
{
|
{
|
||||||
switch (n) {
|
switch (n) {
|
||||||
case 8: return ((__s8)value);
|
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.
|
* 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)
|
if (a && a != -1)
|
||||||
return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
|
return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
|
||||||
return value & ((1 << n) - 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).
|
* 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)
|
static __inline__ __u32 extract(__u8 *report, unsigned offset, unsigned n)
|
||||||
{
|
{
|
||||||
u32 x;
|
u64 x;
|
||||||
|
|
||||||
|
WARN_ON(n > 32);
|
||||||
|
|
||||||
report += offset >> 3; /* adjust byte index */
|
report += offset >> 3; /* adjust byte index */
|
||||||
offset &= 8 - 1;
|
offset &= 7; /* now only need bit offset into one byte */
|
||||||
x = get_unaligned((u32 *) report);
|
x = get_unaligned((u64 *) report);
|
||||||
x = le32_to_cpu(x);
|
x = le64_to_cpu(x);
|
||||||
x = (x >> offset) & ((1 << n) - 1);
|
x = (x >> offset) & ((1ULL << n) - 1); /* extract bit field */
|
||||||
return x;
|
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)
|
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;
|
report += offset >> 3;
|
||||||
offset &= 8 - 1;
|
offset &= 7;
|
||||||
x = get_unaligned((u32 *)report);
|
|
||||||
x &= cpu_to_le32(~((((__u32) 1 << n) - 1) << offset));
|
x = get_unaligned((u64 *)report);
|
||||||
x |= cpu_to_le32(value << offset);
|
x &= cpu_to_le64(~(m << offset));
|
||||||
put_unaligned(x,(u32 *)report);
|
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_VENDOR_ID_SUN 0x0430
|
||||||
#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab
|
#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.
|
* 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_22, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_23, 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_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_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232, HID_QUIRK_IGNORE },
|
||||||
{ USB_VENDOR_ID_BERKSHIRE, USB_DEVICE_ID_BERKSHIRE_PCWD, 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 },
|
{ USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW40, HID_QUIRK_IGNORE },
|
||||||
|
@@ -640,7 +640,7 @@ static int usbtouch_probe(struct usb_interface *intf,
|
|||||||
type->max_press, 0, 0);
|
type->max_press, 0, 0);
|
||||||
|
|
||||||
usb_fill_int_urb(usbtouch->irq, usbtouch->udev,
|
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->data, type->rept_size,
|
||||||
usbtouch_irq, usbtouch, endpoint->bInterval);
|
usbtouch_irq, usbtouch, endpoint->bInterval);
|
||||||
|
|
||||||
|
@@ -2,6 +2,10 @@
|
|||||||
* X-Box gamepad - v0.0.6
|
* X-Box gamepad - v0.0.6
|
||||||
*
|
*
|
||||||
* Copyright (c) 2002 Marko Friedemann <mfr@bmx-chemnitz.de>
|
* Copyright (c) 2002 Marko Friedemann <mfr@bmx-chemnitz.de>
|
||||||
|
* 2004 Oliver Schwartz <Oliver.Schwartz@gmx.de>,
|
||||||
|
* Steven Toth <steve@toth.demon.co.uk>,
|
||||||
|
* Franz Lehner <franz@caos.at>,
|
||||||
|
* Ivan Hawkes <blackhawk@ivanhawkes.com>
|
||||||
* 2005 Dominic Cerquetti <binary1230@yahoo.com>
|
* 2005 Dominic Cerquetti <binary1230@yahoo.com>
|
||||||
* 2006 Adam Buchbinder <adam.buchbinder@gmail.com>
|
* 2006 Adam Buchbinder <adam.buchbinder@gmail.com>
|
||||||
*
|
*
|
||||||
@@ -29,6 +33,7 @@
|
|||||||
* - ITO Takayuki for providing essential xpad information on his website
|
* - ITO Takayuki for providing essential xpad information on his website
|
||||||
* - Vojtech Pavlik - iforce driver / input subsystem
|
* - Vojtech Pavlik - iforce driver / input subsystem
|
||||||
* - Greg Kroah-Hartman - usb-skeleton driver
|
* - Greg Kroah-Hartman - usb-skeleton driver
|
||||||
|
* - XBOX Linux project - extra USB id's
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* - fine tune axes (especially trigger axes)
|
* - fine tune axes (especially trigger axes)
|
||||||
@@ -54,6 +59,13 @@
|
|||||||
* - fixed d-pad to axes mapping
|
* - fixed d-pad to axes mapping
|
||||||
*
|
*
|
||||||
* 2002-07-17 - 0.0.5 : simplified d-pad handling
|
* 2002-07-17 - 0.0.5 : simplified d-pad handling
|
||||||
|
*
|
||||||
|
* 2004-10-02 - 0.0.6 : DDR pad support
|
||||||
|
* - borrowed from the XBOX linux kernel
|
||||||
|
* - USB id's for commonly used dance pads are present
|
||||||
|
* - dance pads will map D-PAD to buttons, not axes
|
||||||
|
* - pass the module paramater 'dpad_to_buttons' to force
|
||||||
|
* the D-PAD to map to buttons if your pad is not detected
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
@@ -90,8 +102,35 @@ static const struct xpad_device {
|
|||||||
{ 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", MAP_DPAD_TO_AXES },
|
{ 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", MAP_DPAD_TO_AXES },
|
||||||
{ 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", MAP_DPAD_TO_AXES },
|
{ 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", MAP_DPAD_TO_AXES },
|
||||||
{ 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", MAP_DPAD_TO_AXES },
|
{ 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", MAP_DPAD_TO_AXES },
|
||||||
{ 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", MAP_DPAD_TO_AXES },
|
{ 0x045e, 0x0287, "Microsoft Xbox Controller S", MAP_DPAD_TO_AXES },
|
||||||
{ 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", MAP_DPAD_TO_BUTTONS },
|
{ 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", MAP_DPAD_TO_BUTTONS },
|
||||||
|
{ 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x046d, 0xca84, "Logitech Xbox Cordless Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x046d, 0xca88, "Logitech Compact Controller for Xbox", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x05fd, 0x1007, "Mad Catz Controller (unverified)", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x05fd, 0x107a, "InterAct 'PowerPad Pro' X-Box pad (Germany)", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0738, 0x4516, "Mad Catz Control Pad", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0738, 0x4522, "Mad Catz LumiCON", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0738, 0x4526, "Mad Catz Control Pad Pro", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0738, 0x4536, "Mad Catz MicroCON", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0738, 0x4540, "Mad Catz Beat Pad", MAP_DPAD_TO_BUTTONS },
|
||||||
|
{ 0x0738, 0x4556, "Mad Catz Lynx Wireless Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0738, 0x6040, "Mad Catz Beat Pad Pro", MAP_DPAD_TO_BUTTONS },
|
||||||
|
{ 0x0c12, 0x8802, "Zeroplus Xbox Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0c12, 0x8810, "Zeroplus Xbox Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0e4c, 0x1097, "Radica Gamester Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0e4c, 0x2390, "Radica Games Jtech Controller", MAP_DPAD_TO_AXES},
|
||||||
|
{ 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0e6f, 0x0005, "Eclipse wireless Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0e6f, 0x0006, "Edge wireless Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0e8f, 0x0201, "SmartJoy Frag Xpad/PS2 adaptor", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0f30, 0x0202, "Joytech Advanced Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x0f30, 0x8888, "BigBen XBMiniPad Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", MAP_DPAD_TO_AXES },
|
||||||
|
{ 0x12ab, 0x8809, "Xbox DDR dancepad", MAP_DPAD_TO_BUTTONS },
|
||||||
|
{ 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS },
|
||||||
|
{ 0xffff, 0xffff, "Chinese-made Xbox Controller", MAP_DPAD_TO_AXES },
|
||||||
{ 0x0000, 0x0000, "Generic X-Box pad", MAP_DPAD_UNKNOWN }
|
{ 0x0000, 0x0000, "Generic X-Box pad", MAP_DPAD_UNKNOWN }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -92,8 +92,13 @@ config USB_RTL8150
|
|||||||
To compile this driver as a module, choose M here: the
|
To compile this driver as a module, choose M here: the
|
||||||
module will be called rtl8150.
|
module will be called rtl8150.
|
||||||
|
|
||||||
|
config USB_USBNET_MII
|
||||||
|
tristate
|
||||||
|
default n
|
||||||
|
|
||||||
config USB_USBNET
|
config USB_USBNET
|
||||||
tristate "Multi-purpose USB Networking Framework"
|
tristate "Multi-purpose USB Networking Framework"
|
||||||
|
select MII if USBNET_MII != n
|
||||||
---help---
|
---help---
|
||||||
This driver supports several kinds of network links over USB,
|
This driver supports several kinds of network links over USB,
|
||||||
with "minidrivers" built around a common network driver core
|
with "minidrivers" built around a common network driver core
|
||||||
@@ -129,7 +134,7 @@ config USB_NET_AX8817X
|
|||||||
tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
|
tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
|
||||||
depends on USB_USBNET && NET_ETHERNET
|
depends on USB_USBNET && NET_ETHERNET
|
||||||
select CRC32
|
select CRC32
|
||||||
select MII
|
select USB_USBNET_MII
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
This option adds support for ASIX AX88xxx based USB 2.0
|
This option adds support for ASIX AX88xxx based USB 2.0
|
||||||
@@ -210,6 +215,7 @@ config USB_NET_PLUSB
|
|||||||
config USB_NET_MCS7830
|
config USB_NET_MCS7830
|
||||||
tristate "MosChip MCS7830 based Ethernet adapters"
|
tristate "MosChip MCS7830 based Ethernet adapters"
|
||||||
depends on USB_USBNET
|
depends on USB_USBNET
|
||||||
|
select USB_USBNET_MII
|
||||||
help
|
help
|
||||||
Choose this option if you're using a 10/100 Ethernet USB2
|
Choose this option if you're using a 10/100 Ethernet USB2
|
||||||
adapter based on the MosChip 7830 controller. This includes
|
adapter based on the MosChip 7830 controller. This includes
|
||||||
|
@@ -669,6 +669,9 @@ done:
|
|||||||
* they'll probably want to use this base set.
|
* they'll probably want to use this base set.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(CONFIG_MII) || defined(CONFIG_MII_MODULE)
|
||||||
|
#define HAVE_MII
|
||||||
|
|
||||||
int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd)
|
int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd)
|
||||||
{
|
{
|
||||||
struct usbnet *dev = netdev_priv(net);
|
struct usbnet *dev = netdev_priv(net);
|
||||||
@@ -699,20 +702,6 @@ int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usbnet_set_settings);
|
EXPORT_SYMBOL_GPL(usbnet_set_settings);
|
||||||
|
|
||||||
|
|
||||||
void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)
|
|
||||||
{
|
|
||||||
struct usbnet *dev = netdev_priv(net);
|
|
||||||
|
|
||||||
/* REVISIT don't always return "usbnet" */
|
|
||||||
strncpy (info->driver, driver_name, sizeof info->driver);
|
|
||||||
strncpy (info->version, DRIVER_VERSION, sizeof info->version);
|
|
||||||
strncpy (info->fw_version, dev->driver_info->description,
|
|
||||||
sizeof info->fw_version);
|
|
||||||
usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(usbnet_get_drvinfo);
|
|
||||||
|
|
||||||
u32 usbnet_get_link (struct net_device *net)
|
u32 usbnet_get_link (struct net_device *net)
|
||||||
{
|
{
|
||||||
struct usbnet *dev = netdev_priv(net);
|
struct usbnet *dev = netdev_priv(net);
|
||||||
@@ -730,6 +719,32 @@ u32 usbnet_get_link (struct net_device *net)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usbnet_get_link);
|
EXPORT_SYMBOL_GPL(usbnet_get_link);
|
||||||
|
|
||||||
|
int usbnet_nway_reset(struct net_device *net)
|
||||||
|
{
|
||||||
|
struct usbnet *dev = netdev_priv(net);
|
||||||
|
|
||||||
|
if (!dev->mii.mdio_write)
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
|
return mii_nway_restart(&dev->mii);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(usbnet_nway_reset);
|
||||||
|
|
||||||
|
#endif /* HAVE_MII */
|
||||||
|
|
||||||
|
void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)
|
||||||
|
{
|
||||||
|
struct usbnet *dev = netdev_priv(net);
|
||||||
|
|
||||||
|
/* REVISIT don't always return "usbnet" */
|
||||||
|
strncpy (info->driver, driver_name, sizeof info->driver);
|
||||||
|
strncpy (info->version, DRIVER_VERSION, sizeof info->version);
|
||||||
|
strncpy (info->fw_version, dev->driver_info->description,
|
||||||
|
sizeof info->fw_version);
|
||||||
|
usb_make_path (dev->udev, info->bus_info, sizeof info->bus_info);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(usbnet_get_drvinfo);
|
||||||
|
|
||||||
u32 usbnet_get_msglevel (struct net_device *net)
|
u32 usbnet_get_msglevel (struct net_device *net)
|
||||||
{
|
{
|
||||||
struct usbnet *dev = netdev_priv(net);
|
struct usbnet *dev = netdev_priv(net);
|
||||||
@@ -746,24 +761,15 @@ void usbnet_set_msglevel (struct net_device *net, u32 level)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(usbnet_set_msglevel);
|
EXPORT_SYMBOL_GPL(usbnet_set_msglevel);
|
||||||
|
|
||||||
int usbnet_nway_reset(struct net_device *net)
|
|
||||||
{
|
|
||||||
struct usbnet *dev = netdev_priv(net);
|
|
||||||
|
|
||||||
if (!dev->mii.mdio_write)
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
|
|
||||||
return mii_nway_restart(&dev->mii);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL_GPL(usbnet_nway_reset);
|
|
||||||
|
|
||||||
/* drivers may override default ethtool_ops in their bind() routine */
|
/* drivers may override default ethtool_ops in their bind() routine */
|
||||||
static struct ethtool_ops usbnet_ethtool_ops = {
|
static struct ethtool_ops usbnet_ethtool_ops = {
|
||||||
|
#ifdef HAVE_MII
|
||||||
.get_settings = usbnet_get_settings,
|
.get_settings = usbnet_get_settings,
|
||||||
.set_settings = usbnet_set_settings,
|
.set_settings = usbnet_set_settings,
|
||||||
.get_drvinfo = usbnet_get_drvinfo,
|
|
||||||
.get_link = usbnet_get_link,
|
.get_link = usbnet_get_link,
|
||||||
.nway_reset = usbnet_nway_reset,
|
.nway_reset = usbnet_nway_reset,
|
||||||
|
#endif
|
||||||
|
.get_drvinfo = usbnet_get_drvinfo,
|
||||||
.get_msglevel = usbnet_get_msglevel,
|
.get_msglevel = usbnet_get_msglevel,
|
||||||
.set_msglevel = usbnet_set_msglevel,
|
.set_msglevel = usbnet_set_msglevel,
|
||||||
};
|
};
|
||||||
|
@@ -54,10 +54,10 @@ config USB_SERIAL_GENERIC
|
|||||||
properly.
|
properly.
|
||||||
|
|
||||||
config USB_SERIAL_AIRCABLE
|
config USB_SERIAL_AIRCABLE
|
||||||
tristate "AIRcable USB Bluetooth Dongle Driver (EXPERIMENTAL)"
|
tristate "USB AIRcable Bluetooth Dongle Driver (EXPERIMENTAL)"
|
||||||
depends on USB_SERIAL && EXPERIMENTAL
|
depends on USB_SERIAL && EXPERIMENTAL
|
||||||
help
|
help
|
||||||
Say Y here if you want to use AIRcable USB Bluetoot Dongle.
|
Say Y here if you want to use USB AIRcable Bluetooth Dongle.
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the module
|
To compile this driver as a module, choose M here: the module
|
||||||
will be called aircable.
|
will be called aircable.
|
||||||
|
@@ -64,6 +64,9 @@ static struct usb_device_id id_table [] = {
|
|||||||
{ USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
|
{ USB_DEVICE(0x10C4, 0x80F6) }, /* Suunto sports instrument */
|
||||||
{ USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */
|
{ USB_DEVICE(0x10C4, 0x813D) }, /* Burnside Telecom Deskmobile */
|
||||||
{ USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
|
{ USB_DEVICE(0x10C4, 0x815E) }, /* Helicomm IP-Link 1220-DVM */
|
||||||
|
{ USB_DEVICE(0x10C4, 0x81C8) }, /* Lipowsky Industrie Elektronik GmbH, Baby-JTAG */
|
||||||
|
{ USB_DEVICE(0x10C4, 0x81E2) }, /* Lipowsky Industrie Elektronik GmbH, Baby-LIN */
|
||||||
|
{ USB_DEVICE(0x10C4, 0x8218) }, /* Lipowsky Industrie Elektronik GmbH, HARP-1 */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA60) }, /* Silicon Labs factory default */
|
||||||
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
{ USB_DEVICE(0x10C4, 0xEA61) }, /* Silicon Labs factory default */
|
||||||
{ USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
|
{ USB_DEVICE(0x16D6, 0x0001) }, /* Jablotron serial interface */
|
||||||
|
@@ -35,6 +35,7 @@ static struct usb_device_id id_table [] = {
|
|||||||
{ USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
|
{ USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
|
||||||
{ USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */
|
{ USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */
|
||||||
{ USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
|
{ USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
|
||||||
|
{ USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
|
||||||
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
|
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
|
||||||
{ USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */
|
{ USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */
|
||||||
{ USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 for Europe */
|
{ USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 for Europe */
|
||||||
@@ -58,8 +59,10 @@ static struct usb_device_id id_table_3port [] = {
|
|||||||
{ USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
|
{ USB_DEVICE(0x1199, 0x0020) }, /* Sierra Wireless MC5725 */
|
||||||
{ USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */
|
{ USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */
|
||||||
{ USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
|
{ USB_DEVICE(0x1199, 0x0019) }, /* Sierra Wireless AirCard 595 */
|
||||||
|
{ USB_DEVICE(0x1199, 0x0218) }, /* Sierra Wireless MC5720 */
|
||||||
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
|
{ USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
|
||||||
{ USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */
|
{ USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */
|
||||||
|
{ USB_DEVICE(0x1199, 0x6804) }, /* Sierra Wireless MC8755 for Europe */
|
||||||
{ USB_DEVICE(0x1199, 0x6812) }, /* Sierra Wireless MC8775 */
|
{ USB_DEVICE(0x1199, 0x6812) }, /* Sierra Wireless MC8775 */
|
||||||
{ USB_DEVICE(0x1199, 0x6820) }, /* Sierra Wireless AirCard 875 */
|
{ USB_DEVICE(0x1199, 0x6820) }, /* Sierra Wireless AirCard 875 */
|
||||||
{ }
|
{ }
|
||||||
|
@@ -1236,7 +1236,7 @@ UNUSUAL_DEV( 0x0e21, 0x0520, 0x0100, 0x0100,
|
|||||||
"Cowon Systems",
|
"Cowon Systems",
|
||||||
"iAUDIO M5",
|
"iAUDIO M5",
|
||||||
US_SC_DEVICE, US_PR_BULK, NULL,
|
US_SC_DEVICE, US_PR_BULK, NULL,
|
||||||
0 ),
|
US_FL_NEED_OVERRIDE ),
|
||||||
|
|
||||||
/* Submitted by Antoine Mairesse <antoine.mairesse@free.fr> */
|
/* Submitted by Antoine Mairesse <antoine.mairesse@free.fr> */
|
||||||
UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300,
|
UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300,
|
||||||
@@ -1313,6 +1313,13 @@ UNUSUAL_DEV( 0x0fce, 0xe030, 0x0000, 0x0000,
|
|||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_FIX_CAPACITY ),
|
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>
|
/* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu>
|
||||||
* Tested on hardware version 1.10.
|
* Tested on hardware version 1.10.
|
||||||
* Entry is needed only for the initializer function override.
|
* Entry is needed only for the initializer function override.
|
||||||
|
Reference in New Issue
Block a user