summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaxminath Kasam <lkasam@codeaurora.org>2017-03-12 18:50:16 +0530
committerLaxminath Kasam <lkasam@codeaurora.org>2017-03-12 18:59:47 +0530
commit5a51c2c5ef9f6b71dea7a876e28c6e089164089d (patch)
treeb001b6b3e37d7632e7b33e6584b522dcf89b471f
parent54344baed6d626fa959d21f8801291dd366ee862 (diff)
ASoC: sdm660_cdc: Add null check in msm_dig_suspend
In digital codec, null codec pointer access can happen in suspend call if module register happen with pm_ops but soc codec register failed for some reason. Add null check in msm_dig_suspend API to avoid crash scenarios. Change-Id: I15acb69a1851b7865d2b3aa1b7cb70a4a73c63e3 Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
-rw-r--r--sound/soc/codecs/sdm660_cdc/msm-digital-cdc.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/sound/soc/codecs/sdm660_cdc/msm-digital-cdc.c b/sound/soc/codecs/sdm660_cdc/msm-digital-cdc.c
index 91faee1ffd32..57d642f058b6 100644
--- a/sound/soc/codecs/sdm660_cdc/msm-digital-cdc.c
+++ b/sound/soc/codecs/sdm660_cdc/msm-digital-cdc.c
@@ -2085,10 +2085,18 @@ static int msm_dig_cdc_remove(struct platform_device *pdev)
#ifdef CONFIG_PM
static int msm_dig_suspend(struct device *dev)
{
- struct msm_asoc_mach_data *pdata =
- snd_soc_card_get_drvdata(registered_digcodec->component.card);
+ struct msm_asoc_mach_data *pdata;
struct msm_dig_priv *msm_dig_cdc = dev_get_drvdata(dev);
+ if (!registered_digcodec || !msm_dig_cdc) {
+ pr_debug("%s:digcodec not initialized, return\n", __func__);
+ return 0;
+ }
+ pdata = snd_soc_card_get_drvdata(registered_digcodec->component.card);
+ if (!pdata) {
+ pr_debug("%s:card not initialized, return\n", __func__);
+ return 0;
+ }
if (msm_dig_cdc->dapm_bias_off) {
pr_debug("%s: mclk cnt = %d, mclk_enabled = %d\n",
__func__, atomic_read(&pdata->int_mclk0_rsc_ref),