From: Raimonds Cicans <ray@vardes.lv>
To: alsa-devel@lists.sourceforge.net
Subject: SB Live! 24-Bit External: remote control support
Date: Thu, 27 Apr 2006 23:27:17 +0300 [thread overview]
Message-ID: <44512925.30803@vardes.lv> (raw)
[-- Attachment #1: Type: text/plain, Size: 137 bytes --]
Hi!
Attached patch contains support for 'SB Live! 24-Bit External' remote
and little clean up of remote control code.
Raimonds Cicans
[-- Attachment #2: sb_live24_usb_remote.patch --]
[-- Type: text/x-patch, Size: 3178 bytes --]
--- old/alsa-driver-1.0.11/alsa-kernel/usb/usbmixer.c 2006-03-28 18:58:28.000000000 +0300
+++ alsa-driver-1.0.11/alsa-kernel/usb/usbmixer.c 2006-04-27 22:33:53.000000000 +0300
@@ -46,6 +46,28 @@
/* ignore error from controls - for debugging */
/* #define IGNORE_CTL_ERROR */
+/*
+ * Sound Blaster remote control configuration
+ *
+ * format of remote control data:
+ * Extigy: xx 00
+ * Audigy 2 NX: 06 80 xx 00 00 00
+ * Live! 24-bit: 06 80 xx yy 22 83
+ */
+static const struct rc_config {
+ u32 usb_id;
+ u8 offset;
+ u8 len;
+ u8 pkt_min_len; /* offset + len */
+ u8 pkt_max_len;
+ u32 mute_code;
+ u8 mute_mixer_id;
+} rc_configs[] = {
+ {USB_ID(0x041e, 0x3000), 0, 1, 1, 2, 0x0013, 18}, /* Extigy */
+ {USB_ID(0x041e, 0x3020), 2, 1, 3, 6, 0x0013, 18}, /* Audigy 2 NX */
+ {USB_ID(0x041e, 0x3040), 2, 2, 4, 6, 0x6e91, 2}, /* Live! 24-bit */
+ {0}}; /* Terminator */
+
struct usb_mixer_interface {
struct snd_usb_audio *chip;
unsigned int ctrlif;
@@ -55,11 +77,7 @@
struct usb_mixer_elem_info **id_elems; /* array[256], indexed by unit id */
/* Sound Blaster remote control stuff */
- enum {
- RC_NONE,
- RC_EXTIGY,
- RC_AUDIGY2NX,
- } rc_type;
+ const struct rc_config *rc_cfg;
unsigned long rc_hwdep_open;
u32 rc_code;
wait_queue_head_t rc_waitq;
@@ -1647,7 +1665,7 @@
static void snd_usb_mixer_memory_change(struct usb_mixer_interface *mixer,
int unitid)
{
- if (mixer->rc_type == RC_NONE)
+ if (mixer->rc_cfg == NULL)
return;
/* unit ids specific to Extigy/Audigy 2 NX: */
switch (unitid) {
@@ -1732,20 +1750,20 @@
struct pt_regs *regs)
{
struct usb_mixer_interface *mixer = urb->context;
- /*
- * format of remote control data:
- * Extigy: xx 00
- * Audigy 2 NX: 06 80 xx 00 00 00
- */
- int offset = mixer->rc_type == RC_EXTIGY ? 0 : 2;
+ const struct rc_config *rc = mixer->rc_cfg;
u32 code;
- if (urb->status < 0 || urb->actual_length <= offset)
+ if (urb->status < 0 || urb->actual_length < rc->pkt_min_len)
return;
- code = mixer->rc_buffer[offset];
+
+ code = mixer->rc_buffer[rc->offset];
+
+ if (rc->len == 2)
+ code |= ((u32)(mixer->rc_buffer[rc->offset + 1]))<<8;
+
/* the Mute button actually changes the mixer control */
- if (code == 13)
- snd_usb_mixer_notify_id(mixer, 18);
+ if (code == rc->mute_code)
+ snd_usb_mixer_notify_id(mixer, rc->mute_mixer_id);
mixer->rc_code = code;
wmb();
wake_up(&mixer->rc_waitq);
@@ -1801,21 +1819,18 @@
static int snd_usb_soundblaster_remote_init(struct usb_mixer_interface *mixer)
{
struct snd_hwdep *hwdep;
- int err, len;
+ int err, len, i;
- switch (mixer->chip->usb_id) {
- case USB_ID(0x041e, 0x3000):
- mixer->rc_type = RC_EXTIGY;
- len = 2;
- break;
- case USB_ID(0x041e, 0x3020):
- mixer->rc_type = RC_AUDIGY2NX;
- len = 6;
- break;
- default:
- return 0;
- }
+ mixer->rc_cfg = NULL;
+ for (i = 0; rc_configs[i].usb_id != mixer->chip->usb_id; i++)
+ if (rc_configs[i].usb_id == 0)
+ return 0;
+
+ mixer->rc_cfg = &rc_configs[i];
+
+ len = mixer->rc_cfg->pkt_max_len;
+
init_waitqueue_head(&mixer->rc_waitq);
err = snd_hwdep_new(mixer->chip->card, "SB remote control", 0, &hwdep);
if (err < 0)
next reply other threads:[~2006-04-27 20:27 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-27 20:27 Raimonds Cicans [this message]
2006-04-28 8:42 ` SB Live! 24-Bit External: remote control support Clemens Ladisch
2006-04-28 9:52 ` Raimonds Cicans
2006-05-05 7:51 ` Clemens Ladisch
[not found] ` <pan.2006.05.07.23.29.22.651163@free.fr>
[not found] ` <20060508071454.GC11272@turing.informatik.uni-halle.de>
[not found] ` <445F052D.5020102@free.fr>
2006-05-08 11:48 ` SB Live! 24-Bit External: remote control support : more details Clemens Ladisch
2006-05-08 17:17 ` vitton.laforest
2006-05-09 21:20 ` SB Live! 24-Bit External: remote control support Lee Revell
2006-05-10 11:28 ` Takashi Iwai
2006-05-10 16:52 ` Clemens Ladisch
2006-05-10 16:54 ` Lee Revell
2006-05-10 16:58 ` Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44512925.30803@vardes.lv \
--to=ray@vardes.lv \
--cc=alsa-devel@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.