Merge tag 'staging-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 1 Apr 2014 23:45:00 +0000 (16:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 1 Apr 2014 23:45:00 +0000 (16:45 -0700)
Pull staging driver updates from Greg KH:
 "Here's the huge drivers/staging/ update for 3.15-rc1.

  Loads of cleanup fixes, a few drivers removed, and some new ones
  added.

  All have been in linux-next for a while"

* tag 'staging-3.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: (1375 commits)
  staging: xillybus: XILLYBUS_PCIE depends on PCI_MSI
  staging: xillybus: Added "select CRC32" for XILLYBUS in Kconfig
  staging: comedi: poc: remove obsolete driver
  staging: unisys: replace kzalloc/kfree with UISMALLOC/UISFREE
  staging: octeon-usb: prevent memory corruption
  staging: usbip: fix line over 80 characters
  staging: usbip: fix quoted string split across lines
  Staging: unisys: Remove RETINT macro
  Staging: unisys: Remove FAIL macro
  Staging: unisys: Remove RETVOID macro
  Staging: unisys: Remove RETPTR macro
  Staging: unisys: Remove RETBOOL macro
  Staging: unisys: Remove FAIL_WPOSTCODE_1 macro
  Staging: unisys: Cleanup macros to get rid of goto statements
  Staging: unisys: include: Remove unused macros from timskmod.h
  staging: dgap: fix the rest of the checkpatch warnings in dgap.c
  Staging: bcm: Remove unnecessary parentheses
  staging: wlags49_h2: Delete unnecessary braces
  staging: wlags49_h2: Do not use assignment in if condition
  staging: wlags49_h2: Enclose macro in a do-while loop
  ...

1  2 
MAINTAINERS
drivers/iio/adc/Kconfig
drivers/iio/adc/Makefile
drivers/misc/Kconfig
drivers/of/base.c
drivers/staging/line6/midi.c
drivers/usb/core/hub.c

diff --combined MAINTAINERS
index 4a2ea1a168b20a683997bacf17bc8956a57481c9,b59462c2f7e6f580d119814d1e6b97917ce0d501..48a88402c25dd11e3b93a5baa9ee1df505dafe93
@@@ -242,8 -242,8 +242,8 @@@ S: Maintaine
  F:    drivers/platform/x86/acer-wmi.c
  
  ACPI
 -M:    Len Brown <lenb@kernel.org>
  M:    Rafael J. Wysocki <rjw@rjwysocki.net>
 +M:    Len Brown <lenb@kernel.org>
  L:    linux-acpi@vger.kernel.org
  W:    https://01.org/linux-acpi
  Q:    https://patchwork.kernel.org/project/linux-acpi/list/
@@@ -911,11 -911,11 +911,11 @@@ F:      arch/arm/include/asm/hardware/dec212
  F:    arch/arm/mach-footbridge/
  
  ARM/FREESCALE IMX / MXC ARM ARCHITECTURE
 -M:    Shawn Guo <shawn.guo@linaro.org>
 +M:    Shawn Guo <shawn.guo@freescale.com>
  M:    Sascha Hauer <kernel@pengutronix.de>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://git.linaro.org/people/shawnguo/linux-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
  F:    arch/arm/mach-imx/
  F:    arch/arm/boot/dts/imx*
  F:    arch/arm/configs/imx*_defconfig
@@@ -1320,7 -1320,6 +1320,7 @@@ M:      Linus Walleij <linus.walleij@linaro.
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  F:    arch/arm/mach-u300/
 +F:    drivers/clocksource/timer-u300.c
  F:    drivers/i2c/busses/i2c-stu300.c
  F:    drivers/rtc/rtc-coh901331.c
  F:    drivers/watchdog/coh901327_wdt.c
@@@ -1833,8 -1832,8 +1833,8 @@@ F:      net/bluetooth
  F:    include/net/bluetooth/
  
  BONDING DRIVER
 -M:    Jay Vosburgh <fubar@us.ibm.com>
 -M:    Veaceslav Falico <vfalico@redhat.com>
 +M:    Jay Vosburgh <j.vosburgh@gmail.com>
 +M:    Veaceslav Falico <vfalico@gmail.com>
  M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
  W:    http://sourceforge.net/projects/bonding/
