* [PATCH v1 0/3] ASoC: qcom: Add shikra LPASS RX/VA macro support
@ 2026-06-08 17:20 Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs Mohammad Rafi Shaik
` (2 more replies)
0 siblings, 3 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-08 17:20 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
This series adds shikra compatible support in LPASS RX and VA macro
codec drivers.
Patch 1 updates RX macro handling for codec v4.0 and adds the shikra
compatible with FS counter bypass support during MCLK enable.
Patch 2 extends VA macro support for shikra by adding v4.0 match data,
a shikra-specific regmap/default table including ADPT registers, and
ADPT and FS-control programming required by the platform.
Mohammad Rafi Shaik (3):
ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs
ASoC: qcom: lpass-rx-macro: Add shikra compatible
ASoC: qcom: lpass-va-macro: Add shikra compatible
.../bindings/sound/qcom,lpass-rx-macro.yaml | 1 +
.../bindings/sound/qcom,lpass-va-macro.yaml | 1 +
sound/soc/codecs/lpass-macro-common.h | 5 +
sound/soc/codecs/lpass-rx-macro.c | 14 +
sound/soc/codecs/lpass-va-macro.c | 276 ++++++++++++++++--
5 files changed, 276 insertions(+), 21 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs
2026-06-08 17:20 [PATCH v1 0/3] ASoC: qcom: Add shikra LPASS RX/VA macro support Mohammad Rafi Shaik
@ 2026-06-08 17:20 ` Mohammad Rafi Shaik
2026-06-08 17:29 ` sashiko-bot
2026-06-09 7:26 ` Krzysztof Kozlowski
2026-06-08 17:20 ` [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: " Mohammad Rafi Shaik
2 siblings, 2 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-08 17:20 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
Add bindings for Qualcomm shikra rx and va macro codec.
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
---
Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml | 1 +
Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml | 1 +
2 files changed, 2 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
index 2eed2277511f..07fe0dc51801 100644
--- a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
@@ -19,6 +19,7 @@ properties:
- qcom,sm8450-lpass-rx-macro
- qcom,sm8550-lpass-rx-macro
- qcom,sc8280xp-lpass-rx-macro
+ - qcom,shikra-lpass-rx-macro
- items:
- enum:
- qcom,kaanapali-lpass-rx-macro
diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
index 5c42b2b323ee..d43adaa2fbff 100644
--- a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
@@ -19,6 +19,7 @@ properties:
- qcom,sm8450-lpass-va-macro
- qcom,sm8550-lpass-va-macro
- qcom,sc8280xp-lpass-va-macro
+ - qcom,shikra-lpass-va-macro
- items:
- enum:
- qcom,glymur-lpass-va-macro
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible
2026-06-08 17:20 [PATCH v1 0/3] ASoC: qcom: Add shikra LPASS RX/VA macro support Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs Mohammad Rafi Shaik
@ 2026-06-08 17:20 ` Mohammad Rafi Shaik
2026-06-08 17:43 ` sashiko-bot
` (2 more replies)
2026-06-08 17:20 ` [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: " Mohammad Rafi Shaik
2 siblings, 3 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-08 17:20 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
Add shikra RX macro compatible data and hook it into the existing
LPASS codec v4.0 flow.
Map codec v4.0 to the 2.5+ RX register handling paths, and enable the
FS counter bypass bit during MCLK enable when the platform requests
LPASS_MACRO_FLAG_BYPASS_FS_CONTROL.
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
---
sound/soc/codecs/lpass-macro-common.h | 5 +++++
sound/soc/codecs/lpass-rx-macro.c | 14 ++++++++++++++
2 files changed, 19 insertions(+)
diff --git a/sound/soc/codecs/lpass-macro-common.h b/sound/soc/codecs/lpass-macro-common.h
index 10ad682019fa..86adad190a10 100644
--- a/sound/soc/codecs/lpass-macro-common.h
+++ b/sound/soc/codecs/lpass-macro-common.h
@@ -10,6 +10,8 @@
#define LPASS_MACRO_FLAG_HAS_NPL_CLOCK BIT(0)
/* The soundwire block should be internally reset at probe */
#define LPASS_MACRO_FLAG_RESET_SWR BIT(1)
+/* FS counter control bit[7] must be toggled (v4.0) */
+#define LPASS_MACRO_FLAG_BYPASS_FS_CONTROL BIT(2)
enum lpass_version {
LPASS_VER_9_0_0,
@@ -30,6 +32,7 @@ enum lpass_codec_version {
LPASS_CODEC_VERSION_2_7,
LPASS_CODEC_VERSION_2_8,
LPASS_CODEC_VERSION_2_9,
+ LPASS_CODEC_VERSION_4_0,
};
struct lpass_macro {
@@ -68,6 +71,8 @@ static inline const char *lpass_macro_get_codec_version_string(int version)
return "v2.7";
case LPASS_CODEC_VERSION_2_8:
return "v2.8";
+ case LPASS_CODEC_VERSION_4_0:
+ return "v4.0";
default:
break;
}
diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 6233aa9f5bc6..3a3dec6b14cd 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -646,6 +646,7 @@ struct rx_macro {
int clsh_users;
int rx_mclk_cnt;
enum lpass_codec_version codec_version;
+ bool bypass_fs_control;
int rxn_reg_stride;
int rxn_reg_stride2;
bool is_ear_mode_on;
@@ -1612,6 +1613,7 @@ static bool rx_is_rw_register(struct device *dev, unsigned int reg)
case LPASS_CODEC_VERSION_2_6:
case LPASS_CODEC_VERSION_2_7:
case LPASS_CODEC_VERSION_2_8:
+ case LPASS_CODEC_VERSION_4_0:
return rx_2_5_is_rw_register(dev, reg);
default:
break;
@@ -2043,6 +2045,11 @@ static void rx_macro_mclk_enable(struct rx_macro *rx, bool mclk_enable)
CDC_RX_CLK_MCLK2_ENABLE);
regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
CDC_RX_FS_MCLK_CNT_CLR_MASK, 0x00);
+
+ if (rx->bypass_fs_control)
+ regmap_update_bits(regmap,
+ CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
+ 0x80, 0x80);
regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
CDC_RX_FS_MCLK_CNT_EN_MASK,
CDC_RX_FS_MCLK_CNT_ENABLE);
@@ -3648,6 +3655,7 @@ static int rx_macro_component_probe(struct snd_soc_component *component)
case LPASS_CODEC_VERSION_2_6:
case LPASS_CODEC_VERSION_2_7:
case LPASS_CODEC_VERSION_2_8:
+ case LPASS_CODEC_VERSION_4_0:
controls = rx_macro_2_5_snd_controls;
num_controls = ARRAY_SIZE(rx_macro_2_5_snd_controls);
widgets = rx_macro_2_5_dapm_widgets;
@@ -3809,6 +3817,7 @@ static int rx_macro_probe(struct platform_device *pdev)
return PTR_ERR(base);
rx->codec_version = lpass_macro_get_codec_version();
+ rx->bypass_fs_control = !!(flags & LPASS_MACRO_FLAG_BYPASS_FS_CONTROL);
struct reg_default *reg_defaults __free(kfree) = NULL;
switch (rx->codec_version) {
@@ -3831,6 +3840,7 @@ static int rx_macro_probe(struct platform_device *pdev)
case LPASS_CODEC_VERSION_2_6:
case LPASS_CODEC_VERSION_2_7:
case LPASS_CODEC_VERSION_2_8:
+ case LPASS_CODEC_VERSION_4_0:
rx->rxn_reg_stride = 0xc0;
rx->rxn_reg_stride2 = 0x0;
def_count = ARRAY_SIZE(rx_defaults) + ARRAY_SIZE(rx_2_5_defaults);
@@ -3961,6 +3971,10 @@ static const struct of_device_id rx_macro_dt_match[] = {
}, {
.compatible = "qcom,sc8280xp-lpass-rx-macro",
.data = (void *)LPASS_MACRO_FLAG_HAS_NPL_CLOCK,
+ }, {
+ .compatible = "qcom,shikra-lpass-rx-macro",
+ .data = (void *)(LPASS_MACRO_FLAG_HAS_NPL_CLOCK |
+ LPASS_MACRO_FLAG_BYPASS_FS_CONTROL),
},
{ }
};
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: Add shikra compatible
2026-06-08 17:20 [PATCH v1 0/3] ASoC: qcom: Add shikra LPASS RX/VA macro support Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible Mohammad Rafi Shaik
@ 2026-06-08 17:20 ` Mohammad Rafi Shaik
2026-06-08 17:52 ` sashiko-bot
2026-06-09 9:15 ` Konrad Dybcio
2 siblings, 2 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-08 17:20 UTC (permalink / raw)
To: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
Add shikra specific VA macro data and register programming needed by
the LPASS codec v4.0 implementation.
This adds a shikra regmap/default table covering the ADPT register
range, wires new match data flags (bypass FS control and ADPT block
presence), and enables the ADPT control programming path during TX
decimator bring-up.
Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
---
sound/soc/codecs/lpass-va-macro.c | 276 +++++++++++++++++++++++++++---
1 file changed, 255 insertions(+), 21 deletions(-)
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index 528d5b167ecf..4a8daa07ec1c 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -155,7 +155,57 @@
#define CDC_VA_TX3_TX_PATH_SEC5 (0x05A4)
#define CDC_VA_TX3_TX_PATH_SEC6 (0x05A8)
+/* ADPT control registers - Shikra adaptive filter blocks */
+#define CDC_VA_CDC_ADPT0_ADPT_CTRL (0x0800)
+#define CDC_VA_CDC_ADPT0_ADPT_GAIN_0 (0x0804)
+#define CDC_VA_CDC_ADPT0_ADPT_GAIN_1 (0x0808)
+#define CDC_VA_CDC_ADPT0_DH_FSM_CTRL (0x080C)
+#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_0 (0x0810)
+#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_1 (0x0814)
+#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_2 (0x0818)
+#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_3 (0x081C)
+#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_4 (0x0820)
+#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_5 (0x0824)
+
+#define CDC_VA_CDC_ADPT1_ADPT_CTRL (0x0880)
+#define CDC_VA_CDC_ADPT1_ADPT_GAIN_0 (0x0884)
+#define CDC_VA_CDC_ADPT1_ADPT_GAIN_1 (0x0888)
+#define CDC_VA_CDC_ADPT1_DH_FSM_CTRL (0x088C)
+#define CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_0 (0x0890)
+#define CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_1 (0x0894)
+#define CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_2 (0x0898)
+#define CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_3 (0x089C)
+#define CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_4 (0x08A0)
+#define CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_5 (0x08A4)
+#define CDC_VA_CDC_ADPT1_DBG_CTRL (0x08B0)
+#define CDC_VA_CDC_ADPT1_DBG_PDM_RATE_CTRL_0 (0x08B2)
+#define CDC_VA_CDC_ADPT1_DBG_PDM_RATE_CTRL_1 (0x08B4)
+#define CDC_VA_CDC_ADPT1_SPARE0 (0x08B8)
+
+#define CDC_VA_CDC_ADPT2_ADPT_CTRL (0x0900)
+#define CDC_VA_CDC_ADPT2_ADPT_GAIN_0 (0x0904)
+#define CDC_VA_CDC_ADPT2_ADPT_GAIN_1 (0x0908)
+#define CDC_VA_CDC_ADPT2_DH_FSM_CTRL (0x090C)
+#define CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_0 (0x0910)
+#define CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_1 (0x0914)
+#define CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_2 (0x0918)
+#define CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_3 (0x091C)
+#define CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_4 (0x0920)
+#define CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_5 (0x0924)
+
+#define CDC_VA_CDC_ADPT3_ADPT_CTRL (0x0980)
+#define CDC_VA_CDC_ADPT3_ADPT_GAIN_0 (0x0984)
+#define CDC_VA_CDC_ADPT3_ADPT_GAIN_1 (0x0988)
+#define CDC_VA_CDC_ADPT3_DH_FSM_CTRL (0x098C)
+#define CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_0 (0x0990)
+#define CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_1 (0x0994)
+#define CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_2 (0x0998)
+#define CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_3 (0x099C)
+#define CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_4 (0x09A0)
+#define CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_5 (0x09A4)
+
#define VA_MAX_OFFSET (0x07A8)
+#define VA_SHIKRA_MAX_OFFSET (0x0980)
#define VA_MACRO_NUM_DECIMATORS 4
#define VA_MACRO_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
@@ -209,6 +259,8 @@ struct va_macro {
u16 dmic_clk_div;
bool has_swr_master;
bool has_npl_clk;
+ bool bypass_fs_control;
+ bool has_adpt_block;
int dec_mode[VA_MACRO_NUM_DECIMATORS];
struct regmap *regmap;
@@ -235,24 +287,12 @@ struct va_macro {
struct va_macro_data {
bool has_swr_master;
bool has_npl_clk;
+ bool bypass_fs_control;
+ bool has_adpt_block;
int version;
+ const struct regmap_config *regmap_config;
};
-static const struct va_macro_data sm8250_va_data = {
- .has_swr_master = false,
- .has_npl_clk = false,
- .version = LPASS_CODEC_VERSION_1_0,
-};
-
-static const struct va_macro_data sm8450_va_data = {
- .has_swr_master = true,
- .has_npl_clk = true,
-};
-
-static const struct va_macro_data sm8550_va_data = {
- .has_swr_master = true,
- .has_npl_clk = false,
-};
static bool va_is_volatile_register(struct device *dev, unsigned int reg)
{
@@ -424,6 +464,10 @@ static bool va_is_rw_register(struct device *dev, unsigned int reg)
case CDC_VA_TX3_TX_PATH_SEC4:
case CDC_VA_TX3_TX_PATH_SEC5:
case CDC_VA_TX3_TX_PATH_SEC6:
+ case CDC_VA_CDC_ADPT0_ADPT_CTRL:
+ case CDC_VA_CDC_ADPT1_ADPT_CTRL:
+ case CDC_VA_CDC_ADPT2_ADPT_CTRL:
+ case CDC_VA_CDC_ADPT3_ADPT_CTRL:
return true;
}
@@ -457,6 +501,174 @@ static const struct regmap_config va_regmap_config = {
.writeable_reg = va_is_rw_register,
};
+static const struct reg_default va_shikra_defaults[] = {
+ /* VA macro */
+ { CDC_VA_CLK_RST_CTRL_MCLK_CONTROL, 0x00},
+ { CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL, 0x00},
+ { CDC_VA_CLK_RST_CTRL_SWR_CONTROL, 0x00},
+ { CDC_VA_TOP_CSR_TOP_CFG0, 0x00},
+ { CDC_VA_TOP_CSR_DMIC0_CTL, 0x00},
+ { CDC_VA_TOP_CSR_DMIC1_CTL, 0x00},
+ { CDC_VA_TOP_CSR_DMIC2_CTL, 0x00},
+ { CDC_VA_TOP_CSR_DMIC3_CTL, 0x00},
+ { CDC_VA_TOP_CSR_DMIC_CFG, 0x80},
+ { CDC_VA_TOP_CSR_DEBUG_BUS, 0x00},
+ { CDC_VA_TOP_CSR_DEBUG_EN, 0x00},
+ { CDC_VA_TOP_CSR_TX_I2S_CTL, 0x0C},
+ { CDC_VA_TOP_CSR_I2S_CLK, 0x00},
+ { CDC_VA_TOP_CSR_I2S_RESET, 0x00},
+ { CDC_VA_TOP_CSR_CORE_ID_0, 0x00},
+ { CDC_VA_TOP_CSR_CORE_ID_1, 0x00},
+ { CDC_VA_TOP_CSR_CORE_ID_2, 0x00},
+ { CDC_VA_TOP_CSR_CORE_ID_3, 0x00},
+ { CDC_VA_TOP_CSR_SWR_MIC_CTL0, 0xEE},
+ { CDC_VA_TOP_CSR_SWR_MIC_CTL1, 0xEE},
+ { CDC_VA_TOP_CSR_SWR_MIC_CTL2, 0xEE},
+ { CDC_VA_TOP_CSR_SWR_CTRL, 0x06},
+ /* VA core */
+ { CDC_VA_INP_MUX_ADC_MUX0_CFG0, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX0_CFG1, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX1_CFG0, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX1_CFG1, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX2_CFG0, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX2_CFG1, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX3_CFG0, 0x00},
+ { CDC_VA_INP_MUX_ADC_MUX3_CFG1, 0x00},
+ { CDC_VA_TX0_TX_PATH_CTL, 0x04},
+ { CDC_VA_TX0_TX_PATH_CFG0, 0x10},
+ { CDC_VA_TX0_TX_PATH_CFG1, 0x0B},
+ { CDC_VA_TX0_TX_VOL_CTL, 0x00},
+ { CDC_VA_TX0_TX_PATH_SEC0, 0x00},
+ { CDC_VA_TX0_TX_PATH_SEC1, 0x00},
+ { CDC_VA_TX0_TX_PATH_SEC2, 0x01},
+ { CDC_VA_TX0_TX_PATH_SEC3, 0x3C},
+ { CDC_VA_TX0_TX_PATH_SEC4, 0x20},
+ { CDC_VA_TX0_TX_PATH_SEC5, 0x00},
+ { CDC_VA_TX0_TX_PATH_SEC6, 0x00},
+ { CDC_VA_TX0_TX_PATH_SEC7, 0x25},
+ { CDC_VA_TX1_TX_PATH_CTL, 0x04},
+ { CDC_VA_TX1_TX_PATH_CFG0, 0x10},
+ { CDC_VA_TX1_TX_PATH_CFG1, 0x0B},
+ { CDC_VA_TX1_TX_VOL_CTL, 0x00},
+ { CDC_VA_TX1_TX_PATH_SEC0, 0x00},
+ { CDC_VA_TX1_TX_PATH_SEC1, 0x00},
+ { CDC_VA_TX1_TX_PATH_SEC2, 0x01},
+ { CDC_VA_TX1_TX_PATH_SEC3, 0x3C},
+ { CDC_VA_TX1_TX_PATH_SEC4, 0x20},
+ { CDC_VA_TX1_TX_PATH_SEC5, 0x00},
+ { CDC_VA_TX1_TX_PATH_SEC6, 0x00},
+ { CDC_VA_TX2_TX_PATH_CTL, 0x04},
+ { CDC_VA_TX2_TX_PATH_CFG0, 0x10},
+ { CDC_VA_TX2_TX_PATH_CFG1, 0x0B},
+ { CDC_VA_TX2_TX_VOL_CTL, 0x00},
+ { CDC_VA_TX2_TX_PATH_SEC0, 0x00},
+ { CDC_VA_TX2_TX_PATH_SEC1, 0x00},
+ { CDC_VA_TX2_TX_PATH_SEC2, 0x01},
+ { CDC_VA_TX2_TX_PATH_SEC3, 0x3C},
+ { CDC_VA_TX2_TX_PATH_SEC4, 0x20},
+ { CDC_VA_TX2_TX_PATH_SEC5, 0x00},
+ { CDC_VA_TX2_TX_PATH_SEC6, 0x00},
+ { CDC_VA_TX3_TX_PATH_CTL, 0x04},
+ { CDC_VA_TX3_TX_PATH_CFG0, 0x10},
+ { CDC_VA_TX3_TX_PATH_CFG1, 0x0B},
+ { CDC_VA_TX3_TX_VOL_CTL, 0x00},
+ { CDC_VA_TX3_TX_PATH_SEC0, 0x00},
+ { CDC_VA_TX3_TX_PATH_SEC1, 0x00},
+ { CDC_VA_TX3_TX_PATH_SEC2, 0x01},
+ { CDC_VA_TX3_TX_PATH_SEC3, 0x3C},
+ { CDC_VA_TX3_TX_PATH_SEC4, 0x20},
+ { CDC_VA_TX3_TX_PATH_SEC5, 0x00},
+ { CDC_VA_TX3_TX_PATH_SEC6, 0x00},
+ /* ADPT blocks - Shikra adaptive filter control */
+
+ /* CDC ADPT0 - adaptive filter */
+ { CDC_VA_CDC_ADPT0_ADPT_CTRL, 0x51},
+ { CDC_VA_CDC_ADPT0_ADPT_GAIN_0, 0x11},
+ { CDC_VA_CDC_ADPT0_ADPT_GAIN_1, 0x01},
+ { CDC_VA_CDC_ADPT0_DH_FSM_CTRL, 0x02},
+ { CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_0, 0x77},
+ { CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_1, 0x64},
+ { CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_2, 0x00},
+ { CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_3, 0x41},
+ { CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_4, 0x04},
+ { CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_5, 0x01},
+
+ /* CDC ADPT1 */
+ { CDC_VA_CDC_ADPT1_ADPT_CTRL, 0x51},
+ { CDC_VA_CDC_ADPT1_ADPT_GAIN_0, 0x11},
+ { CDC_VA_CDC_ADPT1_ADPT_GAIN_1, 0x01},
+ { CDC_VA_CDC_ADPT1_DH_FSM_CTRL, 0x02},
+ { CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_0, 0x77},
+ { CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_1, 0x64},
+ { CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_2, 0x00},
+ { CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_3, 0x41},
+ { CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_4, 0x04},
+ { CDC_VA_CDC_ADPT1_CUTOFF_FSM_CTRL_5, 0x01},
+
+ /* CDC ADPT2 */
+ { CDC_VA_CDC_ADPT2_ADPT_CTRL, 0x51},
+ { CDC_VA_CDC_ADPT2_ADPT_GAIN_0, 0x11},
+ { CDC_VA_CDC_ADPT2_ADPT_GAIN_1, 0x01},
+ { CDC_VA_CDC_ADPT2_DH_FSM_CTRL, 0x02},
+ { CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_0, 0x77},
+ { CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_1, 0x64},
+ { CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_2, 0x00},
+ { CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_3, 0x41},
+ { CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_4, 0x04},
+ { CDC_VA_CDC_ADPT2_CUTOFF_FSM_CTRL_5, 0x01},
+
+ /* CDC ADPT3 */
+ { CDC_VA_CDC_ADPT3_ADPT_CTRL, 0x51},
+ { CDC_VA_CDC_ADPT3_ADPT_GAIN_0, 0x11},
+ { CDC_VA_CDC_ADPT3_ADPT_GAIN_1, 0x01},
+ { CDC_VA_CDC_ADPT3_DH_FSM_CTRL, 0x02},
+ { CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_0, 0x77},
+ { CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_1, 0x64},
+ { CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_2, 0x00},
+ { CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_3, 0x41},
+ { CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_4, 0x04},
+ { CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_5, 0x01},
+};
+
+static const struct regmap_config shikra_va_regmap_config = {
+ .name = "va_macro",
+ .reg_bits = 32,
+ .val_bits = 32,
+ .reg_stride = 4,
+ .cache_type = REGCACHE_FLAT,
+ .reg_defaults = va_shikra_defaults,
+ .num_reg_defaults = ARRAY_SIZE(va_shikra_defaults),
+ .max_register = VA_SHIKRA_MAX_OFFSET,
+ .volatile_reg = va_is_volatile_register,
+ .readable_reg = va_is_readable_register,
+ .writeable_reg = va_is_rw_register,
+};
+
+static const struct va_macro_data sm8250_va_data = {
+ .has_swr_master = false,
+ .has_npl_clk = false,
+ .version = LPASS_CODEC_VERSION_1_0,
+};
+
+static const struct va_macro_data sm8450_va_data = {
+ .has_swr_master = true,
+ .has_npl_clk = true,
+};
+
+static const struct va_macro_data shikra_va_data = {
+ .has_swr_master = true,
+ .has_npl_clk = true,
+ .bypass_fs_control = true,
+ .has_adpt_block = true,
+ .version = LPASS_CODEC_VERSION_4_0,
+ .regmap_config = &shikra_va_regmap_config,
+};
+
+static const struct va_macro_data sm8550_va_data = {
+ .has_swr_master = true,
+ .has_npl_clk = false,
+};
+
static int va_clk_rsc_fs_gen_request(struct va_macro *va, bool enable)
{
struct regmap *regmap = va->regmap;
@@ -469,6 +681,10 @@ static int va_clk_rsc_fs_gen_request(struct va_macro *va, bool enable)
regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
CDC_VA_FS_CONTROL_EN | CDC_VA_FS_COUNTER_CLR,
CDC_VA_FS_CONTROL_EN | CDC_VA_FS_COUNTER_CLR);
+
+ if (va->bypass_fs_control)
+ regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
+ 0x80, 0x80);
regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
CDC_VA_FS_CONTROL_EN | CDC_VA_FS_COUNTER_CLR,
CDC_VA_FS_CONTROL_EN);
@@ -497,7 +713,7 @@ static int va_macro_mclk_enable(struct va_macro *va, bool mclk_enable)
if (mclk_enable) {
va_clk_rsc_fs_gen_request(va, true);
regcache_mark_dirty(regmap);
- regcache_sync_region(regmap, 0x0, VA_MAX_OFFSET);
+ regcache_sync_region(regmap, 0x0, regmap_get_max_register(regmap));
} else {
va_clk_rsc_fs_gen_request(va, false);
}
@@ -743,6 +959,7 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
unsigned int decimator;
u16 tx_vol_ctl_reg, dec_cfg_reg, hpf_gate_reg;
u16 tx_gain_ctl_reg;
+ u16 adapt_ctrl;
u8 hpf_cut_off_freq;
struct va_macro *va = snd_soc_component_get_drvdata(comp);
@@ -757,6 +974,8 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
VA_MACRO_TX_PATH_OFFSET * decimator;
tx_gain_ctl_reg = CDC_VA_TX0_TX_VOL_CTL +
VA_MACRO_TX_PATH_OFFSET * decimator;
+ adapt_ctrl = CDC_VA_CDC_ADPT0_ADPT_CTRL +
+ (decimator * VA_MACRO_TX_PATH_OFFSET);
switch (event) {
case SND_SOC_DAPM_PRE_PMU:
@@ -766,6 +985,8 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
/* Enable TX PGA Mute */
break;
case SND_SOC_DAPM_POST_PMU:
+ if (va->has_adpt_block)
+ snd_soc_component_update_bits(comp, adapt_ctrl, 0xFF, 0x00);
/* Enable TX CLK */
snd_soc_component_update_bits(comp, tx_vol_ctl_reg,
CDC_VA_TX_PATH_CLK_EN_MASK,
@@ -1511,6 +1732,14 @@ static int va_macro_set_lpass_codec_version(struct va_macro *va)
default:
break;
}
+ } else if (maj == 4) {
+ switch (min) {
+ case 0:
+ version = LPASS_CODEC_VERSION_4_0;
+ break;
+ default:
+ break;
+ }
}
if (version == LPASS_CODEC_VERSION_UNKNOWN) {
@@ -1576,7 +1805,15 @@ static int va_macro_probe(struct platform_device *pdev)
goto err;
}
- va->regmap = devm_regmap_init_mmio(dev, base, &va_regmap_config);
+ data = of_device_get_match_data(dev);
+ va->has_swr_master = data->has_swr_master;
+ va->has_npl_clk = data->has_npl_clk;
+ va->bypass_fs_control = data->bypass_fs_control;
+ va->has_adpt_block = data->has_adpt_block;
+
+ va->regmap = devm_regmap_init_mmio(dev, base,
+ data->regmap_config ? data->regmap_config
+ : &va_regmap_config);
if (IS_ERR(va->regmap)) {
ret = -EINVAL;
goto err;
@@ -1584,10 +1821,6 @@ static int va_macro_probe(struct platform_device *pdev)
dev_set_drvdata(dev, va);
- data = of_device_get_match_data(dev);
- va->has_swr_master = data->has_swr_master;
- va->has_npl_clk = data->has_npl_clk;
-
/* mclk rate */
clk_set_rate(va->mclk, 2 * VA_MACRO_MCLK_FREQ);
@@ -1761,6 +1994,7 @@ static const struct of_device_id va_macro_dt_match[] = {
{ .compatible = "qcom,sm8450-lpass-va-macro", .data = &sm8450_va_data },
{ .compatible = "qcom,sm8550-lpass-va-macro", .data = &sm8550_va_data },
{ .compatible = "qcom,sc8280xp-lpass-va-macro", .data = &sm8450_va_data },
+ { .compatible = "qcom,shikra-lpass-va-macro", .data = &shikra_va_data },
{}
};
MODULE_DEVICE_TABLE(of, va_macro_dt_match);
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs
2026-06-08 17:20 ` [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs Mohammad Rafi Shaik
@ 2026-06-08 17:29 ` sashiko-bot
2026-06-09 7:26 ` Krzysztof Kozlowski
1 sibling, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-06-08 17:29 UTC (permalink / raw)
To: Mohammad Rafi Shaik; +Cc: devicetree, robh, conor+dt
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] The newly added `qcom,shikra-lpass-rx-macro` and `qcom,shikra-lpass-va-macro` compatible strings are omitted from the `allOf` conditional blocks that enforce clock constraints.
--
commit 77e5c459dc08293ac11d98a0baa94f68830a66ac
Author: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs
Add bindings for Qualcomm shikra rx and va macro codec.
> diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
> index 2eed2277511f8..07fe0dc51801b 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
> @@ -19,6 +19,7 @@ properties:
> - qcom,sm8450-lpass-rx-macro
> - qcom,sm8550-lpass-rx-macro
> - qcom,sc8280xp-lpass-rx-macro
> + - qcom,shikra-lpass-rx-macro
[Severity: Medium]
Should this new compatible string also be included in one of the allOf
conditional blocks below to enforce constraints on clocks and clock-names?
Without it, those properties might not be fully validated for this
hardware variant.
> - items:
> - enum:
> - qcom,kaanapali-lpass-rx-macro
> diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
> index 5c42b2b323ee4..d43adaa2fbff9 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
> @@ -19,6 +19,7 @@ properties:
> - qcom,sm8450-lpass-va-macro
> - qcom,sm8550-lpass-va-macro
> - qcom,sc8280xp-lpass-va-macro
> + - qcom,shikra-lpass-va-macro
[Severity: Medium]
Similarly, does qcom,shikra-lpass-va-macro need to be added to an allOf
conditional block to ensure its specific clock constraints are evaluated
during validation?
> - items:
> - enum:
> - qcom,glymur-lpass-va-macro
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260608172023.2965292-1-mohammad.rafi.shaik@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible
2026-06-08 17:20 ` [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible Mohammad Rafi Shaik
@ 2026-06-08 17:43 ` sashiko-bot
2026-06-09 7:28 ` Krzysztof Kozlowski
2026-06-09 9:11 ` Konrad Dybcio
2 siblings, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-06-08 17:43 UTC (permalink / raw)
To: Mohammad Rafi Shaik; +Cc: devicetree, conor+dt, robh
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
Pre-existing issues:
- [High] Race condition on `rx_mclk_users` reference counter between ALSA DAPM and the common clock framework.
--
commit 7e806c720683c8e53a8ab54c5095d11f817bb75e
Author: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
ASoC: qcom: lpass-rx-macro: Add shikra compatible
This commit adds shikra RX macro compatible data and hooks it into the
existing LPASS codec v4.0 flow. It maps codec v4.0 to the 2.5+ RX register
handling paths, and enables the FS counter bypass bit during MCLK enable
when requested.
> diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
> index 6233aa9f5bc6d..3a3dec6b14cda 100644
> --- a/sound/soc/codecs/lpass-rx-macro.c
> +++ b/sound/soc/codecs/lpass-rx-macro.c
[ ... ]
> @@ -2043,6 +2045,11 @@ static void rx_macro_mclk_enable(struct rx_macro *rx, bool mclk_enable)
> CDC_RX_CLK_MCLK2_ENABLE);
> regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
> CDC_RX_FS_MCLK_CNT_CLR_MASK, 0x00);
> +
> + if (rx->bypass_fs_control)
> + regmap_update_bits(regmap,
> + CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
> + 0x80, 0x80);
[Severity: High]
This is a pre-existing issue, but is there a race condition on the
rx->rx_mclk_users reference counter in rx_macro_mclk_enable() in
sound/soc/codecs/lpass-rx-macro.c?
The rx_macro_mclk_enable() function checks and modifies the rx->rx_mclk_users
reference counter while updating MCLK hardware registers. Since this is called
from two disjoint locking domains, the ALSA DAPM event callback
(rx_macro_mclk_event) holding the ALSA dapm_mutex, and the clock framework
callbacks (swclk_gate_enable or swclk_gate_disable) holding the clock
framework's prepare_lock, could concurrent executions clobber the reference
count?
Without a shared lock or atomic variable protecting rx_mclk_users, could this
data race result in the underlying hardware MCLK being incorrectly disabled
while still in use (causing audio failures or SoundWire bus hangs), or never
disabled (causing power leaks)?
> regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
> CDC_RX_FS_MCLK_CNT_EN_MASK,
> CDC_RX_FS_MCLK_CNT_ENABLE);
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260608172023.2965292-1-mohammad.rafi.shaik@oss.qualcomm.com?part=2
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: Add shikra compatible
2026-06-08 17:20 ` [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: " Mohammad Rafi Shaik
@ 2026-06-08 17:52 ` sashiko-bot
2026-06-09 9:15 ` Konrad Dybcio
1 sibling, 0 replies; 15+ messages in thread
From: sashiko-bot @ 2026-06-08 17:52 UTC (permalink / raw)
To: Mohammad Rafi Shaik; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] The max_register limit for the Shikra regmap is set to 0x0980, but the default register array contains registers up to 0x09A4, leading to regmap initialization failure.
- [High] The newly added Shikra ADPT filter configuration registers (except ADPT_CTRL) are missing from the register access whitelist, rendering them unwritable.
--
commit 440ac48eeb60479f95d4dd29234ca9afb10b5f8a
Author: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
ASoC: qcom: lpass-va-macro: Add shikra compatible
This commit adds shikra specific VA macro data and register programming
needed by the LPASS codec v4.0 implementation. It includes a shikra regmap
table, new match data flags, and enables ADPT control programming.
> diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
> index 528d5b167ecff..4a8daa07ec1c6 100644
> --- a/sound/soc/codecs/lpass-va-macro.c
> +++ b/sound/soc/codecs/lpass-va-macro.c
> @@ -155,7 +155,57 @@
[ ... ]
> #define VA_MAX_OFFSET (0x07A8)
> +#define VA_SHIKRA_MAX_OFFSET (0x0980)
[Severity: High]
Does this offset limit need to be higher?
The max_register limit for the Shikra regmap is set to 0x0980 here, but
the va_shikra_defaults array contains registers up to 0x09A4
(CDC_VA_CDC_ADPT3_CUTOFF_FSM_CTRL_5).
During probe, devm_regmap_init_mmio() validates that all default registers
fall within the [0, max_register] range. Because 0x09A4 is greater than
0x0980, it seems regmap_init() will reject the defaults with -EINVAL,
causing the probe to fail.
>
> #define VA_MACRO_NUM_DECIMATORS 4
> #define VA_MACRO_RATES (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |\
[ ... ]
> @@ -424,6 +464,10 @@ static bool va_is_rw_register(struct device *dev, unsigned int reg)
> case CDC_VA_TX3_TX_PATH_SEC4:
> case CDC_VA_TX3_TX_PATH_SEC5:
> case CDC_VA_TX3_TX_PATH_SEC6:
> + case CDC_VA_CDC_ADPT0_ADPT_CTRL:
> + case CDC_VA_CDC_ADPT1_ADPT_CTRL:
> + case CDC_VA_CDC_ADPT2_ADPT_CTRL:
> + case CDC_VA_CDC_ADPT3_ADPT_CTRL:
> return true;
> }
[Severity: High]
Should the other newly added Shikra ADPT filter configuration registers be
included in this whitelist?
The patch adds numerous adaptive filter configuration registers like
ADPT_GAIN_0, ADPT_GAIN_1, DH_FSM_CTRL, and CUTOFF_FSM_CTRL_*. However, only
the 4 base CDC_VA_CDC_ADPTx_ADPT_CTRL registers are whitelisted here.
Since this function is provided as the regmap's .writeable_reg callback, the
regmap core will likely consider the remaining 36 ADPT registers to be
inaccessible, preventing the hardware adaptive filters from receiving their
intended configuration.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260608172023.2965292-1-mohammad.rafi.shaik@oss.qualcomm.com?part=3
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs
2026-06-08 17:20 ` [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs Mohammad Rafi Shaik
2026-06-08 17:29 ` sashiko-bot
@ 2026-06-09 7:26 ` Krzysztof Kozlowski
2026-06-29 4:45 ` Mohammad Rafi Shaik
1 sibling, 1 reply; 15+ messages in thread
From: Krzysztof Kozlowski @ 2026-06-09 7:26 UTC (permalink / raw)
To: Mohammad Rafi Shaik
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
linux-arm-msm, linux-sound, devicetree, linux-kernel
On Mon, Jun 08, 2026 at 10:50:21PM +0530, Mohammad Rafi Shaik wrote:
> Add bindings for Qualcomm shikra rx and va macro codec.
Which are not compatible with older variants because?
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible
2026-06-08 17:20 ` [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible Mohammad Rafi Shaik
2026-06-08 17:43 ` sashiko-bot
@ 2026-06-09 7:28 ` Krzysztof Kozlowski
2026-06-29 4:51 ` Mohammad Rafi Shaik
2026-06-09 9:11 ` Konrad Dybcio
2 siblings, 1 reply; 15+ messages in thread
From: Krzysztof Kozlowski @ 2026-06-09 7:28 UTC (permalink / raw)
To: Mohammad Rafi Shaik
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
linux-arm-msm, linux-sound, devicetree, linux-kernel
On Mon, Jun 08, 2026 at 10:50:22PM +0530, Mohammad Rafi Shaik wrote:
> @@ -3648,6 +3655,7 @@ static int rx_macro_component_probe(struct snd_soc_component *component)
> case LPASS_CODEC_VERSION_2_6:
> case LPASS_CODEC_VERSION_2_7:
> case LPASS_CODEC_VERSION_2_8:
> + case LPASS_CODEC_VERSION_4_0:
> controls = rx_macro_2_5_snd_controls;
> num_controls = ARRAY_SIZE(rx_macro_2_5_snd_controls);
> widgets = rx_macro_2_5_dapm_widgets;
> @@ -3809,6 +3817,7 @@ static int rx_macro_probe(struct platform_device *pdev)
> return PTR_ERR(base);
>
> rx->codec_version = lpass_macro_get_codec_version();
> + rx->bypass_fs_control = !!(flags & LPASS_MACRO_FLAG_BYPASS_FS_CONTROL);
Is this specific to Shikra or LPASS v4 codec version? Commit msg
suggests latter, so detectable from version, no?
> struct reg_default *reg_defaults __free(kfree) = NULL;
>
> switch (rx->codec_version) {
> @@ -3831,6 +3840,7 @@ static int rx_macro_probe(struct platform_device *pdev)
> case LPASS_CODEC_VERSION_2_6:
> case LPASS_CODEC_VERSION_2_7:
> case LPASS_CODEC_VERSION_2_8:
> + case LPASS_CODEC_VERSION_4_0:
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible
2026-06-08 17:20 ` [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible Mohammad Rafi Shaik
2026-06-08 17:43 ` sashiko-bot
2026-06-09 7:28 ` Krzysztof Kozlowski
@ 2026-06-09 9:11 ` Konrad Dybcio
2026-06-29 5:00 ` Mohammad Rafi Shaik
2 siblings, 1 reply; 15+ messages in thread
From: Konrad Dybcio @ 2026-06-09 9:11 UTC (permalink / raw)
To: Mohammad Rafi Shaik, Srinivas Kandagatla, Liam Girdwood,
Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Jaroslav Kysela, Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
On 6/8/26 7:20 PM, Mohammad Rafi Shaik wrote:
> Add shikra RX macro compatible data and hook it into the existing
> LPASS codec v4.0 flow.
>
> Map codec v4.0 to the 2.5+ RX register handling paths, and enable the
> FS counter bypass bit during MCLK enable when the platform requests
> LPASS_MACRO_FLAG_BYPASS_FS_CONTROL.
>
> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
> ---
[...]
> @@ -2043,6 +2045,11 @@ static void rx_macro_mclk_enable(struct rx_macro *rx, bool mclk_enable)
> CDC_RX_CLK_MCLK2_ENABLE);
> regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
> CDC_RX_FS_MCLK_CNT_CLR_MASK, 0x00);
> +
> + if (rx->bypass_fs_control)
> + regmap_update_bits(regmap,
> + CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
> + 0x80, 0x80);
regmap_set_bits()
Konrad
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: Add shikra compatible
2026-06-08 17:20 ` [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: " Mohammad Rafi Shaik
2026-06-08 17:52 ` sashiko-bot
@ 2026-06-09 9:15 ` Konrad Dybcio
2026-06-29 5:03 ` Mohammad Rafi Shaik
1 sibling, 1 reply; 15+ messages in thread
From: Konrad Dybcio @ 2026-06-09 9:15 UTC (permalink / raw)
To: Mohammad Rafi Shaik, Srinivas Kandagatla, Liam Girdwood,
Mark Brown, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Jaroslav Kysela, Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
On 6/8/26 7:20 PM, Mohammad Rafi Shaik wrote:
> Add shikra specific VA macro data and register programming needed by
> the LPASS codec v4.0 implementation.
>
> This adds a shikra regmap/default table covering the ADPT register
> range, wires new match data flags (bypass FS control and ADPT block
> presence), and enables the ADPT control programming path during TX
> decimator bring-up.
>
> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
> ---
[...]
> +/* ADPT control registers - Shikra adaptive filter blocks */
> +#define CDC_VA_CDC_ADPT0_ADPT_CTRL (0x0800)
> +#define CDC_VA_CDC_ADPT0_ADPT_GAIN_0 (0x0804)
> +#define CDC_VA_CDC_ADPT0_ADPT_GAIN_1 (0x0808)
> +#define CDC_VA_CDC_ADPT0_DH_FSM_CTRL (0x080C)
> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_0 (0x0810)
> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_1 (0x0814)
> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_2 (0x0818)
> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_3 (0x081C)
> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_4 (0x0820)
> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_5 (0x0824)
Please use lowercase hex and drop the parentheses
[...]
> +static const struct reg_default va_shikra_defaults[] = {
> + /* VA macro */
> + { CDC_VA_CLK_RST_CTRL_MCLK_CONTROL, 0x00},
> + { CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL, 0x00},
> + { CDC_VA_CLK_RST_CTRL_SWR_CONTROL, 0x00},
lowercase hex likewise, please keep a consistent space before the closing
curly bracket
[...]
> + if (va->bypass_fs_control)
> + regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
> + 0x80, 0x80);
regmap_set_bits()
[...]
> case SND_SOC_DAPM_POST_PMU:
> + if (va->has_adpt_block)
> + snd_soc_component_update_bits(comp, adapt_ctrl, 0xFF, 0x00);
Can you define these magic numbers?
[...]
> + va->regmap = devm_regmap_init_mmio(dev, base,
> + data->regmap_config ? data->regmap_config
> + : &va_regmap_config);
data->regmap_config ?: &va_regmap_config
Konrad
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs
2026-06-09 7:26 ` Krzysztof Kozlowski
@ 2026-06-29 4:45 ` Mohammad Rafi Shaik
0 siblings, 0 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-29 4:45 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
linux-arm-msm, linux-sound, devicetree, linux-kernel
On 6/9/2026 12:56 PM, Krzysztof Kozlowski wrote:
> On Mon, Jun 08, 2026 at 10:50:21PM +0530, Mohammad Rafi Shaik wrote:
>> Add bindings for Qualcomm shikra rx and va macro codec.
>
> Which are not compatible with older variants because?
>
These are not compatible with older variants because Shikra requires a
newer codec version with changes that are not supported by the existing
bindings. In particular, Shikra introduces an additional adhoc register
block, making the previous implementation unsuitable. Hence, new
bindings are added specifically for Shikra RX and VA macros.
Thanks,
Rafi.
> Best regards,
> Krzysztof
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible
2026-06-09 7:28 ` Krzysztof Kozlowski
@ 2026-06-29 4:51 ` Mohammad Rafi Shaik
0 siblings, 0 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-29 4:51 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: Srinivas Kandagatla, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai,
linux-arm-msm, linux-sound, devicetree, linux-kernel
On 6/9/2026 12:58 PM, Krzysztof Kozlowski wrote:
> On Mon, Jun 08, 2026 at 10:50:22PM +0530, Mohammad Rafi Shaik wrote:
>> @@ -3648,6 +3655,7 @@ static int rx_macro_component_probe(struct snd_soc_component *component)
>> case LPASS_CODEC_VERSION_2_6:
>> case LPASS_CODEC_VERSION_2_7:
>> case LPASS_CODEC_VERSION_2_8:
>> + case LPASS_CODEC_VERSION_4_0:
>> controls = rx_macro_2_5_snd_controls;
>> num_controls = ARRAY_SIZE(rx_macro_2_5_snd_controls);
>> widgets = rx_macro_2_5_dapm_widgets;
>> @@ -3809,6 +3817,7 @@ static int rx_macro_probe(struct platform_device *pdev)
>> return PTR_ERR(base);
>>
>> rx->codec_version = lpass_macro_get_codec_version();
>> + rx->bypass_fs_control = !!(flags & LPASS_MACRO_FLAG_BYPASS_FS_CONTROL);
>
> Is this specific to Shikra or LPASS v4 codec version? Commit msg
> suggests latter, so detectable from version, no?
>
Agree, this should not be Shikra-specific.
The behavior is tied to the LPASS codec version, so it’s better to
configure it based on the detected version rather than flags.
I’ll update the implementation accordingly in the next revision.
Thanks & Regards,
Rafi.
>> struct reg_default *reg_defaults __free(kfree) = NULL;
>>
>> switch (rx->codec_version) {
>> @@ -3831,6 +3840,7 @@ static int rx_macro_probe(struct platform_device *pdev)
>> case LPASS_CODEC_VERSION_2_6:
>> case LPASS_CODEC_VERSION_2_7:
>> case LPASS_CODEC_VERSION_2_8:
>> + case LPASS_CODEC_VERSION_4_0:
>
> Best regards,
> Krzysztof
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible
2026-06-09 9:11 ` Konrad Dybcio
@ 2026-06-29 5:00 ` Mohammad Rafi Shaik
0 siblings, 0 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-29 5:00 UTC (permalink / raw)
To: Konrad Dybcio, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
On 6/9/2026 2:41 PM, Konrad Dybcio wrote:
> On 6/8/26 7:20 PM, Mohammad Rafi Shaik wrote:
>> Add shikra RX macro compatible data and hook it into the existing
>> LPASS codec v4.0 flow.
>>
>> Map codec v4.0 to the 2.5+ RX register handling paths, and enable the
>> FS counter bypass bit during MCLK enable when the platform requests
>> LPASS_MACRO_FLAG_BYPASS_FS_CONTROL.
>>
>> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
>> ---
>
> [...]
>
>> @@ -2043,6 +2045,11 @@ static void rx_macro_mclk_enable(struct rx_macro *rx, bool mclk_enable)
>> CDC_RX_CLK_MCLK2_ENABLE);
>> regmap_update_bits(regmap, CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
>> CDC_RX_FS_MCLK_CNT_CLR_MASK, 0x00);
>> +
>> + if (rx->bypass_fs_control)
>> + regmap_update_bits(regmap,
>> + CDC_RX_CLK_RST_CTRL_FS_CNT_CONTROL,
>> + 0x80, 0x80);
>
> regmap_set_bits()
>
Ack, will fix it in the next revision.
Thanks,
Rafi.
> Konrad
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: Add shikra compatible
2026-06-09 9:15 ` Konrad Dybcio
@ 2026-06-29 5:03 ` Mohammad Rafi Shaik
0 siblings, 0 replies; 15+ messages in thread
From: Mohammad Rafi Shaik @ 2026-06-29 5:03 UTC (permalink / raw)
To: Konrad Dybcio, Srinivas Kandagatla, Liam Girdwood, Mark Brown,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
Takashi Iwai
Cc: linux-arm-msm, linux-sound, devicetree, linux-kernel
On 6/9/2026 2:45 PM, Konrad Dybcio wrote:
> On 6/8/26 7:20 PM, Mohammad Rafi Shaik wrote:
>> Add shikra specific VA macro data and register programming needed by
>> the LPASS codec v4.0 implementation.
>>
>> This adds a shikra regmap/default table covering the ADPT register
>> range, wires new match data flags (bypass FS control and ADPT block
>> presence), and enables the ADPT control programming path during TX
>> decimator bring-up.
>>
>> Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com>
>> ---
>
> [...]
>
>> +/* ADPT control registers - Shikra adaptive filter blocks */
>> +#define CDC_VA_CDC_ADPT0_ADPT_CTRL (0x0800)
>> +#define CDC_VA_CDC_ADPT0_ADPT_GAIN_0 (0x0804)
>> +#define CDC_VA_CDC_ADPT0_ADPT_GAIN_1 (0x0808)
>> +#define CDC_VA_CDC_ADPT0_DH_FSM_CTRL (0x080C)
>> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_0 (0x0810)
>> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_1 (0x0814)
>> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_2 (0x0818)
>> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_3 (0x081C)
>> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_4 (0x0820)
>> +#define CDC_VA_CDC_ADPT0_CUTOFF_FSM_CTRL_5 (0x0824)
>
> Please use lowercase hex and drop the parentheses
>
will fix it in the next revision.
> [...]
>
>> +static const struct reg_default va_shikra_defaults[] = {
>> + /* VA macro */
>> + { CDC_VA_CLK_RST_CTRL_MCLK_CONTROL, 0x00},
>> + { CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL, 0x00},
>> + { CDC_VA_CLK_RST_CTRL_SWR_CONTROL, 0x00},
>
> lowercase hex likewise, please keep a consistent space before the closing
> curly bracket
>
Ack,
> [...]
>
>> + if (va->bypass_fs_control)
>> + regmap_update_bits(regmap, CDC_VA_CLK_RST_CTRL_FS_CNT_CONTROL,
>> + 0x80, 0x80);
>
> regmap_set_bits()
>
> [...]
>
>> case SND_SOC_DAPM_POST_PMU:
>> + if (va->has_adpt_block)
>> + snd_soc_component_update_bits(comp, adapt_ctrl, 0xFF, 0x00);
>
> Can you define these magic numbers?
>
sure, will define and use the same.
> [...]
>
>> + va->regmap = devm_regmap_init_mmio(dev, base,
>> + data->regmap_config ? data->regmap_config
>> + : &va_regmap_config);
>
> data->regmap_config ?: &va_regmap_config
>
Will fix in the next revision,
Thanks & regards,
Rafi.
> Konrad
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2026-06-29 5:03 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-08 17:20 [PATCH v1 0/3] ASoC: qcom: Add shikra LPASS RX/VA macro support Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 1/3] ASoC: dt-bindings: qcom: Add Shikra rx and va macro codecs Mohammad Rafi Shaik
2026-06-08 17:29 ` sashiko-bot
2026-06-09 7:26 ` Krzysztof Kozlowski
2026-06-29 4:45 ` Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 2/3] ASoC: qcom: lpass-rx-macro: Add shikra compatible Mohammad Rafi Shaik
2026-06-08 17:43 ` sashiko-bot
2026-06-09 7:28 ` Krzysztof Kozlowski
2026-06-29 4:51 ` Mohammad Rafi Shaik
2026-06-09 9:11 ` Konrad Dybcio
2026-06-29 5:00 ` Mohammad Rafi Shaik
2026-06-08 17:20 ` [PATCH v1 3/3] ASoC: qcom: lpass-va-macro: " Mohammad Rafi Shaik
2026-06-08 17:52 ` sashiko-bot
2026-06-09 9:15 ` Konrad Dybcio
2026-06-29 5:03 ` Mohammad Rafi Shaik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox