From: Maxim Levitsky <maximlevitsky@gmail.com>
To: alsa-devel@alsa-project.org
Subject: Why analog loopback of sigmatel devices got removed?
Date: Fri, 19 Jun 2009 02:50:35 +0300 [thread overview]
Message-ID: <1245369035.6830.27.camel@localhost> (raw)
[-- Attachment #1: Type: text/plain, Size: 769 bytes --]
Hi,
Due to lack of time, I didn't update kernel on my desktop system.
Now I notice that analog loopback go removed. Why?
Searching around I found this:
http://article.gmane.org/gmane.linux.alsa.devel/59878
* Removed analog loopback mixer items, not mentioned in sigmatel
datasheets and
reported to break sound support.
First they are mention. It took me lot of time to find them.
I only have added the loopback items for devices that have this feature in datasheet.
Then how it can break sound support? could you explain?
I need this feature since I use it with my TV card, and I know more users that use that feature.
I don't know about other devices, but I attach the my patch that was included in kernel for this feature.
Best regards,
Maxim Levitsky
[-- Attachment #2: 0004-add-support-for-analog-loopback-to-STAC9204-9205-922.patch --]
[-- Type: text/x-patch, Size: 3941 bytes --]
>From ea1a7a5a8113f8c39db8391226adbbe383f03355 Mon Sep 17 00:00:00 2001
From: Maxim Levitsky <maximlevitsky@gmail.com>
Date: Mon, 3 Sep 2007 14:18:17 +0300
Subject: [PATCH] add support for analog loopback to STAC9204/9205/922x/927x
The analog loopback routes the sound just before it enters ADC0 to output of DAC0
Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com>
---
pci/hda/patch_sigmatel.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 58 insertions(+), 0 deletions(-)
diff --git a/pci/hda/patch_sigmatel.c b/pci/hda/patch_sigmatel.c
index 297f740..c94775c 100644
--- a/pci/hda/patch_sigmatel.c
+++ b/pci/hda/patch_sigmatel.c
@@ -147,6 +147,7 @@ struct sigmatel_spec {
/* i/o switches */
unsigned int io_switch[2];
unsigned int clfe_swap;
+ unsigned int aloopback;
struct hda_pcm pcm_rec[2]; /* PCM information */
@@ -296,6 +297,49 @@ static int stac92xx_mux_enum_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e
spec->mux_nids[adc_idx], &spec->cur_mux[adc_idx]);
}
+#define stac92xx_aloopback_info snd_ctl_boolean_mono_info
+
+static int stac92xx_aloopback_get(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct sigmatel_spec *spec = codec->spec;
+
+ ucontrol->value.integer.value[0] = spec->aloopback;
+ return 0;
+}
+
+static int stac92xx_aloopback_put(struct snd_kcontrol *kcontrol,
+ struct snd_ctl_elem_value *ucontrol)
+{
+ struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
+ struct sigmatel_spec *spec = codec->spec;
+ unsigned int dac_mode;
+
+ if (spec->aloopback == ucontrol->value.integer.value[0])
+ return 0;
+
+ spec->aloopback = ucontrol->value.integer.value[0];
+
+
+ dac_mode = snd_hda_codec_read(codec, codec->afg, 0,
+ kcontrol->private_value & 0xFFFF, 0x0);
+
+ if (spec->aloopback) {
+ snd_hda_power_up(codec);
+ dac_mode |= 0x40;
+ } else {
+ snd_hda_power_down(codec);
+ dac_mode &= ~0x40;
+ }
+
+ snd_hda_codec_write_cache(codec, codec->afg, 0,
+ kcontrol->private_value >> 16, dac_mode);
+
+ return 1;
+}
+
+
static struct hda_verb stac9200_core_init[] = {
/* set dac0mux for dac converter */
{ 0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
@@ -346,6 +390,17 @@ static struct hda_verb stac9205_core_init[] = {
.put = stac92xx_mux_enum_put, \
}
+#define STAC_ANALOG_LOOPBACK(verb_read,verb_write) \
+ { \
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, \
+ .name = "Analog Loopback", \
+ .count = 1, \
+ .info = stac92xx_aloopback_info, \
+ .get = stac92xx_aloopback_get, \
+ .put = stac92xx_aloopback_put, \
+ .private_value = verb_read | (verb_write << 16), \
+ }
+
static struct snd_kcontrol_new stac9200_mixer[] = {
HDA_CODEC_VOLUME("Master Playback Volume", 0xb, 0, HDA_OUTPUT),
@@ -377,6 +432,7 @@ static struct snd_kcontrol_new stac922x_mixer[] = {
/* This needs to be generated dynamically based on sequence */
static struct snd_kcontrol_new stac9227_mixer[] = {
STAC_INPUT_SOURCE,
+ STAC_ANALOG_LOOPBACK(0xFEB, 0x7EB),
HDA_CODEC_VOLUME("Capture Volume", 0x15, 0x0, HDA_OUTPUT),
HDA_CODEC_MUTE("Capture Switch", 0x1b, 0x0, HDA_OUTPUT),
{ } /* end */
@@ -384,6 +440,7 @@ static struct snd_kcontrol_new stac9227_mixer[] = {
static struct snd_kcontrol_new stac927x_mixer[] = {
STAC_INPUT_SOURCE,
+ STAC_ANALOG_LOOPBACK(0xFEB, 0x7EB),
HDA_CODEC_VOLUME("InMux Capture Volume", 0x15, 0x0, HDA_OUTPUT),
HDA_CODEC_VOLUME("InVol Capture Volume", 0x18, 0x0, HDA_INPUT),
HDA_CODEC_MUTE("ADCMux Capture Switch", 0x1b, 0x0, HDA_OUTPUT),
@@ -400,6 +457,7 @@ static struct snd_kcontrol_new stac9205_mixer[] = {
.put = stac92xx_dmux_enum_put,
},
STAC_INPUT_SOURCE,
+ STAC_ANALOG_LOOPBACK(0xFE0, 0x7E0),
HDA_CODEC_VOLUME("InMux Capture Volume", 0x19, 0x0, HDA_OUTPUT),
HDA_CODEC_VOLUME("InVol Capture Volume", 0x1b, 0x0, HDA_INPUT),
HDA_CODEC_MUTE("ADCMux Capture Switch", 0x1d, 0x0, HDA_OUTPUT),
--
1.5.2.3
[-- 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
next reply other threads:[~2009-06-18 23:50 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-18 23:50 Maxim Levitsky [this message]
2009-06-19 6:32 ` Why analog loopback of sigmatel devices got removed? Takashi Iwai
2009-06-19 7:27 ` segfault when setting swparams! help Guilherme
2009-06-19 7:31 ` Takashi Iwai
2009-06-19 7:43 ` segfault when setting swparams! help - SOLVED Guilherme
2009-06-19 8:21 ` Why analog loopback of sigmatel devices got removed? Maxim Levitsky
2009-06-19 8:23 ` Takashi Iwai
2009-06-19 11:36 ` Maxim Levitsky
2009-06-19 12:50 ` Takashi Iwai
2009-06-19 14:55 ` Maxim Levitsky
2009-06-19 18:18 ` Maxim Levitsky
2009-06-19 18:44 ` Takashi Iwai
2009-06-19 21:05 ` Maxim Levitsky
2009-06-20 7:11 ` 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=1245369035.6830.27.camel@localhost \
--to=maximlevitsky@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox