[alsa-devel] snd-hda-intel: Fix volume-wheel and microphone on Fujitsu-Siemens Amilo M3438G
Currently the default model that gets selected on this hardware is "F1734". Using this model neither the volume-wheel nor microphone (internal or external) work.
The first part of my patch changes the default model to "fujitsu", this enables the volume wheel on the left side of the laptop.
The second part changes the capture settings and thus makes it possible to record from microphones. Now when capturing from the external microphone I can hear myself talking but its quite quiet. I can improve this a little by raising the capture volume, but if I raise it above 40 I can no longer record anything.
Questions: Is this patch any good or is there a better way to fix my problems? Why is the recording so quiet and why can't I record with capture value above 40?
Patch: diff -r c4c5e6ced12f pci/hda/patch_realtek.c --- a/pci/hda/patch_realtek.c Wed Feb 06 15:48:06 2008 +0100 +++ b/pci/hda/patch_realtek.c Wed Feb 06 15:59:28 2008 +0100 @@ -2917,7 +2917,7 @@ static struct snd_pci_quirk alc880_cfg_t SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_W810), SND_PCI_QUIRK(0x1695, 0x400d, "EPoX", ALC880_5ST_DIG), SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG), - SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734), + SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_FUJITSU), SND_PCI_QUIRK(0x1734, 0x10ac, "FSC", ALC880_UNIWILL), SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU), SND_PCI_QUIRK(0x1854, 0x0018, "LG LW20", ALC880_LG_LW), @@ -3161,7 +3161,7 @@ static struct alc_config_preset alc880_p .dig_out_nid = ALC880_DIGOUT_NID, .num_channel_mode = ARRAY_SIZE(alc880_2_jack_modes), .channel_mode = alc880_2_jack_modes, - .input_mux = &alc880_capture_source, + .input_mux = &alc880_6stack_capture_source, .unsol_event = alc880_uniwill_p53_unsol_event, .init_hook = alc880_uniwill_p53_hp_automute, },
At Wed, 6 Feb 2008 17:14:37 +0100, M G wrote:
Currently the default model that gets selected on this hardware is "F1734". Using this model neither the volume-wheel nor microphone (internal or external) work.
Thanks for your patch.
The first part of my patch changes the default model to "fujitsu", this enables the volume wheel on the left side of the laptop.
The concern is whether you lose any functionality by this rename. The support of the volume knob control with the existing F1734 model would be easy. You'd need to add a proper verb to enable the unsolicited event and register the handler, such as, uniwill_p53 one.
The second part changes the capture settings and thus makes it possible to record from microphones. Now when capturing from the external microphone I can hear myself talking but its quite quiet. I can improve this a little by raising the capture volume, but if I raise it above 40 I can no longer record anything.
Using 6stack_capture_source looks wrong to me. It is actually for desktops. But yours isn't, I guess.
The recording quality might be improved by setting the proper pin VREF level.
Anyway, it'd be more helpful if you can show the detailed information, e.g. the output of alsa-info.sh script.
Takashi
Questions: Is this patch any good or is there a better way to fix my problems? Why is the recording so quiet and why can't I record with capture value above 40?
Patch: diff -r c4c5e6ced12f pci/hda/patch_realtek.c --- a/pci/hda/patch_realtek.c Wed Feb 06 15:48:06 2008 +0100 +++ b/pci/hda/patch_realtek.c Wed Feb 06 15:59:28 2008 +0100 @@ -2917,7 +2917,7 @@ static struct snd_pci_quirk alc880_cfg_t SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_W810), SND_PCI_QUIRK(0x1695, 0x400d, "EPoX", ALC880_5ST_DIG), SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG),
- SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734),
- SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_FUJITSU), SND_PCI_QUIRK(0x1734, 0x10ac, "FSC", ALC880_UNIWILL), SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU), SND_PCI_QUIRK(0x1854, 0x0018, "LG LW20", ALC880_LG_LW),
@@ -3161,7 +3161,7 @@ static struct alc_config_preset alc880_p .dig_out_nid = ALC880_DIGOUT_NID, .num_channel_mode = ARRAY_SIZE(alc880_2_jack_modes), .channel_mode = alc880_2_jack_modes,
.input_mux = &alc880_capture_source,
},.input_mux = &alc880_6stack_capture_source, .unsol_event = alc880_uniwill_p53_unsol_event, .init_hook = alc880_uniwill_p53_hp_automute,
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Feb 6, 2008 5:36 PM, Takashi Iwai tiwai@suse.de wrote:
At Wed, 6 Feb 2008 17:14:37 +0100,
M G wrote:
Currently the default model that gets selected on this hardware is "F1734". Using this model neither the volume-wheel nor microphone (internal or external) work.
Thanks for your patch.
The first part of my patch changes the default model to "fujitsu", this enables the volume wheel on the left side of the laptop.
The concern is whether you lose any functionality by this rename. The support of the volume knob control with the existing F1734 model would be easy. You'd need to add a proper verb to enable the unsolicited event and register the handler, such as, uniwill_p53 one.
The second part changes the capture settings and thus makes it possible to record from microphones. Now when capturing from the external microphone I can hear myself talking but its quite quiet. I can improve this a little by raising the capture volume, but if I raise it above 40 I can no longer record anything.
Using 6stack_capture_source looks wrong to me. It is actually for desktops. But yours isn't, I guess.
The recording quality might be improved by setting the proper pin VREF level.
Anyway, it'd be more helpful if you can show the detailed information, e.g. the output of alsa-info.sh script.
Takashi
No, it's a Laptop. The standard capture source has front mic at 0x3 while the 6stack capture source has front mic at 0x1; this is the only difference but this seems to be what makes it work, I don't know why. (Btw: It is always front mic, no matter what microphone I use. As soon as I plug the external mic the internal one gets muted and the external one takes over it's channel)
About the technical stuff: I don't know what an unsolicited event or a VREF is, I'm not a programmer. I just fiddled around with stuff until it was working but don't understand it :)
I have uploaded the output of alsa-info.sh twice. First with normal alsa und then with my patch (don't know is this is important) http://pastebin.com/f22f73445 http://pastebin.com/f4a7b49d7
Questions: Is this patch any good or is there a better way to fix my problems? Why is the recording so quiet and why can't I record with capture value above 40?
Patch: diff -r c4c5e6ced12f pci/hda/patch_realtek.c --- a/pci/hda/patch_realtek.c Wed Feb 06 15:48:06 2008 +0100 +++ b/pci/hda/patch_realtek.c Wed Feb 06 15:59:28 2008 +0100 @@ -2917,7 +2917,7 @@ static struct snd_pci_quirk alc880_cfg_t SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_W810), SND_PCI_QUIRK(0x1695, 0x400d, "EPoX", ALC880_5ST_DIG), SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_5ST_DIG),
- SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_F1734),
- SND_PCI_QUIRK(0x1734, 0x107c, "FSC F1734", ALC880_FUJITSU), SND_PCI_QUIRK(0x1734, 0x10ac, "FSC", ALC880_UNIWILL), SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU), SND_PCI_QUIRK(0x1854, 0x0018, "LG LW20", ALC880_LG_LW),
@@ -3161,7 +3161,7 @@ static struct alc_config_preset alc880_p .dig_out_nid = ALC880_DIGOUT_NID, .num_channel_mode = ARRAY_SIZE(alc880_2_jack_modes), .channel_mode = alc880_2_jack_modes,
.input_mux = &alc880_capture_source,
},.input_mux = &alc880_6stack_capture_source, .unsol_event = alc880_uniwill_p53_unsol_event, .init_hook = alc880_uniwill_p53_hp_automute,
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
At Thu, 7 Feb 2008 00:02:21 +0100, M G wrote:
On Feb 6, 2008 5:36 PM, Takashi Iwai tiwai@suse.de wrote:
At Wed, 6 Feb 2008 17:14:37 +0100,
M G wrote:
Currently the default model that gets selected on this hardware is "F1734". Using this model neither the volume-wheel nor microphone (internal or external) work.
Thanks for your patch.
The first part of my patch changes the default model to "fujitsu", this enables the volume wheel on the left side of the laptop.
The concern is whether you lose any functionality by this rename. The support of the volume knob control with the existing F1734 model would be easy. You'd need to add a proper verb to enable the unsolicited event and register the handler, such as, uniwill_p53 one.
The second part changes the capture settings and thus makes it possible to record from microphones. Now when capturing from the external microphone I can hear myself talking but its quite quiet. I can improve this a little by raising the capture volume, but if I raise it above 40 I can no longer record anything.
Using 6stack_capture_source looks wrong to me. It is actually for desktops. But yours isn't, I guess.
The recording quality might be improved by setting the proper pin VREF level.
Anyway, it'd be more helpful if you can show the detailed information, e.g. the output of alsa-info.sh script.
Takashi
No, it's a Laptop. The standard capture source has front mic at 0x3 while the 6stack capture source has front mic at 0x1; this is the only difference but this seems to be what makes it work, I don't know why. (Btw: It is always front mic, no matter what microphone I use. As soon as I plug the external mic the internal one gets muted and the external one takes over it's channel)
OK, then I think it's better to change the existing F1734 stuff rather than moving to model fujitsu. Model fujitsu is, apparently, for the distinct int/ext mics while yours has only one mic input regardless of connection.
Was the headphone muted automatically even without your patch?
About the technical stuff: I don't know what an unsolicited event or a VREF is, I'm not a programmer. I just fiddled around with stuff until it was working but don't understand it :)
I have uploaded the output of alsa-info.sh twice. First with normal alsa und then with my patch (don't know is this is important) http://pastebin.com/f22f73445 http://pastebin.com/f4a7b49d7
Thanks. Could you try the patch below?
Takashi
diff -r f7393208ebd3 pci/hda/patch_realtek.c --- a/pci/hda/patch_realtek.c Fri Feb 08 12:45:40 2008 +0100 +++ b/pci/hda/patch_realtek.c Fri Feb 08 12:54:24 2008 +0100 @@ -1325,6 +1325,14 @@ static struct snd_kcontrol_new alc880_f1 { } /* end */ };
+static struct hda_input_mux alc880_f1734_capture_source = { + .num_items = 2, + .items = { + { "Mic", 0x1 }, + { "CD", 0x4 }, + }, +}; +
/* * ALC880 ASUS model @@ -1935,6 +1943,9 @@ static struct hda_verb alc880_pin_f1734_ {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, {0x1b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, + + {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_HP_EVENT}, + {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_DCVOL_EVENT},
{ } }; @@ -3059,7 +3070,9 @@ static struct alc_config_preset alc880_p .hp_nid = 0x02, .num_channel_mode = ARRAY_SIZE(alc880_2_jack_modes), .channel_mode = alc880_2_jack_modes, - .input_mux = &alc880_capture_source, + .input_mux = &alc880_f1734_capture_source, + .unsol_event = alc880_uniwill_p53_unsol_event, + .init_hook = alc880_uniwill_p53_hp_automute, }, [ALC880_ASUS] = { .mixers = { alc880_asus_mixer },
Connecting a headphone automatically mutes the speakers; it has always been this way.
The effects of your patch are the same as with mine, i.e. good.
I think this might also need to be changed then? --- a/pci/hda/patch_realtek.c Fri Feb 08 12:45:40 2008 +0100 +++ b/pci/hda/patch_realtek.c Sun Feb 10 18:49:57 2008 +0100 @@ -1320,8 +1320,8 @@ static struct snd_kcontrol_new alc880_f1 HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), - HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), - HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), { } /* end */ };
At Sun, 10 Feb 2008 19:48:34 +0100, M G wrote:
Connecting a headphone automatically mutes the speakers; it has always been this way.
The effects of your patch are the same as with mine, i.e. good.
OK, now applied to HG tree. Thanks.
Takashi
On Mon, Feb 11, 2008 at 2:51 PM, Takashi Iwai tiwai@suse.de wrote:
OK, now applied to HG tree. Thanks.
Takashi
It has already been a great improvement but I encountered 2 more problems:
On first use (i.e. when loading the module for the first time after compiling it) the mixer displayed Mic as capture source but I couldn't capture anything. When I switch to CD and then back to Mic it starts working. It seems that the value is initialized to 0x00 but there is no corresponding capture device on this model since the mic is 0x01 so it needs to be initialized to 0x01.
Another thing: I can set the capture volume to a maximum of 14dB. Above that the quality starts to degrade rapidly and at about 17dB it goes completely dead. With VREF50 I can raise the capture all the way up to 35dB.
diff -r 72360e8993f7 pci/hda/patch_realtek.c --- a/pci/hda/patch_realtek.c Thu Mar 06 16:58:35 2008 +0100 +++ b/pci/hda/patch_realtek.c Thu Mar 06 17:37:22 2008 +0100 @@ -1927,6 +1927,7 @@ static void alc880_uniwill_p53_unsol_eve * HP = 0x14, speaker-out = 0x15, mic = 0x18 */ static struct hda_verb alc880_pin_f1734_init_verbs[] = { + {0x07, AC_VERB_SET_CONNECT_SEL, 0x01}, {0x10, AC_VERB_SET_CONNECT_SEL, 0x02}, {0x11, AC_VERB_SET_CONNECT_SEL, 0x00}, {0x12, AC_VERB_SET_CONNECT_SEL, 0x01}, @@ -1939,7 +1940,7 @@ static struct hda_verb alc880_pin_f1734_
{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, - {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, + {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50}, {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
At Thu, 6 Mar 2008 18:15:32 +0100, M G wrote:
On Mon, Feb 11, 2008 at 2:51 PM, Takashi Iwai tiwai@suse.de wrote:
OK, now applied to HG tree. Thanks.
Takashi
It has already been a great improvement but I encountered 2 more problems:
On first use (i.e. when loading the module for the first time after compiling it) the mixer displayed Mic as capture source but I couldn't capture anything. When I switch to CD and then back to Mic it starts working. It seems that the value is initialized to 0x00 but there is no corresponding capture device on this model since the mic is 0x01 so it needs to be initialized to 0x01.
Another thing: I can set the capture volume to a maximum of 14dB. Above that the quality starts to degrade rapidly and at about 17dB it goes completely dead. With VREF50 I can raise the capture all the way up to 35dB.
Thanks for the patch. Could you give your sign-off together with a proper changelog to commit to the upstream?
Takashi
diff -r 72360e8993f7 pci/hda/patch_realtek.c --- a/pci/hda/patch_realtek.c Thu Mar 06 16:58:35 2008 +0100 +++ b/pci/hda/patch_realtek.c Thu Mar 06 17:37:22 2008 +0100 @@ -1927,6 +1927,7 @@ static void alc880_uniwill_p53_unsol_eve
- HP = 0x14, speaker-out = 0x15, mic = 0x18
*/ static struct hda_verb alc880_pin_f1734_init_verbs[] = {
- {0x07, AC_VERB_SET_CONNECT_SEL, 0x01}, {0x10, AC_VERB_SET_CONNECT_SEL, 0x02}, {0x11, AC_VERB_SET_CONNECT_SEL, 0x00}, {0x12, AC_VERB_SET_CONNECT_SEL, 0x01},
@@ -1939,7 +1940,7 @@ static struct hda_verb alc880_pin_f1734_
{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
- {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
- {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50}, {0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Fri, Mar 7, 2008 at 1:12 PM, Takashi Iwai tiwai@suse.de wrote:
Thanks for the patch. Could you give your sign-off together with a proper changelog to commit to the upstream?
Takashi
Here you go.
At Sun, 9 Mar 2008 11:37:09 +0100, M G wrote:
On Fri, Mar 7, 2008 at 1:12 PM, Takashi Iwai tiwai@suse.de wrote:
Thanks for the patch. Could you give your sign-off together with a proper changelog to commit to the upstream?
Takashi
Here you go. [2 F1734-microphone.patch <text/x-diff (base64)>] hda-intel - Fix microphone capture with ALC880 F1734 model
The default capture source should be the mic which is 0x01 on this model. In addition to that the change to VREF50 allows for higher capture volume.
Signed-off-by: Michael Gruber lists.mg@googlemail.com
Applied to HG tree. Thanks.
Takashi
participants (2)
-
M G
-
Takashi Iwai