summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>2024-06-25 19:57:35 +0300
committerMark Brown <broonie@kernel.org>2024-06-26 18:34:54 +0300
commitebc1a54051b58d1aa3a8855faac8bf16b88b8af7 (patch)
tree1b1764916d449028d3c9eac037ed07dc83d7539a
parent727de4fbc5466c7150482b532f2b7f7e514134f3 (diff)
downloadlinux-ebc1a54051b58d1aa3a8855faac8bf16b88b8af7.tar.xz
ASoC: codecs: lpass-macro: Gracefully handle unknown version
Qualcomm LPASS macro codec driver parses registers in order to detect version of the codec. It recognizes codecs v2.0 - v2.8, however we know that there are earlier versions and 'enum lpass_codec_version' has also v1.0, v1.1 and v1.2. If by any chance we run on unrecognized version, driver will use random value from the stack as the codec version. Fix it by mapping such cases to an enum of value 0: LPASS_CODEC_VERSION_UNKNOWN. Fixes: 378918d59181 ("ASoC: codecs: lpass-macro: add helpers to get codec version") Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Link: https://patch.msgid.link/20240625165736.722106-1-krzysztof.kozlowski@linaro.org Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/codecs/lpass-macro-common.h3
-rw-r--r--sound/soc/codecs/lpass-va-macro.c3
2 files changed, 4 insertions, 2 deletions
diff --git a/sound/soc/codecs/lpass-macro-common.h b/sound/soc/codecs/lpass-macro-common.h
index f6f1bfe8eb77..94697d0ba8c9 100644
--- a/sound/soc/codecs/lpass-macro-common.h
+++ b/sound/soc/codecs/lpass-macro-common.h
@@ -19,7 +19,8 @@ enum lpass_version {
};
enum lpass_codec_version {
- LPASS_CODEC_VERSION_1_0 = 1,
+ LPASS_CODEC_VERSION_UNKNOWN,
+ LPASS_CODEC_VERSION_1_0,
LPASS_CODEC_VERSION_1_1,
LPASS_CODEC_VERSION_1_2,
LPASS_CODEC_VERSION_2_0,
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index b0006f4ce8a2..b852cc7ffad9 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -1463,7 +1463,8 @@ undefined_rate:
static void va_macro_set_lpass_codec_version(struct va_macro *va)
{
- int core_id_0 = 0, core_id_1 = 0, core_id_2 = 0, version;
+ int core_id_0 = 0, core_id_1 = 0, core_id_2 = 0;
+ int version = LPASS_CODEC_VERSION_UNKNOWN;
regmap_read(va->regmap, CDC_VA_TOP_CSR_CORE_ID_0, &core_id_0);
regmap_read(va->regmap, CDC_VA_TOP_CSR_CORE_ID_1, &core_id_1);