summaryrefslogtreecommitdiff
path: root/soc
diff options
context:
space:
mode:
authorAditya Bavanari <abavanar@codeaurora.org>2020-03-05 12:31:39 +0530
committerAditya Bavanari <abavanar@codeaurora.org>2020-04-01 11:12:49 +0530
commit060de8e1aa15ba34cb415e553e23693b8f221c83 (patch)
tree89b45c65916d7b99af2037b8a92706ec7545b784 /soc
parentd1ffd16b665c6f152c313617fe8185c2774bb7e3 (diff)
downloadmsm-extra-060de8e1aa15ba34cb415e553e23693b8f221c83.tar.gz
soc: swr-mstr-ctrl: Remove ssr_lock handling
During SSR and headset detection/removal interrupt concurrencies, ssr_lock can lead to serv reg ack timeout issues. Remove this synchronization to avoid this issue. Change-Id: I242a013a7e9d833db21d737cbdfea2d84bbd29fa Signed-off-by: Aditya Bavanari <abavanar@codeaurora.org>
Diffstat (limited to 'soc')
-rw-r--r--soc/swr-mstr-ctrl.c7
-rw-r--r--soc/swr-mstr-ctrl.h1
2 files changed, 0 insertions, 8 deletions
diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c
index 4aa5c0c6..e2257fd8 100644
--- a/soc/swr-mstr-ctrl.c
+++ b/soc/swr-mstr-ctrl.c
@@ -1908,7 +1908,6 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev)
return IRQ_NONE;
}
- mutex_lock(&swrm->ssr_lock);
mutex_lock(&swrm->reslock);
if (swrm_request_hw_vote(swrm, LPASS_HW_CORE, true)) {
ret = IRQ_NONE;
@@ -2122,7 +2121,6 @@ err_audio_hw_vote:
swrm_request_hw_vote(swrm, LPASS_HW_CORE, false);
exit:
mutex_unlock(&swrm->reslock);
- mutex_unlock(&swrm->ssr_lock);
swrm_unlock_sleep(swrm);
trace_printk("%s exit\n", __func__);
return ret;
@@ -2655,7 +2653,6 @@ static int swrm_probe(struct platform_device *pdev)
mutex_init(&swrm->clklock);
mutex_init(&swrm->devlock);
mutex_init(&swrm->pm_lock);
- mutex_init(&swrm->ssr_lock);
swrm->wlock_holders = 0;
swrm->pm_state = SWRM_PM_SLEEPABLE;
init_waitqueue_head(&swrm->pm_wq);
@@ -2804,7 +2801,6 @@ err_irq_fail:
mutex_destroy(&swrm->iolock);
mutex_destroy(&swrm->clklock);
mutex_destroy(&swrm->pm_lock);
- mutex_destroy(&swrm->ssr_lock);
pm_qos_remove_request(&swrm->pm_qos_req);
err_pdata_fail:
@@ -2838,7 +2834,6 @@ static int swrm_remove(struct platform_device *pdev)
mutex_destroy(&swrm->clklock);
mutex_destroy(&swrm->force_down_lock);
mutex_destroy(&swrm->pm_lock);
- mutex_destroy(&swrm->ssr_lock);
pm_qos_remove_request(&swrm->pm_qos_req);
devm_kfree(&pdev->dev, swrm);
return 0;
@@ -3325,7 +3320,6 @@ int swrm_wcd_notify(struct platform_device *pdev, u32 id, void *data)
break;
case SWR_DEVICE_SSR_DOWN:
trace_printk("%s: swr device down called\n", __func__);
- mutex_lock(&swrm->ssr_lock);
mutex_lock(&swrm->mlock);
if (swrm->state == SWR_MSTR_DOWN)
dev_dbg(swrm->dev, "%s:SWR master is already Down:%d\n",
@@ -3339,7 +3333,6 @@ int swrm_wcd_notify(struct platform_device *pdev, u32 id, void *data)
swrm->state = SWR_MSTR_SSR;
mutex_unlock(&swrm->reslock);
mutex_unlock(&swrm->mlock);
- mutex_unlock(&swrm->ssr_lock);
break;
case SWR_DEVICE_SSR_UP:
/* wait for clk voting to be zero */
diff --git a/soc/swr-mstr-ctrl.h b/soc/swr-mstr-ctrl.h
index 0fac80e6..ce0b64d5 100644
--- a/soc/swr-mstr-ctrl.h
+++ b/soc/swr-mstr-ctrl.h
@@ -126,7 +126,6 @@ struct swr_mstr_ctrl {
struct mutex reslock;
struct mutex pm_lock;
struct mutex irq_lock;
- struct mutex ssr_lock;
u32 swrm_base_reg;
char __iomem *swrm_dig_base;
char __iomem *swrm_hctl_reg;