All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Timofei V. Bondarenko" <tim@ipi.ac.ru>
To: alsa-devel@alsa-project.org
Subject: [PATCH] SB Live24-External better handling
Date: Mon, 29 Oct 2007 17:40:16 +0300	[thread overview]
Message-ID: <4725F0D0.4090201@ipi.ac.ru> (raw)

[-- Attachment #1: Type: text/plain, Size: 418 bytes --]

Hi.

This patch improves support for 'SB Live 24-bit Extarnal' USB card.

1) This card can go into muted state when a headphones connected or 
disconnected. So notify mixer about changes in headphone jack.

2) Add LED controls and procfs support just as in similar Audigy 2 NX card.

3) Rename 'PCM Capture' conrol to 'Mic Capture' to reflect reality:
the card may adjust microphone input level only.

Regards.
	Tim.


[-- Attachment #2: live24ext.patch --]
[-- Type: text/x-patch, Size: 3977 bytes --]

diff -upr alsa-driver-1.0.15/alsa-kernel/usb/usbmixer.c alsa-driver/alsa-kernel/usb/usbmixer.c
--- alsa-driver-1.0.15/alsa-kernel/usb/usbmixer.c	2007-10-15 12:45:06.000000000 +0400
+++ alsa-driver/alsa-kernel/usb/usbmixer.c	2007-10-27 22:34:52.000000000 +0400
@@ -1703,6 +1703,11 @@ static void snd_usb_mixer_memory_change(
 	case 19: /* speaker out jacks */
 	case 20: /* headphones out jack */
 		break;
+/* live24ext: 4 = line-in jack */
+	case 3:	/* hp-out jack (may actuate Mute) */
+		if (mixer->chip->usb_id == USB_ID(0x041e, 0x3040))
+			snd_usb_mixer_notify_id(mixer, mixer->rc_cfg->mute_mixer_id);
+		break;
 	default:
 		snd_printd(KERN_DEBUG "memory change in unknown unit %d\n", unitid);
 		break;
@@ -1951,6 +1956,9 @@ static int snd_audigy2nx_controls_create
 	int i, err;
 
 	for (i = 0; i < ARRAY_SIZE(snd_audigy2nx_controls); ++i) {
+		if (i > 1 &&  /* Live24ext has 2 LEDs only */
+			mixer->chip->usb_id == USB_ID(0x041e, 0x3040))
+			break; 
 		err = snd_ctl_add(mixer->chip->card,
 				  snd_ctl_new1(&snd_audigy2nx_controls[i], mixer));
 		if (err < 0)
@@ -1963,28 +1971,41 @@ static int snd_audigy2nx_controls_create
 static void snd_audigy2nx_proc_read(struct snd_info_entry *entry,
 				    struct snd_info_buffer *buffer)
 {
-	static const struct {
+	static const struct sb_jack {
 		int unitid;
 		const char *name;
-	} jacks[] = {
+	}  jacks_audigy2nx[] = {
 		{4,  "dig in "},
 		{7,  "line in"},
 		{19, "spk out"},
 		{20, "hph out"},
+		{-1, 0}
+	}, jacks_live24ext[] = {
+		{4,  "line in"}, /* &1=Line, &2=Mic*/
+		{3,  "hph out"}, /* headphones */
+		{0,  "RC     "}, /* last command, 6 bytes see rc_config above */
+		{-1, 0}
 	};
+	const struct sb_jack *jacks;
 	struct usb_mixer_interface *mixer = entry->private_data;
 	int i, err;
 	u8 buf[3];
 
 	snd_iprintf(buffer, "%s jacks\n\n", mixer->chip->card->shortname);
-	for (i = 0; i < ARRAY_SIZE(jacks); ++i) {
+	if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020))
+		jacks = jacks_audigy2nx;
+	else if (mixer->chip->usb_id == USB_ID(0x041e, 0x3040))
+		jacks = jacks_live24ext;
+	else return;
+
+	for (i = 0; jacks[i].name; ++i) {
 		snd_iprintf(buffer, "%s: ", jacks[i].name);
 		err = snd_usb_ctl_msg(mixer->chip->dev,
 				      usb_rcvctrlpipe(mixer->chip->dev, 0),
 				      GET_MEM, USB_DIR_IN | USB_TYPE_CLASS |
 				      USB_RECIP_INTERFACE, 0,
 				      jacks[i].unitid << 8, buf, 3, 100);
-		if (err == 3 && buf[0] == 3)
+		if (err == 3 && (buf[0] == 3 || buf[0] == 6))
 			snd_iprintf(buffer, "%02x %02x\n", buf[1], buf[2]);
 		else
 			snd_iprintf(buffer, "?\n");
@@ -2022,7 +2043,8 @@ int snd_usb_create_mixer(struct snd_usb_
 	if ((err = snd_usb_soundblaster_remote_init(mixer)) < 0)
 		goto _error;
 
-	if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020)) {
+	if (mixer->chip->usb_id == USB_ID(0x041e, 0x3020) ||
+	    mixer->chip->usb_id == USB_ID(0x041e, 0x3040)) {
 		struct snd_info_entry *entry;
 
 		if ((err = snd_audigy2nx_controls_create(mixer)) < 0)
diff -upr alsa-driver-1.0.15/alsa-kernel/usb/usbmixer_maps.c alsa-driver/alsa-kernel/usb/usbmixer_maps.c
--- alsa-driver-1.0.15/alsa-kernel/usb/usbmixer_maps.c	2007-10-15 12:45:06.000000000 +0400
+++ alsa-driver/alsa-kernel/usb/usbmixer_maps.c	2007-10-27 18:31:08.000000000 +0400
@@ -187,6 +187,13 @@ static struct usbmix_selector_map audigy
 	{ 0 } /* terminator */
 };
 
+/* Creative SoundBlaster Live! 24-bit External */
+static struct usbmix_name_map live24ext_map[] = {
+	/* 2: PCM Playback Volume */
+	{ 5, "Mic Capture" }, /* FU, default PCM Capture Volume */
+	{ 0 } /* terminator */
+};
+
 /* LineX FM Transmitter entry - needed to bypass controls bug */
 static struct usbmix_name_map linex_map[] = {
 	/* 1: IT pcm */
@@ -273,6 +280,10 @@ static struct usbmix_ctl_map usbmix_ctl_
 		.map = audigy2nx_map,
 		.selector_map = audigy2nx_selectors,
 	},
+ 	{
+		.id = USB_ID(0x041e, 0x3040),
+		.map = live24ext_map,
+	},
 	{
 		/* Hercules DJ Console (Windows Edition) */
 		.id = USB_ID(0x06f8, 0xb000),

[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

             reply	other threads:[~2007-10-29 14:40 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-10-29 14:40 Timofei V. Bondarenko [this message]
2007-10-30  9:39 ` [PATCH] SB Live24-External better handling Takashi Iwai
2007-10-30 14:24   ` Timofei V. Bondarenko
2007-10-30 12:18     ` 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=4725F0D0.4090201@ipi.ac.ru \
    --to=tim@ipi.ac.ru \
    --cc=alsa-devel@alsa-project.org \
    /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.