From 30bfce17497c6c963a264bcd19c1ea80a7bc4d03 Mon Sep 17 00:00:00 2001 From: Laxminath Kasam Date: Fri, 10 Jul 2020 18:06:56 +0530 Subject: [PATCH] soc: wsa883x: Update the PDM_WD at startup/teardown Update PDM_WD bit only at startup and teardown of speaker playback. Change-Id: If385c0f4d99b7f5aa4ccd8b1ee94c4afa6754518 Signed-off-by: Laxminath Kasam --- asoc/codecs/wsa883x/wsa883x.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/asoc/codecs/wsa883x/wsa883x.c b/asoc/codecs/wsa883x/wsa883x.c index b5db7dcdae32..fddfe3923717 100644 --- a/asoc/codecs/wsa883x/wsa883x.c +++ b/asoc/codecs/wsa883x/wsa883x.c @@ -99,7 +99,6 @@ static const struct wsa_reg_mask_val reg_init[] = { {WSA883X_CDC_SPK_DSM_R7, 0xFF, 0x3F}, {WSA883X_DRE_CTL_0, 0xF0, 0x90}, {WSA883X_DRE_IDLE_DET_CTL, 0x10, 0x00}, - {WSA883X_PDM_WD_CTL, 0x01, 0x01}, {WSA883X_CURRENT_LIMIT, 0x78, 0x20}, {WSA883X_DRE_CTL_0, 0x07, 0x02}, {WSA883X_VAGC_TIME, 0x0F, 0x0F}, @@ -1017,7 +1016,6 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w, swr_slvdev_datapath_control(wsa883x->swr_slave, wsa883x->swr_slave->dev_num, true); - wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PDM_WD); wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_UVLO); /* Force remove group */ swr_remove_from_group(wsa883x->swr_slave, @@ -1027,9 +1025,13 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w, WSA883X_PA_FSM_CTL, 0x01, 0x01); break; case SND_SOC_DAPM_PRE_PMD: + if (!test_bit(SPKR_ADIE_LB, &wsa883x->status_mask)) + wcd_disable_irq(&wsa883x->irq_info, + WSA883X_IRQ_INT_PDM_WD); snd_soc_component_update_bits(component, WSA883X_PA_FSM_CTL, 0x01, 0x00); - wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PDM_WD); + snd_soc_component_update_bits(component, WSA883X_PDM_WD_CTL, + 0x01, 0x00); wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_UVLO); clear_bit(SPKR_STATUS, &wsa883x->status_mask); clear_bit(SPKR_ADIE_LB, &wsa883x->status_mask); @@ -1380,10 +1382,16 @@ static int wsa883x_event_notify(struct notifier_block *nb, break; case BOLERO_WSA_EVT_PA_ON_POST_FSCLK: - if (test_bit(SPKR_STATUS, &wsa883x->status_mask)) + if (test_bit(SPKR_STATUS, &wsa883x->status_mask)) { + snd_soc_component_update_bits(wsa883x->component, + WSA883X_PDM_WD_CTL, + 0x01, 0x01); snd_soc_component_update_bits(wsa883x->component, WSA883X_PA_FSM_CTL, 0x01, 0x01); + wcd_enable_irq(&wsa883x->irq_info, + WSA883X_IRQ_INT_PDM_WD); + } break; case BOLERO_WSA_EVT_PA_ON_POST_FSCLK_ADIE_LB: if (test_bit(SPKR_STATUS, &wsa883x->status_mask))