Skip to content

Commit eefb831

Browse files
Stefan Bindingbroonie
authored andcommitted
ASoC: cs35l41: Update DSP1RX5/6 Sources for DSP config
Currently, all ASoC systems are set to use VPMON for DSP1RX5_SRC, however, this is required only for internal boost systems. External boost systems require VBSTMON instead of VPMON to be the input to DSP1RX5_SRC. Shared Boost Active acts like Internal boost (requires VPMON). Shared Boost Passive acts like External boost (requires VBSTMON) All systems require DSP1RX6_SRC to be set to VBSTMON. Signed-off-by: Stefan Binding <[email protected]> Reviewed-by: Richard Fitzgerald <[email protected]> Link: https://msgid.link/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 2e411e9 commit eefb831

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

sound/soc/codecs/cs35l41.c

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,7 @@ static int cs35l41_handle_pdata(struct device *dev, struct cs35l41_hw_cfg *hw_cf
10941094
static int cs35l41_dsp_init(struct cs35l41_private *cs35l41)
10951095
{
10961096
struct wm_adsp *dsp;
1097+
uint32_t dsp1rx5_src;
10971098
int ret;
10981099

10991100
dsp = &cs35l41->dsp;
@@ -1113,16 +1114,29 @@ static int cs35l41_dsp_init(struct cs35l41_private *cs35l41)
11131114
return ret;
11141115
}
11151116

1116-
ret = regmap_write(cs35l41->regmap, CS35L41_DSP1_RX5_SRC,
1117-
CS35L41_INPUT_SRC_VPMON);
1117+
switch (cs35l41->hw_cfg.bst_type) {
1118+
case CS35L41_INT_BOOST:
1119+
case CS35L41_SHD_BOOST_ACTV:
1120+
dsp1rx5_src = CS35L41_INPUT_SRC_VPMON;
1121+
break;
1122+
case CS35L41_EXT_BOOST:
1123+
case CS35L41_SHD_BOOST_PASS:
1124+
dsp1rx5_src = CS35L41_INPUT_SRC_VBSTMON;
1125+
break;
1126+
default:
1127+
dev_err(cs35l41->dev, "wm_halo_init failed - Invalid Boost Type: %d\n",
1128+
cs35l41->hw_cfg.bst_type);
1129+
goto err_dsp;
1130+
}
1131+
1132+
ret = regmap_write(cs35l41->regmap, CS35L41_DSP1_RX5_SRC, dsp1rx5_src);
11181133
if (ret < 0) {
1119-
dev_err(cs35l41->dev, "Write INPUT_SRC_VPMON failed: %d\n", ret);
1134+
dev_err(cs35l41->dev, "Write DSP1RX5_SRC: %d failed: %d\n", dsp1rx5_src, ret);
11201135
goto err_dsp;
11211136
}
1122-
ret = regmap_write(cs35l41->regmap, CS35L41_DSP1_RX6_SRC,
1123-
CS35L41_INPUT_SRC_CLASSH);
1137+
ret = regmap_write(cs35l41->regmap, CS35L41_DSP1_RX6_SRC, CS35L41_INPUT_SRC_VBSTMON);
11241138
if (ret < 0) {
1125-
dev_err(cs35l41->dev, "Write INPUT_SRC_CLASSH failed: %d\n", ret);
1139+
dev_err(cs35l41->dev, "Write CS35L41_INPUT_SRC_VBSTMON failed: %d\n", ret);
11261140
goto err_dsp;
11271141
}
11281142
ret = regmap_write(cs35l41->regmap, CS35L41_DSP1_RX7_SRC,

0 commit comments

Comments
 (0)