[alsa-devel] [PATCH - snd-usb-audio 1/1] Support for Power/Status LED on Creative USB X-Fi S51

Takashi Iwai tiwai at suse.de
Tue Nov 2 08:05:22 CET 2010


At Tue,  2 Nov 2010 12:02:23 +0000,
emailmandar at gmail.com wrote:
> 
> From: Mandar Joshi <emailmandar at gmail.com>
> 
>  This patch adds support for Power/Status LED on Creative USB X-Fi S51.
>  There is just one LED on the device. The LED can either be On or it can be set to Blink. There doesn't
>  seem to be a way to switch it off.
>  The control message to change LED status is similar to that of audigy2nx except that the index is to be
>  set to 0 and value is 1 for Blink and 0 for On.
>  The 'Power LED' control in alsamixer when muted will cause the LED to Blink continuously. When unmuted
>  the LED will stay On. The Creative driver under Windows sets the LED to blink whenever audio is muted.
>  This LED can be treated as the CMSS LED but I figured since there is just one LED, it should be treated
>  as the Power LED. Is that alright?
>  I've also changed the comment "Usb X-Fi" to "Usb X-Fi S51" as there are other external X-Fi devices from
>  Creative like Usb X-Fi Go and Xmod. The volume knob and LED support patch doesn't apply to them.
> 
> 
> Signed-off-by: Mandar Joshi <emailmandar at gmail.com>

This patch conflicts with your previous patch that was already merged.
Could you rebase?


thanks,

Takashi

> diff --git a/sound/usb/mixer_quirks.c b/sound/usb/mixer_quirks.c
> index e7df1e5..aea92d6 100644
> --- a/sound/usb/mixer_quirks.c
> +++ b/sound/usb/mixer_quirks.c
> @@ -60,6 +60,7 @@ static const struct rc_config {
>  	{ USB_ID(0x041e, 0x3000), 0, 1, 2, 1,  18, 0x0013 }, /* Extigy       */
>  	{ USB_ID(0x041e, 0x3020), 2, 1, 6, 6,  18, 0x0013 }, /* Audigy 2 NX  */
>  	{ USB_ID(0x041e, 0x3040), 2, 2, 6, 6,  2,  0x6e91 }, /* Live! 24-bit */
> +	{ USB_ID(0x041e, 0x3042), 0, 1, 1, 1,  1,  0x000d }, /* Usb X-Fi S51 */
>  	{ USB_ID(0x041e, 0x3048), 2, 2, 6, 6,  2,  0x6e91 }, /* Toshiba SB0500 */
>  };
>  
> @@ -182,10 +183,16 @@ static int snd_audigy2nx_led_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e
>  	if (value > 1)
>  		return -EINVAL;
>  	changed = value != mixer->audigy2nx_leds[index];
> -	err = snd_usb_ctl_msg(mixer->chip->dev,
> -			      usb_sndctrlpipe(mixer->chip->dev, 0), 0x24,
> -			      USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
> -			      value, index + 2, NULL, 0, 100);
> +	if (mixer->chip->usb_id == USB_ID(0x041e, 0x3042))
> +		err = snd_usb_ctl_msg(mixer->chip->dev,
> +				usb_sndctrlpipe(mixer->chip->dev, 0), 0x24,
> +				USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
> +				!value, 0, NULL, 0, 100);
> +	else
> +		err = snd_usb_ctl_msg(mixer->chip->dev,
> +				usb_sndctrlpipe(mixer->chip->dev, 0), 0x24,
> +				USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
> +				value, index + 2, NULL, 0, 100);
>  	if (err < 0)
>  		return err;
>  	mixer->audigy2nx_leds[index] = value;
> @@ -224,8 +231,12 @@ static int snd_audigy2nx_controls_create(struct usb_mixer_interface *mixer)
>  	int i, err;
>  
>  	for (i = 0; i < ARRAY_SIZE(snd_audigy2nx_controls); ++i) {
> +		/* USB X-Fi S51 doesn't have a CMSS LED */
> +		if ((mixer->chip->usb_id == USB_ID(0x041e, 0x3042)) && i == 0)
> +			continue;
>  		if (i > 1 && /* Live24ext has 2 LEDs only */
>  			(mixer->chip->usb_id == USB_ID(0x041e, 0x3040) ||
> +			 mixer->chip->usb_id == USB_ID(0x041e, 0x3042) ||
>  			 mixer->chip->usb_id == USB_ID(0x041e, 0x3048)))
>  			break; 
>  		err = snd_ctl_add(mixer->chip->card,
> @@ -364,6 +375,7 @@ int snd_usb_mixer_apply_create_quirk(struct usb_mixer_interface *mixer)
>  
>  	if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020) ||
>  	    mixer->chip->usb_id == USB_ID(0x041e, 0x3040) ||
> +	    mixer->chip->usb_id == USB_ID(0x041e, 0x3042) ||
>  	    mixer->chip->usb_id == USB_ID(0x041e, 0x3048)) {
>  		if ((err = snd_audigy2nx_controls_create(mixer)) < 0)
>  			return err;
> -- 
> 1.7.1
> 


More information about the Alsa-devel mailing list