aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbmixer.c
diff options
context:
space:
mode:
authorPhillip Michael Jordan <phil@philjordan.eu>2008-08-05 05:01:00 -0400
committerJaroslav Kysela <perex@perex.cz>2008-08-06 09:40:19 -0400
commitb9c196e1452e1d4cbf0a1499f1e9c1b3edf59320 (patch)
tree050a0ba9c57a02723e900c26327e8d587da0c064 /sound/usb/usbmixer.c
parent0e0e16a87a0b973702feb572c2552d82e1aec5b9 (diff)
ALSA: snd_usb_audio: fix SB Extigy IR Remote regression
The support for the SB Extigy's remote seems to be broken in all recent ALSA versions, including 1.0.17. The driver detects the event correctly, then submits a URB to query the RC code. On the Extigy, the URB is submitted with a length of 2 bytes. My hardware, however, only replies with 1 byte, containing the correct RC button code. The current implementation discards this as being too short. (line 1784 of usbmixer.c) This patch specifies a "minimum packet length" in the remote control configuration. I've left the values for the Audigy 2/Live! the same as the packet length, as I'm assuming the existing code works with them. (I don't have the hardware to confirm) This fixes the Extigy RC support, e.g. for use with Lirc. Signed-off-by: Phillip Michael Jordan <phil@philjordan.eu> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Diffstat (limited to 'sound/usb/usbmixer.c')
-rw-r--r--sound/usb/usbmixer.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c
index 89c63d073cc6..5f98bee06959 100644
--- a/sound/usb/usbmixer.c
+++ b/sound/usb/usbmixer.c
@@ -59,12 +59,13 @@ static const struct rc_config {
59 u8 offset; 59 u8 offset;
60 u8 length; 60 u8 length;
61 u8 packet_length; 61 u8 packet_length;
62 u8 min_packet_length; /* minimum accepted length of the URB result */
62 u8 mute_mixer_id; 63 u8 mute_mixer_id;
63 u32 mute_code; 64 u32 mute_code;
64} rc_configs[] = { 65} rc_configs[] = {
65 { USB_ID(0x041e, 0x3000), 0, 1, 2, 18, 0x0013 }, /* Extigy */ 66 { USB_ID(0x041e, 0x3000), 0, 1, 2, 1, 18, 0x0013 }, /* Extigy */
66 { USB_ID(0x041e, 0x3020), 2, 1, 6, 18, 0x0013 }, /* Audigy 2 NX */ 67 { USB_ID(0x041e, 0x3020), 2, 1, 6, 6, 18, 0x0013 }, /* Audigy 2 NX */
67 { USB_ID(0x041e, 0x3040), 2, 2, 6, 2, 0x6e91 }, /* Live! 24-bit */ 68 { USB_ID(0x041e, 0x3040), 2, 2, 6, 6, 2, 0x6e91 }, /* Live! 24-bit */
68}; 69};
69 70
70struct usb_mixer_interface { 71struct usb_mixer_interface {
@@ -1781,7 +1782,7 @@ static void snd_usb_soundblaster_remote_complete(struct urb *urb)
1781 const struct rc_config *rc = mixer->rc_cfg; 1782 const struct rc_config *rc = mixer->rc_cfg;
1782 u32 code; 1783 u32 code;
1783 1784
1784 if (urb->status < 0 || urb->actual_length < rc->packet_length) 1785 if (urb->status < 0 || urb->actual_length < rc->min_packet_length)
1785 return; 1786 return;
1786 1787
1787 code = mixer->rc_buffer[rc->offset]; 1788 code = mixer->rc_buffer[rc->offset];