From 61e7e8b1088dc2f8465b91b57a7f31233f05d0a1 Mon Sep 17 00:00:00 2001 From: Meng Wang Date: Mon, 27 Sep 2021 11:44:50 +0800 Subject: [PATCH] ASoC: wsa883x: Enable all WSA interrupts Only UVLO_irq, PA_ON_ERR_IRQ and PDM_WD_IRQ are enabled on wsa883x. Enable all other IRQs to monitor if WSA is in bad state. Change-Id: I768c7f2c0fe64cc008ed63459b583e665e1ee013 Signed-off-by: Meng Wang --- asoc/codecs/wsa883x/wsa883x.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/asoc/codecs/wsa883x/wsa883x.c b/asoc/codecs/wsa883x/wsa883x.c index f68eee190533..4bf102ff0dbc 100644 --- a/asoc/codecs/wsa883x/wsa883x.c +++ b/asoc/codecs/wsa883x/wsa883x.c @@ -1125,6 +1125,11 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w, usleep_range(250, 300); wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PA_ON_ERR); wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_UVLO); + wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_SAF2WAR); + wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_WAR2SAF); + wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_DISABLE); + wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_OCP); + wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_CLK_WD); /* Force remove group */ swr_remove_from_group(wsa883x->swr_slave, wsa883x->swr_slave->dev_num); @@ -1158,6 +1163,11 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w, 0x10, 0x00); snd_soc_component_update_bits(component, WSA883X_PDM_WD_CTL, 0x01, 0x00); + wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_CLK_WD); + wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_OCP); + wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_DISABLE); + wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_WAR2SAF); + wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_SAF2WAR); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_UVLO); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PA_ON_ERR); clear_bit(SPKR_STATUS, &wsa883x->status_mask); @@ -1642,6 +1652,7 @@ static int wsa883x_swr_probe(struct swr_device *pdev) } swr_set_dev_data(pdev, wsa883x); wsa883x->swr_slave = pdev; + wsa883x->dev = &pdev->dev; pin_state_current = msm_cdc_pinctrl_get_state(wsa883x->wsa_rst_np); wsa883x_gpio_ctrl(wsa883x, true); /* @@ -1687,48 +1698,48 @@ static int wsa883x_swr_probe(struct swr_device *pdev) } wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_SAF2WAR, - "WSA SAF2WAR", wsa883x_saf2war_handle_irq, NULL); + "WSA SAF2WAR", wsa883x_saf2war_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_SAF2WAR); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_WAR2SAF, - "WSA WAR2SAF", wsa883x_war2saf_handle_irq, NULL); + "WSA WAR2SAF", wsa883x_war2saf_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_WAR2SAF); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_DISABLE, - "WSA OTP", wsa883x_otp_handle_irq, NULL); + "WSA OTP", wsa883x_otp_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_DISABLE); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_OCP, - "WSA OCP", wsa883x_ocp_handle_irq, NULL); + "WSA OCP", wsa883x_ocp_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_OCP); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_CLIP, - "WSA CLIP", wsa883x_clip_handle_irq, NULL); + "WSA CLIP", wsa883x_clip_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_CLIP); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PDM_WD, - "WSA PDM WD", wsa883x_pdm_wd_handle_irq, NULL); + "WSA PDM WD", wsa883x_pdm_wd_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PDM_WD); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_CLK_WD, - "WSA CLK WD", wsa883x_clk_wd_handle_irq, NULL); + "WSA CLK WD", wsa883x_clk_wd_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_CLK_WD); wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_INTR_PIN, - "WSA EXT INT", wsa883x_ext_int_handle_irq, NULL); + "WSA EXT INT", wsa883x_ext_int_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_INTR_PIN); /* Under Voltage Lock out (UVLO) interrupt handle */ wcd_request_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_UVLO, - "WSA UVLO", wsa883x_uvlo_handle_irq, NULL); + "WSA UVLO", wsa883x_uvlo_handle_irq, wsa883x); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_UVLO);