ASoC: wsa883x: Update speaker playback sequence

Update speaker playback sequence on wsa883x codec to
avoid click and pop and loss of VI sense data on speaker.

Change-Id: I8ec7072b63bef6c2e7bd64c96df4d98852c4f40d
Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
This commit is contained in:
Sudheer Papothi
2020-03-03 09:25:38 +05:30
parent e96e387122
commit 6f33b8cd3b
2 changed files with 16 additions and 10 deletions

View File

@@ -65,6 +65,7 @@ enum {
BOLERO_WSA_EVT_PA_OFF_PRE_SSR, BOLERO_WSA_EVT_PA_OFF_PRE_SSR,
BOLERO_WSA_EVT_SSR_DOWN, BOLERO_WSA_EVT_SSR_DOWN,
BOLERO_WSA_EVT_SSR_UP, BOLERO_WSA_EVT_SSR_UP,
BOLERO_WSA_EVT_PA_ON_POST_FSCLK,
}; };
struct wsa_ctrl_platform_data { struct wsa_ctrl_platform_data {

View File

@@ -910,16 +910,8 @@ static int wsa883x_enable_swr_dac_port(struct snd_soc_dapm_widget *w,
&port_type[0]); &port_type[0]);
break; break;
case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMU:
swr_slvdev_datapath_control(wsa883x->swr_slave,
wsa883x->swr_slave->dev_num,
true);
break; break;
case SND_SOC_DAPM_PRE_PMD: case SND_SOC_DAPM_PRE_PMD:
swr_slvdev_datapath_control(wsa883x->swr_slave,
wsa883x->swr_slave->dev_num,
false);
break;
case SND_SOC_DAPM_POST_PMD:
wsa883x_set_port(component, SWR_DAC_PORT, wsa883x_set_port(component, SWR_DAC_PORT,
&port_id[num_port], &num_ch[num_port], &port_id[num_port], &num_ch[num_port],
&ch_mask[num_port], &ch_rate[num_port], &ch_mask[num_port], &ch_rate[num_port],
@@ -943,6 +935,11 @@ static int wsa883x_enable_swr_dac_port(struct snd_soc_dapm_widget *w,
swr_disconnect_port(wsa883x->swr_slave, &port_id[0], num_port, swr_disconnect_port(wsa883x->swr_slave, &port_id[0], num_port,
&ch_mask[0], &port_type[0]); &ch_mask[0], &port_type[0]);
break; break;
case SND_SOC_DAPM_POST_PMD:
swr_slvdev_datapath_control(wsa883x->swr_slave,
wsa883x->swr_slave->dev_num,
false);
break;
default: default:
break; break;
} }
@@ -959,8 +956,10 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w,
dev_dbg(component->dev, "%s: %s %d\n", __func__, w->name, event); dev_dbg(component->dev, "%s: %s %d\n", __func__, w->name, event);
switch (event) { switch (event) {
case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMU:
snd_soc_component_update_bits(component, WSA883X_PA_FSM_CTL, swr_slvdev_datapath_control(wsa883x->swr_slave,
0x01, 0x01); wsa883x->swr_slave->dev_num,
true);
wcd_enable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PDM_WD);
/* Force remove group */ /* Force remove group */
swr_remove_from_group(wsa883x->swr_slave, swr_remove_from_group(wsa883x->swr_slave,
wsa883x->swr_slave->dev_num); wsa883x->swr_slave->dev_num);
@@ -983,6 +982,7 @@ static int wsa883x_spkr_event(struct snd_soc_dapm_widget *w,
0x0E, 0x00); 0x0E, 0x00);
snd_soc_component_update_bits(component, WSA883X_PA_FSM_CTL, snd_soc_component_update_bits(component, WSA883X_PA_FSM_CTL,
0x01, 0x00); 0x01, 0x00);
wcd_disable_irq(&wsa883x->irq_info, WSA883X_IRQ_INT_PDM_WD);
break; break;
} }
return 0; return 0;
@@ -1267,6 +1267,11 @@ static int wsa883x_event_notify(struct notifier_block *nb,
WSA883X_PA_FSM_CTL, WSA883X_PA_FSM_CTL,
0x01, 0x00); 0x01, 0x00);
break; break;
case BOLERO_WSA_EVT_PA_ON_POST_FSCLK:
snd_soc_component_update_bits(wsa883x->component,
WSA883X_PA_FSM_CTL,
0x01, 0x01);
break;
default: default:
dev_dbg(wsa883x->dev, "%s: unknown event %d\n", dev_dbg(wsa883x->dev, "%s: unknown event %d\n",
__func__, event); __func__, event);