mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
ASoC: wm_adsp: Add wm_adsp_start() and wm_adsp_stop()
Separate the functionality of wm_adsp_event() into two exported functions wm_adsp_start() and wm_adsp_stop(). This allows the codec driver to start and stop the DSP outside of a DAPM widget. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://lore.kernel.org/r/20240223153910.2063698-2-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
b401b62175
commit
5519ac3a71
@ -1092,27 +1092,36 @@ static void wm_adsp_event_post_stop(struct cs_dsp *cs_dsp)
|
||||
dsp->fatal_error = false;
|
||||
}
|
||||
|
||||
int wm_adsp_run(struct wm_adsp *dsp)
|
||||
{
|
||||
flush_work(&dsp->boot_work);
|
||||
|
||||
return cs_dsp_run(&dsp->cs_dsp);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wm_adsp_run);
|
||||
|
||||
void wm_adsp_stop(struct wm_adsp *dsp)
|
||||
{
|
||||
cs_dsp_stop(&dsp->cs_dsp);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wm_adsp_stop);
|
||||
|
||||
int wm_adsp_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event)
|
||||
{
|
||||
struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
|
||||
struct wm_adsp *dsps = snd_soc_component_get_drvdata(component);
|
||||
struct wm_adsp *dsp = &dsps[w->shift];
|
||||
int ret = 0;
|
||||
|
||||
switch (event) {
|
||||
case SND_SOC_DAPM_POST_PMU:
|
||||
flush_work(&dsp->boot_work);
|
||||
ret = cs_dsp_run(&dsp->cs_dsp);
|
||||
break;
|
||||
return wm_adsp_run(dsp);
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
cs_dsp_stop(&dsp->cs_dsp);
|
||||
break;
|
||||
wm_adsp_stop(dsp);
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wm_adsp_event);
|
||||
|
||||
|
@ -98,6 +98,8 @@ irqreturn_t wm_adsp2_bus_error(int irq, void *data);
|
||||
irqreturn_t wm_halo_bus_error(int irq, void *data);
|
||||
irqreturn_t wm_halo_wdt_expire(int irq, void *data);
|
||||
|
||||
int wm_adsp_run(struct wm_adsp *dsp);
|
||||
void wm_adsp_stop(struct wm_adsp *dsp);
|
||||
int wm_adsp_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user