1. 22 1月, 2013 7 次提交
    • S
      usb: gadget: convert source sink and loopback to new function interface · cf9a08ae
      Sebastian Andrzej Siewior 提交于
      This patch converts the f_sourcesink and f_loopback file to the USB-function
      module. Both functions shares a few common utility functions which are
      currently implemented in g_zero.c itself. This patch moves the common
      code into the sourcesink file and creates one module out of the the two
      functions (source sink and loop back).
      The g_zero gadget is function specific to source sink and loop back to
      set a few options. This Symbol dependency enforces a modul load right
      now.
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      cf9a08ae
    • S
      usb: gadget: add some infracture to register/unregister functions · de53c254
      Sebastian Andrzej Siewior 提交于
      This patch provides an infrastructure to register & unregister a USB
      function. This allows to turn a function into a module and avoid the
      '#include "f_.*.c"' magic and we get a clear API / cut between the bare
      gadget and its functions.
      The concept is simple:
      Each function defines the DECLARE_USB_FUNCTION_INIT macro whith an unique
      name of the function and two allocation functions.
      - one to create an "instance". The instance holds the current configuration
        set. In case there are two usb_configudations with one function there will
        be one instance and two usb_functions
      - one to create an "function" from the instance.
      
      The name of the instance is used to automaticaly load the module if it the
      instance is not yet available.
      The usb_function callbacks are slightly modified and extended:
      - usb_get_function()
        creates a struct usb_function inclunding all pointers (bind,
        unbind,…). It uses the "instance" to map its configuration. So we can
        have _two_ struct usb_function, one for each usb_configuration.
      - ->unbind()
        Since the struct usb_function was not allocated in ->bind() it should
        not kfree()d here. This function should only reverse what happens in
        ->bind() that is request cleanup and the cleanup of allocated
        descriptors.
      - ->free_func()
        a simple kfree() of the struct usb_function
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      de53c254
    • S
      usb: gadget: move loopback's config descriptor out of f_loopback · 78f46f09
      Sebastian Andrzej Siewior 提交于
      f_loopback should only include the bare function but it also includes
      the config descriptor. This patch moves the config descriptor into
      zero.c, the only user of this function.
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      78f46f09
    • S
      usb: gadget: move source sink's config descriptor out of f_sourcesink · eeae5407
      Sebastian Andrzej Siewior 提交于
      f_sourcesink should only include the bare function but it also includes
      the config descriptor. This patch moves the config descriptor into
      zero.c, the only user of this function.
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      eeae5407
    • S
      usb: gadget: provide a wrapper around SourceSink's setup function · 544aca39
      Sebastian Andrzej Siewior 提交于
      The setup request can be sent to an interface/endpoint or to the device
      itself. If it is sent to an interface / endpoint then we forward it to
      the function that is mapped to that interface / endpoint.
      If the device is the target of the setup request then we forward it to the
      ->setup() callback of the currently active configuration.
      In case of the sourcesink function the requests are function specific
      but are sent to the device.
      This patch introduces a setup wrapper at configuration level which
      forwards the request to the function. By using this wrapper we can keep
      the function specific code within the function file and we need just a
      hint at config level to forward the request.
      The here introduced global variable will be moved into the gadget (which
      combines the two functions) in a later patch.
      SourceSink is currently the only function using ->setup() at config level.
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      544aca39
    • S
      usb: gadget: remove u32 castings of address passed to readl() · 32b86665
      Sebastian Andrzej Siewior 提交于
      Removes a couple of:
      |drivers/usb/gadget/s3c-hsudc.c: In function 's3c_hsudc_epin_intr':
      |drivers/usb/gadget/s3c-hsudc.c:438:2: warning: passing argument 1 of '__raw_readl' makes pointer from integer without a cast
      |arch/arm/include/asm/io.h:104:19: note: expected 'const volatile void *' but argument is of type 'unsigned int'
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      32b86665
    • S
      usb: gadget: composite: don't call driver's unbind() if bind() failed · 779d516c
      Sebastian Andrzej Siewior 提交于
      Lets assume nokia_bind() starts with "return -EINVAL". After loading the
      gadget we end up with:
      
      |udc dummy_udc.0: registering UDC driver [g_nokia]
      |BUG: unable to handle kernel NULL pointer dereference at 00000040
      |IP: [<c11f9555>] __list_add+0x25/0xf0
      |Call Trace:
      | [<c12d4e21>] rollback_registered+0x21/0x40
      | [<c12d513f>] unregister_netdevice_queue+0x4f/0xa0
      | [<c12d5259>] unregister_netdev+0x19/0x30
      | [<f81335b2>] gphonet_cleanup+0x32/0x50 [g_nokia]
      | [<f8133f1c>] nokia_unbind+0x1c/0x2a [g_nokia]
      | [<f802509f>] __composite_unbind.constprop.10+0x4f/0xb0 [libcomposite]
      | [<f80255be>] composite_bind+0x1ae/0x230 [libcomposite]
      | [<c129e576>] usb_gadget_probe_driver+0xc6/0x1b0
      | [<f8024aba>] usb_composite_probe+0x7a/0xa0 [libcomposite]
      
      That is crash from nokia_unbind() invoked via nokia_bind(). This crash
      will look different we if make it until usb_string_ids_tab() before we
      enter an error condition in the probe function.
      nokia_bind_config() tries to clean up which is IMHO the right thing to
      do. Leaving things as-is and hoping that its unbind() will clean it up
      is kinda backwards. Especially since the bind function never succeeded so
      it can't know how much it needs to clean up.
      This fixes the behaviour by not calling the driver's unbind function if
      its bind function failed.
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NFelipe Balbi <balbi@ti.com>
      779d516c
  2. 10 1月, 2013 12 次提交
  3. 08 1月, 2013 7 次提交
  4. 07 1月, 2013 7 次提交
  5. 06 1月, 2013 2 次提交
  6. 05 1月, 2013 5 次提交