Skip to content

Commit ff8aad0

Browse files
Stefan Bindingtiwai
authored andcommitted
ASoC: cs35l41: Move cs35l41 fs errata into shared code
This sequence is required to setup firmware, and will be needed for hda driver. Signed-off-by: Stefan Binding <sbinding@opensource.cirrus.com> Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20220509214703.4482-8-vitalyr@opensource.cirrus.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent caf7c1f commit ff8aad0

3 files changed

Lines changed: 35 additions & 24 deletions

File tree

include/sound/cs35l41.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,7 @@ int cs35l41_set_channels(struct device *dev, struct regmap *reg,
879879
int cs35l41_gpio_config(struct regmap *regmap, struct cs35l41_hw_cfg *hw_cfg);
880880
int cs35l41_set_cspl_mbox_cmd(struct device *dev, struct regmap *regmap,
881881
enum cs35l41_cspl_mbox_cmd cmd);
882+
int cs35l41_write_fs_errata(struct device *dev, struct regmap *regmap);
882883
int cs35l41_init_boost(struct device *dev, struct regmap *regmap,
883884
struct cs35l41_hw_cfg *hw_cfg);
884885
bool cs35l41_safe_reset(struct regmap *regmap, enum cs35l41_boost_type b_type);

sound/soc/codecs/cs35l41-lib.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,25 @@ static const struct reg_sequence cs35l41_revb2_errata_patch[] = {
667667
{ CS35L41_AMP_GAIN_CTRL, 0x00000000 },
668668
};
669669

670+
static const struct reg_sequence cs35l41_fs_errata_patch[] = {
671+
{ CS35L41_DSP1_RX1_RATE, 0x00000001 },
672+
{ CS35L41_DSP1_RX2_RATE, 0x00000001 },
673+
{ CS35L41_DSP1_RX3_RATE, 0x00000001 },
674+
{ CS35L41_DSP1_RX4_RATE, 0x00000001 },
675+
{ CS35L41_DSP1_RX5_RATE, 0x00000001 },
676+
{ CS35L41_DSP1_RX6_RATE, 0x00000001 },
677+
{ CS35L41_DSP1_RX7_RATE, 0x00000001 },
678+
{ CS35L41_DSP1_RX8_RATE, 0x00000001 },
679+
{ CS35L41_DSP1_TX1_RATE, 0x00000001 },
680+
{ CS35L41_DSP1_TX2_RATE, 0x00000001 },
681+
{ CS35L41_DSP1_TX3_RATE, 0x00000001 },
682+
{ CS35L41_DSP1_TX4_RATE, 0x00000001 },
683+
{ CS35L41_DSP1_TX5_RATE, 0x00000001 },
684+
{ CS35L41_DSP1_TX6_RATE, 0x00000001 },
685+
{ CS35L41_DSP1_TX7_RATE, 0x00000001 },
686+
{ CS35L41_DSP1_TX8_RATE, 0x00000001 },
687+
};
688+
670689
static const struct cs35l41_otp_map_element_t cs35l41_otp_map_map[] = {
671690
{
672691
.id = 0x01,
@@ -1263,6 +1282,19 @@ int cs35l41_set_cspl_mbox_cmd(struct device *dev, struct regmap *regmap,
12631282
}
12641283
EXPORT_SYMBOL_GPL(cs35l41_set_cspl_mbox_cmd);
12651284

1285+
int cs35l41_write_fs_errata(struct device *dev, struct regmap *regmap)
1286+
{
1287+
int ret;
1288+
1289+
ret = regmap_multi_reg_write(regmap, cs35l41_fs_errata_patch,
1290+
ARRAY_SIZE(cs35l41_fs_errata_patch));
1291+
if (ret < 0)
1292+
dev_err(dev, "Failed to write fs errata: %d\n", ret);
1293+
1294+
return ret;
1295+
}
1296+
EXPORT_SYMBOL_GPL(cs35l41_write_fs_errata);
1297+
12661298
MODULE_DESCRIPTION("CS35L41 library");
12671299
MODULE_AUTHOR("David Rhodes, Cirrus Logic Inc, <david.rhodes@cirrus.com>");
12681300
MODULE_AUTHOR("Lucas Tanure, Cirrus Logic Inc, <tanureal@opensource.cirrus.com>");

sound/soc/codecs/cs35l41.c

Lines changed: 2 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,25 +1093,6 @@ static int cs35l41_handle_pdata(struct device *dev, struct cs35l41_hw_cfg *hw_cf
10931093
return 0;
10941094
}
10951095

1096-
static const struct reg_sequence cs35l41_fs_errata_patch[] = {
1097-
{ CS35L41_DSP1_RX1_RATE, 0x00000001 },
1098-
{ CS35L41_DSP1_RX2_RATE, 0x00000001 },
1099-
{ CS35L41_DSP1_RX3_RATE, 0x00000001 },
1100-
{ CS35L41_DSP1_RX4_RATE, 0x00000001 },
1101-
{ CS35L41_DSP1_RX5_RATE, 0x00000001 },
1102-
{ CS35L41_DSP1_RX6_RATE, 0x00000001 },
1103-
{ CS35L41_DSP1_RX7_RATE, 0x00000001 },
1104-
{ CS35L41_DSP1_RX8_RATE, 0x00000001 },
1105-
{ CS35L41_DSP1_TX1_RATE, 0x00000001 },
1106-
{ CS35L41_DSP1_TX2_RATE, 0x00000001 },
1107-
{ CS35L41_DSP1_TX3_RATE, 0x00000001 },
1108-
{ CS35L41_DSP1_TX4_RATE, 0x00000001 },
1109-
{ CS35L41_DSP1_TX5_RATE, 0x00000001 },
1110-
{ CS35L41_DSP1_TX6_RATE, 0x00000001 },
1111-
{ CS35L41_DSP1_TX7_RATE, 0x00000001 },
1112-
{ CS35L41_DSP1_TX8_RATE, 0x00000001 },
1113-
};
1114-
11151096
static int cs35l41_dsp_init(struct cs35l41_private *cs35l41)
11161097
{
11171098
struct wm_adsp *dsp;
@@ -1132,12 +1113,9 @@ static int cs35l41_dsp_init(struct cs35l41_private *cs35l41)
11321113
dsp->cs_dsp.num_mems = ARRAY_SIZE(cs35l41_dsp1_regions);
11331114
dsp->cs_dsp.lock_regions = 0xFFFFFFFF;
11341115

1135-
ret = regmap_multi_reg_write(cs35l41->regmap, cs35l41_fs_errata_patch,
1136-
ARRAY_SIZE(cs35l41_fs_errata_patch));
1137-
if (ret < 0) {
1138-
dev_err(cs35l41->dev, "Failed to write fs errata: %d\n", ret);
1116+
ret = cs35l41_write_fs_errata(cs35l41->dev, cs35l41->regmap);
1117+
if (ret < 0)
11391118
return ret;
1140-
}
11411119

11421120
ret = wm_halo_init(dsp);
11431121
if (ret) {

0 commit comments

Comments
 (0)