summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2020-07-14 05:45:51 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2020-07-14 05:45:51 -0700
commit5e30d7c7d61d7ae8507d732a96bec23df54174ec (patch)
tree599dffc48808e12c100bd0115e36a6e0a2f8525d
parent4ff651644ca893f484741d1ebcff0a04e8e515e2 (diff)
parent251ce993dd69fc33890c2904165737fa971fd219 (diff)
downloadmsm-extra-5e30d7c7d61d7ae8507d732a96bec23df54174ec.tar.gz
Merge "asoc: bolero: Ensure va-macro is registered before other macros"
-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 500876b2..158f3500 100644
--- a/asoc/codecs/bolero/tx-macro.c
+++ b/asoc/codecs/bolero/tx-macro.c
@@ -3191,6 +3191,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__);