This patch set is to add support for lpass sc7280 based targets.
Upadate compatible name and change of bulk clock voting to individual
clock voting in digital codec va, rx, tx macro drivers.
Srinivasa Rao Mandadapu (7):
ASoC: qcom: Add compatible names in va,wsa,rx,tx codec drivers for
sc7280
ASoC: qcom: dt-bindings: Add compatible names for lpass sc7280 digital
codecs
ASoC: codecs: tx-macro: Change mic control registers to volatile
ASoC: codecs: lpass-va-macro: Change bulk voting to individual clock
voting
ASoC: codecs: lpass-rx-macro: Change bulk voting to individual clock
voting
ASoC: codecs: lpass-tx-macro: Change bulk voting to individual clock
voting
ASoC: codecs: lpass-va-macro: set mclk clock rate correctly
.../bindings/sound/qcom,lpass-rx-macro.yaml | 4 +-
.../bindings/sound/qcom,lpass-tx-macro.yaml | 4 +-
.../bindings/sound/qcom,lpass-va-macro.yaml | 4 +-
.../bindings/sound/qcom,lpass-wsa-macro.yaml | 4 +-
sound/soc/codecs/lpass-rx-macro.c | 69 ++++++++++++------
sound/soc/codecs/lpass-tx-macro.c | 81 ++++++++++++++++------
sound/soc/codecs/lpass-va-macro.c | 49 ++++++++-----
sound/soc/codecs/lpass-wsa-macro.c | 1 +
8 files changed, 153 insertions(+), 63 deletions(-)
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Change bulk clock frequency voting to individual voting.
Fixes: 908e6b1df26e (ASoC: codecs: lpass-va-macro: Add support to VA Macro)
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
sound/soc/codecs/lpass-va-macro.c | 46 ++++++++++++++++++++++++---------------
1 file changed, 28 insertions(+), 18 deletions(-)
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index d312a14..0ea39ae 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -193,7 +193,10 @@ struct va_macro {
int dec_mode[VA_MACRO_NUM_DECIMATORS];
struct regmap *regmap;
- struct clk_bulk_data clks[VA_NUM_CLKS_MAX];
+ struct clk *mclk;
+ struct clk *macro;
+ struct clk *dcodec;
+
struct clk_hw hw;
s32 dmic_0_1_clk_cnt;
@@ -1321,7 +1324,7 @@ static const struct clk_ops fsgen_gate_ops = {
static int va_macro_register_fsgen_output(struct va_macro *va)
{
- struct clk *parent = va->clks[2].clk;
+ struct clk *parent = va->mclk;
struct device *dev = va->dev;
struct device_node *np = dev->of_node;
const char *parent_clk_name;
@@ -1404,15 +1407,18 @@ static int va_macro_probe(struct platform_device *pdev)
return -ENOMEM;
va->dev = dev;
- va->clks[0].id = "macro";
- va->clks[1].id = "dcodec";
- va->clks[2].id = "mclk";
- ret = devm_clk_bulk_get(dev, VA_NUM_CLKS_MAX, va->clks);
- if (ret) {
- dev_err(dev, "Error getting VA Clocks (%d)\n", ret);
- return ret;
- }
+ va->macro = devm_clk_get_optional(dev, "macro");
+ if (IS_ERR(va->macro))
+ return PTR_ERR(va->macro);
+
+ va->dcodec = devm_clk_get_optional(dev, "dcodec");
+ if (IS_ERR(va->dcodec))
+ return PTR_ERR(va->dcodec);
+
+ va->mclk = devm_clk_get(dev, "mclk");
+ if (IS_ERR(va->mclk))
+ return PTR_ERR(va->mclk);
ret = of_property_read_u32(dev->of_node, "qcom,dmic-sample-rate",
&sample_rate);
@@ -1426,10 +1432,11 @@ static int va_macro_probe(struct platform_device *pdev)
}
/* mclk rate */
- clk_set_rate(va->clks[1].clk, VA_MACRO_MCLK_FREQ);
- ret = clk_bulk_prepare_enable(VA_NUM_CLKS_MAX, va->clks);
- if (ret)
- return ret;
+ clk_set_rate(va->mclk, VA_MACRO_MCLK_FREQ);
+
+ clk_prepare_enable(va->mclk);
+ clk_prepare_enable(va->macro);
+ clk_prepare_enable(va->dcodec);
base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base)) {
@@ -1457,8 +1464,9 @@ static int va_macro_probe(struct platform_device *pdev)
return ret;
err:
- clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
-
+ clk_disable_unprepare(va->mclk);
+ clk_disable_unprepare(va->macro);
+ clk_disable_unprepare(va->dcodec);
return ret;
}
@@ -1466,8 +1474,10 @@ static int va_macro_remove(struct platform_device *pdev)
{
struct va_macro *va = dev_get_drvdata(&pdev->dev);
- clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
-
+ of_clk_del_provider(pdev->dev.of_node);
+ clk_disable_unprepare(va->mclk);
+ clk_disable_unprepare(va->macro);
+ clk_disable_unprepare(va->dcodec);
return 0;
}
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Change bulk clock frequency voting to individual voting.
Fixes: c39667ddcfc5 (ASoC: codecs: lpass-tx-macro: add support for lpass tx macro)
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
sound/soc/codecs/lpass-tx-macro.c | 67 +++++++++++++++++++++++++++------------
1 file changed, 47 insertions(+), 20 deletions(-)
diff --git a/sound/soc/codecs/lpass-tx-macro.c b/sound/soc/codecs/lpass-tx-macro.c
index e65b592..78e5e0b 100644
--- a/sound/soc/codecs/lpass-tx-macro.c
+++ b/sound/soc/codecs/lpass-tx-macro.c
@@ -6,6 +6,7 @@
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <sound/soc.h>
#include <sound/soc-dapm.h>
@@ -258,7 +259,11 @@ struct tx_macro {
unsigned long active_ch_cnt[TX_MACRO_MAX_DAIS];
unsigned long active_decimator[TX_MACRO_MAX_DAIS];
struct regmap *regmap;
- struct clk_bulk_data clks[TX_NUM_CLKS_MAX];
+ struct clk *mclk;
+ struct clk *npl;
+ struct clk *macro;
+ struct clk *dcodec;
+ struct clk *fsgen;
struct clk_hw hw;
bool dec_active[NUM_DECIMATORS];
bool reset_swr;
@@ -1695,7 +1700,9 @@ static int swclk_gate_enable(struct clk_hw *hw)
{
struct tx_macro *tx = to_tx_macro(hw);
struct regmap *regmap = tx->regmap;
-
+ pm_runtime_get_sync(tx->dev);
+ clk_set_rate(tx->npl, 2 * MCLK_FREQ);
+ clk_prepare_enable(tx->npl);
tx_macro_mclk_enable(tx, true);
if (tx->reset_swr)
regmap_update_bits(regmap, CDC_TX_CLK_RST_CTRL_SWR_CONTROL,
@@ -1722,6 +1729,7 @@ static void swclk_gate_disable(struct clk_hw *hw)
CDC_TX_SWR_CLK_EN_MASK, 0x0);
tx_macro_mclk_enable(tx, false);
+ clk_disable_unprepare(tx->npl);
}
static int swclk_gate_is_enabled(struct clk_hw *hw)
@@ -1759,7 +1767,7 @@ static struct clk *tx_macro_register_mclk_output(struct tx_macro *tx)
struct clk_init_data init;
int ret;
- parent_clk_name = __clk_get_name(tx->clks[2].clk);
+ parent_clk_name = __clk_get_name(tx->mclk);
init.name = clk_name;
init.ops = &swclk_gate_ops;
@@ -1799,17 +1807,25 @@ static int tx_macro_probe(struct platform_device *pdev)
if (!tx)
return -ENOMEM;
- tx->clks[0].id = "macro";
- tx->clks[1].id = "dcodec";
- tx->clks[2].id = "mclk";
- tx->clks[3].id = "npl";
- tx->clks[4].id = "fsgen";
+ tx->mclk = devm_clk_get(dev, "mclk");
+ if (IS_ERR(tx->mclk))
+ return PTR_ERR(tx->mclk);
- ret = devm_clk_bulk_get(dev, TX_NUM_CLKS_MAX, tx->clks);
- if (ret) {
- dev_err(dev, "Error getting RX Clocks (%d)\n", ret);
- return ret;
- }
+ tx->npl = devm_clk_get(dev, "npl");
+ if (IS_ERR(tx->npl))
+ return PTR_ERR(tx->npl);
+
+ tx->macro = devm_clk_get_optional(dev, "macro");
+ if (IS_ERR(tx->macro))
+ return PTR_ERR(tx->macro);
+
+ tx->dcodec = devm_clk_get_optional(dev, "dcodec");
+ if (IS_ERR(tx->dcodec))
+ return PTR_ERR(tx->dcodec);
+
+ tx->fsgen = devm_clk_get(dev, "fsgen");
+ if (IS_ERR(tx->fsgen))
+ return PTR_ERR(tx->fsgen);
base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
@@ -1823,12 +1839,15 @@ static int tx_macro_probe(struct platform_device *pdev)
tx->dev = dev;
/* set MCLK and NPL rates */
- clk_set_rate(tx->clks[2].clk, MCLK_FREQ);
- clk_set_rate(tx->clks[3].clk, 2 * MCLK_FREQ);
+ clk_set_rate(tx->mclk, MCLK_FREQ);
+ clk_set_rate(tx->npl, 2 * MCLK_FREQ);
- ret = clk_bulk_prepare_enable(TX_NUM_CLKS_MAX, tx->clks);
- if (ret)
- return ret;
+ clk_prepare_enable(tx->macro);
+ clk_prepare_enable(tx->dcodec);
+
+ clk_prepare_enable(tx->mclk);
+ clk_prepare_enable(tx->npl);
+ clk_prepare_enable(tx->fsgen);
tx_macro_register_mclk_output(tx);
@@ -1839,7 +1858,11 @@ static int tx_macro_probe(struct platform_device *pdev)
goto err;
return ret;
err:
- clk_bulk_disable_unprepare(TX_NUM_CLKS_MAX, tx->clks);
+ clk_disable_unprepare(tx->mclk);
+ clk_disable_unprepare(tx->npl);
+ clk_disable_unprepare(tx->macro);
+ clk_disable_unprepare(tx->dcodec);
+ clk_disable_unprepare(tx->fsgen);
return ret;
}
@@ -1850,7 +1873,11 @@ static int tx_macro_remove(struct platform_device *pdev)
of_clk_del_provider(pdev->dev.of_node);
- clk_bulk_disable_unprepare(TX_NUM_CLKS_MAX, tx->clks);
+ clk_disable_unprepare(tx->mclk);
+ clk_disable_unprepare(tx->npl);
+ clk_disable_unprepare(tx->macro);
+ clk_disable_unprepare(tx->dcodec);
+ clk_disable_unprepare(tx->fsgen);
return 0;
}
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Update mclk clock frequency from 9.6MHz to 19.2MHz.
Fixes: 908e6b1df26e (ASoC: codecs: lpass-va-macro: Add support to VA Macro)
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
sound/soc/codecs/lpass-va-macro.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index 0ea39ae..f2ab09b 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -1353,7 +1353,7 @@ static int va_macro_validate_dmic_sample_rate(u32 dmic_sample_rate,
struct va_macro *va)
{
u32 div_factor;
- u32 mclk_rate = VA_MACRO_MCLK_FREQ;
+ u32 mclk_rate = 2 * VA_MACRO_MCLK_FREQ;
if (!dmic_sample_rate || mclk_rate % dmic_sample_rate != 0)
goto undefined_rate;
@@ -1432,7 +1432,7 @@ static int va_macro_probe(struct platform_device *pdev)
}
/* mclk rate */
- clk_set_rate(va->mclk, VA_MACRO_MCLK_FREQ);
+ clk_set_rate(va->mclk, 2 * VA_MACRO_MCLK_FREQ);
clk_prepare_enable(va->mclk);
clk_prepare_enable(va->macro);
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Update amic and dmic related tx macro control registers to volatile
Fixes: c39667ddcfc5 (ASoC: codecs: lpass-tx-macro: add support for lpass tx macro)
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
sound/soc/codecs/lpass-tx-macro.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/sound/soc/codecs/lpass-tx-macro.c b/sound/soc/codecs/lpass-tx-macro.c
index 9273724..e65b592 100644
--- a/sound/soc/codecs/lpass-tx-macro.c
+++ b/sound/soc/codecs/lpass-tx-macro.c
@@ -423,6 +423,13 @@ static bool tx_is_volatile_register(struct device *dev, unsigned int reg)
case CDC_TX_TOP_CSR_SWR_DMIC1_CTL:
case CDC_TX_TOP_CSR_SWR_DMIC2_CTL:
case CDC_TX_TOP_CSR_SWR_DMIC3_CTL:
+ case CDC_TX_TOP_CSR_SWR_AMIC0_CTL:
+ case CDC_TX_TOP_CSR_SWR_AMIC1_CTL:
+ case CDC_TX_CLK_RST_CTRL_MCLK_CONTROL:
+ case CDC_TX_CLK_RST_CTRL_FS_CNT_CONTROL:
+ case CDC_TX_CLK_RST_CTRL_SWR_CONTROL:
+ case CDC_TX_TOP_CSR_SWR_CTRL:
+ case CDC_TX0_TX_PATH_SEC7:
return true;
}
return false;
@@ -1674,6 +1681,12 @@ static int tx_macro_component_probe(struct snd_soc_component *comp)
snd_soc_component_update_bits(comp, CDC_TX0_TX_PATH_SEC7, 0x3F,
0x0A);
+ snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_AMIC0_CTL, 0xFF, 0x00);
+ snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_AMIC1_CTL, 0xFF, 0x00);
+ snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC0_CTL, 0xFF, 0x00);
+ snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC1_CTL, 0xFF, 0x00);
+ snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC2_CTL, 0xFF, 0x00);
+ snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC3_CTL, 0xFF, 0x00);
return 0;
}
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Add compatible names for sc7280 based targets in digital codec drivers
va,wsa,rx and tx.
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
sound/soc/codecs/lpass-rx-macro.c | 1 +
sound/soc/codecs/lpass-tx-macro.c | 1 +
sound/soc/codecs/lpass-va-macro.c | 1 +
sound/soc/codecs/lpass-wsa-macro.c | 1 +
4 files changed, 4 insertions(+)
diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 196b068..520c760 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -3578,6 +3578,7 @@ static int rx_macro_remove(struct platform_device *pdev)
static const struct of_device_id rx_macro_dt_match[] = {
{ .compatible = "qcom,sm8250-lpass-rx-macro" },
+ { .compatible = "qcom,sc7280-lpass-rx-macro" },
{ }
};
MODULE_DEVICE_TABLE(of, rx_macro_dt_match);
diff --git a/sound/soc/codecs/lpass-tx-macro.c b/sound/soc/codecs/lpass-tx-macro.c
index 27a0d5d..9273724 100644
--- a/sound/soc/codecs/lpass-tx-macro.c
+++ b/sound/soc/codecs/lpass-tx-macro.c
@@ -1844,6 +1844,7 @@ static int tx_macro_remove(struct platform_device *pdev)
static const struct of_device_id tx_macro_dt_match[] = {
{ .compatible = "qcom,sm8250-lpass-tx-macro" },
+ { .compatible = "qcom,sc7280-lpass-tx-macro" },
{ }
};
MODULE_DEVICE_TABLE(of, tx_macro_dt_match);
diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
index 56c93f4..d312a14 100644
--- a/sound/soc/codecs/lpass-va-macro.c
+++ b/sound/soc/codecs/lpass-va-macro.c
@@ -1473,6 +1473,7 @@ static int va_macro_remove(struct platform_device *pdev)
static const struct of_device_id va_macro_dt_match[] = {
{ .compatible = "qcom,sm8250-lpass-va-macro" },
+ { .compatible = "qcom,sc7280-lpass-va-macro" },
{}
};
MODULE_DEVICE_TABLE(of, va_macro_dt_match);
diff --git a/sound/soc/codecs/lpass-wsa-macro.c b/sound/soc/codecs/lpass-wsa-macro.c
index d3ac318..cc0071e 100644
--- a/sound/soc/codecs/lpass-wsa-macro.c
+++ b/sound/soc/codecs/lpass-wsa-macro.c
@@ -2446,6 +2446,7 @@ static int wsa_macro_remove(struct platform_device *pdev)
static const struct of_device_id wsa_macro_dt_match[] = {
{.compatible = "qcom,sm8250-lpass-wsa-macro"},
+ {.compatible = "qcom,sc7280-lpass-wsa-macro"},
{}
};
MODULE_DEVICE_TABLE(of, wsa_macro_dt_match);
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Update compatible names in va, wsa, rx and tx macro codes for lpass sc7280
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml | 4 +++-
Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml | 4 +++-
Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml | 4 +++-
Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml | 4 +++-
4 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
index 443d556..a4e767e 100644
--- a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
@@ -11,7 +11,9 @@ maintainers:
properties:
compatible:
- const: qcom,sm8250-lpass-rx-macro
+ oneOf:
+ - const: qcom,sm8250-lpass-rx-macro
+ - const: qcom,sc7280-lpass-rx-macro
reg:
maxItems: 1
diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
index 6b5ca02..cdec478 100644
--- a/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
@@ -11,7 +11,9 @@ maintainers:
properties:
compatible:
- const: qcom,sm8250-lpass-tx-macro
+ oneOf:
+ - const: qcom,sm8250-lpass-tx-macro
+ - const: qcom,sc7280-lpass-tx-macro
reg:
maxItems: 1
diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
index 679b49c..e15bc05 100644
--- a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
@@ -11,7 +11,9 @@ maintainers:
properties:
compatible:
- const: qcom,sm8250-lpass-va-macro
+ oneOf:
+ - const: qcom,sm8250-lpass-va-macro
+ - const: qcom,sc7280-lpass-va-macro
reg:
maxItems: 1
diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
index 435b019..2dcccb5 100644
--- a/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
+++ b/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
@@ -11,7 +11,9 @@ maintainers:
properties:
compatible:
- const: qcom,sm8250-lpass-wsa-macro
+ oneOf:
+ - const: qcom,sm8250-lpass-wsa-macro
+ - const: qcom,sc7280-lpass-wsa-macro
reg:
maxItems: 1
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
Change bulk clock frequency voting to individual voting.
Fixes: af3d54b99764 (ASoC: codecs: lpass-rx-macro: add support for lpass rx macro)
Signed-off-by: Venkata Prasad Potturu <[email protected]>
Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
---
sound/soc/codecs/lpass-rx-macro.c | 68 +++++++++++++++++++++++++++------------
1 file changed, 48 insertions(+), 20 deletions(-)
diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
index 520c760..349d879 100644
--- a/sound/soc/codecs/lpass-rx-macro.c
+++ b/sound/soc/codecs/lpass-rx-macro.c
@@ -608,7 +608,11 @@ struct rx_macro {
int softclip_clk_users;
struct regmap *regmap;
- struct clk_bulk_data clks[RX_NUM_CLKS_MAX];
+ struct clk *mclk;
+ struct clk *npl;
+ struct clk *macro;
+ struct clk *dcodec;
+ struct clk *fsgen;
struct clk_hw hw;
};
#define to_rx_macro(_hw) container_of(_hw, struct rx_macro, hw)
@@ -3423,6 +3427,8 @@ static int swclk_gate_enable(struct clk_hw *hw)
{
struct rx_macro *rx = to_rx_macro(hw);
+ clk_set_rate(rx->npl, MCLK_FREQ);
+ clk_prepare_enable(rx->npl);
rx_macro_mclk_enable(rx, true);
if (rx->reset_swr)
regmap_update_bits(rx->regmap, CDC_RX_CLK_RST_CTRL_SWR_CONTROL,
@@ -3448,6 +3454,7 @@ static void swclk_gate_disable(struct clk_hw *hw)
CDC_RX_SWR_CLK_EN_MASK, 0);
rx_macro_mclk_enable(rx, false);
+ clk_disable_unprepare(rx->npl);
}
static int swclk_gate_is_enabled(struct clk_hw *hw)
@@ -3485,7 +3492,7 @@ static struct clk *rx_macro_register_mclk_output(struct rx_macro *rx)
struct clk_init_data init;
int ret;
- parent_clk_name = __clk_get_name(rx->clks[2].clk);
+ parent_clk_name = __clk_get_name(rx->mclk);
init.name = clk_name;
init.ops = &swclk_gate_ops;
@@ -3525,17 +3532,25 @@ static int rx_macro_probe(struct platform_device *pdev)
if (!rx)
return -ENOMEM;
- rx->clks[0].id = "macro";
- rx->clks[1].id = "dcodec";
- rx->clks[2].id = "mclk";
- rx->clks[3].id = "npl";
- rx->clks[4].id = "fsgen";
+ rx->mclk = devm_clk_get(dev, "mclk");
+ if (IS_ERR(rx->mclk))
+ return PTR_ERR(rx->mclk);
+ rx->npl = devm_clk_get(dev, "npl");
+ if (IS_ERR(rx->npl))
+ return PTR_ERR(rx->npl);
- ret = devm_clk_bulk_get(dev, RX_NUM_CLKS_MAX, rx->clks);
- if (ret) {
- dev_err(dev, "Error getting RX Clocks (%d)\n", ret);
- return ret;
- }
+
+ rx->macro = devm_clk_get_optional(dev, "macro");
+ if (IS_ERR(rx->macro))
+ return PTR_ERR(rx->macro);
+
+ rx->dcodec = devm_clk_get_optional(dev, "dcodec");
+ if (IS_ERR(rx->dcodec))
+ return PTR_ERR(rx->dcodec);
+
+ rx->fsgen = devm_clk_get(dev, "fsgen");
+ if (IS_ERR(rx->fsgen))
+ return PTR_ERR(rx->fsgen);
base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(base))
@@ -3549,21 +3564,28 @@ static int rx_macro_probe(struct platform_device *pdev)
rx->dev = dev;
/* set MCLK and NPL rates */
- clk_set_rate(rx->clks[2].clk, MCLK_FREQ);
- clk_set_rate(rx->clks[3].clk, 2 * MCLK_FREQ);
+ clk_set_rate(rx->mclk, MCLK_FREQ);
+ clk_set_rate(rx->npl, 2 * MCLK_FREQ);
- ret = clk_bulk_prepare_enable(RX_NUM_CLKS_MAX, rx->clks);
- if (ret)
- return ret;
+ clk_prepare_enable(rx->macro);
+ clk_prepare_enable(rx->dcodec);
+ clk_prepare_enable(rx->mclk);
+ clk_prepare_enable(rx->npl);
+ clk_prepare_enable(rx->fsgen);
rx_macro_register_mclk_output(rx);
ret = devm_snd_soc_register_component(dev, &rx_macro_component_drv,
rx_macro_dai,
ARRAY_SIZE(rx_macro_dai));
- if (ret)
- clk_bulk_disable_unprepare(RX_NUM_CLKS_MAX, rx->clks);
+ if (ret) {
+ clk_disable_unprepare(rx->mclk);
+ clk_disable_unprepare(rx->npl);
+ clk_disable_unprepare(rx->macro);
+ clk_disable_unprepare(rx->dcodec);
+ clk_disable_unprepare(rx->fsgen);
+ }
return ret;
}
@@ -3572,7 +3594,13 @@ static int rx_macro_remove(struct platform_device *pdev)
struct rx_macro *rx = dev_get_drvdata(&pdev->dev);
of_clk_del_provider(pdev->dev.of_node);
- clk_bulk_disable_unprepare(RX_NUM_CLKS_MAX, rx->clks);
+
+ clk_disable_unprepare(rx->mclk);
+ clk_disable_unprepare(rx->npl);
+ clk_disable_unprepare(rx->macro);
+ clk_disable_unprepare(rx->dcodec);
+ clk_disable_unprepare(rx->fsgen);
+
return 0;
}
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
> Update compatible names in va, wsa, rx and tx macro codes for lpass sc7280
>
> Signed-off-by: Venkata Prasad Potturu <[email protected]>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---
> Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml | 4 +++-
> Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml | 4 +++-
> Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml | 4 +++-
> Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml | 4 +++-
> 4 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
> index 443d556..a4e767e 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
> @@ -11,7 +11,9 @@ maintainers:
>
> properties:
> compatible:
> - const: qcom,sm8250-lpass-rx-macro
> + oneOf:
> + - const: qcom,sm8250-lpass-rx-macro
> + - const: qcom,sc7280-lpass-rx-macro
>
Recently Rob did tree wide change to use enum instead of oneOf for below
reason
"
'enum' is equivalent to 'oneOf' with a list of 'const' entries, but
'enum' is more concise and yields better error messages."
So, can you move these to enums like:
enum:
- qcom,sm8250-lpass-rx-macro
- qcom,sc7280-lpass-rx-macro
--srini
> reg:
> maxItems: 1
> diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
> index 6b5ca02..cdec478 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
> @@ -11,7 +11,9 @@ maintainers:
>
> properties:
> compatible:
> - const: qcom,sm8250-lpass-tx-macro
> + oneOf:
> + - const: qcom,sm8250-lpass-tx-macro
> + - const: qcom,sc7280-lpass-tx-macro
>
> reg:
> maxItems: 1
> diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
> index 679b49c..e15bc05 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
> @@ -11,7 +11,9 @@ maintainers:
>
> properties:
> compatible:
> - const: qcom,sm8250-lpass-va-macro
> + oneOf:
> + - const: qcom,sm8250-lpass-va-macro
> + - const: qcom,sc7280-lpass-va-macro
>
> reg:
> maxItems: 1
> diff --git a/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml b/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
> index 435b019..2dcccb5 100644
> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
> @@ -11,7 +11,9 @@ maintainers:
>
> properties:
> compatible:
> - const: qcom,sm8250-lpass-wsa-macro
> + oneOf:
> + - const: qcom,sm8250-lpass-wsa-macro
> + - const: qcom,sc7280-lpass-wsa-macro
>
> reg:
> maxItems: 1
>
On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
> Change bulk clock frequency voting to individual voting.
>
Can you please explain why do we need to move out using clk bulk apis?
Am not seeing any thing obvious behavior changing as part of this patch,
more details please..
> Fixes: 908e6b1df26e (ASoC: codecs: lpass-va-macro: Add support to VA Macro)
Why this has Fixes tag? Are we fixing any bug with this patch?
>
> Signed-off-by: Venkata Prasad Potturu <[email protected]>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---
> sound/soc/codecs/lpass-va-macro.c | 46 ++++++++++++++++++++++++---------------
> 1 file changed, 28 insertions(+), 18 deletions(-)
>
> diff --git a/sound/soc/codecs/lpass-va-macro.c b/sound/soc/codecs/lpass-va-macro.c
> index d312a14..0ea39ae 100644
> --- a/sound/soc/codecs/lpass-va-macro.c
> +++ b/sound/soc/codecs/lpass-va-macro.c
> @@ -193,7 +193,10 @@ struct va_macro {
>
> int dec_mode[VA_MACRO_NUM_DECIMATORS];
> struct regmap *regmap;
> - struct clk_bulk_data clks[VA_NUM_CLKS_MAX];
> + struct clk *mclk;
> + struct clk *macro;
> + struct clk *dcodec;
> +
> struct clk_hw hw;
>
> s32 dmic_0_1_clk_cnt;
> @@ -1321,7 +1324,7 @@ static const struct clk_ops fsgen_gate_ops = {
>
> static int va_macro_register_fsgen_output(struct va_macro *va)
> {
> - struct clk *parent = va->clks[2].clk;
> + struct clk *parent = va->mclk;
> struct device *dev = va->dev;
> struct device_node *np = dev->of_node;
> const char *parent_clk_name;
> @@ -1404,15 +1407,18 @@ static int va_macro_probe(struct platform_device *pdev)
> return -ENOMEM;
>
> va->dev = dev;
> - va->clks[0].id = "macro";
> - va->clks[1].id = "dcodec";
> - va->clks[2].id = "mclk";
>
> - ret = devm_clk_bulk_get(dev, VA_NUM_CLKS_MAX, va->clks);
> - if (ret) {
> - dev_err(dev, "Error getting VA Clocks (%d)\n", ret);
> - return ret;
> - }
> + va->macro = devm_clk_get_optional(dev, "macro");
> + if (IS_ERR(va->macro))
> + return PTR_ERR(va->macro);
> +
> + va->dcodec = devm_clk_get_optional(dev, "dcodec");
> + if (IS_ERR(va->dcodec))
> + return PTR_ERR(va->dcodec);
> +
> + va->mclk = devm_clk_get(dev, "mclk");
> + if (IS_ERR(va->mclk))
> + return PTR_ERR(va->mclk);
>
> ret = of_property_read_u32(dev->of_node, "qcom,dmic-sample-rate",
> &sample_rate);
> @@ -1426,10 +1432,11 @@ static int va_macro_probe(struct platform_device *pdev)
> }
>
> /* mclk rate */
> - clk_set_rate(va->clks[1].clk, VA_MACRO_MCLK_FREQ);
> - ret = clk_bulk_prepare_enable(VA_NUM_CLKS_MAX, va->clks);
> - if (ret)
> - return ret;
> + clk_set_rate(va->mclk, VA_MACRO_MCLK_FREQ);
> +
> + clk_prepare_enable(va->mclk);
> + clk_prepare_enable(va->macro);
> + clk_prepare_enable(va->dcodec);
>
> base = devm_platform_ioremap_resource(pdev, 0);
> if (IS_ERR(base)) {
> @@ -1457,8 +1464,9 @@ static int va_macro_probe(struct platform_device *pdev)
> return ret;
>
> err:
> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
> -
> + clk_disable_unprepare(va->mclk);
> + clk_disable_unprepare(va->macro);
> + clk_disable_unprepare(va->dcodec);
> return ret;
> }
>
> @@ -1466,8 +1474,10 @@ static int va_macro_remove(struct platform_device *pdev)
> {
> struct va_macro *va = dev_get_drvdata(&pdev->dev);
>
> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
> -
> + of_clk_del_provider(pdev->dev.of_node);
fsgen clk is registered using devm_* variant of clk apis, so why do we
need this here?
--srini
> + clk_disable_unprepare(va->mclk);
> + clk_disable_unprepare(va->macro);
> + clk_disable_unprepare(va->dcodec);
> return 0;
> }
>
>
On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
> Update amic and dmic related tx macro control registers to volatile
>
> Fixes: c39667ddcfc5 (ASoC: codecs: lpass-tx-macro: add support for lpass tx macro)
>
> Signed-off-by: Venkata Prasad Potturu <[email protected]>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---
> sound/soc/codecs/lpass-tx-macro.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/sound/soc/codecs/lpass-tx-macro.c b/sound/soc/codecs/lpass-tx-macro.c
> index 9273724..e65b592 100644
> --- a/sound/soc/codecs/lpass-tx-macro.c
> +++ b/sound/soc/codecs/lpass-tx-macro.c
> @@ -423,6 +423,13 @@ static bool tx_is_volatile_register(struct device *dev, unsigned int reg)
> case CDC_TX_TOP_CSR_SWR_DMIC1_CTL:
> case CDC_TX_TOP_CSR_SWR_DMIC2_CTL:
> case CDC_TX_TOP_CSR_SWR_DMIC3_CTL:
> + case CDC_TX_TOP_CSR_SWR_AMIC0_CTL:
> + case CDC_TX_TOP_CSR_SWR_AMIC1_CTL:
> + case CDC_TX_CLK_RST_CTRL_MCLK_CONTROL:
> + case CDC_TX_CLK_RST_CTRL_FS_CNT_CONTROL:
> + case CDC_TX_CLK_RST_CTRL_SWR_CONTROL:
> + case CDC_TX_TOP_CSR_SWR_CTRL:
> + case CDC_TX0_TX_PATH_SEC7:
Why are these marked as Volatile?
Can you provide some details on the issue that you are seeing?
--srini
> return true;
> }
> return false;
> @@ -1674,6 +1681,12 @@ static int tx_macro_component_probe(struct snd_soc_component *comp)
>
> snd_soc_component_update_bits(comp, CDC_TX0_TX_PATH_SEC7, 0x3F,
> 0x0A);
> + snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_AMIC0_CTL, 0xFF, 0x00);
> + snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_AMIC1_CTL, 0xFF, 0x00);
> + snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC0_CTL, 0xFF, 0x00);
> + snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC1_CTL, 0xFF, 0x00);
> + snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC2_CTL, 0xFF, 0x00);
> + snd_soc_component_update_bits(comp, CDC_TX_TOP_CSR_SWR_DMIC3_CTL, 0xFF, 0x00);
>
> return 0;
> }
>
Quoting Srinivasa Rao Mandadapu (2021-09-20 00:35:25)
> Add compatible names for sc7280 based targets in digital codec drivers
> va,wsa,rx and tx.
>
> Signed-off-by: Venkata Prasad Potturu <[email protected]>
> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
> ---
> sound/soc/codecs/lpass-rx-macro.c | 1 +
> sound/soc/codecs/lpass-tx-macro.c | 1 +
> sound/soc/codecs/lpass-va-macro.c | 1 +
> sound/soc/codecs/lpass-wsa-macro.c | 1 +
> 4 files changed, 4 insertions(+)
>
> diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
> index 196b068..520c760 100644
> --- a/sound/soc/codecs/lpass-rx-macro.c
> +++ b/sound/soc/codecs/lpass-rx-macro.c
> @@ -3578,6 +3578,7 @@ static int rx_macro_remove(struct platform_device *pdev)
>
> static const struct of_device_id rx_macro_dt_match[] = {
> { .compatible = "qcom,sm8250-lpass-rx-macro" },
> + { .compatible = "qcom,sc7280-lpass-rx-macro" },
Please sort alphabetically on compatible string.
> { }
> };
> MODULE_DEVICE_TABLE(of, rx_macro_dt_match);
On 9/20/2021 6:54 PM, Srinivas Kandagatla wrote:
Thanks for your time Srini!!
>
> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>> Update compatible names in va, wsa, rx and tx macro codes for lpass
>> sc7280
>>
>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>> ---
>> Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml | 4
>> +++-
>> Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml | 4
>> +++-
>> Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml | 4
>> +++-
>> Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml | 4
>> +++-
>> 4 files changed, 12 insertions(+), 4 deletions(-)
>>
>> diff --git
>> a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
>> b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
>> index 443d556..a4e767e 100644
>> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
>> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-rx-macro.yaml
>> @@ -11,7 +11,9 @@ maintainers:
>> properties:
>> compatible:
>> - const: qcom,sm8250-lpass-rx-macro
>> + oneOf:
>> + - const: qcom,sm8250-lpass-rx-macro
>> + - const: qcom,sc7280-lpass-rx-macro
> Recently Rob did tree wide change to use enum instead of oneOf for
> below reason
> "
> 'enum' is equivalent to 'oneOf' with a list of 'const' entries, but
> 'enum' is more concise and yields better error messages."
>
> So, can you move these to enums like:
>
> enum:
> - qcom,sm8250-lpass-rx-macro
> - qcom,sc7280-lpass-rx-macro
>
> --srini
Okay. will change accordingly and post it.
>
>> reg:
>> maxItems: 1
>> diff --git
>> a/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
>> b/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
>> index 6b5ca02..cdec478 100644
>> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
>> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-tx-macro.yaml
>> @@ -11,7 +11,9 @@ maintainers:
>> properties:
>> compatible:
>> - const: qcom,sm8250-lpass-tx-macro
>> + oneOf:
>> + - const: qcom,sm8250-lpass-tx-macro
>> + - const: qcom,sc7280-lpass-tx-macro
>> reg:
>> maxItems: 1
>> diff --git
>> a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
>> b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
>> index 679b49c..e15bc05 100644
>> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
>> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-va-macro.yaml
>> @@ -11,7 +11,9 @@ maintainers:
>> properties:
>> compatible:
>> - const: qcom,sm8250-lpass-va-macro
>> + oneOf:
>> + - const: qcom,sm8250-lpass-va-macro
>> + - const: qcom,sc7280-lpass-va-macro
>> reg:
>> maxItems: 1
>> diff --git
>> a/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
>> b/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
>> index 435b019..2dcccb5 100644
>> --- a/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
>> +++ b/Documentation/devicetree/bindings/sound/qcom,lpass-wsa-macro.yaml
>> @@ -11,7 +11,9 @@ maintainers:
>> properties:
>> compatible:
>> - const: qcom,sm8250-lpass-wsa-macro
>> + oneOf:
>> + - const: qcom,sm8250-lpass-wsa-macro
>> + - const: qcom,sc7280-lpass-wsa-macro
>> reg:
>> maxItems: 1
>>
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 9/20/2021 6:54 PM, Srinivas Kandagatla wrote:
Thanks for your time Srini!!
>
> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>> Update amic and dmic related tx macro control registers to volatile
>>
>> Fixes: c39667ddcfc5 (ASoC: codecs: lpass-tx-macro: add support for
>> lpass tx macro)
>>
>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>> ---
>> sound/soc/codecs/lpass-tx-macro.c | 13 +++++++++++++
>> 1 file changed, 13 insertions(+)
>>
>> diff --git a/sound/soc/codecs/lpass-tx-macro.c
>> b/sound/soc/codecs/lpass-tx-macro.c
>> index 9273724..e65b592 100644
>> --- a/sound/soc/codecs/lpass-tx-macro.c
>> +++ b/sound/soc/codecs/lpass-tx-macro.c
>> @@ -423,6 +423,13 @@ static bool tx_is_volatile_register(struct
>> device *dev, unsigned int reg)
>> case CDC_TX_TOP_CSR_SWR_DMIC1_CTL:
>> case CDC_TX_TOP_CSR_SWR_DMIC2_CTL:
>> case CDC_TX_TOP_CSR_SWR_DMIC3_CTL:
>> + case CDC_TX_TOP_CSR_SWR_AMIC0_CTL:
>> + case CDC_TX_TOP_CSR_SWR_AMIC1_CTL:
>> + case CDC_TX_CLK_RST_CTRL_MCLK_CONTROL:
>> + case CDC_TX_CLK_RST_CTRL_FS_CNT_CONTROL:
>> + case CDC_TX_CLK_RST_CTRL_SWR_CONTROL:
>> + case CDC_TX_TOP_CSR_SWR_CTRL:
>> + case CDC_TX0_TX_PATH_SEC7:
>
> Why are these marked as Volatile?
> Can you provide some details on the issue that you are seeing?
>
> --srini
Without volatile these registers are not reflecting in Hardware and
playback and capture is not working.
Will do recheck and keep only required registers as volatile.
>
>
>> return true;
>> }
>> return false;
>> @@ -1674,6 +1681,12 @@ static int tx_macro_component_probe(struct
>> snd_soc_component *comp)
>> snd_soc_component_update_bits(comp, CDC_TX0_TX_PATH_SEC7, 0x3F,
>> 0x0A);
>> + snd_soc_component_update_bits(comp,
>> CDC_TX_TOP_CSR_SWR_AMIC0_CTL, 0xFF, 0x00);
>> + snd_soc_component_update_bits(comp,
>> CDC_TX_TOP_CSR_SWR_AMIC1_CTL, 0xFF, 0x00);
>> + snd_soc_component_update_bits(comp,
>> CDC_TX_TOP_CSR_SWR_DMIC0_CTL, 0xFF, 0x00);
>> + snd_soc_component_update_bits(comp,
>> CDC_TX_TOP_CSR_SWR_DMIC1_CTL, 0xFF, 0x00);
>> + snd_soc_component_update_bits(comp,
>> CDC_TX_TOP_CSR_SWR_DMIC2_CTL, 0xFF, 0x00);
>> + snd_soc_component_update_bits(comp,
>> CDC_TX_TOP_CSR_SWR_DMIC3_CTL, 0xFF, 0x00);
>> return 0;
>> }
>>
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 9/20/2021 6:55 PM, Srinivas Kandagatla wrote:
>
>
Thanks for Your time Srini!!!
> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>> Change bulk clock frequency voting to individual voting.
>>
> Can you please explain why do we need to move out using clk bulk apis?
>
> Am not seeing any thing obvious behavior changing as part of this
> patch, more details please..
In ADSP bypass use case, few clocks like macro and decode, are optional.
So is the main reason for move out.
And sometimes we are seeing bulk voting failed in Kodiak setup.
>> Fixes: 908e6b1df26e (ASoC: codecs: lpass-va-macro: Add support to VA
>> Macro)
>
> Why this has Fixes tag? Are we fixing any bug with this patch?
Okay. As such we are not fixing any bug. Will remove this fixes tag on
your suggestion.
>
>>
>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>> ---
>> sound/soc/codecs/lpass-va-macro.c | 46
>> ++++++++++++++++++++++++---------------
>> 1 file changed, 28 insertions(+), 18 deletions(-)
>>
>> diff --git a/sound/soc/codecs/lpass-va-macro.c
>> b/sound/soc/codecs/lpass-va-macro.c
>> index d312a14..0ea39ae 100644
>> --- a/sound/soc/codecs/lpass-va-macro.c
>> +++ b/sound/soc/codecs/lpass-va-macro.c
>> @@ -193,7 +193,10 @@ struct va_macro {
>> int dec_mode[VA_MACRO_NUM_DECIMATORS];
>> struct regmap *regmap;
>> - struct clk_bulk_data clks[VA_NUM_CLKS_MAX];
>> + struct clk *mclk;
>> + struct clk *macro;
>> + struct clk *dcodec;
>> +
>> struct clk_hw hw;
>> s32 dmic_0_1_clk_cnt;
>> @@ -1321,7 +1324,7 @@ static const struct clk_ops fsgen_gate_ops = {
>> static int va_macro_register_fsgen_output(struct va_macro *va)
>> {
>> - struct clk *parent = va->clks[2].clk;
>> + struct clk *parent = va->mclk;
>> struct device *dev = va->dev;
>> struct device_node *np = dev->of_node;
>> const char *parent_clk_name;
>> @@ -1404,15 +1407,18 @@ static int va_macro_probe(struct
>> platform_device *pdev)
>> return -ENOMEM;
>> va->dev = dev;
>> - va->clks[0].id = "macro";
>> - va->clks[1].id = "dcodec";
>> - va->clks[2].id = "mclk";
>> - ret = devm_clk_bulk_get(dev, VA_NUM_CLKS_MAX, va->clks);
>> - if (ret) {
>> - dev_err(dev, "Error getting VA Clocks (%d)\n", ret);
>> - return ret;
>> - }
>> + va->macro = devm_clk_get_optional(dev, "macro");
>> + if (IS_ERR(va->macro))
>> + return PTR_ERR(va->macro);
>> +
>> + va->dcodec = devm_clk_get_optional(dev, "dcodec");
>> + if (IS_ERR(va->dcodec))
>> + return PTR_ERR(va->dcodec);
>> +
>> + va->mclk = devm_clk_get(dev, "mclk");
>> + if (IS_ERR(va->mclk))
>> + return PTR_ERR(va->mclk);
>> ret = of_property_read_u32(dev->of_node,
>> "qcom,dmic-sample-rate",
>> &sample_rate);
>> @@ -1426,10 +1432,11 @@ static int va_macro_probe(struct
>> platform_device *pdev)
>> }
>> /* mclk rate */
>> - clk_set_rate(va->clks[1].clk, VA_MACRO_MCLK_FREQ);
>> - ret = clk_bulk_prepare_enable(VA_NUM_CLKS_MAX, va->clks);
>> - if (ret)
>> - return ret;
>> + clk_set_rate(va->mclk, VA_MACRO_MCLK_FREQ);
>> +
>> + clk_prepare_enable(va->mclk);
>> + clk_prepare_enable(va->macro);
>> + clk_prepare_enable(va->dcodec);
>> base = devm_platform_ioremap_resource(pdev, 0);
>> if (IS_ERR(base)) {
>> @@ -1457,8 +1464,9 @@ static int va_macro_probe(struct
>> platform_device *pdev)
>> return ret;
>> err:
>> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
>> -
>> + clk_disable_unprepare(va->mclk);
>> + clk_disable_unprepare(va->macro);
>> + clk_disable_unprepare(va->dcodec);
>> return ret;
>> }
>> @@ -1466,8 +1474,10 @@ static int va_macro_remove(struct
>> platform_device *pdev)
>> {
>> struct va_macro *va = dev_get_drvdata(&pdev->dev);
>> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
>> -
>> + of_clk_del_provider(pdev->dev.of_node);
>
> fsgen clk is registered using devm_* variant of clk apis, so why do we
> need this here?
>
Okay. Will remove it and post new patch.
>
> --srini
>> + clk_disable_unprepare(va->mclk);
>> + clk_disable_unprepare(va->macro);
>> + clk_disable_unprepare(va->dcodec);
>> return 0;
>> }
>>
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 9/20/2021 11:47 PM, Stephen Boyd wrote:
Thanks for Your time Stephen!!!
> Quoting Srinivasa Rao Mandadapu (2021-09-20 00:35:25)
>> Add compatible names for sc7280 based targets in digital codec drivers
>> va,wsa,rx and tx.
>>
>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>> ---
>> sound/soc/codecs/lpass-rx-macro.c | 1 +
>> sound/soc/codecs/lpass-tx-macro.c | 1 +
>> sound/soc/codecs/lpass-va-macro.c | 1 +
>> sound/soc/codecs/lpass-wsa-macro.c | 1 +
>> 4 files changed, 4 insertions(+)
>>
>> diff --git a/sound/soc/codecs/lpass-rx-macro.c b/sound/soc/codecs/lpass-rx-macro.c
>> index 196b068..520c760 100644
>> --- a/sound/soc/codecs/lpass-rx-macro.c
>> +++ b/sound/soc/codecs/lpass-rx-macro.c
>> @@ -3578,6 +3578,7 @@ static int rx_macro_remove(struct platform_device *pdev)
>>
>> static const struct of_device_id rx_macro_dt_match[] = {
>> { .compatible = "qcom,sm8250-lpass-rx-macro" },
>> + { .compatible = "qcom,sc7280-lpass-rx-macro" },
> Please sort alphabetically on compatible string.
Okay. will change and post new patch.
>> { }
>> };
>> MODULE_DEVICE_TABLE(of, rx_macro_dt_match);
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 21/09/2021 08:30, Srinivasa Rao Mandadapu wrote:
>
> On 9/20/2021 6:54 PM, Srinivas Kandagatla wrote:
> Thanks for your time Srini!!
>>
>> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>>> Update amic and dmic related tx macro control registers to volatile
>>>
>>> Fixes: c39667ddcfc5 (ASoC: codecs: lpass-tx-macro: add support for
>>> lpass tx macro)
>>>
>>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>>> ---
>>> sound/soc/codecs/lpass-tx-macro.c | 13 +++++++++++++
>>> 1 file changed, 13 insertions(+)
>>>
>>> diff --git a/sound/soc/codecs/lpass-tx-macro.c
>>> b/sound/soc/codecs/lpass-tx-macro.c
>>> index 9273724..e65b592 100644
>>> --- a/sound/soc/codecs/lpass-tx-macro.c
>>> +++ b/sound/soc/codecs/lpass-tx-macro.c
>>> @@ -423,6 +423,13 @@ static bool tx_is_volatile_register(struct
>>> device *dev, unsigned int reg)
>>> case CDC_TX_TOP_CSR_SWR_DMIC1_CTL:
>>> case CDC_TX_TOP_CSR_SWR_DMIC2_CTL:
>>> case CDC_TX_TOP_CSR_SWR_DMIC3_CTL:
>>> + case CDC_TX_TOP_CSR_SWR_AMIC0_CTL:
>>> + case CDC_TX_TOP_CSR_SWR_AMIC1_CTL:
>>> + case CDC_TX_CLK_RST_CTRL_MCLK_CONTROL:
>>> + case CDC_TX_CLK_RST_CTRL_FS_CNT_CONTROL:
>>> + case CDC_TX_CLK_RST_CTRL_SWR_CONTROL:
>>> + case CDC_TX_TOP_CSR_SWR_CTRL:
>>> + case CDC_TX0_TX_PATH_SEC7:
>>
>> Why are these marked as Volatile?
>> Can you provide some details on the issue that you are seeing?
>>
>> --srini
>
> Without volatile these registers are not reflecting in Hardware and
> playback and capture is not working.
>
> Will do recheck and keep only required registers as volatile.
This sounds like a total hack to me,
this might be happening in your case:
The default values for this register are different to actual defaults.
Ex: CDC_TX_TOP_CSR_SWR_AMIC0_CTL default is 0x00
so writing 0x0 to this register will be no-op as there is no change in
the register value as compared to default value as per regmap.
In you case make sure the hardware default values are correctly
reflected in tx_defaults array.
Then setting the desired value should work.
--srini
>
>>
>>
>>> return true;
>>> }
>>> return false;
>>> @@ -1674,6 +1681,12 @@ static int tx_macro_component_probe(struct
>>> snd_soc_component *comp)
>>> snd_soc_component_update_bits(comp, CDC_TX0_TX_PATH_SEC7, 0x3F,
>>> 0x0A);
>>> + snd_soc_component_update_bits(comp,
>>> CDC_TX_TOP_CSR_SWR_AMIC0_CTL, 0xFF, 0x00);
>>> + snd_soc_component_update_bits(comp,
>>> CDC_TX_TOP_CSR_SWR_AMIC1_CTL, 0xFF, 0x00);
>>> + snd_soc_component_update_bits(comp,
>>> CDC_TX_TOP_CSR_SWR_DMIC0_CTL, 0xFF, 0x00);
>>> + snd_soc_component_update_bits(comp,
>>> CDC_TX_TOP_CSR_SWR_DMIC1_CTL, 0xFF, 0x00);
>>> + snd_soc_component_update_bits(comp,
>>> CDC_TX_TOP_CSR_SWR_DMIC2_CTL, 0xFF, 0x00);
>>> + snd_soc_component_update_bits(comp,
>>> CDC_TX_TOP_CSR_SWR_DMIC3_CTL, 0xFF, 0x00);
>>> return 0;
>>> }
>>>
On 21/09/2021 09:14, Srinivasa Rao Mandadapu wrote:
>
> On 9/20/2021 6:55 PM, Srinivas Kandagatla wrote:
>>
>>
> Thanks for Your time Srini!!!
>> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>>> Change bulk clock frequency voting to individual voting.
>>>
>> Can you please explain why do we need to move out using clk bulk apis?
>>
>> Am not seeing any thing obvious behavior changing as part of this
>> patch, more details please..
>
> In ADSP bypass use case, few clocks like macro and decode, are optional.
> So is the main reason for move out.
Have you tried using clk_bulk_get_optional()
--srini
>
> And sometimes we are seeing bulk voting failed in Kodiak setup.
>
>>> Fixes: 908e6b1df26e (ASoC: codecs: lpass-va-macro: Add support to VA
>>> Macro)
>>
>> Why this has Fixes tag? Are we fixing any bug with this patch?
> Okay. As such we are not fixing any bug. Will remove this fixes tag on
> your suggestion.
>>
>>>
>>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>>> ---
>>> sound/soc/codecs/lpass-va-macro.c | 46
>>> ++++++++++++++++++++++++---------------
>>> 1 file changed, 28 insertions(+), 18 deletions(-)
>>>
>>> diff --git a/sound/soc/codecs/lpass-va-macro.c
>>> b/sound/soc/codecs/lpass-va-macro.c
>>> index d312a14..0ea39ae 100644
>>> --- a/sound/soc/codecs/lpass-va-macro.c
>>> +++ b/sound/soc/codecs/lpass-va-macro.c
>>> @@ -193,7 +193,10 @@ struct va_macro {
>>> int dec_mode[VA_MACRO_NUM_DECIMATORS];
>>> struct regmap *regmap;
>>> - struct clk_bulk_data clks[VA_NUM_CLKS_MAX];
>>> + struct clk *mclk;
>>> + struct clk *macro;
>>> + struct clk *dcodec;
>>> +
>>> struct clk_hw hw;
>>> s32 dmic_0_1_clk_cnt;
>>> @@ -1321,7 +1324,7 @@ static const struct clk_ops fsgen_gate_ops = {
>>> static int va_macro_register_fsgen_output(struct va_macro *va)
>>> {
>>> - struct clk *parent = va->clks[2].clk;
>>> + struct clk *parent = va->mclk;
>>> struct device *dev = va->dev;
>>> struct device_node *np = dev->of_node;
>>> const char *parent_clk_name;
>>> @@ -1404,15 +1407,18 @@ static int va_macro_probe(struct
>>> platform_device *pdev)
>>> return -ENOMEM;
>>> va->dev = dev;
>>> - va->clks[0].id = "macro";
>>> - va->clks[1].id = "dcodec";
>>> - va->clks[2].id = "mclk";
>>> - ret = devm_clk_bulk_get(dev, VA_NUM_CLKS_MAX, va->clks);
>>> - if (ret) {
>>> - dev_err(dev, "Error getting VA Clocks (%d)\n", ret);
>>> - return ret;
>>> - }
>>> + va->macro = devm_clk_get_optional(dev, "macro");
>>> + if (IS_ERR(va->macro))
>>> + return PTR_ERR(va->macro);
>>> +
>>> + va->dcodec = devm_clk_get_optional(dev, "dcodec");
>>> + if (IS_ERR(va->dcodec))
>>> + return PTR_ERR(va->dcodec);
>>> +
>>> + va->mclk = devm_clk_get(dev, "mclk");
>>> + if (IS_ERR(va->mclk))
>>> + return PTR_ERR(va->mclk);
>>> ret = of_property_read_u32(dev->of_node,
>>> "qcom,dmic-sample-rate",
>>> &sample_rate);
>>> @@ -1426,10 +1432,11 @@ static int va_macro_probe(struct
>>> platform_device *pdev)
>>> }
>>> /* mclk rate */
>>> - clk_set_rate(va->clks[1].clk, VA_MACRO_MCLK_FREQ);
>>> - ret = clk_bulk_prepare_enable(VA_NUM_CLKS_MAX, va->clks);
>>> - if (ret)
>>> - return ret;
>>> + clk_set_rate(va->mclk, VA_MACRO_MCLK_FREQ);
>>> +
>>> + clk_prepare_enable(va->mclk);
>>> + clk_prepare_enable(va->macro);
>>> + clk_prepare_enable(va->dcodec);
>>> base = devm_platform_ioremap_resource(pdev, 0);
>>> if (IS_ERR(base)) {
>>> @@ -1457,8 +1464,9 @@ static int va_macro_probe(struct
>>> platform_device *pdev)
>>> return ret;
>>> err:
>>> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
>>> -
>>> + clk_disable_unprepare(va->mclk);
>>> + clk_disable_unprepare(va->macro);
>>> + clk_disable_unprepare(va->dcodec);
>>> return ret;
>>> }
>>> @@ -1466,8 +1474,10 @@ static int va_macro_remove(struct
>>> platform_device *pdev)
>>> {
>>> struct va_macro *va = dev_get_drvdata(&pdev->dev);
>>> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
>>> -
>>> + of_clk_del_provider(pdev->dev.of_node);
>>
>> fsgen clk is registered using devm_* variant of clk apis, so why do we
>> need this here?
>>
> Okay. Will remove it and post new patch.
>>
>> --srini
>>> + clk_disable_unprepare(va->mclk);
>>> + clk_disable_unprepare(va->macro);
>>> + clk_disable_unprepare(va->dcodec);
>>> return 0;
>>> }
>>>
On 9/21/2021 2:20 PM, Srinivas Kandagatla wrote:
>
>
> On 21/09/2021 09:14, Srinivasa Rao Mandadapu wrote:
>>
>> On 9/20/2021 6:55 PM, Srinivas Kandagatla wrote:
>>>
>>>
>> Thanks for Your time Srini!!!
>>> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>>>> Change bulk clock frequency voting to individual voting.
>>>>
>>> Can you please explain why do we need to move out using clk bulk apis?
>>>
>>> Am not seeing any thing obvious behavior changing as part of this
>>> patch, more details please..
>>
>> In ADSP bypass use case, few clocks like macro and decode, are
>> optional. So is the main reason for move out.
>
>
> Have you tried using clk_bulk_get_optional()
Tried with above API. It's working fine. Do you suggest to use this
optional API?
>
> --srini
>>
>> And sometimes we are seeing bulk voting failed in Kodiak setup.
>>
>>>> Fixes: 908e6b1df26e (ASoC: codecs: lpass-va-macro: Add support to
>>>> VA Macro)
>>>
>>> Why this has Fixes tag? Are we fixing any bug with this patch?
>> Okay. As such we are not fixing any bug. Will remove this fixes tag
>> on your suggestion.
>>>
>>>>
>>>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>>>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>>>> ---
>>>> sound/soc/codecs/lpass-va-macro.c | 46
>>>> ++++++++++++++++++++++++---------------
>>>> 1 file changed, 28 insertions(+), 18 deletions(-)
>>>>
>>>> diff --git a/sound/soc/codecs/lpass-va-macro.c
>>>> b/sound/soc/codecs/lpass-va-macro.c
>>>> index d312a14..0ea39ae 100644
>>>> --- a/sound/soc/codecs/lpass-va-macro.c
>>>> +++ b/sound/soc/codecs/lpass-va-macro.c
>>>> @@ -193,7 +193,10 @@ struct va_macro {
>>>> int dec_mode[VA_MACRO_NUM_DECIMATORS];
>>>> struct regmap *regmap;
>>>> - struct clk_bulk_data clks[VA_NUM_CLKS_MAX];
>>>> + struct clk *mclk;
>>>> + struct clk *macro;
>>>> + struct clk *dcodec;
>>>> +
>>>> struct clk_hw hw;
>>>> s32 dmic_0_1_clk_cnt;
>>>> @@ -1321,7 +1324,7 @@ static const struct clk_ops fsgen_gate_ops = {
>>>> static int va_macro_register_fsgen_output(struct va_macro *va)
>>>> {
>>>> - struct clk *parent = va->clks[2].clk;
>>>> + struct clk *parent = va->mclk;
>>>> struct device *dev = va->dev;
>>>> struct device_node *np = dev->of_node;
>>>> const char *parent_clk_name;
>>>> @@ -1404,15 +1407,18 @@ static int va_macro_probe(struct
>>>> platform_device *pdev)
>>>> return -ENOMEM;
>>>> va->dev = dev;
>>>> - va->clks[0].id = "macro";
>>>> - va->clks[1].id = "dcodec";
>>>> - va->clks[2].id = "mclk";
>>>> - ret = devm_clk_bulk_get(dev, VA_NUM_CLKS_MAX, va->clks);
>>>> - if (ret) {
>>>> - dev_err(dev, "Error getting VA Clocks (%d)\n", ret);
>>>> - return ret;
>>>> - }
>>>> + va->macro = devm_clk_get_optional(dev, "macro");
>>>> + if (IS_ERR(va->macro))
>>>> + return PTR_ERR(va->macro);
>>>> +
>>>> + va->dcodec = devm_clk_get_optional(dev, "dcodec");
>>>> + if (IS_ERR(va->dcodec))
>>>> + return PTR_ERR(va->dcodec);
>>>> +
>>>> + va->mclk = devm_clk_get(dev, "mclk");
>>>> + if (IS_ERR(va->mclk))
>>>> + return PTR_ERR(va->mclk);
>>>> ret = of_property_read_u32(dev->of_node,
>>>> "qcom,dmic-sample-rate",
>>>> &sample_rate);
>>>> @@ -1426,10 +1432,11 @@ static int va_macro_probe(struct
>>>> platform_device *pdev)
>>>> }
>>>> /* mclk rate */
>>>> - clk_set_rate(va->clks[1].clk, VA_MACRO_MCLK_FREQ);
>>>> - ret = clk_bulk_prepare_enable(VA_NUM_CLKS_MAX, va->clks);
>>>> - if (ret)
>>>> - return ret;
>>>> + clk_set_rate(va->mclk, VA_MACRO_MCLK_FREQ);
>>>> +
>>>> + clk_prepare_enable(va->mclk);
>>>> + clk_prepare_enable(va->macro);
>>>> + clk_prepare_enable(va->dcodec);
>>>> base = devm_platform_ioremap_resource(pdev, 0);
>>>> if (IS_ERR(base)) {
>>>> @@ -1457,8 +1464,9 @@ static int va_macro_probe(struct
>>>> platform_device *pdev)
>>>> return ret;
>>>> err:
>>>> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
>>>> -
>>>> + clk_disable_unprepare(va->mclk);
>>>> + clk_disable_unprepare(va->macro);
>>>> + clk_disable_unprepare(va->dcodec);
>>>> return ret;
>>>> }
>>>> @@ -1466,8 +1474,10 @@ static int va_macro_remove(struct
>>>> platform_device *pdev)
>>>> {
>>>> struct va_macro *va = dev_get_drvdata(&pdev->dev);
>>>> - clk_bulk_disable_unprepare(VA_NUM_CLKS_MAX, va->clks);
>>>> -
>>>> + of_clk_del_provider(pdev->dev.of_node);
>>>
>>> fsgen clk is registered using devm_* variant of clk apis, so why do
>>> we need this here?
>>>
>> Okay. Will remove it and post new patch.
>>>
>>> --srini
>>>> + clk_disable_unprepare(va->mclk);
>>>> + clk_disable_unprepare(va->macro);
>>>> + clk_disable_unprepare(va->dcodec);
>>>> return 0;
>>>> }
>>>>
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.
On 9/21/2021 2:18 PM, Srinivas Kandagatla wrote:
>
>
> On 21/09/2021 08:30, Srinivasa Rao Mandadapu wrote:
>>
>> On 9/20/2021 6:54 PM, Srinivas Kandagatla wrote:
>> Thanks for your time Srini!!
>>>
>>> On 20/09/2021 08:35, Srinivasa Rao Mandadapu wrote:
>>>> Update amic and dmic related tx macro control registers to volatile
>>>>
>>>> Fixes: c39667ddcfc5 (ASoC: codecs: lpass-tx-macro: add support for
>>>> lpass tx macro)
>>>>
>>>> Signed-off-by: Venkata Prasad Potturu <[email protected]>
>>>> Signed-off-by: Srinivasa Rao Mandadapu <[email protected]>
>>>> ---
>>>> sound/soc/codecs/lpass-tx-macro.c | 13 +++++++++++++
>>>> 1 file changed, 13 insertions(+)
>>>>
>>>> diff --git a/sound/soc/codecs/lpass-tx-macro.c
>>>> b/sound/soc/codecs/lpass-tx-macro.c
>>>> index 9273724..e65b592 100644
>>>> --- a/sound/soc/codecs/lpass-tx-macro.c
>>>> +++ b/sound/soc/codecs/lpass-tx-macro.c
>>>> @@ -423,6 +423,13 @@ static bool tx_is_volatile_register(struct
>>>> device *dev, unsigned int reg)
>>>> case CDC_TX_TOP_CSR_SWR_DMIC1_CTL:
>>>> case CDC_TX_TOP_CSR_SWR_DMIC2_CTL:
>>>> case CDC_TX_TOP_CSR_SWR_DMIC3_CTL:
>>>> + case CDC_TX_TOP_CSR_SWR_AMIC0_CTL:
>>>> + case CDC_TX_TOP_CSR_SWR_AMIC1_CTL:
>>>> + case CDC_TX_CLK_RST_CTRL_MCLK_CONTROL:
>>>> + case CDC_TX_CLK_RST_CTRL_FS_CNT_CONTROL:
>>>> + case CDC_TX_CLK_RST_CTRL_SWR_CONTROL:
>>>> + case CDC_TX_TOP_CSR_SWR_CTRL:
>>>> + case CDC_TX0_TX_PATH_SEC7:
>>>
>>> Why are these marked as Volatile?
>>> Can you provide some details on the issue that you are seeing?
>>>
>>> --srini
>>
>> Without volatile these registers are not reflecting in Hardware and
>> playback and capture is not working.
>>
>> Will do recheck and keep only required registers as volatile.
>
> This sounds like a total hack to me,
>
> this might be happening in your case:
>
> The default values for this register are different to actual defaults.
> Ex: CDC_TX_TOP_CSR_SWR_AMIC0_CTL default is 0x00
> so writing 0x0 to this register will be no-op as there is no change in
> the register value as compared to default value as per regmap.
>
> In you case make sure the hardware default values are correctly
> reflected in tx_defaults array.
The default values in tx_defaults are proper. But same value is not
reflecting in Hardware, but In Cache it's reflecting set value.
>
> Then setting the desired value should work.
>
>
> --srini
>
>
>
>>
>>>
>>>
>>>> return true;
>>>> }
>>>> return false;
>>>> @@ -1674,6 +1681,12 @@ static int tx_macro_component_probe(struct
>>>> snd_soc_component *comp)
>>>> snd_soc_component_update_bits(comp, CDC_TX0_TX_PATH_SEC7,
>>>> 0x3F,
>>>> 0x0A);
>>>> + snd_soc_component_update_bits(comp,
>>>> CDC_TX_TOP_CSR_SWR_AMIC0_CTL, 0xFF, 0x00);
>>>> + snd_soc_component_update_bits(comp,
>>>> CDC_TX_TOP_CSR_SWR_AMIC1_CTL, 0xFF, 0x00);
>>>> + snd_soc_component_update_bits(comp,
>>>> CDC_TX_TOP_CSR_SWR_DMIC0_CTL, 0xFF, 0x00);
>>>> + snd_soc_component_update_bits(comp,
>>>> CDC_TX_TOP_CSR_SWR_DMIC1_CTL, 0xFF, 0x00);
>>>> + snd_soc_component_update_bits(comp,
>>>> CDC_TX_TOP_CSR_SWR_DMIC2_CTL, 0xFF, 0x00);
>>>> + snd_soc_component_update_bits(comp,
>>>> CDC_TX_TOP_CSR_SWR_DMIC3_CTL, 0xFF, 0x00);
>>>> return 0;
>>>> }
>>>>
--
Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc.,
is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.