diff --git a/asoc/codecs/wsa883x/wsa883x.c b/asoc/codecs/wsa883x/wsa883x.c index 8464dacd80e0..317da954823f 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); @@ -1650,6 +1660,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); /* @@ -1697,48 +1708,48 @@ static int wsa883x_swr_probe(struct swr_device *pdev) wsa883x->swr_slave->slave_irq = wsa883x->virq; 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);