Hereis the patch 
I can send you the patched usbmixer.c if you want 
JP

Le Thu, 27 Apr 2006 23:27:17 +0300, Raimonds Cicans a
écrit :

> Hi!
> 
> Attached patch contains support for 'SB Live! 24-Bit External' remote
> and little clean up of remote control code.
> 
> Raimonds Cicans
> 
> --- 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)




-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to