Linux Sound subsystem development
 help / color / mirror / Atom feed
* [PATCH] Correct boost volume
@ 2025-06-06 11:33 feng.liu
  2025-06-06 20:28 ` kernel test robot
  0 siblings, 1 reply; 2+ messages in thread
From: feng.liu @ 2025-06-06 11:33 UTC (permalink / raw)
  To: perex, tiwai; +Cc: linux-sound, linux-kernel, feng.liu

Read the Boost Level configured for input pins in the BIOS 
 init verbs, and restore these settings during audio recording. 
 This addresses issues of low recording volume or excessive 
 background noise caused by incorrect boost configurations. 

Signed-off-by: feng.liu <feng.liu@senarytech.com>

---
 sound/pci/hda/patch_conexant.c | 46 ++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 34874039ad4..77101363e06 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -43,6 +43,8 @@ struct conexant_spec {
 	unsigned int gpio_mute_led_mask;
 	unsigned int gpio_mic_led_mask;
 	bool is_cx8070_sn6140;
+
+	unsigned char init_imux_boost_val[HDA_MAX_NUM_INPUTS];
 };
 
 
@@ -1178,6 +1180,48 @@ 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,
+	unsigned char node_id,
+	unsigned char mic_boost)
+{
+	unsigned char value = 0;
+
+	value = snd_hda_codec_read(codec, node_id, 0, AC_VERB_GET_AMP_GAIN_MUTE, 0);
+	if (value != mic_boost)
+		snd_hda_codec_amp_stereo(codec, node_id, HDA_INPUT, 0, HDA_AMP_VOLMASK, mic_boost);
+}
+
+static void cxt_cap_sync_hook(struct hda_codec *codec,
+					 struct snd_kcontrol *kcontrol,
+					 struct snd_ctl_elem_value *ucontrol)
+{
+	struct conexant_spec *spec = codec->spec;
+	hda_nid_t mux_pin = spec->gen.imux_pins[spec->gen.cur_mux[0]];
+
+	if (spec->init_imux_boost_val[mux_pin])
+		cxt_fixed_mic_boost(codec, mux_pin, spec->init_imux_boost_val[mux_pin]);
+}
+
+static int cxt_get_defaut_capture_gain_boost(struct hda_codec *codec)
+{
+	struct conexant_spec *spec = codec->spec;
+	int i;
+	unsigned int boost;
+
+	for (i = 0; i < HDA_MAX_NUM_INPUTS; i++) {
+		if (spec->gen.imux_pins[i] == 0)
+			continue;
+
+		boost = snd_hda_codec_read(codec, spec->gen.imux_pins[i],
+			0, AC_VERB_GET_AMP_GAIN_MUTE, 0);
+		spec->init_imux_boost_val[spec->gen.imux_pins[i]] = boost;
+		codec_info(codec, "%s, node_id = %x, mic_boost =%x", __func__,
+			spec->gen.imux_pins[i], boost);
+	}
+
+	spec->gen.cap_sync_hook = cxt_cap_sync_hook;
+}
+
 static int patch_conexant_auto(struct hda_codec *codec)
 {
 	struct conexant_spec *spec;
@@ -1245,6 +1289,8 @@ static int patch_conexant_auto(struct hda_codec *codec)
 	if (!spec->gen.vmaster_mute.hook && spec->dynamic_eapd)
 		spec->gen.vmaster_mute.hook = cx_auto_vmaster_hook;
 
+	cxt_get_defaut_capture_gain_boost(codec);
+
 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
 
 	err = snd_hda_parse_pin_defcfg(codec, &spec->gen.autocfg, NULL,
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] Correct boost volume
  2025-06-06 11:33 [PATCH] Correct boost volume feng.liu
@ 2025-06-06 20:28 ` kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2025-06-06 20:28 UTC (permalink / raw)
  To: feng.liu, perex, tiwai; +Cc: oe-kbuild-all, linux-sound, linux-kernel, feng.liu

Hi feng.liu,

kernel test robot noticed the following build warnings:

[auto build test WARNING on tiwai-sound/for-next]
[also build test WARNING on tiwai-sound/for-linus linus/master v6.15 next-20250606]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/feng-liu/Correct-boost-volume/20250606-201348
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git for-next
patch link:    https://lore.kernel.org/r/20250606113349.129746-1-feng.liu%40senarytech.com
patch subject: [PATCH] Correct boost volume
config: i386-buildonly-randconfig-002-20250607 (https://download.01.org/0day-ci/archive/20250607/202506070421.thMBn9rY-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250607/202506070421.thMBn9rY-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202506070421.thMBn9rY-lkp@intel.com/

All warnings (new ones prefixed by >>):

   sound/pci/hda/patch_conexant.c: In function 'cxt_get_defaut_capture_gain_boost':
>> sound/pci/hda/patch_conexant.c:1223:1: warning: no return statement in function returning non-void [-Wreturn-type]
    1223 | }
         | ^


vim +1223 sound/pci/hda/patch_conexant.c

  1204	
  1205	static int cxt_get_defaut_capture_gain_boost(struct hda_codec *codec)
  1206	{
  1207		struct conexant_spec *spec = codec->spec;
  1208		int i;
  1209		unsigned int boost;
  1210	
  1211		for (i = 0; i < HDA_MAX_NUM_INPUTS; i++) {
  1212			if (spec->gen.imux_pins[i] == 0)
  1213				continue;
  1214	
  1215			boost = snd_hda_codec_read(codec, spec->gen.imux_pins[i],
  1216				0, AC_VERB_GET_AMP_GAIN_MUTE, 0);
  1217			spec->init_imux_boost_val[spec->gen.imux_pins[i]] = boost;
  1218			codec_info(codec, "%s, node_id = %x, mic_boost =%x", __func__,
  1219				spec->gen.imux_pins[i], boost);
  1220		}
  1221	
  1222		spec->gen.cap_sync_hook = cxt_cap_sync_hook;
> 1223	}
  1224	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-06-06 20:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-06 11:33 [PATCH] Correct boost volume feng.liu
2025-06-06 20:28 ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox