From d1c3e9b51e0b7d36cb1d1cf339fa46ecdceb0b89 Mon Sep 17 00:00:00 2001 From: Sudheer Papothi Date: Wed, 5 Sep 2018 05:43:51 +0530 Subject: [PATCH] ASoC: wcd938x: Add support for codec wakeup Add an API to wakeup codec from sleep. Change-Id: I90de653947f794cbc4a47a91bd5f22251440ef75 Signed-off-by: Sudheer Papothi --- asoc/codecs/wcd938x/internal.h | 2 +- asoc/codecs/wcd938x/wcd938x.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/asoc/codecs/wcd938x/internal.h b/asoc/codecs/wcd938x/internal.h index 71528c71d6..616a2eaff8 100644 --- a/asoc/codecs/wcd938x/internal.h +++ b/asoc/codecs/wcd938x/internal.h @@ -79,7 +79,6 @@ struct wcd938x_priv { struct codec_port_info rx_port_mapping[MAX_PORT][MAX_CH_PER_PORT]; struct regulator_bulk_data *supplies; - struct notifier_block nblock; /* wcd callback to bolero */ void *handle; @@ -87,6 +86,7 @@ struct wcd938x_priv { int (*register_notifier)(void *handle, struct notifier_block *nblock, bool enable); + int (*wakeup)(void *handle, bool enable); u32 version; /* Entry for version info */ struct snd_info_entry *entry; diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index 2905c59e19..40136e4318 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -2578,6 +2578,25 @@ static int wcd938x_add_slave_components(struct device *dev, return 0; } +static int wcd938x_wakeup(void *handle, bool enable) +{ + struct wcd938x_priv *priv; + + if (!handle) { + pr_err("%s: NULL handle\n", __func__); + return -EINVAL; + } + priv = (struct wcd938x_priv *)handle; + if (!priv->tx_swr_dev) { + pr_err("%s: tx swr dev is NULL\n", __func__); + return -EINVAL; + } + if (enable) + return swr_device_wakeup_vote(priv->tx_swr_dev); + else + return swr_device_wakeup_unvote(priv->tx_swr_dev); +} + static int wcd938x_probe(struct platform_device *pdev) { struct component_match *match = NULL; @@ -2652,6 +2671,8 @@ static int wcd938x_probe(struct platform_device *pdev) wcd938x_reset(dev); + wcd938x->wakeup = wcd938x_wakeup; + return component_master_add_with_match(&pdev->dev, &wcd938x_comp_ops, match);