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 <spapothi@codeaurora.org>
diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c
index 598b269..edc772d 100644
--- a/soc/swr-mstr-ctrl.c
+++ b/soc/swr-mstr-ctrl.c
@@ -3074,9 +3074,18 @@
* 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 1987e0f..c404fc6 100644
--- a/soc/swr-mstr-ctrl.h
+++ b/soc/swr-mstr-ctrl.h
@@ -178,6 +178,7 @@
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;