diff options
author | Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> | 2023-10-09 13:54:26 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2023-10-19 14:53:50 +0200 |
commit | 17baaa1f950b19456618b792dbb5b3fbb12884a8 (patch) | |
tree | f99af0a32fd59a62105dbf4d50df3bdb6442f197 /sound/soc/sof/sof-priv.h | |
parent | f549a82aff57865c47b5abd17336b23cd9bb2d2c (diff) | |
download | linux-stable-17baaa1f950b19456618b792dbb5b3fbb12884a8.tar.gz linux-stable-17baaa1f950b19456618b792dbb5b3fbb12884a8.tar.bz2 linux-stable-17baaa1f950b19456618b792dbb5b3fbb12884a8.zip |
ASoC: SOF: core: Add probe_early and remove_late callbacks
The existing DSP probe may be handled in a workqueue to allow for
extra time, typically for the i915 request_module and HDAudio codec
handling.
With the upcoming changes for i915/Xe driver relying on the
-EPROBE_DEFER mechanism, we need to have a first pass of the probe
which cannot be pushed to a workqueue. Introduce 2 new optional
callbacks.
probe_early is called before the workqueue runs. remove_late may be
called from the workqueue if load is unsuccesful, but will otherwise
be called on module unload.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Acked-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20231009115437.99976-3-maarten.lankhorst@linux.intel.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/soc/sof/sof-priv.h')
-rw-r--r-- | sound/soc/sof/sof-priv.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sound/soc/sof/sof-priv.h b/sound/soc/sof/sof-priv.h index d4f6702e93dc..e73a92189fe1 100644 --- a/sound/soc/sof/sof-priv.h +++ b/sound/soc/sof/sof-priv.h @@ -165,8 +165,10 @@ struct sof_firmware { struct snd_sof_dsp_ops { /* probe/remove/shutdown */ + int (*probe_early)(struct snd_sof_dev *sof_dev); /* optional */ int (*probe)(struct snd_sof_dev *sof_dev); /* mandatory */ int (*remove)(struct snd_sof_dev *sof_dev); /* optional */ + int (*remove_late)(struct snd_sof_dev *sof_dev); /* optional */ int (*shutdown)(struct snd_sof_dev *sof_dev); /* optional */ /* DSP core boot / reset */ |