ASoC: rt721-sdca: fix boost gain calculation error

Fix the boost gain calculation error in rt721_sdca_set_gain_get.
This patch is specific for "FU33 Boost Volume".

Signed-off-by: Jack Yu <jack.yu@realtek.com>
Link: https://patch.msgid.link/1b18fcde41c64d6fa85451d523c0434a@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Jack Yu
2025-06-24 02:59:28 +00:00
committed by Mark Brown
parent dc6458ed95
commit ff21a6ec0f
+19 -4
View File
@@ -430,6 +430,7 @@ static int rt721_sdca_set_gain_get(struct snd_kcontrol *kcontrol,
unsigned int read_l, read_r, ctl_l = 0, ctl_r = 0;
unsigned int adc_vol_flag = 0;
const unsigned int interval_offset = 0xc0;
const unsigned int tendA = 0x200;
const unsigned int tendB = 0xa00;
if (strstr(ucontrol->id.name, "FU1E Capture Volume") ||
@@ -439,9 +440,16 @@ static int rt721_sdca_set_gain_get(struct snd_kcontrol *kcontrol,
regmap_read(rt721->mbq_regmap, mc->reg, &read_l);
regmap_read(rt721->mbq_regmap, mc->rreg, &read_r);
if (mc->shift == 8) /* boost gain */
if (mc->shift == 8) {
/* boost gain */
ctl_l = read_l / tendB;
else {
} else if (mc->shift == 1) {
/* FU33 boost gain */
if (read_l == 0x8000 || read_l == 0xfe00)
ctl_l = 0;
else
ctl_l = read_l / tendA + 1;
} else {
if (adc_vol_flag)
ctl_l = mc->max - (((0x1e00 - read_l) & 0xffff) / interval_offset);
else
@@ -449,9 +457,16 @@ static int rt721_sdca_set_gain_get(struct snd_kcontrol *kcontrol,
}
if (read_l != read_r) {
if (mc->shift == 8) /* boost gain */
if (mc->shift == 8) {
/* boost gain */
ctl_r = read_r / tendB;
else { /* ADC/DAC gain */
} else if (mc->shift == 1) {
/* FU33 boost gain */
if (read_r == 0x8000 || read_r == 0xfe00)
ctl_r = 0;
else
ctl_r = read_r / tendA + 1;
} else { /* ADC/DAC gain */
if (adc_vol_flag)
ctl_r = mc->max - (((0x1e00 - read_r) & 0xffff) / interval_offset);
else