summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2023-04-18 19:08:24 +0100
committerMark Brown <broonie@kernel.org>2023-04-18 19:08:24 +0100
commitcd3beeb8c62473ac5ffee8ad7a8890f0363cf1f0 (patch)
tree82907ff733998afd51651a20fb613a64ccedf77f
parent60ba2fda5280528e70fa26b44e36d1530f6d1d7e (diff)
parentd29a966b72fb370128096393961f2c456ff24e3d (diff)
downloadlinux-cd3beeb8c62473ac5ffee8ad7a8890f0363cf1f0.tar.gz
linux-cd3beeb8c62473ac5ffee8ad7a8890f0363cf1f0.tar.bz2
linux-cd3beeb8c62473ac5ffee8ad7a8890f0363cf1f0.zip
ASoC: cs35l56: Updates for B0 silicon
Merge series from Richard Fitzgerald <rf@opensource.cirrus.com>: These patches make some small changes to align with the B0 silicon revision.
-rw-r--r--include/sound/cs35l56.h10
-rw-r--r--sound/soc/codecs/cs35l56-shared.c34
-rw-r--r--sound/soc/codecs/cs35l56.c30
3 files changed, 8 insertions, 66 deletions
diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h
index b3300bce74f4..002042b1c73c 100644
--- a/include/sound/cs35l56.h
+++ b/include/sound/cs35l56.h
@@ -43,8 +43,6 @@
#define CS35L56_SWIRE_DP3_CH2_INPUT 0x0004C74
#define CS35L56_SWIRE_DP3_CH3_INPUT 0x0004C78
#define CS35L56_SWIRE_DP3_CH4_INPUT 0x0004C7C
-#define CS35L56_SWIRE_DP3_CH5_INPUT 0x0004C80
-#define CS35L56_SWIRE_DP3_CH6_INPUT 0x0004C84
#define CS35L56_IRQ1_CFG 0x000E000
#define CS35L56_IRQ1_STATUS 0x000E004
#define CS35L56_IRQ1_EINT_1 0x000E010
@@ -181,12 +179,11 @@
#define CS35L56_INPUT_SRC_DSP1TX8 0x39
#define CS35L56_INPUT_SRC_TEMPMON 0x3A
#define CS35L56_INPUT_SRC_INTERPOLATOR 0x40
-#define CS35L56_INPUT_SRC_SWIRE_RX1 0x44
-#define CS35L56_INPUT_SRC_SWIRE_RX2 0x45
-#define CS35L56_INPUT_SRC_SWIRE_RX3 0x46
+#define CS35L56_INPUT_SRC_SWIRE_DP1_CHANNEL1 0x44
+#define CS35L56_INPUT_SRC_SWIRE_DP1_CHANNEL2 0x45
#define CS35L56_INPUT_MASK 0x7F
-#define CS35L56_NUM_INPUT_SRC 22
+#define CS35L56_NUM_INPUT_SRC 21
/* ASP formats */
#define CS35L56_ASP_FMT_DSP_A 0
@@ -262,7 +259,6 @@ extern const struct cs_dsp_region cs35l56_dsp1_regions[CS35L56_NUM_DSP_REGIONS];
extern const char * const cs35l56_tx_input_texts[CS35L56_NUM_INPUT_SRC];
extern const unsigned int cs35l56_tx_input_values[CS35L56_NUM_INPUT_SRC];
-void cs35l56_patch(struct device *dev, struct regmap *regmap, u8 revid);
void cs35l56_reread_firmware_registers(struct device *dev, struct regmap *regmap);
int cs35l56_get_bclk_freq_id(unsigned int freq);
void cs35l56_fill_supply_names(struct regulator_bulk_data *data);
diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
index d8bc06ad4888..60da8c75b7b9 100644
--- a/sound/soc/codecs/cs35l56-shared.c
+++ b/sound/soc/codecs/cs35l56-shared.c
@@ -28,8 +28,6 @@ static const struct reg_default cs35l56_reg_defaults[] = {
{ CS35L56_SWIRE_DP3_CH2_INPUT, 0x00000019 },
{ CS35L56_SWIRE_DP3_CH3_INPUT, 0x00000029 },
{ CS35L56_SWIRE_DP3_CH4_INPUT, 0x00000028 },
- { CS35L56_SWIRE_DP3_CH5_INPUT, 0x00000018 },
- { CS35L56_SWIRE_DP3_CH6_INPUT, 0x00000018 },
{ CS35L56_IRQ1_CFG, 0x00000000 },
{ CS35L56_IRQ1_MASK_1, 0x83ffffff },
{ CS35L56_IRQ1_MASK_2, 0xffff7fff },
@@ -42,29 +40,6 @@ static const struct reg_default cs35l56_reg_defaults[] = {
/* CS35L56_MAIN_POSTURE_NUMBER - soft register, no default */
};
-/*
- * The Ax devices have different default register values to that of B0,
- * establish a common set of register defaults.
- */
-static const struct reg_sequence cs35l56_reva_patch[] = {
- { CS35L56_SWIRE_DP3_CH5_INPUT, 0x00000018 },
- { CS35L56_SWIRE_DP3_CH6_INPUT, 0x00000018 },
-};
-
-void cs35l56_patch(struct device *dev, struct regmap *regmap, u8 revid)
-{
- int ret;
-
- if (revid >= CS35L56_REVID_B0)
- return;
-
- ret = regmap_register_patch(regmap, cs35l56_reva_patch,
- ARRAY_SIZE(cs35l56_reva_patch));
- if (ret)
- dev_err(dev, "Failed to apply patch: %d\n", ret);
-}
-EXPORT_SYMBOL_NS_GPL(cs35l56_patch, SND_SOC_CS35L56_SHARED);
-
static bool cs35l56_is_dsp_memory(unsigned int reg)
{
switch (reg) {
@@ -114,8 +89,6 @@ static bool cs35l56_readable_reg(struct device *dev, unsigned int reg)
case CS35L56_SWIRE_DP3_CH2_INPUT:
case CS35L56_SWIRE_DP3_CH3_INPUT:
case CS35L56_SWIRE_DP3_CH4_INPUT:
- case CS35L56_SWIRE_DP3_CH5_INPUT:
- case CS35L56_SWIRE_DP3_CH6_INPUT:
case CS35L56_IRQ1_CFG:
case CS35L56_IRQ1_STATUS:
case CS35L56_IRQ1_EINT_1 ... CS35L56_IRQ1_EINT_8:
@@ -305,7 +278,7 @@ const char * const cs35l56_tx_input_texts[] = {
"None", "ASP1RX1", "ASP1RX2", "VMON", "IMON", "ERRVOL", "CLASSH",
"VDDBMON", "VBSTMON", "DSP1TX1", "DSP1TX2", "DSP1TX3", "DSP1TX4",
"DSP1TX5", "DSP1TX6", "DSP1TX7", "DSP1TX8", "TEMPMON",
- "INTERPOLATOR", "SDW1RX1", "SDW1RX2", "SDW2RX1",
+ "INTERPOLATOR", "SDW1RX1", "SDW1RX2",
};
EXPORT_SYMBOL_NS_GPL(cs35l56_tx_input_texts, SND_SOC_CS35L56_SHARED);
@@ -329,9 +302,8 @@ const unsigned int cs35l56_tx_input_values[] = {
CS35L56_INPUT_SRC_DSP1TX8,
CS35L56_INPUT_SRC_TEMPMON,
CS35L56_INPUT_SRC_INTERPOLATOR,
- CS35L56_INPUT_SRC_SWIRE_RX1,
- CS35L56_INPUT_SRC_SWIRE_RX2,
- CS35L56_INPUT_SRC_SWIRE_RX3,
+ CS35L56_INPUT_SRC_SWIRE_DP1_CHANNEL1,
+ CS35L56_INPUT_SRC_SWIRE_DP1_CHANNEL2,
};
EXPORT_SYMBOL_NS_GPL(cs35l56_tx_input_values, SND_SOC_CS35L56_SHARED);
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index 0f4a94b02ef8..c0a857cfb8cb 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -166,24 +166,6 @@ static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_sdw1tx4_enum,
static const struct snd_kcontrol_new sdw1_tx4_mux =
SOC_DAPM_ENUM("SDW1TX4 SRC", cs35l56_sdw1tx4_enum);
-static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_sdw1tx5_enum,
- CS35L56_SWIRE_DP3_CH5_INPUT,
- 0, CS35L56_SWIRETXn_SRC_MASK,
- cs35l56_tx_input_texts,
- cs35l56_tx_input_values);
-
-static const struct snd_kcontrol_new sdw1_tx5_mux =
- SOC_DAPM_ENUM("SDW1TX5 SRC", cs35l56_sdw1tx5_enum);
-
-static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_sdw1tx6_enum,
- CS35L56_SWIRE_DP3_CH6_INPUT,
- 0, CS35L56_SWIRETXn_SRC_MASK,
- cs35l56_tx_input_texts,
- cs35l56_tx_input_values);
-
-static const struct snd_kcontrol_new sdw1_tx6_mux =
- SOC_DAPM_ENUM("SDW1TX6 SRC", cs35l56_sdw1tx6_enum);
-
static int cs35l56_play_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{
@@ -251,8 +233,6 @@ static const struct snd_soc_dapm_widget cs35l56_dapm_widgets[] = {
SND_SOC_DAPM_MUX("SDW1 TX2 Source", SND_SOC_NOPM, 0, 0, &sdw1_tx2_mux),
SND_SOC_DAPM_MUX("SDW1 TX3 Source", SND_SOC_NOPM, 0, 0, &sdw1_tx3_mux),
SND_SOC_DAPM_MUX("SDW1 TX4 Source", SND_SOC_NOPM, 0, 0, &sdw1_tx4_mux),
- SND_SOC_DAPM_MUX("SDW1 TX5 Source", SND_SOC_NOPM, 0, 0, &sdw1_tx5_mux),
- SND_SOC_DAPM_MUX("SDW1 TX6 Source", SND_SOC_NOPM, 0, 0, &sdw1_tx6_mux),
SND_SOC_DAPM_SIGGEN("VMON ADC"),
SND_SOC_DAPM_SIGGEN("IMON ADC"),
@@ -318,14 +298,10 @@ static const struct snd_soc_dapm_route cs35l56_audio_map[] = {
CS35L56_SRC_ROUTE("SDW1 TX2")
CS35L56_SRC_ROUTE("SDW1 TX3")
CS35L56_SRC_ROUTE("SDW1 TX4")
- CS35L56_SRC_ROUTE("SDW1 TX5")
- CS35L56_SRC_ROUTE("SDW1 TX6")
{ "SDW1 Capture", NULL, "SDW1 TX1 Source" },
{ "SDW1 Capture", NULL, "SDW1 TX2 Source" },
{ "SDW1 Capture", NULL, "SDW1 TX3 Source" },
{ "SDW1 Capture", NULL, "SDW1 TX4 Source" },
- { "SDW1 Capture", NULL, "SDW1 TX5 Source" },
- { "SDW1 Capture", NULL, "SDW1 TX6 Source" },
};
static int cs35l56_dsp_event(struct snd_soc_dapm_widget *w,
@@ -779,7 +755,7 @@ static struct snd_soc_dai_driver cs35l56_dai[] = {
.capture = {
.stream_name = "SDW1 Capture",
.channels_min = 1,
- .channels_max = 6,
+ .channels_max = 4,
.rates = CS35L56_RATES,
.formats = CS35L56_TX_FORMATS,
},
@@ -1535,9 +1511,7 @@ int cs35l56_init(struct cs35l56_private *cs35l56)
dev_info(cs35l56->dev, "Cirrus Logic CS35L56%s Rev %02X OTP%d\n",
cs35l56->secured ? "s" : "", cs35l56->rev, otpid);
- cs35l56_patch(cs35l56->dev, cs35l56->regmap, cs35l56->rev);
-
- /* Wake source interrupts default to unmasked, so mask them */
+ /* Wake source and *_BLOCKED interrupts default to unmasked, so mask them */
regmap_write(cs35l56->regmap, CS35L56_IRQ1_MASK_20, 0xffffffff);
regmap_update_bits(cs35l56->regmap, CS35L56_IRQ1_MASK_1,
CS35L56_AMP_SHORT_ERR_EINT1_MASK,