ALSA: usb-audio: extend KEF X300A FU 10 tweak to Arcam rPAC
authorJiri Jaburek <jjaburek@redhat.com>
Thu, 18 Dec 2014 01:03:19 +0000 (02:03 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 16 Jan 2015 14:59:01 +0000 (06:59 -0800)
commit d70a1b9893f820fdbcdffac408c909c50f2e6b43 upstream.

The Arcam rPAC seems to have the same problem - whenever anything
(alsamixer, udevd, 3.9+ kernel from 60af3d037eb8c, ..) attempts to
access mixer / control interface of the card, the firmware "locks up"
the entire device, resulting in
  SNDRV_PCM_IOCTL_HW_PARAMS failed (-5): Input/output error
from alsa-lib.

Other operating systems can somehow read the mixer (there seems to be
playback volume/mute), but any manipulation is ignored by the device
(which has hardware volume controls).

Signed-off-by: Jiri Jaburek <jjaburek@redhat.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
sound/usb/mixer_maps.c

index 0339d464791a27f4a7c5f9b2b9a835be62726082..4df31b0f94a3731b0c1ccb40ba81d6b5c52c732a 100644 (file)
@@ -322,8 +322,11 @@ static struct usbmix_name_map hercules_usb51_map[] = {
        { 0 }                           /* terminator */
 };
 
-static const struct usbmix_name_map kef_x300a_map[] = {
-       { 10, NULL }, /* firmware locks up (?) when we try to access this FU */
+/* some (all?) SCMS USB3318 devices are affected by a firmware lock up
+ * when anything attempts to access FU 10 (control)
+ */
+static const struct usbmix_name_map scms_usb3318_map[] = {
+       { 10, NULL },
        { 0 }
 };
 
@@ -415,8 +418,14 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
                .map = ebox44_map,
        },
        {
+               /* KEF X300A */
                .id = USB_ID(0x27ac, 0x1000),
-               .map = kef_x300a_map,
+               .map = scms_usb3318_map,
+       },
+       {
+               /* Arcam rPAC */
+               .id = USB_ID(0x25c4, 0x0003),
+               .map = scms_usb3318_map,
        },
        { 0 } /* terminator */
 };