--- /dev/null
+From a7023819404ac9bd2bb311a4fafd38515cfa71ec Mon Sep 17 00:00:00 2001
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Date: Fri, 11 Oct 2019 08:34:52 -0700
+Subject: e1000e: Use rtnl_lock to prevent race conditions between net and pci/pm
+
+From: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+
+commit a7023819404ac9bd2bb311a4fafd38515cfa71ec upstream.
+
+This patch is meant to address possible race conditions that can exist
+between network configuration and power management. A similar issue was
+fixed for igb in commit 9474933caf21 ("igb: close/suspend race in
+netif_device_detach").
+
+In addition it consolidates the code so that the PCI error handling code
+will essentially perform the power management freeze on the device prior to
+attempting a reset, and will thaw the device afterwards if that is what it
+is planning to do. Otherwise when we call close on the interface it should
+see it is detached and not attempt to call the logic to down the interface
+and free the IRQs again.
+
+From what I can tell the check that was adding the check for __E1000_DOWN
+in e1000e_close was added when runtime power management was added. However
+it should not be relevant for us as we perform a call to
+pm_runtime_get_sync before we call e1000_down/free_irq so it should always
+be back up before we call into this anyway.
+
+Reported-by: Morumuri Srivalli <smorumu1@in.ibm.com>
+Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
+Tested-by: David Dai <zdai@linux.vnet.ibm.com>
+Tested-by: Aaron Brown <aaron.f.brown@intel.com>
+Cc: Kai-Heng Feng <kai.heng.feng@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/intel/e1000e/netdev.c | 68 ++++++++++++++---------------
+ 1 file changed, 35 insertions(+), 33 deletions(-)
+
+--- a/drivers/net/ethernet/intel/e1000e/netdev.c
++++ b/drivers/net/ethernet/intel/e1000e/netdev.c
+@@ -4713,12 +4713,12 @@ int e1000e_close(struct net_device *netd
+
+ pm_runtime_get_sync(&pdev->dev);
+
+- if (!test_bit(__E1000_DOWN, &adapter->state)) {
++ if (netif_device_present(netdev)) {
+ e1000e_down(adapter, true);
+ e1000_free_irq(adapter);
+
+ /* Link status message must follow this format */
+- pr_info("%s NIC Link is Down\n", adapter->netdev->name);
++ pr_info("%s NIC Link is Down\n", netdev->name);
+ }
+
+ napi_disable(&adapter->napi);
+@@ -6309,10 +6309,14 @@ static int e1000e_pm_freeze(struct devic
+ {
+ struct net_device *netdev = dev_get_drvdata(dev);
+ struct e1000_adapter *adapter = netdev_priv(netdev);
++ bool present;
+
++ rtnl_lock();
++
++ present = netif_device_present(netdev);
+ netif_device_detach(netdev);
+
+- if (netif_running(netdev)) {
++ if (present && netif_running(netdev)) {
+ int count = E1000_CHECK_RESET_COUNT;
+
+ while (test_bit(__E1000_RESETTING, &adapter->state) && count--)
+@@ -6324,6 +6328,8 @@ static int e1000e_pm_freeze(struct devic
+ e1000e_down(adapter, false);
+ e1000_free_irq(adapter);
+ }
++ rtnl_unlock();
++
+ e1000e_reset_interrupt_capability(adapter);
+
+ /* Allow time for pending master requests to run */
+@@ -6571,6 +6577,30 @@ static void e1000e_disable_aspm_locked(s
+ __e1000e_disable_aspm(pdev, state, 1);
+ }
+
++static int e1000e_pm_thaw(struct device *dev)
++{
++ struct net_device *netdev = dev_get_drvdata(dev);
++ struct e1000_adapter *adapter = netdev_priv(netdev);
++ int rc = 0;
++
++ e1000e_set_interrupt_capability(adapter);
++
++ rtnl_lock();
++ if (netif_running(netdev)) {
++ rc = e1000_request_irq(adapter);
++ if (rc)
++ goto err_irq;
++
++ e1000e_up(adapter);
++ }
++
++ netif_device_attach(netdev);
++err_irq:
++ rtnl_unlock();
++
++ return rc;
++}
++
+ #ifdef CONFIG_PM
+ static int __e1000_resume(struct pci_dev *pdev)
+ {
+@@ -6638,26 +6668,6 @@ static int __e1000_resume(struct pci_dev
+ }
+
+ #ifdef CONFIG_PM_SLEEP
+-static int e1000e_pm_thaw(struct device *dev)
+-{
+- struct net_device *netdev = dev_get_drvdata(dev);
+- struct e1000_adapter *adapter = netdev_priv(netdev);
+-
+- e1000e_set_interrupt_capability(adapter);
+- if (netif_running(netdev)) {
+- u32 err = e1000_request_irq(adapter);
+-
+- if (err)
+- return err;
+-
+- e1000e_up(adapter);
+- }
+-
+- netif_device_attach(netdev);
+-
+- return 0;
+-}
+-
+ static int e1000e_pm_suspend(struct device *dev)
+ {
+ struct pci_dev *pdev = to_pci_dev(dev);
+@@ -6829,16 +6839,11 @@ static void e1000_netpoll(struct net_dev
+ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
+ pci_channel_state_t state)
+ {
+- struct net_device *netdev = pci_get_drvdata(pdev);
+- struct e1000_adapter *adapter = netdev_priv(netdev);
+-
+- netif_device_detach(netdev);
++ e1000e_pm_freeze(&pdev->dev);
+
+ if (state == pci_channel_io_perm_failure)
+ return PCI_ERS_RESULT_DISCONNECT;
+
+- if (netif_running(netdev))
+- e1000e_down(adapter, true);
+ pci_disable_device(pdev);
+
+ /* Request a slot slot reset. */
+@@ -6904,10 +6909,7 @@ static void e1000_io_resume(struct pci_d
+
+ e1000_init_manageability_pt(adapter);
+
+- if (netif_running(netdev))
+- e1000e_up(adapter);
+-
+- netif_device_attach(netdev);
++ e1000e_pm_thaw(&pdev->dev);
+
+ /* If the controller has AMT, do not set DRV_LOAD until the interface
+ * is up. For all other cases, let the f/w know that the h/w is now
ecryptfs-fix-a-memory-leak-bug-in-parse_tag_1_packet.patch
ecryptfs-fix-a-memory-leak-bug-in-ecryptfs_init_messaging.patch
btrfs-handle-logged-extent-failure-properly.patch
+thunderbolt-prevent-crash-if-non-active-nvmem-file-is-read.patch
+usb-misc-iowarrior-add-support-for-2-oemed-devices.patch
+usb-misc-iowarrior-add-support-for-the-28-and-28l-devices.patch
+usb-misc-iowarrior-add-support-for-the-100-device.patch
+e1000e-use-rtnl_lock-to-prevent-race-conditions-between-net-and-pci-pm.patch
--- /dev/null
+From 03cd45d2e219301880cabc357e3cf478a500080f Mon Sep 17 00:00:00 2001
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+Date: Thu, 13 Feb 2020 12:56:04 +0300
+Subject: thunderbolt: Prevent crash if non-active NVMem file is read
+
+From: Mika Westerberg <mika.westerberg@linux.intel.com>
+
+commit 03cd45d2e219301880cabc357e3cf478a500080f upstream.
+
+The driver does not populate .reg_read callback for the non-active NVMem
+because the file is supposed to be write-only. However, it turns out
+NVMem subsystem does not yet support this and expects that the .reg_read
+callback is provided. If user reads the binary attribute it triggers
+NULL pointer dereference like this one:
+
+ BUG: kernel NULL pointer dereference, address: 0000000000000000
+ ...
+ Call Trace:
+ bin_attr_nvmem_read+0x64/0x80
+ kernfs_fop_read+0xa7/0x180
+ vfs_read+0xbd/0x170
+ ksys_read+0x5a/0xd0
+ do_syscall_64+0x43/0x150
+ entry_SYSCALL_64_after_hwframe+0x44/0xa9
+
+Fix this in the driver by providing .reg_read callback that always
+returns an error.
+
+Reported-by: Nicholas Johnson <nicholas.johnson-opensource@outlook.com.au>
+Fixes: e6b245ccd524 ("thunderbolt: Add support for host and device NVM firmware upgrade")
+Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/20200213095604.1074-1-mika.westerberg@linux.intel.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/thunderbolt/switch.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/thunderbolt/switch.c
++++ b/drivers/thunderbolt/switch.c
+@@ -274,6 +274,12 @@ out:
+ return ret;
+ }
+
++static int tb_switch_nvm_no_read(void *priv, unsigned int offset, void *val,
++ size_t bytes)
++{
++ return -EPERM;
++}
++
+ static int tb_switch_nvm_write(void *priv, unsigned int offset, void *val,
+ size_t bytes)
+ {
+@@ -319,6 +325,7 @@ static struct nvmem_device *register_nvm
+ config.read_only = true;
+ } else {
+ config.name = "nvm_non_active";
++ config.reg_read = tb_switch_nvm_no_read;
+ config.reg_write = tb_switch_nvm_write;
+ config.root_only = true;
+ }
--- /dev/null
+From 461d8deb26a7d70254bc0391feb4fd8a95e674e8 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Tue, 11 Feb 2020 20:04:21 -0800
+Subject: USB: misc: iowarrior: add support for 2 OEMed devices
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+commit 461d8deb26a7d70254bc0391feb4fd8a95e674e8 upstream.
+
+Add support for two OEM devices that are identical to existing
+IO-Warrior devices, except for the USB device id.
+
+Cc: Christoph Jung <jung@codemercs.com>
+Cc: stable <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/20200212040422.2991-1-gregkh@linuxfoundation.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/misc/iowarrior.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/misc/iowarrior.c
++++ b/drivers/usb/misc/iowarrior.c
+@@ -34,6 +34,10 @@
+ /* full speed iowarrior */
+ #define USB_DEVICE_ID_CODEMERCS_IOW56 0x1503
+
++/* OEMed devices */
++#define USB_DEVICE_ID_CODEMERCS_IOW24SAG 0x158a
++#define USB_DEVICE_ID_CODEMERCS_IOW56AM 0x158b
++
+ /* Get a minor range for your devices from the usb maintainer */
+ #ifdef CONFIG_USB_DYNAMIC_MINORS
+ #define IOWARRIOR_MINOR_BASE 0
+@@ -133,6 +137,8 @@ static const struct usb_device_id iowarr
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOWPV1)},
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOWPV2)},
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW56)},
++ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW24SAG)},
++ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW56AM)},
+ {} /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, iowarrior_ids);
+@@ -357,6 +363,7 @@ static ssize_t iowarrior_write(struct fi
+ }
+ switch (dev->product_id) {
+ case USB_DEVICE_ID_CODEMERCS_IOW24:
++ case USB_DEVICE_ID_CODEMERCS_IOW24SAG:
+ case USB_DEVICE_ID_CODEMERCS_IOWPV1:
+ case USB_DEVICE_ID_CODEMERCS_IOWPV2:
+ case USB_DEVICE_ID_CODEMERCS_IOW40:
+@@ -371,6 +378,7 @@ static ssize_t iowarrior_write(struct fi
+ goto exit;
+ break;
+ case USB_DEVICE_ID_CODEMERCS_IOW56:
++ case USB_DEVICE_ID_CODEMERCS_IOW56AM:
+ /* The IOW56 uses asynchronous IO and more urbs */
+ if (atomic_read(&dev->write_busy) == MAX_WRITES_IN_FLIGHT) {
+ /* Wait until we are below the limit for submitted urbs */
+@@ -493,6 +501,7 @@ static long iowarrior_ioctl(struct file
+ switch (cmd) {
+ case IOW_WRITE:
+ if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW24 ||
++ dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW24SAG ||
+ dev->product_id == USB_DEVICE_ID_CODEMERCS_IOWPV1 ||
+ dev->product_id == USB_DEVICE_ID_CODEMERCS_IOWPV2 ||
+ dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW40) {
+@@ -767,7 +776,8 @@ static int iowarrior_probe(struct usb_in
+ goto error;
+ }
+
+- if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) {
++ if ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM)) {
+ res = usb_find_last_int_out_endpoint(iface_desc,
+ &dev->int_out_endpoint);
+ if (res) {
+@@ -780,7 +790,8 @@ static int iowarrior_probe(struct usb_in
+ /* we have to check the report_size often, so remember it in the endianness suitable for our machine */
+ dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
+ if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) &&
+- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56))
++ ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM)))
+ /* IOWarrior56 has wMaxPacketSize different from report size */
+ dev->report_size = 7;
+
--- /dev/null
+From bab5417f5f0118ce914bc5b2f8381e959e891155 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Fri, 14 Feb 2020 08:11:48 -0800
+Subject: USB: misc: iowarrior: add support for the 100 device
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+commit bab5417f5f0118ce914bc5b2f8381e959e891155 upstream.
+
+Add a new device id for the 100 devie. It has 4 interfaces like the 28
+and 28L devices but a larger endpoint so more I/O pins.
+
+Cc: Christoph Jung <jung@codemercs.com>
+Cc: stable <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/20200214161148.GA3963518@kroah.com
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/misc/iowarrior.c | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/misc/iowarrior.c
++++ b/drivers/usb/misc/iowarrior.c
+@@ -36,6 +36,7 @@
+ /* fuller speed iowarrior */
+ #define USB_DEVICE_ID_CODEMERCS_IOW28 0x1504
+ #define USB_DEVICE_ID_CODEMERCS_IOW28L 0x1505
++#define USB_DEVICE_ID_CODEMERCS_IOW100 0x1506
+
+ /* OEMed devices */
+ #define USB_DEVICE_ID_CODEMERCS_IOW24SAG 0x158a
+@@ -144,6 +145,7 @@ static const struct usb_device_id iowarr
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW56AM)},
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW28)},
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW28L)},
++ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW100)},
+ {} /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, iowarrior_ids);
+@@ -386,6 +388,7 @@ static ssize_t iowarrior_write(struct fi
+ case USB_DEVICE_ID_CODEMERCS_IOW56AM:
+ case USB_DEVICE_ID_CODEMERCS_IOW28:
+ case USB_DEVICE_ID_CODEMERCS_IOW28L:
++ case USB_DEVICE_ID_CODEMERCS_IOW100:
+ /* The IOW56 uses asynchronous IO and more urbs */
+ if (atomic_read(&dev->write_busy) == MAX_WRITES_IN_FLIGHT) {
+ /* Wait until we are below the limit for submitted urbs */
+@@ -786,7 +789,8 @@ static int iowarrior_probe(struct usb_in
+ if ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
+ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
+ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
+- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L)) {
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW100)) {
+ res = usb_find_last_int_out_endpoint(iface_desc,
+ &dev->int_out_endpoint);
+ if (res) {
+@@ -802,7 +806,8 @@ static int iowarrior_probe(struct usb_in
+ ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
+ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
+ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
+- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L)))
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW100)))
+ /* IOWarrior56 has wMaxPacketSize different from report size */
+ dev->report_size = 7;
+
--- /dev/null
+From 5f6f8da2d7b5a431d3f391d0d73ace8edfb42af7 Mon Sep 17 00:00:00 2001
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Date: Tue, 11 Feb 2020 20:04:22 -0800
+Subject: USB: misc: iowarrior: add support for the 28 and 28L devices
+
+From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+commit 5f6f8da2d7b5a431d3f391d0d73ace8edfb42af7 upstream.
+
+Add new device ids for the 28 and 28L devices. These have 4 interfaces
+instead of 2, but the driver binds the same, so the driver changes are
+minimal.
+
+Cc: Christoph Jung <jung@codemercs.com>
+Cc: stable <stable@vger.kernel.org>
+Link: https://lore.kernel.org/r/20200212040422.2991-2-gregkh@linuxfoundation.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/usb/misc/iowarrior.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/usb/misc/iowarrior.c
++++ b/drivers/usb/misc/iowarrior.c
+@@ -33,6 +33,9 @@
+ #define USB_DEVICE_ID_CODEMERCS_IOWPV2 0x1512
+ /* full speed iowarrior */
+ #define USB_DEVICE_ID_CODEMERCS_IOW56 0x1503
++/* fuller speed iowarrior */
++#define USB_DEVICE_ID_CODEMERCS_IOW28 0x1504
++#define USB_DEVICE_ID_CODEMERCS_IOW28L 0x1505
+
+ /* OEMed devices */
+ #define USB_DEVICE_ID_CODEMERCS_IOW24SAG 0x158a
+@@ -139,6 +142,8 @@ static const struct usb_device_id iowarr
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW56)},
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW24SAG)},
+ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW56AM)},
++ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW28)},
++ {USB_DEVICE(USB_VENDOR_ID_CODEMERCS, USB_DEVICE_ID_CODEMERCS_IOW28L)},
+ {} /* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, iowarrior_ids);
+@@ -379,6 +384,8 @@ static ssize_t iowarrior_write(struct fi
+ break;
+ case USB_DEVICE_ID_CODEMERCS_IOW56:
+ case USB_DEVICE_ID_CODEMERCS_IOW56AM:
++ case USB_DEVICE_ID_CODEMERCS_IOW28:
++ case USB_DEVICE_ID_CODEMERCS_IOW28L:
+ /* The IOW56 uses asynchronous IO and more urbs */
+ if (atomic_read(&dev->write_busy) == MAX_WRITES_IN_FLIGHT) {
+ /* Wait until we are below the limit for submitted urbs */
+@@ -777,7 +784,9 @@ static int iowarrior_probe(struct usb_in
+ }
+
+ if ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
+- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM)) {
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L)) {
+ res = usb_find_last_int_out_endpoint(iface_desc,
+ &dev->int_out_endpoint);
+ if (res) {
+@@ -791,7 +800,9 @@ static int iowarrior_probe(struct usb_in
+ dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
+ if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) &&
+ ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
+- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM)))
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
++ (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L)))
+ /* IOWarrior56 has wMaxPacketSize different from report size */
+ dev->report_size = 7;
+