summaryrefslogtreecommitdiff
path: root/asoc
diff options
context:
space:
mode:
authorLaxminath Kasam <lkasam@codeaurora.org>2020-07-01 23:37:33 +0530
committerLaxminath Kasam <lkasam@codeaurora.org>2020-07-08 19:46:47 +0530
commit251ce993dd69fc33890c2904165737fa971fd219 (patch)
treec896b111bf28eb9223c630622daa242caab046df /asoc
parent686ed22ea7e3b3c710c975fad0db5fac990892f1 (diff)
downloadmsm-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.c24
-rw-r--r--asoc/codecs/bolero/bolero-cdc.h6
-rw-r--r--asoc/codecs/bolero/rx-macro.c6
-rw-r--r--asoc/codecs/bolero/tx-macro.c6
-rw-r--r--asoc/codecs/bolero/wsa-macro.c7
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__);