struct device *dev = &rt1320->sdw_slave->dev;
struct rt1320_datafixpoint r0_data[2];
unsigned short l_advancegain, r_advancegain;
+ FwPara_Get_HwSwGain audDriverDataHwSwGain = {0};
+ unsigned int HwAdvGain = 0;
int ret;
+ /* Get new hardware advance gain by ID 1300 */
+ ret = rt1320_fw_param_protocol(rt1320, RT1320_GET_PARAM, 1300,
+ &audDriverDataHwSwGain, sizeof(audDriverDataHwSwGain));
+ if (ret == 0) {
+ HwAdvGain = audDriverDataHwSwGain.HwAdvGain;
+ dev_dbg(dev, "%s, HwAdvGain=%d\n", __func__, HwAdvGain);
+ dev_dbg(dev, "%s, HwBasGain=%d\n", __func__, audDriverDataHwSwGain.HwBasGain);
+ dev_dbg(dev, "%s, SwAdvGain=%d\n", __func__, audDriverDataHwSwGain.SwAdvGain);
+ dev_dbg(dev, "%s, SwBasGain=%d\n", __func__, audDriverDataHwSwGain.SwBasGain);
+ } else {
+ dev_dbg(dev, "%s: param 1300 not supported, ret=%d\n", __func__, ret);
+ }
+
/* Get advance gain/r0 */
rt1320_fw_param_protocol(rt1320, RT1320_GET_PARAM, 6, &r0_data[0], sizeof(struct rt1320_datafixpoint));
rt1320_fw_param_protocol(rt1320, RT1320_GET_PARAM, 7, &r0_data[1], sizeof(struct rt1320_datafixpoint));
- l_advancegain = r0_data[0].advancegain;
- r_advancegain = r0_data[1].advancegain;
+
+ if (HwAdvGain != 0) {
+ l_advancegain = HwAdvGain & 0xffff;
+ r_advancegain = (HwAdvGain >> 16) & 0xffff;
+ } else {
+ l_advancegain = r0_data[0].advancegain;
+ r_advancegain = r0_data[1].advancegain;
+ }
dev_dbg(dev, "%s, LR advanceGain=0x%x 0x%x\n", __func__, l_advancegain, r_advancegain);
/* set R0 and enable protection by SetParameter id 6, 7 */