From: Raimonds Cicans <ray@vardes.lv>
To: Clemens Ladisch <clemens@ladisch.de>
Cc: alsa-devel@lists.sourceforge.net
Subject: Re: SB Live! 24-Bit External: remote control support
Date: Fri, 28 Apr 2006 12:52:02 +0300 [thread overview]
Message-ID: <4451E5C2.7050104@vardes.lv> (raw)
In-Reply-To: <20060428084200.GA26640@turing.informatik.uni-halle.de>
[-- Attachment #1: Type: text/plain, Size: 481 bytes --]
Clemens Ladisch wrote:
> Raimonds Cicans wrote:
>>Attached patch contains support for 'SB Live! 24-Bit External' remote
>
> It seems the codes are not compatible with the Extigy/Audigy2NX.
Yes
> Are the lower 8 bits unique, or does the LIRC driver need to be updated
> to read 32 bit codes?
Unique.
But I plan to send patch to LIRC to support 32bit codes,
because IMHO it may be useful for other remotes.
> Please provide a Signed-off-by line.
In attached file
Raimonds Cicans
[-- Attachment #2: sb_live24_usb_remote.patch --]
[-- Type: text/x-patch, Size: 3272 bytes --]
Support for 'SB Live! 24-Bit External' remote
Signed-off-by: Raimonds Cicans <ray@vardes.lv>
--- 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 prev parent reply other threads:[~2006-04-28 9:52 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-27 20:27 SB Live! 24-Bit External: remote control support Raimonds Cicans
2006-04-28 8:42 ` Clemens Ladisch
2006-04-28 9:52 ` Raimonds Cicans [this message]
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=4451E5C2.7050104@vardes.lv \
--to=ray@vardes.lv \
--cc=alsa-devel@lists.sourceforge.net \
--cc=clemens@ladisch.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox