diff options
author | Laxminath Kasam <lkasam@codeaurora.org> | 2020-07-01 23:37:33 +0530 |
---|---|---|
committer | Laxminath Kasam <lkasam@codeaurora.org> | 2020-07-08 19:46:47 +0530 |
commit | 251ce993dd69fc33890c2904165737fa971fd219 (patch) | |
tree | c896b111bf28eb9223c630622daa242caab046df /asoc | |
parent | 686ed22ea7e3b3c710c975fad0db5fac990892f1 (diff) | |
download | msm-extra-251ce993dd69fc33890c2904165737fa971fd219.tar.gz |
asoc: bolero: Ensure va-macro is registered before other macros
As va-macro has fs_clk gen, ensure va-macro
is registered before other macros.
Change-Id: I8283dc11817caf0c208fe231132951a7a79b7d51
Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
Diffstat (limited to 'asoc')
-rw-r--r-- | asoc/codecs/bolero/bolero-cdc.c | 24 | ||||
-rw-r--r-- | asoc/codecs/bolero/bolero-cdc.h | 6 | ||||
-rw-r--r-- | asoc/codecs/bolero/rx-macro.c | 6 | ||||
-rw-r--r-- | asoc/codecs/bolero/tx-macro.c | 6 | ||||
-rw-r--r-- | asoc/codecs/bolero/wsa-macro.c | 7 |
5 files changed, 48 insertions, 1 deletions
diff --git a/asoc/codecs/bolero/bolero-cdc.c b/asoc/codecs/bolero/bolero-cdc.c index d7dc7d7d..233a0b4b 100644 --- a/asoc/codecs/bolero/bolero-cdc.c +++ b/asoc/codecs/bolero/bolero-cdc.c @@ -600,6 +600,28 @@ int bolero_dmic_clk_enable(struct snd_soc_component *component, } EXPORT_SYMBOL(bolero_dmic_clk_enable); +bool bolero_is_va_macro_registered(struct device *dev) +{ + struct bolero_priv *priv; + + if (!dev) { + pr_err("%s: dev is null\n", __func__); + return false; + } + if (!bolero_is_valid_child_dev(dev)) { + dev_err(dev, "%s: child device calling is not added yet\n", + __func__); + return false; + } + priv = dev_get_drvdata(dev->parent); + if (!priv) { + dev_err(dev, "%s: priv is null\n", __func__); + return false; + } + return priv->macros_supported[VA_MACRO]; +} +EXPORT_SYMBOL(bolero_is_va_macro_registered); + /** * bolero_register_macro - Registers macro to bolero * @@ -661,7 +683,7 @@ int bolero_register_macro(struct device *dev, u16 macro_id, priv->num_macros_registered++; priv->macros_supported[macro_id] = true; - dev_dbg(dev, "%s: register macro successful:%d\n", __func__, macro_id); + dev_info(dev, "%s: register macro successful:%d\n", __func__, macro_id); if (priv->num_macros_registered == priv->num_macros) { ret = bolero_copy_dais_from_macro(priv); diff --git a/asoc/codecs/bolero/bolero-cdc.h b/asoc/codecs/bolero/bolero-cdc.h index bd52879f..7e3468a8 100644 --- a/asoc/codecs/bolero/bolero-cdc.h +++ b/asoc/codecs/bolero/bolero-cdc.h @@ -101,6 +101,7 @@ typedef int (*rsc_clk_cb_t)(struct device *dev, u16 event); #if IS_ENABLED(CONFIG_SND_SOC_BOLERO) int bolero_register_res_clk(struct device *dev, rsc_clk_cb_t cb); void bolero_unregister_res_clk(struct device *dev); +bool bolero_is_va_macro_registered(struct device *dev); int bolero_register_macro(struct device *dev, u16 macro_id, struct macro_ops *ops); void bolero_unregister_macro(struct device *dev, u16 macro_id); @@ -132,6 +133,11 @@ static inline void bolero_unregister_res_clk(struct device *dev) { } +static bool bolero_is_va_macro_registered(struct device *dev) +{ + return false; +} + static inline int bolero_register_macro(struct device *dev, u16 macro_id, struct macro_ops *ops) diff --git a/asoc/codecs/bolero/rx-macro.c b/asoc/codecs/bolero/rx-macro.c index 87b1e0c1..c858d2c6 100644 --- a/asoc/codecs/bolero/rx-macro.c +++ b/asoc/codecs/bolero/rx-macro.c @@ -3994,6 +3994,12 @@ static int rx_macro_probe(struct platform_device *pdev) u32 is_used_rx_swr_gpio = 1; const char *is_used_rx_swr_gpio_dt = "qcom,is-used-swr-gpio"; + if (!bolero_is_va_macro_registered(&pdev->dev)) { + dev_err(&pdev->dev, + "%s: va-macro not registered yet, defer\n", __func__); + return -EPROBE_DEFER; + } + rx_priv = devm_kzalloc(&pdev->dev, sizeof(struct rx_macro_priv), GFP_KERNEL); if (!rx_priv) diff --git a/asoc/codecs/bolero/tx-macro.c b/asoc/codecs/bolero/tx-macro.c index 16d79c91..59340674 100644 --- a/asoc/codecs/bolero/tx-macro.c +++ b/asoc/codecs/bolero/tx-macro.c @@ -3161,6 +3161,12 @@ static int tx_macro_probe(struct platform_device *pdev) u32 is_used_tx_swr_gpio = 1; const char *is_used_tx_swr_gpio_dt = "qcom,is-used-swr-gpio"; + if (!bolero_is_va_macro_registered(&pdev->dev)) { + dev_err(&pdev->dev, + "%s: va-macro not registered yet, defer\n", __func__); + return -EPROBE_DEFER; + } + tx_priv = devm_kzalloc(&pdev->dev, sizeof(struct tx_macro_priv), GFP_KERNEL); if (!tx_priv) diff --git a/asoc/codecs/bolero/wsa-macro.c b/asoc/codecs/bolero/wsa-macro.c index d2852eea..ca7391d0 100644 --- a/asoc/codecs/bolero/wsa-macro.c +++ b/asoc/codecs/bolero/wsa-macro.c @@ -3144,6 +3144,12 @@ static int wsa_macro_probe(struct platform_device *pdev) u32 is_used_wsa_swr_gpio = 1; const char *is_used_wsa_swr_gpio_dt = "qcom,is-used-swr-gpio"; + if (!bolero_is_va_macro_registered(&pdev->dev)) { + dev_err(&pdev->dev, + "%s: va-macro not registered yet, defer\n", __func__); + return -EPROBE_DEFER; + } + wsa_priv = devm_kzalloc(&pdev->dev, sizeof(struct wsa_macro_priv), GFP_KERNEL); if (!wsa_priv) @@ -3227,6 +3233,7 @@ static int wsa_macro_probe(struct platform_device *pdev) wsa_macro_init_ops(&ops, wsa_io_base); ops.clk_id_req = wsa_priv->default_clk_id; ops.default_clk_id = wsa_priv->default_clk_id; + ret = bolero_register_macro(&pdev->dev, WSA_MACRO, &ops); if (ret < 0) { dev_err(&pdev->dev, "%s: register macro failed\n", __func__); |