Provided by: linux-doc-2.6.15_2.6.15-23.39_all bug


       struct usb_interface - what usb device drivers talk to


       struct usb_interface {
         struct usb_host_interface * altsetting;
         struct usb_host_interface * cur_altsetting;
         unsigned num_altsetting;
         int minor;
         enum usb_interface_condition condition;
         struct device dev;
         struct class_device * class_dev;


              array  of  interface  structures, one for each alternate setting
              that may be selected.  Each  one  includes  a  set  of  endpoint
              configurations. They will be in no particular order.

              the current altsetting.

              number of altsettings defined.

       minor  the  minor  number assigned to this interface, if this interface
              is bound to a driver that uses the USB  major  number.  If  this
              interface  does  not  use  the  USB  major, this field should be
              unused. The driver should set this value in the  probe  function
              of  the  driver,  after it has been assigned a minor number from
              the USB core by calling usb_register_dev.

              binding state of the interface: not bound, binding  (in  probe),
              bound to a driver, or unbinding (in disconnect)

       dev    driver model’s view of this device

              driver model’s class view of this device.


       USB  device  drivers  attach  to  interfaces on a physical device. Each
       interface encapsulates a single high level function, such as feeding an
       audio  stream  to  a speaker or reporting a change in a volume control.
       Many USB devices only have one interface. The protocol used to talk  to
       an   interface’s   endpoints   can   be  defined  in  a  usb  ‘‘class’’
       specification, or by a product’s vendor. The (default) control endpoint
       is  part  of every interface, but is never listed among the interface’s

       The driver that is bound to the interface can use standard driver model
       calls such as dev_get_drvdata on the dev member of this structure.

       Each  interface  may have alternate settings. The initial configuration
       of a device sets altsetting 0, but the device driver  can  change  that
       setting  using  usb_set_interface. Alternate settings are often used to
       control the the use of periodic endpoints, such as by having  different
       endpoints   use  different  amounts  of  reserved  USB  bandwidth.  All
       standards-conformant USB devices that use  isochronous  endpoints  will
       use them in non-default settings.

       The USB specification says that alternate setting numbers must run from
       0 to one less than the total number of  alternate  settings.  But  some
       devices  manage  to mess this up, and the structures aren’t necessarily
       stored in numerical order anyhow. Use usb_altnum_to_altsetting to  look
       up an alternate setting in the altsetting array based on its number.