1. 10 9月, 2012 1 次提交
  2. 23 8月, 2012 1 次提交
    • K
      usb: gadget: udc-core: Race between disconnect/unbind and setup · 974e9323
      Kevin Cernekee 提交于
      usb_gadget_remove_driver() runs through a four-step sequence to shut down
      the gadget driver.  For the case of a composite gadget + at91 UDC, this
      would look like:
      
          udc->driver->disconnect(udc->gadget);          // composite_disconnect()
          usb_gadget_disconnect(udc->gadget);            // at91_pullup(gadget, 0)
          udc->driver->unbind(udc->gadget);              // composite_unbind()
          usb_gadget_udc_stop(udc->gadget, udc->driver); // at91_stop()
      
      The UDC driver can receive SETUP packets from the host up until the
      point when usb_gadget_disconnect() returns.  On rare occasions, the
      gadget driver may see this sequence:
      
          udc->driver->disconnect(udc->gadget);          // composite_disconnect()
          udc->driver->setup(udc->gadget, &ctrl);        // composite_setup()
          udc->driver->unbind(udc->gadget);              // composite_unbind()
      
      Some gadget drivers, such as composite, assume this will never happen
      and crash as a result.
      
      The fix is to quiesce the UDC hardware (via usb_gadget_disconnect)
      before running the gadget driver through the disconnect/unbind sequence.
      Reviewed-by: NPeter Chen <peter.chen@freescale.com>
      Signed-off-by: NKevin Cernekee <cernekee@gmail.com>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      974e9323
  3. 27 4月, 2012 2 次提交
  4. 11 4月, 2012 1 次提交
  5. 10 4月, 2012 1 次提交
  6. 28 2月, 2012 1 次提交
  7. 12 12月, 2011 1 次提交
  8. 15 11月, 2011 3 次提交
  9. 27 9月, 2011 1 次提交
  10. 18 9月, 2011 1 次提交
    • M
      usb: Provide usb_speed_string() function · e538dfda
      Michal Nazarewicz 提交于
      In a few places in the kernel, the code prints
      a human-readable USB device speed (eg. "high speed").
      This involves a switch statement sometimes wrapped
      around in ({ ... }) block leading to code repetition.
      
      To mitigate this issue, this commit introduces
      usb_speed_string() function, which returns
      a human-readable name of provided speed.
      
      It also changes a few places switch was used to use
      this new function.  This changes a bit the way the
      speed is printed in few instances at the same time
      standardising it.
      Signed-off-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      e538dfda
  11. 02 7月, 2011 2 次提交
  12. 29 6月, 2011 1 次提交
    • F
      usb: gadget: introduce UDC Class · 2ccea03a
      Felipe Balbi 提交于
      this class will be used to abstract away several of the duplicated
      operations scattered among the USB gadget controller drivers.
      
      Later, we can add an atomic notifier to tell interested drivers about
      what's happening with the controller. Notifications such as suspend,
      resume, enumerated, etc. will be useful, at a minimum, for implementing
      usb charger detection.
      
      As part of the converting process usb_gadget_probe_driver() is no longer
      part of each udc but pushed into the ->stap() callback. The same for his
      couterpart.
      
      The core is currently set explicit to 'n'. It will be changed to 'y' once
      all users are converted since it provides functions which clash with
      other drivers.
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Acked-by: NMichal Nazarewicz <mina86@mina86.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
      2ccea03a