Re:Re: [PATCH] ALSA: hda/conexant: Fix microphone mute after power-on reboot
os_dengxiang82 <[email protected]> Wed, 1 Jul 2026 16:18:00 +0800 (CST)
| Newsgroups | org.alsa-project.alsa-devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Takashi, This failure occurs during bootup as well as after runtime resume. Does runtime resume here refer to the resume handler, like .resume = cx_resume? or something else? Looking forward to your reply. xiang At 2026-07-01 15:37:22, "Takashi Iwai" <[email protected]> wrote: >On Wed, 01 Jul 2026 08:55:33 +0200, >dengxiang wrote: >> >> Some devices have mute settings in their firmware set by the factory. >> This is to stop popping noise when the devices turn on. But this setting >> makes the microphones unable to record sound properly. This patch >> solves this problem and is compatible with conexant chips. >> >> Signed-off-by: dengxiang <[email protected]> > >Hmm, this doesn't look like a right solution. > >Is it only the problem after the boot? Or is it an issue after the >runtime PM suspend? The amp value must be restored by the runtime >resume, and if this doesn't work expected, it's a thing to be >addressed there, not in the PCM hook at all. > > >thanks, > >Takashi > >> --- >> sound/hda/codecs/conexant.c | 21 +++++++++++++++++++++ >> 1 file changed, 21 insertions(+) >> >> diff --git a/sound/hda/codecs/conexant.c b/sound/hda/codecs/conexant.c >> index 3d92262763f6..3229f9ef5969 100644 >> --- a/sound/hda/codecs/conexant.c >> +++ b/sound/hda/codecs/conexant.c >> @@ -1184,6 +1184,24 @@ static void add_cx5051_fake_mutes(struct hda_codec *codec) >> spec->gen.dac_min_mute = true; >> } >> >> +static void cxt_fixed_mic_boost(struct hda_codec *codec, hda_nid_t node_id) >> +{ >> + struct conexant_spec *spec = codec->spec; >> + unsigned int value = 0; >> + >> + value = snd_hda_codec_read(codec, node_id, 0, AC_VERB_GET_AMP_GAIN_MUTE, 0); >> + snd_hda_codec_amp_stereo(codec, node_id, HDA_INPUT, 0, HDA_AMP_VOLMASK, value); >> +} >> + >> +static void cxt_capture_hook(struct hda_pcm_stream *hinfo, struct hda_codec *codec, >> + struct snd_pcm_substream *substream, int action) >> +{ >> + struct conexant_spec *spec = codec->spec; >> + hda_nid_t mux_pin = spec->gen.imux_pins[spec->gen.cur_mux[0]]; >> + >> + cxt_fixed_mic_boost(codec, mux_pin); >> +} >> + >> static int cx_probe(struct hda_codec *codec, const struct hda_device_id *id) >> { >> struct conexant_spec *spec; >> @@ -1271,6 +1289,9 @@ static int cx_probe(struct hda_codec *codec, const struct hda_device_id *id) >> if (err < 0) >> goto error; >> >> + if (spec->gen.pcm_capture_hook == NULL) >> + spec->gen.pcm_capture_hook = cxt_capture_hook; >> + >> /* Some laptops with Conexant chips show stalls in S3 resume, >> * which falls into the single-cmd mode. >> * Better to make reset, then. >> -- >> 2.39.5 >>