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

NAME

       usb_set_interface - Makes a particular alternate setting be current

SYNOPSIS

       int usb_set_interface  (struct usb_device * dev, int interface,
                                int alternate);

ARGUMENTS

       dev    the device whose interface is being updated

       interface
              the interface being updated

       alternate
              the setting being chosen.

CONTEXT

       !in_interrupt ()

DESCRIPTION

       This is used to enable data transfers on interfaces  that  may  not  be
       enabled  by default. Not all devices support such configurability. Only
       the driver bound to an interface may change its setting.

       Within  any  given  configuration,  each  interface  may  have  several
       alternative  settings.  These  are  often  used  to  control  levels of
       bandwidth consumption. For example, the  default  setting  for  a  high
       speed   interrupt  endpoint  may  not  send  more  than  64  bytes  per
       microframe, while interrupt transfers of up to 3KBytes  per  microframe
       are  legal.  Also,  isochronous  endpoints  may  never  be  part  of an
       interface’s  default  setting.  To  access  such  bandwidth,  alternate
       interface settings must be made current.

       Note  that  in  the  Linux  USB subsystem, bandwidth associated with an
       endpoint in a given alternate setting is not reserved until an  URB  is
       submitted  that  needs  that  bandwidth.  Some  other operating systems
       allocate bandwidth early, when a configuration is chosen.

       This call is synchronous, and may not be used in an interrupt  context.
       Also,  drivers must not change altsettings while urbs are scheduled for
       endpoints in that interface; all such  urbs  must  first  be  completed
       (perhaps forced by unlinking).

       Returns  zero  on  success,  or  else  the  status code returned by the
       underlying usb_control_msg call.