Skip to content

Commit 2603ea4

Browse files
Jack Yubroonie
authored andcommitted
ASoC: rt1320-sdw: Add an approach to get new hardware advance gain
Add an approach to get new hardware advance gain, and if there is no advance gain with this approach, we can still get advance gain with original method. Signed-off-by: Jack Yu <jack.yu@realtek.com> Link: https://patch.msgid.link/20260410064225.662656-1-jack.yu@realtek.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 558f522 commit 2603ea4

2 files changed

Lines changed: 36 additions & 2 deletions

File tree

sound/soc/codecs/rt1320-sdw.c

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,13 +1013,34 @@ static void rt1320_set_advancemode(struct rt1320_sdw_priv *rt1320)
10131013
struct device *dev = &rt1320->sdw_slave->dev;
10141014
struct rt1320_datafixpoint r0_data[2];
10151015
unsigned short l_advancegain, r_advancegain;
1016+
FwPara_Get_HwSwGain audDriverDataHwSwGain = {0};
1017+
unsigned int HwAdvGain = 0;
10161018
int ret;
10171019

1020+
/* Get new hardware advance gain by ID 1300 */
1021+
ret = rt1320_fw_param_protocol(rt1320, RT1320_GET_PARAM, 1300,
1022+
&audDriverDataHwSwGain, sizeof(audDriverDataHwSwGain));
1023+
if (ret == 0) {
1024+
HwAdvGain = audDriverDataHwSwGain.HwAdvGain;
1025+
dev_dbg(dev, "%s, HwAdvGain=%d\n", __func__, HwAdvGain);
1026+
dev_dbg(dev, "%s, HwBasGain=%d\n", __func__, audDriverDataHwSwGain.HwBasGain);
1027+
dev_dbg(dev, "%s, SwAdvGain=%d\n", __func__, audDriverDataHwSwGain.SwAdvGain);
1028+
dev_dbg(dev, "%s, SwBasGain=%d\n", __func__, audDriverDataHwSwGain.SwBasGain);
1029+
} else {
1030+
dev_dbg(dev, "%s: param 1300 not supported, ret=%d\n", __func__, ret);
1031+
}
1032+
10181033
/* Get advance gain/r0 */
10191034
rt1320_fw_param_protocol(rt1320, RT1320_GET_PARAM, 6, &r0_data[0], sizeof(struct rt1320_datafixpoint));
10201035
rt1320_fw_param_protocol(rt1320, RT1320_GET_PARAM, 7, &r0_data[1], sizeof(struct rt1320_datafixpoint));
1021-
l_advancegain = r0_data[0].advancegain;
1022-
r_advancegain = r0_data[1].advancegain;
1036+
1037+
if (HwAdvGain != 0) {
1038+
l_advancegain = HwAdvGain & 0xffff;
1039+
r_advancegain = (HwAdvGain >> 16) & 0xffff;
1040+
} else {
1041+
l_advancegain = r0_data[0].advancegain;
1042+
r_advancegain = r0_data[1].advancegain;
1043+
}
10231044
dev_dbg(dev, "%s, LR advanceGain=0x%x 0x%x\n", __func__, l_advancegain, r_advancegain);
10241045

10251046
/* set R0 and enable protection by SetParameter id 6, 7 */

sound/soc/codecs/rt1320-sdw.h

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,19 @@ struct rt1320_datafixpoint {
121121
int invrs;
122122
};
123123

124+
typedef struct FwPara_HwSwGain {
125+
unsigned int SwAdvGain;
126+
unsigned int SwBasGain;
127+
unsigned int HwAdvGain;
128+
unsigned int HwBasGain;
129+
unsigned int reserve0;
130+
unsigned int reserve1;
131+
unsigned int reserve2;
132+
unsigned int reserve3;
133+
unsigned int reserve4;
134+
unsigned int reserve5;
135+
} __attribute__((packed)) FwPara_Get_HwSwGain;
136+
124137
struct rt1320_paramcmd {
125138
unsigned char moudleid;
126139
unsigned char commandtype;

0 commit comments

Comments
 (0)