ALSA: usb-audio: work around KEF X300A firmware bug
diff mbox

Message ID 5300E31E.9070600@ladisch.de
State Accepted
Delegated to: Takashi Iwai
Headers show

Commit Message

Clemens Ladisch Feb. 16, 2014, 4:11 p.m. UTC
When the driver tries to access Function Unit 10, the KEF X300A
speakers' firmware apparently locks up, making even PCM streaming
impossible.  Work around this by ignoring this FU.

Cc: <stable@vger.kernel.org>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
---
 sound/usb/mixer_maps.c |    9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Takashi Iwai Feb. 17, 2014, 9:12 a.m. UTC | #1
At Sun, 16 Feb 2014 17:11:10 +0100,
Clemens Ladisch wrote:
> 
> When the driver tries to access Function Unit 10, the KEF X300A
> speakers' firmware apparently locks up, making even PCM streaming
> impossible.  Work around this by ignoring this FU.
> 
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Clemens Ladisch <clemens@ladisch.de>

Thanks, applied.


Takashi

> ---
>  sound/usb/mixer_maps.c |    9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
> index 32af6b7..d1d72ff 100644
> --- a/sound/usb/mixer_maps.c
> +++ b/sound/usb/mixer_maps.c
> @@ -328,6 +328,11 @@ static struct usbmix_name_map gamecom780_map[] = {
>  	{}
>  };
> 
> +static const struct usbmix_name_map kef_x300a_map[] = {
> +	{ 10, NULL }, /* firmware locks up (?) when we try to access this FU */
> +	{ 0 }
> +};
> +
>  /*
>   * Control map entries
>   */
> @@ -419,6 +424,10 @@ static struct usbmix_ctl_map usbmix_ctl_maps[] = {
>  		.id = USB_ID(0x200c, 0x1018),
>  		.map = ebox44_map,
>  	},
> +	{
> +		.id = USB_ID(0x27ac, 0x1000),
> +		.map = kef_x300a_map,
> +	},
>  	{ 0 } /* terminator */
>  };
>

Patch
diff mbox

diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
index 32af6b7..d1d72ff 100644
--- a/sound/usb/mixer_maps.c
+++ b/sound/usb/mixer_maps.c
@@ -328,6 +328,11 @@  static struct usbmix_name_map gamecom780_map[] = {
 	{}
 };

+static const struct usbmix_name_map kef_x300a_map[] = {
+	{ 10, NULL }, /* firmware locks up (?) when we try to access this FU */
+	{ 0 }
+};
+
 /*
  * Control map entries
  */
@@ -419,6 +424,10 @@  static struct usbmix_ctl_map usbmix_ctl_maps[] = {
 		.id = USB_ID(0x200c, 0x1018),
 		.map = ebox44_map,
 	},
+	{
+		.id = USB_ID(0x27ac, 0x1000),
+		.map = kef_x300a_map,
+	},
 	{ 0 } /* terminator */
 };