[alsa-devel] Notebook Toshiba satellite x200-21g with realtek snd-hda-intel audio device still not supported (codec ALC268)

Takashi Iwai tiwai at suse.de
Mon Feb 11 17:09:14 CET 2008


At Mon, 11 Feb 2008 16:46:55 +0100,
Daniele (Mastro) wrote:
> 
> Tobin Davis ha scritto:
> > Ok, I'm going to dive into this one this weekend.  I have a test board
> > ready to run.
> > 
> > Daniele, please email me off list to keep the noise level down.  I'm
> > also tracking this in bugzilla.
> 
> since 16/01 i haven't any news from Tobin Davis in private email..
> 
> i sent him 3 mails in 3 weeks waiting for a reply without gettin any one
> 
> you can find all the news at the bug report:
> 
> https://bugtrack.alsa-project.org/alsa-bug/view.php?id=3659
> 
> the last time i sent him an email with some remind on what's are, still, 
> my problems..
> 
> can someone else take care of this problem? i'll try to help as best as 
> i can...
> you can find on the bug report the debug ( detect ) info with "test" 
> module parameter
> 
> note: things still missing.. microphone don't work in recording, the 56k 
> modem isn't recognized and i've some error in dmesg:

Note that these are no errors but just debug information.

Try the patch below.  This should fix the capture source problem on
ALC268.

The modem is a different problem.  There are only certain model chips
that can work with slmodemd.  Non si3054-compatible (typically
conexant ones) don't work.


Takashi

---

diff -r 29ae582df0ee pci/hda/patch_realtek.c
--- a/pci/hda/patch_realtek.c	Mon Feb 11 16:35:02 2008 +0100
+++ b/pci/hda/patch_realtek.c	Mon Feb 11 17:06:19 2008 +0100
@@ -238,6 +238,7 @@ struct alc_spec {
 	/* capture */
 	unsigned int num_adc_nids;
 	hda_nid_t *adc_nids;
+	hda_nid_t *capsrc_nids;
 	hda_nid_t dig_in_nid;		/* digital-in NID; optional */
 
 	/* capture source */
@@ -291,6 +292,7 @@ struct alc_config_preset {
 	hda_nid_t hp_nid;		/* optional */
 	unsigned int num_adc_nids;
 	hda_nid_t *adc_nids;
+	hda_nid_t *capsrc_nids;
 	hda_nid_t dig_in_nid;
 	unsigned int num_channel_mode;
 	const struct hda_channel_mode *channel_mode;
@@ -337,9 +339,10 @@ static int alc_mux_enum_put(struct snd_k
 	struct alc_spec *spec = codec->spec;
 	unsigned int adc_idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
 	unsigned int mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx;
+	hda_nid_t capsrc = spec->capsrc_nids ?
+		spec->capsrc_nids[adc_idx] : spec->adc_nids[adc_idx];
 	return snd_hda_input_mux_put(codec, &spec->input_mux[mux_idx], ucontrol,
-				     spec->adc_nids[adc_idx],
-				     &spec->cur_mux[adc_idx]);
+				     capsrc, &spec->cur_mux[adc_idx]);
 }
 
 
@@ -708,6 +711,7 @@ static void setup_preset(struct alc_spec
 
 	spec->num_adc_nids = preset->num_adc_nids;
 	spec->adc_nids = preset->adc_nids;
+	spec->capsrc_nids = preset->capsrc_nids;
 	spec->dig_in_nid = preset->dig_in_nid;
 
 	spec->unsol_event = preset->unsol_event;
@@ -9527,6 +9531,10 @@ static hda_nid_t alc268_adc_nids_alt[1] 
 	0x08
 };
 
+static hda_nid_t alc268_capsrc_nids[2] = {
+	0x23, 0x24
+};
+
 static struct snd_kcontrol_new alc268_base_mixer[] = {
 	/* output mixer control */
 	HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT),
@@ -10140,6 +10148,7 @@ static struct alc_config_preset alc268_p
 		.dac_nids = alc268_dac_nids,
                 .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
                 .adc_nids = alc268_adc_nids_alt,
+		.capsrc_nids = alc268_capsrc_nids,
 		.hp_nid = 0x03,
 		.dig_out_nid = ALC268_DIGOUT_NID,
 		.num_channel_mode = ARRAY_SIZE(alc268_modes),
@@ -10154,6 +10163,7 @@ static struct alc_config_preset alc268_p
 		.dac_nids = alc268_dac_nids,
 		.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
 		.adc_nids = alc268_adc_nids_alt,
+		.capsrc_nids = alc268_capsrc_nids,
 		.hp_nid = 0x03,
 		.num_channel_mode = ARRAY_SIZE(alc268_modes),
 		.channel_mode = alc268_modes,
@@ -10169,6 +10179,7 @@ static struct alc_config_preset alc268_p
 		.dac_nids = alc268_dac_nids,
 		.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
 		.adc_nids = alc268_adc_nids_alt,
+		.capsrc_nids = alc268_capsrc_nids,
 		.hp_nid = 0x02,
 		.num_channel_mode = ARRAY_SIZE(alc268_modes),
 		.channel_mode = alc268_modes,
@@ -10197,6 +10208,7 @@ static struct alc_config_preset alc268_p
 		.dac_nids = alc268_dac_nids,
 		.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
 		.adc_nids = alc268_adc_nids_alt,
+		.capsrc_nids = alc268_capsrc_nids,
 		.hp_nid = 0x03,
 		.dig_out_nid = ALC268_DIGOUT_NID,
 		.num_channel_mode = ARRAY_SIZE(alc268_modes),
@@ -10214,6 +10226,7 @@ static struct alc_config_preset alc268_p
 		.dac_nids = alc268_dac_nids,
 		.num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
 		.adc_nids = alc268_adc_nids_alt,
+		.capsrc_nids = alc268_capsrc_nids,
 		.hp_nid = 0x03,
 		.dig_out_nid = ALC268_DIGOUT_NID,
 		.num_channel_mode = ARRAY_SIZE(alc268_modes),
@@ -10289,6 +10302,7 @@ static int patch_alc268(struct hda_codec
 				alc268_capture_mixer;
 			spec->num_mixers++;
 		}
+		spec->capsrc_nids = alc268_capsrc_nids;
 	}
 
 	spec->vmaster_nid = 0x02;


More information about the Alsa-devel mailing list