]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 8 Feb 2007 03:23:21 +0000 (19:23 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 8 Feb 2007 03:23:21 +0000 (19:23 -0800)
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6: (70 commits)
  USB: remove duplicate device id from zc0301
  USB: remove duplicate device id from usb_storage
  USB: remove duplicate device id from keyspan
  USB: remove duplicate device id from ftdi_sio
  USB: remove duplicate device id from visor
  USB: a bit more coding style cleanup
  usbcore: trivial whitespace fixes
  usb-storage: use first bulk endpoints, not last
  EHCI: fix interrupt-driven remote wakeup
  USB: switch ehci-hcd to new polling scheme
  USB: autosuspend for usb printer driver
  USB Input: Added kernel module to support all GTCO CalComp USB InterWrite School products
  USB: Sierra Wireless auto set D0
  USB: usb ethernet gadget recognizes HUSB2DEV
  USB: list atmel husb2_udc gadget controller
  USB: gadgetfs AIO tweaks
  USB: gadgetfs behaves better on userspace init bug
  USB: gadgetfs race fix
  USB: gadgetfs simplifications
  USB: gadgetfs cleanups
  ...

1  2 
drivers/usb/core/driver.c
include/linux/usb.h

index d505926aa9ccc53e3325cdebdaece6b56d3957c7,0c0c03a4e03181bafe9f619b2fb36ba2450210fc..600d1bc8272a9503caf399171775c3bf05bb4ff9
  #include "hcd.h"
  #include "usb.h"
  
- static int usb_match_one_id(struct usb_interface *interface,
-                           const struct usb_device_id *id);
- struct usb_dynid {
-       struct list_head node;
-       struct usb_device_id id;
- };
  #ifdef CONFIG_HOTPLUG
  
  /*
   * Adds a new dynamic USBdevice ID to this driver,
   * and cause the driver to probe for all devices again.
   */
- static ssize_t store_new_id(struct device_driver *driver,
-                           const char *buf, size_t count)
+ ssize_t usb_store_new_id(struct usb_dynids *dynids,
+                        struct device_driver *driver,
+                        const char *buf, size_t count)
  {
-       struct usb_driver *usb_drv = to_usb_driver(driver);
        struct usb_dynid *dynid;
        u32 idVendor = 0;
        u32 idProduct = 0;
@@@ -65,9 -57,9 +57,9 @@@
        dynid->id.idProduct = idProduct;
        dynid->id.match_flags = USB_DEVICE_ID_MATCH_DEVICE;
  
-       spin_lock(&usb_drv->dynids.lock);
-       list_add_tail(&usb_drv->dynids.list, &dynid->node);
-       spin_unlock(&usb_drv->dynids.lock);
+       spin_lock(&dynids->lock);
+       list_add_tail(&dynids->list, &dynid->node);
+       spin_unlock(&dynids->lock);
  
        if (get_driver(driver)) {
                retval = driver_attach(driver);
                return retval;
        return count;
  }
+ EXPORT_SYMBOL_GPL(usb_store_new_id);
+ static ssize_t store_new_id(struct device_driver *driver,
+                           const char *buf, size_t count)
+ {
+       struct usb_driver *usb_drv = to_usb_driver(driver);
+       return usb_store_new_id(&usb_drv->dynids, driver, buf, count);
+ }
  static DRIVER_ATTR(new_id, S_IWUSR, NULL, store_new_id);
  
  static int usb_create_newid_file(struct usb_driver *usb_drv)
@@@ -365,8 -366,8 +366,8 @@@ void usb_driver_release_interface(struc
  EXPORT_SYMBOL(usb_driver_release_interface);
  
  /* returns 0 if no match, 1 if match */
static int usb_match_one_id(struct usb_interface *interface,
-                           const struct usb_device_id *id)
+ int usb_match_one_id(struct usb_interface *interface,
+                    const struct usb_device_id *id)
  {
        struct usb_host_interface *intf;
        struct usb_device *dev;
  
        return 1;
  }
+ EXPORT_SYMBOL_GPL(usb_match_one_id);
  /**
   * usb_match_id - find first usb_device_id matching device or interface
   * @interface: the interface of interest
@@@ -750,8 -753,7 +753,8 @@@ EXPORT_SYMBOL_GPL(usb_deregister_device
   * usb_register_dev() to enable that functionality.  This function no longer
   * takes care of that.
   */
 -int usb_register_driver(struct usb_driver *new_driver, struct module *owner)
 +int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
 +                      const char *mod_name)
  {
        int retval = 0;
  
        new_driver->drvwrap.driver.probe = usb_probe_interface;
        new_driver->drvwrap.driver.remove = usb_unbind_interface;
        new_driver->drvwrap.driver.owner = owner;
 +      new_driver->drvwrap.driver.mod_name = mod_name;
        spin_lock_init(&new_driver->dynids.lock);
        INIT_LIST_HEAD(&new_driver->dynids.list);
  
diff --combined include/linux/usb.h
index 733f38de49781748d3e20ba02da3bbe4368546ea,3b08ab39550f10b1f2c600df4686f3e987365398..b5c226a87ed87640252139a6dda2f701aa4636bc
@@@ -2,7 -2,7 +2,7 @@@
  #define __LINUX_USB_H
  
  #include <linux/mod_devicetable.h>
- #include <linux/usb_ch9.h>
+ #include <linux/usb/ch9.h>
  
  #define USB_MAJOR                     180
  #define USB_DEVICE_MAJOR              189
@@@ -107,7 -107,8 +107,8 @@@ enum usb_interface_condition 
   * @needs_remote_wakeup: flag set when the driver requires remote-wakeup
   *    capability during autosuspend.
   * @dev: driver model's view of this device
-  * @class_dev: driver model's class view of this device.
+  * @usb_dev: if an interface is bound to the USB major, this will point
+  *    to the sysfs representation for that device.
   * @pm_usage_cnt: PM usage counter for this interface; autosuspend is not
   *    allowed unless the counter is 0.
   *
@@@ -152,7 -153,7 +153,7 @@@ struct usb_interface 
        unsigned needs_remote_wakeup:1; /* driver requires remote wakeup */
  
        struct device dev;              /* interface specific device info */
-       struct class_device *class_dev;
+       struct device *usb_dev;         /* pointer to the usb class's device, if any */
        int pm_usage_cnt;               /* usage counter for autosuspend */
  };
  #define       to_usb_interface(d) container_of(d, struct usb_interface, dev)
@@@ -372,7 -373,7 +373,7 @@@ struct usb_device 
        char *serial;                   /* iSerialNumber string, if present */
  
        struct list_head filelist;
-       struct class_device *class_dev;
+       struct device *usbfs_dev;
        struct dentry *usbfs_dentry;    /* usbfs dentry entry for the device */
  
        /*
@@@ -475,6 -476,8 +476,8 @@@ extern void usb_driver_release_interfac
                        struct usb_interface *iface);
  const struct usb_device_id *usb_match_id(struct usb_interface *interface,
                                         const struct usb_device_id *id);
+ extern int usb_match_one_id(struct usb_interface *interface,
+                           const struct usb_device_id *id);
  
  extern struct usb_interface *usb_find_interface(struct usb_driver *drv,
                int minor);
@@@ -553,6 -556,18 +556,18 @@@ static inline int usb_endpoint_xfer_bul
                USB_ENDPOINT_XFER_BULK);
  }
  
+ /**
+  * usb_endpoint_xfer_control - check if the endpoint has control transfer type
+  * @epd: endpoint to be checked
+  *
+  * Returns true if the endpoint is of type control, otherwise it returns false.
+  */
+ static inline int usb_endpoint_xfer_control(const struct usb_endpoint_descriptor *epd)
+ {
+       return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
+               USB_ENDPOINT_XFER_CONTROL);
+ }
  /**
   * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
   * @epd: endpoint to be checked
@@@ -723,11 -738,21 +738,21 @@@ static inline int usb_endpoint_is_isoc_
  
  /* ----------------------------------------------------------------------- */
  
+ /* Stuff for dynamic usb ids */
  struct usb_dynids {
        spinlock_t lock;
        struct list_head list;
  };
  
+ struct usb_dynid {
+       struct list_head node;
+       struct usb_device_id id;
+ };
+ extern ssize_t usb_store_new_id(struct usb_dynids *dynids,
+                               struct device_driver *driver,
+                               const char *buf, size_t count);
  /**
   * struct usbdrv_wrap - wrapper for driver-model structure
   * @driver: The driver-model core driver structure.
@@@ -868,11 -893,10 +893,11 @@@ struct usb_class_driver 
   * use these in module_init()/module_exit()
   * and don't forget MODULE_DEVICE_TABLE(usb, ...)
   */
 -extern int usb_register_driver(struct usb_driver *, struct module *);
 +extern int usb_register_driver(struct usb_driver *, struct module *,
 +                             const char *);
  static inline int usb_register(struct usb_driver *driver)
  {
 -      return usb_register_driver(driver, THIS_MODULE);
 +      return usb_register_driver(driver, THIS_MODULE, KBUILD_MODNAME);
  }
  extern void usb_deregister(struct usb_driver *);
  
@@@ -1086,7 -1110,6 +1111,6 @@@ struct ur
        struct kref kref;               /* reference count of the URB */
        spinlock_t lock;                /* lock for the URB */
        void *hcpriv;                   /* private data for host controller */
-       int bandwidth;                  /* bandwidth for INT/ISO request */
        atomic_t use_count;             /* concurrent submissions counter */
        u8 reject;                      /* submissions will fail */