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

Commit f0f26b14 authored by Bhalchandra Gajare's avatar Bhalchandra Gajare Committed by Gerrit - the friendly Code Review server
Browse files

ASoC: wcd-spi: fix clock disable request during shutdown



It is possible that there could be pending delayed request to disable
the clock while the manager driver has already raised shutdown event.
In such cases, the delayed clock disable request will be made after
shutdown, resulting in unclocked access on the SPI bus. Fix this by
intercepting the shutdown event to flush the clock votes and disable
the clock.

CRs-Fixed: 1091032
Change-Id: I53a3a9aa540c10932eed7fa29ce7c6050504a9a0
Signed-off-by: default avatarBhalchandra Gajare <gajare@codeaurora.org>
parent 6862ebda
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -855,12 +855,22 @@ static int wdsp_spi_event_handler(struct device *dev, void *priv_data,
				  void *data)
{
	struct spi_device *spi = to_spi_device(dev);
	struct wcd_spi_priv *wcd_spi = spi_get_drvdata(spi);
	int ret = 0;

	dev_dbg(&spi->dev, "%s: event type %d\n",
		__func__, event);

	switch (event) {
	case WDSP_EVENT_POST_SHUTDOWN:
		cancel_delayed_work_sync(&wcd_spi->clk_dwork);
		WCD_SPI_MUTEX_LOCK(spi, wcd_spi->clk_mutex);
		if (test_bit(WCD_SPI_CLK_STATE_ENABLED, &wcd_spi->status_mask))
			wcd_spi_clk_disable(spi);
		wcd_spi->clk_users = 0;
		WCD_SPI_MUTEX_UNLOCK(spi, wcd_spi->clk_mutex);
		break;

	case WDSP_EVENT_PRE_DLOAD_CODE:
	case WDSP_EVENT_PRE_DLOAD_DATA:
		ret = wcd_spi_clk_ctrl(spi, WCD_SPI_CLK_ENABLE,