Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71fef469 authored by Prasad Kumpatla's avatar Prasad Kumpatla Committed by Gerrit - the friendly Code Review server
Browse files

asoc: Fix port collision interrupt in WSA



During multiple PDR usecases, due to sync issues
port collision interrupt is observed.
set wsa state to device down  before cancelling the ocp
workqueue and bail out from the workqueue when wsa state
is set to device down.

Change-Id: Ibefb338c1d6d2901b8773928fa2c0c48b51ac6f7
Signed-off-by: default avatarPrasad Kumpatla <nkumpat@codeaurora.org>
parent 657d8f8a
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -1374,9 +1374,6 @@ static int rx_macro_event_handler(struct snd_soc_component *component,
		trace_printk("%s, enter SSR down\n", __func__);
		rx_priv->dev_up = false;
		if (rx_priv->swr_ctrl_data) {
			swrm_wcd_notify(
				rx_priv->swr_ctrl_data[0].rx_swr_pdev,
				SWR_DEVICE_DOWN, NULL);
			swrm_wcd_notify(
				rx_priv->swr_ctrl_data[0].rx_swr_pdev,
				SWR_DEVICE_SSR_DOWN, NULL);
+0 −3
Original line number Diff line number Diff line
@@ -375,9 +375,6 @@ static int tx_macro_event_handler(struct snd_soc_component *component,
	case BOLERO_MACRO_EVT_SSR_DOWN:
		trace_printk("%s, enter SSR down\n", __func__);
		if (tx_priv->swr_ctrl_data) {
			swrm_wcd_notify(
				tx_priv->swr_ctrl_data[0].tx_swr_pdev,
				SWR_DEVICE_DOWN, NULL);
			swrm_wcd_notify(
				tx_priv->swr_ctrl_data[0].tx_swr_pdev,
				SWR_DEVICE_SSR_DOWN, NULL);
+0 −3
Original line number Diff line number Diff line
@@ -325,9 +325,6 @@ static int va_macro_event_handler(struct snd_soc_component *component,
		break;
	case BOLERO_MACRO_EVT_SSR_DOWN:
		if (va_priv->swr_ctrl_data) {
			swrm_wcd_notify(
				va_priv->swr_ctrl_data[0].va_swr_pdev,
				SWR_DEVICE_DOWN, NULL);
			swrm_wcd_notify(
				va_priv->swr_ctrl_data[0].va_swr_pdev,
				SWR_DEVICE_SSR_DOWN, NULL);
+1 −4
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
 */

#include <linux/module.h>
@@ -996,9 +996,6 @@ static int wsa_macro_event_handler(struct snd_soc_component *component,
	case BOLERO_MACRO_EVT_SSR_DOWN:
		trace_printk("%s, enter SSR down\n", __func__);
		if (wsa_priv->swr_ctrl_data) {
			swrm_wcd_notify(
				wsa_priv->swr_ctrl_data[0].wsa_swr_pdev,
				SWR_DEVICE_DOWN, NULL);
			swrm_wcd_notify(
				wsa_priv->swr_ctrl_data[0].wsa_swr_pdev,
				SWR_DEVICE_SSR_DOWN, NULL);
+5 −2
Original line number Diff line number Diff line
@@ -985,6 +985,9 @@ static void wsa881x_ocp_ctl_work(struct work_struct *work)
	dwork = to_delayed_work(work);
	wsa881x = container_of(dwork, struct wsa881x_priv, ocp_ctl_work);

	if (wsa881x->state == WSA881X_DEV_DOWN)
		return;

	component = wsa881x->component;
	wsa881x_get_temp(wsa881x->tz_pdata.tz_dev, &temp_val);
	dev_dbg(component->dev, " temp = %d\n", temp_val);
@@ -1598,14 +1601,14 @@ static int wsa881x_swr_down(struct swr_device *pdev)
		dev_err(&pdev->dev, "%s: wsa881x is NULL\n", __func__);
		return -EINVAL;
	}
	if (delayed_work_pending(&wsa881x->ocp_ctl_work))
		cancel_delayed_work_sync(&wsa881x->ocp_ctl_work);
	ret = wsa881x_gpio_ctrl(wsa881x, false);
	if (ret)
		dev_err(&pdev->dev, "%s: Failed to disable gpio\n", __func__);
	else
		wsa881x->state = WSA881X_DEV_DOWN;

	if (delayed_work_pending(&wsa881x->ocp_ctl_work))
		cancel_delayed_work_sync(&wsa881x->ocp_ctl_work);
	return ret;
}

Loading