提交 ced3985f 编写于 作者: L Linus Torvalds

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
...@@ -428,12 +428,6 @@ Options supported: ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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, ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 { ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 @@ static int usbnet_open (struct net_device *net) ...@@ -669,6 +669,9 @@ static int usbnet_open (struct net_device *net)
* 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) ...@@ -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,40 +719,57 @@ u32 usbnet_get_link (struct net_device *net) ...@@ -730,40 +719,57 @@ u32 usbnet_get_link (struct net_device *net)
} }
EXPORT_SYMBOL_GPL(usbnet_get_link); EXPORT_SYMBOL_GPL(usbnet_get_link);
u32 usbnet_get_msglevel (struct net_device *net) int usbnet_nway_reset(struct net_device *net)
{ {
struct usbnet *dev = netdev_priv(net); struct usbnet *dev = netdev_priv(net);
return dev->msg_enable; if (!dev->mii.mdio_write)
return -EOPNOTSUPP;
return mii_nway_restart(&dev->mii);
} }
EXPORT_SYMBOL_GPL(usbnet_get_msglevel); EXPORT_SYMBOL_GPL(usbnet_nway_reset);
void usbnet_set_msglevel (struct net_device *net, u32 level) #endif /* HAVE_MII */
void usbnet_get_drvinfo (struct net_device *net, struct ethtool_drvinfo *info)
{ {
struct usbnet *dev = netdev_priv(net); struct usbnet *dev = netdev_priv(net);
dev->msg_enable = level; /* 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_set_msglevel); EXPORT_SYMBOL_GPL(usbnet_get_drvinfo);
int usbnet_nway_reset(struct net_device *net) u32 usbnet_get_msglevel (struct net_device *net)
{ {
struct usbnet *dev = netdev_priv(net); struct usbnet *dev = netdev_priv(net);
if (!dev->mii.mdio_write) return dev->msg_enable;
return -EOPNOTSUPP; }
EXPORT_SYMBOL_GPL(usbnet_get_msglevel);
return mii_nway_restart(&dev->mii); void usbnet_set_msglevel (struct net_device *net, u32 level)
{
struct usbnet *dev = netdev_priv(net);
dev->msg_enable = level;
} }
EXPORT_SYMBOL_GPL(usbnet_nway_reset); EXPORT_SYMBOL_GPL(usbnet_set_msglevel);
/* 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 ...@@ -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 [] = { ...@@ -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 [] = { ...@@ -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 [] = { ...@@ -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, ...@@ -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, ...@@ -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.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册