From fd25834b8484d50a66d83204f40147d75081e280 Mon Sep 17 00:00:00 2001 From: Sudheer Papothi Date: Thu, 5 Dec 2019 01:14:47 +0530 Subject: [PATCH] soc: soundwire: Check for clock source before clock switch Check for soundwire clock source before clock switch to avoid redundant clock switch for the same clock source. Change-Id: I8a7a116cc956f427af677b413928dace5a39a23d Signed-off-by: Sudheer Papothi --- soc/swr-mstr-ctrl.c | 13 +++++++++++-- soc/swr-mstr-ctrl.h | 1 + 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c index c3ad05345eb3..3a33f8278086 100644 --- a/soc/swr-mstr-ctrl.c +++ b/soc/swr-mstr-ctrl.c @@ -3101,9 +3101,18 @@ int swrm_wcd_notify(struct platform_device *pdev, u32 id, void *data) * next activity on soundwire will request clock from new clock * source. */ + if (!data) { + dev_err(swrm->dev, "%s: data is NULL for id:%d\n", + __func__, id); + ret = -EINVAL; + break; + } mutex_lock(&swrm->mlock); - if (swrm->state == SWR_MSTR_UP) - swrm_device_suspend(&pdev->dev); + if (swrm->clk_src != *(int *)data) { + if (swrm->state == SWR_MSTR_UP) + swrm_device_suspend(&pdev->dev); + swrm->clk_src = *(int *)data; + } mutex_unlock(&swrm->mlock); break; case SWR_CLK_FREQ: diff --git a/soc/swr-mstr-ctrl.h b/soc/swr-mstr-ctrl.h index c2955f88d827..2e7cac4fb6a1 100644 --- a/soc/swr-mstr-ctrl.h +++ b/soc/swr-mstr-ctrl.h @@ -187,6 +187,7 @@ struct swr_mstr_ctrl { u32 swr_irq_wakeup_capable; int hw_core_clk_en; int aud_core_clk_en; + int clk_src; #ifdef CONFIG_DEBUG_FS struct dentry *debugfs_swrm_dent; struct dentry *debugfs_peek;