OSDN Git Service

ASoC: wm_adsp: Allow client to hook into pre_run callback
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Wed, 9 Nov 2022 16:53:29 +0000 (16:53 +0000)
committerMark Brown <broonie@kernel.org>
Wed, 23 Nov 2022 11:10:42 +0000 (11:10 +0000)
Some HALO-based codecs need some additional custom setup in the
pre_run stage of cs_dsp. Implement the callback in wm_adsp to call
an optional codec driver callback.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20221109165331.29332-11-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm_adsp.c
sound/soc/codecs/wm_adsp.h

index 8a2e977..34a94b0 100644 (file)
@@ -1035,6 +1035,16 @@ int wm_adsp_early_event(struct snd_soc_dapm_widget *w,
 }
 EXPORT_SYMBOL_GPL(wm_adsp_early_event);
 
+static int wm_adsp_pre_run(struct cs_dsp *cs_dsp)
+{
+       struct wm_adsp *dsp = container_of(cs_dsp, struct wm_adsp, cs_dsp);
+
+       if (!dsp->pre_run)
+               return 0;
+
+       return (*dsp->pre_run)(dsp);
+}
+
 static int wm_adsp_event_post_run(struct cs_dsp *cs_dsp)
 {
        struct wm_adsp *dsp = container_of(cs_dsp, struct wm_adsp, cs_dsp);
@@ -2043,6 +2053,7 @@ static const struct cs_dsp_client_ops wm_adsp1_client_ops = {
 static const struct cs_dsp_client_ops wm_adsp2_client_ops = {
        .control_add = wm_adsp_control_add,
        .control_remove = wm_adsp_control_remove,
+       .pre_run = wm_adsp_pre_run,
        .post_run = wm_adsp_event_post_run,
        .post_stop = wm_adsp_event_post_stop,
        .watchdog_expired = wm_adsp_fatal_error,
index 375009a..dc2f7a0 100644 (file)
@@ -36,6 +36,7 @@ struct wm_adsp {
        int fw;
 
        struct work_struct boot_work;
+       int (*pre_run)(struct wm_adsp *dsp);
 
        bool preloaded;
        bool fatal_error;