commit:     3b4e7ee3ecafc67a33779255317083543e571448
Author:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
AuthorDate: Sat Nov  6 13:36:36 2021 +0000
Commit:     Mike Pagano <mpagano <AT> gentoo <DOT> org>
CommitDate: Sat Nov  6 13:36:36 2021 +0000
URL:        https://gitweb.gentoo.org/proj/linux-patches.git/commit/?id=3b4e7ee3

Linux patch 5.10.78

Signed-off-by: Mike Pagano <mpagano <AT> gentoo.org>

 0000_README              |   4 +
 1077_linux-5.10.78.patch | 465 +++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 469 insertions(+)

diff --git a/0000_README b/0000_README
index 40e234a..cb41873 100644
--- a/0000_README
+++ b/0000_README
@@ -351,6 +351,10 @@ Patch:  1076_linux-5.10.77.patch
 From:   http://www.kernel.org
 Desc:   Linux 5.10.77
 
+Patch:  1077_linux-5.10.78.patch
+From:   http://www.kernel.org
+Desc:   Linux 5.10.78
+
 Patch:  1500_XATTR_USER_PREFIX.patch
 From:   https://bugs.gentoo.org/show_bug.cgi?id=470644
 Desc:   Support for namespace user.pax.* on tmpfs.

diff --git a/1077_linux-5.10.78.patch b/1077_linux-5.10.78.patch
new file mode 100644
index 0000000..77ec5e8
--- /dev/null
+++ b/1077_linux-5.10.78.patch
@@ -0,0 +1,465 @@
+diff --git a/Makefile b/Makefile
+index a58f49e415dc6..288fb48392538 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,7 +1,7 @@
+ # SPDX-License-Identifier: GPL-2.0
+ VERSION = 5
+ PATCHLEVEL = 10
+-SUBLEVEL = 77
++SUBLEVEL = 78
+ EXTRAVERSION =
+ NAME = Dare mighty things
+ 
+diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
+index b5f5ca4e3f343..8f4ae6e967e39 100644
+--- a/drivers/amba/bus.c
++++ b/drivers/amba/bus.c
+@@ -375,9 +375,6 @@ static int amba_device_try_add(struct amba_device *dev, 
struct resource *parent)
+       void __iomem *tmp;
+       int i, ret;
+ 
+-      WARN_ON(dev->irq[0] == (unsigned int)-1);
+-      WARN_ON(dev->irq[1] == (unsigned int)-1);
+-
+       ret = request_resource(parent, &dev->res);
+       if (ret)
+               goto err_out;
+diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
b/drivers/gpu/drm/ttm/ttm_bo_util.c
+index 8fba425a76268..fb2a25f8408fc 100644
+--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
++++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
+@@ -322,7 +322,6 @@ static void ttm_transfered_destroy(struct 
ttm_buffer_object *bo)
+       struct ttm_transfer_obj *fbo;
+ 
+       fbo = container_of(bo, struct ttm_transfer_obj, base);
+-      dma_resv_fini(&fbo->base.base._resv);
+       ttm_bo_put(fbo->bo);
+       kfree(fbo);
+ }
+diff --git a/drivers/media/firewire/firedtv-avc.c 
b/drivers/media/firewire/firedtv-avc.c
+index 2bf9467b917d1..71991f8638e6b 100644
+--- a/drivers/media/firewire/firedtv-avc.c
++++ b/drivers/media/firewire/firedtv-avc.c
+@@ -1165,7 +1165,11 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int 
length)
+               read_pos += program_info_length;
+               write_pos += program_info_length;
+       }
+-      while (read_pos < length) {
++      while (read_pos + 4 < length) {
++              if (write_pos + 4 >= sizeof(c->operand) - 4) {
++                      ret = -EINVAL;
++                      goto out;
++              }
+               c->operand[write_pos++] = msg[read_pos++];
+               c->operand[write_pos++] = msg[read_pos++];
+               c->operand[write_pos++] = msg[read_pos++];
+@@ -1177,13 +1181,17 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int 
length)
+               c->operand[write_pos++] = es_info_length >> 8;
+               c->operand[write_pos++] = es_info_length & 0xff;
+               if (es_info_length > 0) {
++                      if (read_pos >= length) {
++                              ret = -EINVAL;
++                              goto out;
++                      }
+                       pmt_cmd_id = msg[read_pos++];
+                       if (pmt_cmd_id != 1 && pmt_cmd_id != 4)
+                               dev_err(fdtv->device, "invalid pmt_cmd_id %d at 
stream level\n",
+                                       pmt_cmd_id);
+ 
+-                      if (es_info_length > sizeof(c->operand) - 4 -
+-                                           write_pos) {
++                      if (es_info_length > sizeof(c->operand) - 4 - write_pos 
||
++                          es_info_length > length - read_pos) {
+                               ret = -EINVAL;
+                               goto out;
+                       }
+diff --git a/drivers/media/firewire/firedtv-ci.c 
b/drivers/media/firewire/firedtv-ci.c
+index 9363d005e2b61..e0d57e09dab0c 100644
+--- a/drivers/media/firewire/firedtv-ci.c
++++ b/drivers/media/firewire/firedtv-ci.c
+@@ -134,6 +134,8 @@ static int fdtv_ca_pmt(struct firedtv *fdtv, void *arg)
+       } else {
+               data_length = msg->msg[3];
+       }
++      if (data_length > sizeof(msg->msg) - data_pos)
++              return -EINVAL;
+ 
+       return avc_ca_pmt(fdtv, &msg->msg[data_pos], data_length);
+ }
+diff --git a/drivers/net/ethernet/microchip/lan743x_main.c 
b/drivers/net/ethernet/microchip/lan743x_main.c
+index e14dfaafe4391..3eea8cf076c48 100644
+--- a/drivers/net/ethernet/microchip/lan743x_main.c
++++ b/drivers/net/ethernet/microchip/lan743x_main.c
+@@ -1963,13 +1963,13 @@ static int lan743x_rx_next_index(struct lan743x_rx 
*rx, int index)
+       return ((++index) % rx->ring_size);
+ }
+ 
+-static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx)
++static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx, gfp_t 
gfp)
+ {
+       int length = 0;
+ 
+       length = (LAN743X_MAX_FRAME_SIZE + ETH_HLEN + 4 + RX_HEAD_PADDING);
+       return __netdev_alloc_skb(rx->adapter->netdev,
+-                                length, GFP_ATOMIC | GFP_DMA);
++                                length, gfp);
+ }
+ 
+ static void lan743x_rx_update_tail(struct lan743x_rx *rx, int index)
+@@ -2141,7 +2141,8 @@ static int lan743x_rx_process_packet(struct lan743x_rx 
*rx)
+                       struct sk_buff *new_skb = NULL;
+                       int packet_length;
+ 
+-                      new_skb = lan743x_rx_allocate_skb(rx);
++                      new_skb = lan743x_rx_allocate_skb(rx,
++                                                        GFP_ATOMIC | GFP_DMA);
+                       if (!new_skb) {
+                               /* failed to allocate next skb.
+                                * Memory is very low.
+@@ -2377,7 +2378,8 @@ static int lan743x_rx_ring_init(struct lan743x_rx *rx)
+ 
+       rx->last_head = 0;
+       for (index = 0; index < rx->ring_size; index++) {
+-              struct sk_buff *new_skb = lan743x_rx_allocate_skb(rx);
++              struct sk_buff *new_skb = lan743x_rx_allocate_skb(rx,
++                                                                 GFP_KERNEL);
+ 
+               ret = lan743x_rx_init_ring_element(rx, index, new_skb);
+               if (ret)
+diff --git a/drivers/net/ethernet/sfc/ethtool_common.c 
b/drivers/net/ethernet/sfc/ethtool_common.c
+index bf1443539a1a4..bd552c7dffcb1 100644
+--- a/drivers/net/ethernet/sfc/ethtool_common.c
++++ b/drivers/net/ethernet/sfc/ethtool_common.c
+@@ -563,20 +563,14 @@ int efx_ethtool_get_link_ksettings(struct net_device 
*net_dev,
+ {
+       struct efx_nic *efx = netdev_priv(net_dev);
+       struct efx_link_state *link_state = &efx->link_state;
+-      u32 supported;
+ 
+       mutex_lock(&efx->mac_lock);
+       efx_mcdi_phy_get_link_ksettings(efx, cmd);
+       mutex_unlock(&efx->mac_lock);
+ 
+       /* Both MACs support pause frames (bidirectional and respond-only) */
+-      ethtool_convert_link_mode_to_legacy_u32(&supported,
+-                                              cmd->link_modes.supported);
+-
+-      supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
+-
+-      ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
+-                                              supported);
++      ethtool_link_ksettings_add_link_mode(cmd, supported, Pause);
++      ethtool_link_ksettings_add_link_mode(cmd, supported, Asym_Pause);
+ 
+       if (LOOPBACK_INTERNAL(efx)) {
+               cmd->base.speed = link_state->speed;
+diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
+index d406da82b4fb8..2746f77745e4d 100644
+--- a/drivers/net/vrf.c
++++ b/drivers/net/vrf.c
+@@ -1313,8 +1313,6 @@ static struct sk_buff *vrf_ip6_rcv(struct net_device 
*vrf_dev,
+       bool need_strict = rt6_need_strict(&ipv6_hdr(skb)->daddr);
+       bool is_ndisc = ipv6_ndisc_frame(skb);
+ 
+-      nf_reset_ct(skb);
+-
+       /* loopback, multicast & non-ND link-local traffic; do not push through
+        * packet taps again. Reset pkt_type for upper layers to process skb.
+        * For strict packets with a source LLA, determine the dst using the
+@@ -1371,8 +1369,6 @@ static struct sk_buff *vrf_ip_rcv(struct net_device 
*vrf_dev,
+       skb->skb_iif = vrf_dev->ifindex;
+       IPCB(skb)->flags |= IPSKB_L3SLAVE;
+ 
+-      nf_reset_ct(skb);
+-
+       if (ipv4_is_multicast(ip_hdr(skb)->daddr))
+               goto out;
+ 
+diff --git a/drivers/net/wireless/ath/wcn36xx/main.c 
b/drivers/net/wireless/ath/wcn36xx/main.c
+index 6bed619535427..43be20baab354 100644
+--- a/drivers/net/wireless/ath/wcn36xx/main.c
++++ b/drivers/net/wireless/ath/wcn36xx/main.c
+@@ -601,15 +601,6 @@ static int wcn36xx_set_key(struct ieee80211_hw *hw, enum 
set_key_cmd cmd,
+                               }
+                       }
+               }
+-              /* FIXME: Only enable bmps support when encryption is enabled.
+-               * For any reasons, when connected to open/no-security BSS,
+-               * the wcn36xx controller in bmps mode does not forward
+-               * 'wake-up' beacons despite AP sends DTIM with station AID.
+-               * It could be due to a firmware issue or to the way driver
+-               * configure the station.
+-               */
+-              if (vif->type == NL80211_IFTYPE_STATION)
+-                      vif_priv->allow_bmps = true;
+               break;
+       case DISABLE_KEY:
+               if (!(IEEE80211_KEY_FLAG_PAIRWISE & key_conf->flags)) {
+@@ -909,7 +900,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw 
*hw,
+                                   vif->addr,
+                                   bss_conf->aid);
+                       vif_priv->sta_assoc = false;
+-                      vif_priv->allow_bmps = false;
+                       wcn36xx_smd_set_link_st(wcn,
+                                               bss_conf->bssid,
+                                               vif->addr,
+diff --git a/drivers/net/wireless/ath/wcn36xx/pmc.c 
b/drivers/net/wireless/ath/wcn36xx/pmc.c
+index 2d0780fefd477..2936aaf532738 100644
+--- a/drivers/net/wireless/ath/wcn36xx/pmc.c
++++ b/drivers/net/wireless/ath/wcn36xx/pmc.c
+@@ -23,10 +23,7 @@ int wcn36xx_pmc_enter_bmps_state(struct wcn36xx *wcn,
+ {
+       int ret = 0;
+       struct wcn36xx_vif *vif_priv = wcn36xx_vif_to_priv(vif);
+-
+-      if (!vif_priv->allow_bmps)
+-              return -ENOTSUPP;
+-
++      /* TODO: Make sure the TX chain clean */
+       ret = wcn36xx_smd_enter_bmps(wcn, vif);
+       if (!ret) {
+               wcn36xx_dbg(WCN36XX_DBG_PMC, "Entered BMPS\n");
+diff --git a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h 
b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+index d0fcce86903ae..9b4dee2fc6483 100644
+--- a/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
++++ b/drivers/net/wireless/ath/wcn36xx/wcn36xx.h
+@@ -127,7 +127,6 @@ struct wcn36xx_vif {
+       enum wcn36xx_hal_bss_type bss_type;
+ 
+       /* Power management */
+-      bool allow_bmps;
+       enum wcn36xx_power_state pw_state;
+ 
+       u8 bss_index;
+diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
+index 24619c3bebd52..6ad834d61d4c7 100644
+--- a/drivers/scsi/scsi.c
++++ b/drivers/scsi/scsi.c
+@@ -545,8 +545,10 @@ EXPORT_SYMBOL(scsi_device_get);
+  */
+ void scsi_device_put(struct scsi_device *sdev)
+ {
+-      module_put(sdev->host->hostt->module);
++      struct module *mod = sdev->host->hostt->module;
++
+       put_device(&sdev->sdev_gendev);
++      module_put(mod);
+ }
+ EXPORT_SYMBOL(scsi_device_put);
+ 
+diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
+index 8173b67ec7b0f..1378bb1a7371c 100644
+--- a/drivers/scsi/scsi_sysfs.c
++++ b/drivers/scsi/scsi_sysfs.c
+@@ -450,9 +450,12 @@ static void scsi_device_dev_release_usercontext(struct 
work_struct *work)
+       struct scsi_vpd *vpd_pg80 = NULL, *vpd_pg83 = NULL;
+       struct scsi_vpd *vpd_pg0 = NULL, *vpd_pg89 = NULL;
+       unsigned long flags;
++      struct module *mod;
+ 
+       sdev = container_of(work, struct scsi_device, ew.work);
+ 
++      mod = sdev->host->hostt->module;
++
+       scsi_dh_release_device(sdev);
+ 
+       parent = sdev->sdev_gendev.parent;
+@@ -501,11 +504,17 @@ static void scsi_device_dev_release_usercontext(struct 
work_struct *work)
+ 
+       if (parent)
+               put_device(parent);
++      module_put(mod);
+ }
+ 
+ static void scsi_device_dev_release(struct device *dev)
+ {
+       struct scsi_device *sdp = to_scsi_device(dev);
++
++      /* Set module pointer as NULL in case of module unloading */
++      if (!try_module_get(sdp->host->hostt->module))
++              sdp->host->hostt->module = NULL;
++
+       execute_in_process_context(scsi_device_dev_release_usercontext,
+                                  &sdp->ew);
+ }
+diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
+index 4bbf3316a9a53..99908d8d2dd36 100644
+--- a/drivers/usb/core/hcd.c
++++ b/drivers/usb/core/hcd.c
+@@ -2640,7 +2640,6 @@ int usb_add_hcd(struct usb_hcd *hcd,
+ {
+       int retval;
+       struct usb_device *rhdev;
+-      struct usb_hcd *shared_hcd;
+ 
+       if (!hcd->skip_phy_initialization && usb_hcd_is_primary_hcd(hcd)) {
+               hcd->phy_roothub = usb_phy_roothub_alloc(hcd->self.sysdev);
+@@ -2797,26 +2796,13 @@ int usb_add_hcd(struct usb_hcd *hcd,
+               goto err_hcd_driver_start;
+       }
+ 
+-      /* starting here, usbcore will pay attention to the shared HCD roothub 
*/
+-      shared_hcd = hcd->shared_hcd;
+-      if (!usb_hcd_is_primary_hcd(hcd) && shared_hcd && 
HCD_DEFER_RH_REGISTER(shared_hcd)) {
+-              retval = register_root_hub(shared_hcd);
+-              if (retval != 0)
+-                      goto err_register_root_hub;
+-
+-              if (shared_hcd->uses_new_polling && HCD_POLL_RH(shared_hcd))
+-                      usb_hcd_poll_rh_status(shared_hcd);
+-      }
+-
+       /* starting here, usbcore will pay attention to this root hub */
+-      if (!HCD_DEFER_RH_REGISTER(hcd)) {
+-              retval = register_root_hub(hcd);
+-              if (retval != 0)
+-                      goto err_register_root_hub;
++      retval = register_root_hub(hcd);
++      if (retval != 0)
++              goto err_register_root_hub;
+ 
+-              if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
+-                      usb_hcd_poll_rh_status(hcd);
+-      }
++      if (hcd->uses_new_polling && HCD_POLL_RH(hcd))
++              usb_hcd_poll_rh_status(hcd);
+ 
+       return retval;
+ 
+@@ -2859,7 +2845,6 @@ EXPORT_SYMBOL_GPL(usb_add_hcd);
+ void usb_remove_hcd(struct usb_hcd *hcd)
+ {
+       struct usb_device *rhdev = hcd->self.root_hub;
+-      bool rh_registered;
+ 
+       dev_info(hcd->self.controller, "remove, state %x\n", hcd->state);
+ 
+@@ -2870,7 +2855,6 @@ void usb_remove_hcd(struct usb_hcd *hcd)
+ 
+       dev_dbg(hcd->self.controller, "roothub graceful disconnect\n");
+       spin_lock_irq (&hcd_root_hub_lock);
+-      rh_registered = hcd->rh_registered;
+       hcd->rh_registered = 0;
+       spin_unlock_irq (&hcd_root_hub_lock);
+ 
+@@ -2880,8 +2864,7 @@ void usb_remove_hcd(struct usb_hcd *hcd)
+       cancel_work_sync(&hcd->died_work);
+ 
+       mutex_lock(&usb_bus_idr_lock);
+-      if (rh_registered)
+-              usb_disconnect(&rhdev);         /* Sets rhdev to NULL */
++      usb_disconnect(&rhdev);         /* Sets rhdev to NULL */
+       mutex_unlock(&usb_bus_idr_lock);
+ 
+       /*
+diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
+index 0d6dc2e20f2aa..bf42ba3e4415a 100644
+--- a/drivers/usb/host/xhci.c
++++ b/drivers/usb/host/xhci.c
+@@ -693,7 +693,6 @@ int xhci_run(struct usb_hcd *hcd)
+               if (ret)
+                       xhci_free_command(xhci, command);
+       }
+-      set_bit(HCD_FLAG_DEFER_RH_REGISTER, &hcd->flags);
+       xhci_dbg_trace(xhci, trace_xhci_dbg_init,
+                       "Finished xhci_run for USB2 roothub");
+ 
+diff --git a/fs/io_uring.c b/fs/io_uring.c
+index ee7ceea899346..104dff9c71314 100644
+--- a/fs/io_uring.c
++++ b/fs/io_uring.c
+@@ -8759,9 +8759,10 @@ static void io_uring_cancel_task_requests(struct 
io_ring_ctx *ctx,
+       io_cancel_defer_files(ctx, task, files);
+       io_cqring_overflow_flush(ctx, true, task, files);
+ 
+-      io_uring_cancel_files(ctx, task, files);
+       if (!files)
+               __io_uring_cancel_task_requests(ctx, task);
++      else
++              io_uring_cancel_files(ctx, task, files);
+ 
+       if ((ctx->flags & IORING_SETUP_SQPOLL) && ctx->sq_data) {
+               atomic_dec(&task->io_uring->in_idle);
+diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
+index 9f05016d823f8..3dbb42c637c14 100644
+--- a/include/linux/usb/hcd.h
++++ b/include/linux/usb/hcd.h
+@@ -124,7 +124,6 @@ struct usb_hcd {
+ #define HCD_FLAG_RH_RUNNING           5       /* root hub is running? */
+ #define HCD_FLAG_DEAD                 6       /* controller has died? */
+ #define HCD_FLAG_INTF_AUTHORIZED      7       /* authorize interfaces? */
+-#define HCD_FLAG_DEFER_RH_REGISTER    8       /* Defer roothub registration */
+ 
+       /* The flags can be tested using these macros; they are likely to
+        * be slightly faster than test_bit().
+@@ -135,7 +134,6 @@ struct usb_hcd {
+ #define HCD_WAKEUP_PENDING(hcd)       ((hcd)->flags & (1U << 
HCD_FLAG_WAKEUP_PENDING))
+ #define HCD_RH_RUNNING(hcd)   ((hcd)->flags & (1U << HCD_FLAG_RH_RUNNING))
+ #define HCD_DEAD(hcd)         ((hcd)->flags & (1U << HCD_FLAG_DEAD))
+-#define HCD_DEFER_RH_REGISTER(hcd) ((hcd)->flags & (1U << 
HCD_FLAG_DEFER_RH_REGISTER))
+ 
+       /*
+        * Specifies if interfaces are authorized by default
+diff --git a/mm/khugepaged.c b/mm/khugepaged.c
+index ff389d970b683..969e57dde65f9 100644
+--- a/mm/khugepaged.c
++++ b/mm/khugepaged.c
+@@ -443,21 +443,24 @@ static bool hugepage_vma_check(struct vm_area_struct 
*vma,
+       if (!transhuge_vma_enabled(vma, vm_flags))
+               return false;
+ 
++      if (vma->vm_file && !IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) -
++                              vma->vm_pgoff, HPAGE_PMD_NR))
++              return false;
++
+       /* Enabled via shmem mount options or sysfs settings. */
+-      if (shmem_file(vma->vm_file) && shmem_huge_enabled(vma)) {
+-              return IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) - vma->vm_pgoff,
+-                              HPAGE_PMD_NR);
+-      }
++      if (shmem_file(vma->vm_file))
++              return shmem_huge_enabled(vma);
+ 
+       /* THP settings require madvise. */
+       if (!(vm_flags & VM_HUGEPAGE) && !khugepaged_always())
+               return false;
+ 
+-      /* Read-only file mappings need to be aligned for THP to work. */
++      /* Only regular file is valid */
+       if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && vma->vm_file &&
+           (vm_flags & VM_DENYWRITE)) {
+-              return IS_ALIGNED((vma->vm_start >> PAGE_SHIFT) - vma->vm_pgoff,
+-                              HPAGE_PMD_NR);
++              struct inode *inode = vma->vm_file->f_inode;
++
++              return S_ISREG(inode->i_mode);
+       }
+ 
+       if (!vma->anon_vma || vma->vm_ops)
+diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
+index c5794e83fd800..8f6823df944ff 100644
+--- a/sound/usb/mixer_maps.c
++++ b/sound/usb/mixer_maps.c
+@@ -528,6 +528,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
+               .id = USB_ID(0x2573, 0x0008),
+               .map = maya44_map,
+       },
++      {
++              .id = USB_ID(0x2708, 0x0002), /* Audient iD14 */
++              .ignore_ctl_error = 1,
++      },
+       {
+               /* KEF X300A */
+               .id = USB_ID(0x27ac, 0x1000),
+@@ -538,6 +542,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
+               .id = USB_ID(0x25c4, 0x0003),
+               .map = scms_usb3318_map,
+       },
++      {
++              .id = USB_ID(0x30be, 0x0101), /*  Schiit Hel */
++              .ignore_ctl_error = 1,
++      },
+       {
+               /* Bose Companion 5 */
+               .id = USB_ID(0x05a7, 0x1020),

Reply via email to