@@@ -2204,13 -2203,6 +2204,13 @@@ L:    alsa-devel@alsa-project.org (moderat
  S:    Odd Fixes
  F:    sound/soc/codecs/cs4270*
  
 +CIRRUS LOGIC AUDIO CODEC DRIVERS
 +M:    Brian Austin <brian.austin@cirrus.com>
 +M:    Paul Handrigan <Paul.Handrigan@cirrus.com>
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    sound/soc/codecs/cs*
 +
  CLEANCACHE API
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
  L:    linux-kernel@vger.kernel.org
@@@ -2809,9 -2801,9 +2809,9 @@@ S:      Supporte
  F:    drivers/acpi/dock.c
  
  DOCUMENTATION
 -M:    Rob Landley <rob@landley.net>
 +M:    Randy Dunlap <rdunlap@infradead.org>
  L:    linux-doc@vger.kernel.org
 -T:    TBD
 +T:    quilt http://www.infradead.org/~rdunlap/Doc/patches/
  S:    Maintained
  F:    Documentation/
  
@@@ -3665,8 -3657,8 +3665,8 @@@ S:      Maintaine
  F:    fs/freevxfs/
  
  FREEZER
 -M:    Pavel Machek <pavel@ucw.cz>
  M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
 +M:    Pavel Machek <pavel@ucw.cz>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/power/freezing-of-tasks.txt
@@@ -4030,8 -4022,8 +4030,8 @@@ S:      Maintaine
  F:    drivers/video/hgafb.c
  
  HIBERNATION (aka Software Suspend, aka swsusp)
 -M:    Pavel Machek <pavel@ucw.cz>
  M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
 +M:    Pavel Machek <pavel@ucw.cz>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    arch/x86/power/
@@@ -4553,7 -4545,6 +4553,7 @@@ M:      Greg Rose <gregory.v.rose@intel.com
  M:    Alex Duyck <alexander.h.duyck@intel.com>
  M:    John Ronciak <john.ronciak@intel.com>
  M:    Mitch Williams <mitch.a.williams@intel.com>
 +M:    Linux NICS <linux.nics@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://www.intel.com/support/feedback.htm
  W:    http://e1000.sourceforge.net/
@@@ -5696,12 -5687,6 +5696,12 @@@ L:    linux-watchdog@vger.kernel.or
  S:    Supported
  F:    drivers/watchdog/mena21_wdt.c
  
 +MEN CHAMELEON BUS (mcb)
 +M:    Johannes Thumshirn <johannes.thumshirn@men.de>
 +S:    Supported
 +F:    drivers/mcb/
 +F:    include/linux/mcb.h
 +
  METAG ARCHITECTURE
  M:    James Hogan <james.hogan@imgtec.com>
  L:    linux-metag@vger.kernel.org
@@@ -6020,7 -6005,6 +6020,7 @@@ F:      include/uapi/linux/net.
  F:    include/uapi/linux/netdevice.h
  F:    tools/net/
  F:    tools/testing/selftests/net/
 +F:    lib/random32.c
  
  NETWORKING [IPv4/IPv6]
  M:    "David S. Miller" <davem@davemloft.net>
@@@ -7419,26 -7403,10 +7419,26 @@@ W:   http://www.ibm.com/developerworks/li
  S:    Supported
  F:    arch/s390/
  F:    drivers/s390/
 -F:    block/partitions/ibm.c
  F:    Documentation/s390/
  F:    Documentation/DocBook/s390*
  
 +S390 COMMON I/O LAYER
 +M:    Sebastian Ott <sebott@linux.vnet.ibm.com>
 +M:    Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +F:    drivers/s390/cio/
 +
 +S390 DASD DRIVER
 +M:    Stefan Weinhuber <wein@de.ibm.com>
 +M:    Stefan Haberland <stefan.haberland@de.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +F:    drivers/s390/block/dasd*
 +F:    block/partitions/ibm.c
 +
  S390 NETWORK DRIVERS
  M:    Ursula Braun <ursula.braun@de.ibm.com>
  M:    Frank Blaschka <blaschka@linux.vnet.ibm.com>
@@@ -7448,15 -7416,6 +7448,15 @@@ W:    http://www.ibm.com/developerworks/li
  S:    Supported
  F:    drivers/s390/net/
  
 +S390 PCI SUBSYSTEM
 +M:    Sebastian Ott <sebott@linux.vnet.ibm.com>
 +M:    Gerald Schaefer <gerald.schaefer@de.ibm.com>
 +L:    linux-s390@vger.kernel.org
 +W:    http://www.ibm.com/developerworks/linux/linux390/
 +S:    Supported
 +F:    arch/s390/pci/
 +F:    drivers/pci/hotplug/s390_pci_hpc.c
 +
  S390 ZCRYPT DRIVER
  M:    Ingo Tuchscherer <ingo.tuchscherer@de.ibm.com>
  M:    linux390@de.ibm.com
@@@ -8394,6 -8353,12 +8394,12 @@@ M:    Teddy Wang <teddy.wang@siliconmotion
  S:    Odd Fixes
  F:    drivers/staging/sm7xxfb/
  
+ STAGING - SLICOSS
+ M:    Lior Dotan <liodot@gmail.com>
+ M:    Christopher Harrer <charrer@alacritech.com>
+ S:    Odd Fixes
+ F:    drivers/staging/slicoss/
  STAGING - SOFTLOGIC 6x10 MPEG CODEC
  M:    Ismael Luceno <ismael.luceno@corp.bluecherry.net>
  S:    Supported
@@@ -8466,9 -8431,9 +8472,9 @@@ F:      arch/sh
  F:    drivers/sh/
  
  SUSPEND TO RAM
 +M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  M:    Len Brown <len.brown@intel.com>
  M:    Pavel Machek <pavel@ucw.cz>
 -M:    "Rafael J. Wysocki" <rjw@rjwysocki.net>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/power/
@@@ -9079,6 -9044,13 +9085,13 @@@ F:    drivers/cdrom/cdrom.
  F:    include/linux/cdrom.h
  F:    include/uapi/linux/cdrom.h
  
+ UNISYS S-PAR DRIVERS
+ M:     Benjamin Romer <benjamin.romer@unisys.com>
+ M:     David Kershner <david.kershner@unisys.com>
+ L:     sparmaintainer@unisys.com (Unisys internal)
+ S:     Supported
+ F:     drivers/staging/unisys/
  UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
  M:    Vinayak Holikatti <vinholikatti@gmail.com>
  M:    Santosh Y <santoshsy@gmail.com>
@@@ -9822,12 -9794,6 +9835,12 @@@ L:    linux-serial@vger.kernel.or
  S:    Maintained
  F:    drivers/tty/serial/uartlite.c
  
 +XTENSA XTFPGA PLATFORM SUPPORT
 +M:    Max Filippov <jcmvbkbc@gmail.com>
 +L:    linux-xtensa@linux-xtensa.org
 +S:    Maintained
 +F:    drivers/spi/spi-xtensa-xtfpga.c
 +
  YAM DRIVER FOR AX.25
  M:    Jean-Paul Roubelat <jpr@f6fbb.org>
  L:    linux-hams@vger.kernel.org
diff --combined drivers/iio/adc/Kconfig
index 5c63f0918d12d3e077aa3e095337adb8ae7657f6,555320659c9955e24a905d17218afe37fdbb65d1..4bf4c16de976be31f811ef8d367510c7dc530d8d
@@@ -155,16 -155,6 +155,16 @@@ config MCP342
          This driver can also be built as a module. If so, the module will be
          called mcp3422.
  
 +config MEN_Z188_ADC
 +      tristate "MEN 16z188 ADC IP Core support"
 +      depends on MCB
 +      help
 +        Say yes here to enable support for the MEN 16z188 ADC IP-Core on a MCB
 +        carrier.
 +
 +        This driver can also be built as a module. If so, the module will be
 +        called men_z188_adc.
 +
  config NAU7802
        tristate "Nuvoton NAU7802 ADC driver"
        depends on I2C
@@@ -207,6 -197,16 +207,16 @@@ config TWL6030_GPAD
          This driver can also be built as a module. If so, the module will be
          called twl6030-gpadc.
  
+ config VF610_ADC
+       tristate "Freescale vf610 ADC driver"
+       depends on OF
+       help
+         Say yes here to support for Vybrid board analog-to-digital converter.
+         Since the IP is used for i.MX6SLX, the driver also support i.MX6SLX.
+         This driver can also be built as a module. If so, the module will be
+         called vf610_adc.
  config VIPERBOARD_ADC
        tristate "Viperboard ADC support"
        depends on MFD_VIPERBOARD && USB
          Say yes here to access the ADC part of the Nano River
          Technologies Viperboard.
  
+ config XILINX_XADC
+       tristate "Xilinx XADC driver"
+       depends on ARCH_ZYNQ || MICROBLAZE || COMPILE_TEST
+       depends on HAS_IOMEM
+       select IIO_BUFFER
+       select IIO_TRIGGERED_BUFFER
+       help
+         Say yes here to have support for the Xilinx XADC. The driver does support
+         both the ZYNQ interface to the XADC as well as the AXI-XADC interface.
+         The driver can also be build as a module. If so, the module will be called
+         xilinx-xadc.
  endmenu
diff --combined drivers/iio/adc/Makefile
index 85a4a045f1f0e8af4f9af1958130f1386754849c,89f1216e636a8d2be6c967d0bc41359408054689..bb252540664ae15a6f74730226415f838e0d0434
@@@ -17,9 -17,11 +17,12 @@@ obj-$(CONFIG_LP8788_ADC) += lp8788_adc.
  obj-$(CONFIG_MAX1363) += max1363.o
  obj-$(CONFIG_MCP320X) += mcp320x.o
  obj-$(CONFIG_MCP3422) += mcp3422.o
 +obj-$(CONFIG_MEN_Z188_ADC) += men_z188_adc.o
  obj-$(CONFIG_NAU7802) += nau7802.o
  obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o
  obj-$(CONFIG_TI_AM335X_ADC) += ti_am335x_adc.o
  obj-$(CONFIG_TWL6030_GPADC) += twl6030-gpadc.o
+ obj-$(CONFIG_VF610_ADC) += vf610_adc.o
  obj-$(CONFIG_VIPERBOARD_ADC) += viperboard_adc.o
+ xilinx-xadc-y := xilinx-xadc-core.o xilinx-xadc-events.o
+ obj-$(CONFIG_XILINX_XADC) += xilinx-xadc.o
diff --combined drivers/misc/Kconfig
index 809afebe0dad4f4adadee901bcde042bbbba2cf2,3816b59d3e1e2b3f7abad31aca700c67421adb37..1cb74085e4109469e58ca59469968c31117da772
@@@ -235,7 -235,7 +235,7 @@@ config SGI_X
  
  config CS5535_MFGPT
        tristate "CS5535/CS5536 Geode Multi-Function General Purpose Timer (MFGPT) support"
 -      depends on PCI && X86 && MFD_CS5535
 +      depends on MFD_CS5535
        default n
        help
          This driver provides access to MFGPT functionality for other
@@@ -526,4 -526,5 +526,5 @@@ source "drivers/misc/mei/Kconfig
  source "drivers/misc/vmw_vmci/Kconfig"
  source "drivers/misc/mic/Kconfig"
  source "drivers/misc/genwqe/Kconfig"
+ source "drivers/misc/echo/Kconfig"
  endmenu
diff --combined drivers/of/base.c
index 1b95a405628f311bf068891f958324f0b5edd0c8,fd4b9c2eaa158ae128eaa5f3e3a1d10a7457accb..5f81bfea52463d8e400987fb0db10b09f0e222a3
@@@ -21,6 -21,7 +21,7 @@@
  #include <linux/cpu.h>
  #include <linux/module.h>
  #include <linux/of.h>
+ #include <linux/of_graph.h>
  #include <linux/spinlock.h>
  #include <linux/slab.h>
  #include <linux/proc_fs.h>
@@@ -903,38 -904,6 +904,38 @@@ struct device_node *of_find_node_by_pha
  }
  EXPORT_SYMBOL(of_find_node_by_phandle);
  
 +/**
 + * of_property_count_elems_of_size - Count the number of elements in a property
 + *
 + * @np:               device node from which the property value is to be read.
 + * @propname: name of the property to be searched.
 + * @elem_size:        size of the individual element
 + *
 + * Search for a property in a device node and count the number of elements of
 + * size elem_size in it. Returns number of elements on sucess, -EINVAL if the
 + * property does not exist or its length does not match a multiple of elem_size
 + * and -ENODATA if the property does not have a value.
 + */
 +int of_property_count_elems_of_size(const struct device_node *np,
 +                              const char *propname, int elem_size)
 +{
 +      struct property *prop = of_find_property(np, propname, NULL);
 +
 +      if (!prop)
 +              return -EINVAL;
 +      if (!prop->value)
 +              return -ENODATA;
 +
 +      if (prop->length % elem_size != 0) {
 +              pr_err("size of %s in node %s is not a multiple of %d\n",
 +                     propname, np->full_name, elem_size);
 +              return -EINVAL;
 +      }
 +
 +      return prop->length / elem_size;
 +}
 +EXPORT_SYMBOL_GPL(of_property_count_elems_of_size);
 +
  /**
   * of_find_property_value_of_size
   *
@@@ -2014,3 -1983,153 +2015,153 @@@ struct device_node *of_find_next_cache_
  
        return NULL;
  }
+ /**
+  * of_graph_parse_endpoint() - parse common endpoint node properties
+  * @node: pointer to endpoint device_node
+  * @endpoint: pointer to the OF endpoint data structure
+  *
+  * The caller should hold a reference to @node.
+  */
+ int of_graph_parse_endpoint(const struct device_node *node,
+                           struct of_endpoint *endpoint)
+ {
+       struct device_node *port_node = of_get_parent(node);
+       WARN_ONCE(!port_node, "%s(): endpoint %s has no parent node\n",
+                 __func__, node->full_name);
+       memset(endpoint, 0, sizeof(*endpoint));
+       endpoint->local_node = node;
+       /*
+        * It doesn't matter whether the two calls below succeed.
+        * If they don't then the default value 0 is used.
+        */
+       of_property_read_u32(port_node, "reg", &endpoint->port);
+       of_property_read_u32(node, "reg", &endpoint->id);
+       of_node_put(port_node);
+       return 0;
+ }
+ EXPORT_SYMBOL(of_graph_parse_endpoint);
+ /**
+  * of_graph_get_next_endpoint() - get next endpoint node
+  * @parent: pointer to the parent device node
+  * @prev: previous endpoint node, or NULL to get first
+  *
+  * Return: An 'endpoint' node pointer with refcount incremented. Refcount
+  * of the passed @prev node is not decremented, the caller have to use
+  * of_node_put() on it when done.
+  */
+ struct device_node *of_graph_get_next_endpoint(const struct device_node *parent,
+                                       struct device_node *prev)
+ {
+       struct device_node *endpoint;
+       struct device_node *port = NULL;
+       if (!parent)
+               return NULL;
+       if (!prev) {
+               struct device_node *node;
+               /*
+                * It's the first call, we have to find a port subnode
+                * within this node or within an optional 'ports' node.
+                */
+               node = of_get_child_by_name(parent, "ports");
+               if (node)
+                       parent = node;
+               port = of_get_child_by_name(parent, "port");
+               if (port) {
+                       /* Found a port, get an endpoint. */
+                       endpoint = of_get_next_child(port, NULL);
+                       of_node_put(port);
+               } else {
+                       endpoint = NULL;
+               }
+               if (!endpoint)
+                       pr_err("%s(): no endpoint nodes specified for %s\n",
+                              __func__, parent->full_name);
+               of_node_put(node);
+               return endpoint;
+       }
+       port = of_get_parent(prev);
+       if (WARN_ONCE(!port, "%s(): endpoint %s has no parent node\n",
+                     __func__, prev->full_name))
+               return NULL;
+       /* Avoid dropping prev node refcount to 0. */
+       of_node_get(prev);
+       endpoint = of_get_next_child(port, prev);
+       if (endpoint) {
+               of_node_put(port);
+               return endpoint;
+       }
+       /* No more endpoints under this port, try the next one. */
+       do {
+               port = of_get_next_child(parent, port);
+               if (!port)
+                       return NULL;
+       } while (of_node_cmp(port->name, "port"));
+       /* Pick up the first endpoint in this port. */
+       endpoint = of_get_next_child(port, NULL);
+       of_node_put(port);
+       return endpoint;
+ }
+ EXPORT_SYMBOL(of_graph_get_next_endpoint);
+ /**
+  * of_graph_get_remote_port_parent() - get remote port's parent node
+  * @node: pointer to a local endpoint device_node
+  *
+  * Return: Remote device node associated with remote endpoint node linked
+  *       to @node. Use of_node_put() on it when done.
+  */
+ struct device_node *of_graph_get_remote_port_parent(
+                              const struct device_node *node)
+ {
+       struct device_node *np;
+       unsigned int depth;
+       /* Get remote endpoint node. */
+       np = of_parse_phandle(node, "remote-endpoint", 0);
+       /* Walk 3 levels up only if there is 'ports' node. */
+       for (depth = 3; depth && np; depth--) {
+               np = of_get_next_parent(np);
+               if (depth == 2 && of_node_cmp(np->name, "ports"))
+                       break;
+       }
+       return np;
+ }
+ EXPORT_SYMBOL(of_graph_get_remote_port_parent);
+ /**
+  * of_graph_get_remote_port() - get remote port node
+  * @node: pointer to a local endpoint device_node
+  *
+  * Return: Remote port node associated with remote endpoint node linked
+  *       to @node. Use of_node_put() on it when done.
+  */
+ struct device_node *of_graph_get_remote_port(const struct device_node *node)
+ {
+       struct device_node *np;
+       /* Get remote endpoint node. */
+       np = of_parse_phandle(node, "remote-endpoint", 0);
+       if (!np)
+               return NULL;
+       return of_get_next_parent(np);
+ }
+ EXPORT_SYMBOL(of_graph_get_remote_port);
index c61cd0515baf299a244c9c44ff393dfcc0cf0cda,5aaef2b4ccfa508cd4d63dd867945231651ff20e..02345fb06e3d10f2bb4ff7fda8af997ddb73d106
@@@ -47,7 -47,7 +47,7 @@@ static void line6_midi_transmit(struct 
        struct snd_line6_midi *line6midi = line6->line6midi;
        struct midi_buffer *mb = &line6midi->midibuf_out;
        unsigned long flags;
-       unsigned char chunk[line6->max_packet_size];
+       unsigned char chunk[LINE6_FALLBACK_MAXPACKETSIZE];
        int req, done;
  
        spin_lock_irqsave(&line6->line6midi->midi_transmit_lock, flags);
@@@ -64,7 -64,8 +64,8 @@@
        }
  
        for (;;) {
-               done = line6_midibuf_read(mb, chunk, line6->max_packet_size);
+               done = line6_midibuf_read(mb, chunk,
+                                         LINE6_FALLBACK_MAXPACKETSIZE);
  
                if (done == 0)
                        break;
@@@ -307,6 -308,8 +308,6 @@@ int line6_init_midi(struct usb_line6 *l
        if (err < 0)
                return err;
  
 -      snd_card_set_dev(line6->card, line6->ifcdev);
 -
        err = snd_line6_new_midi(line6midi);
        if (err < 0)
                return err;
diff --combined drivers/usb/core/hub.c
index 5cbf78d0be2539c868dab16a815b15e4bfe28b99,be6e02e91f564d6ff0493eaedb3c568379d898ca..610735823d93fa94e54cbb231d7d4d56f7b38825
@@@ -1040,7 -1040,7 +1040,7 @@@ static void hub_activate(struct usb_hu
                 */
                if (type == HUB_INIT) {
                        delay = hub_power_on(hub, false);
 -                      PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func2);
 +                      INIT_DELAYED_WORK(&hub->init_work, hub_init_func2);
                        schedule_delayed_work(&hub->init_work,
                                        msecs_to_jiffies(delay));
  
  
                /* Don't do a long sleep inside a workqueue routine */
                if (type == HUB_INIT2) {
 -                      PREPARE_DELAYED_WORK(&hub->init_work, hub_init_func3);
 +                      INIT_DELAYED_WORK(&hub->init_work, hub_init_func3);
                        schedule_delayed_work(&hub->init_work,
                                        msecs_to_jiffies(delay));
                        return;         /* Continues at init3: below */
@@@ -1788,7 -1788,7 +1788,7 @@@ hub_ioctl(struct usb_interface *intf, u
   * to one of these "claimed" ports, the program will "own" the device.
   */
  static int find_port_owner(struct usb_device *hdev, unsigned port1,
-               struct dev_state ***ppowner)
+               struct usb_dev_state ***ppowner)
  {
        struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
  
  
  /* In the following three functions, the caller must hold hdev's lock */
  int usb_hub_claim_port(struct usb_device *hdev, unsigned port1,
-                      struct dev_state *owner)
+                      struct usb_dev_state *owner)
  {
        int rc;
-       struct dev_state **powner;
+       struct usb_dev_state **powner;
  
        rc = find_port_owner(hdev, port1, &powner);
        if (rc)
        *powner = owner;
        return rc;
  }
+ EXPORT_SYMBOL_GPL(usb_hub_claim_port);
  
  int usb_hub_release_port(struct usb_device *hdev, unsigned port1,
-                        struct dev_state *owner)
+                        struct usb_dev_state *owner)
  {
        int rc;
-       struct dev_state **powner;
+       struct usb_dev_state **powner;
  
        rc = find_port_owner(hdev, port1, &powner);
        if (rc)
        *powner = NULL;
        return rc;
  }
+ EXPORT_SYMBOL_GPL(usb_hub_release_port);
  
- void usb_hub_release_all_ports(struct usb_device *hdev, struct dev_state *owner)
+ void usb_hub_release_all_ports(struct usb_device *hdev, struct usb_dev_state *owner)
  {
        struct usb_hub *hub = usb_hub_to_struct_hub(hdev);
        int n;