Commit 4eae4892 authored by Stefan Binding's avatar Stefan Binding Committed by Takashi Iwai

ALSA: hda: hda_component: Add pre and post playback hooks to hda_component

These hooks can be used to add callbacks that would be run before and after
the main playback hooks. These hooks would be called for all amps, before
moving on to the next hook, i.e. pre_playback_hook would be called for
all amps, before the playback_hook is called for all amps, then finally
the post_playback_hook is called for all amps.
Signed-off-by: default avatarStefan Binding <sbinding@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20230721151816.2080453-8-sbinding@opensource.cirrus.comSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent a5adbfb6
...@@ -15,5 +15,7 @@ struct hda_component { ...@@ -15,5 +15,7 @@ struct hda_component {
struct device *dev; struct device *dev;
char name[HDA_MAX_NAME_SIZE]; char name[HDA_MAX_NAME_SIZE];
struct hda_codec *codec; struct hda_codec *codec;
void (*pre_playback_hook)(struct device *dev, int action);
void (*playback_hook)(struct device *dev, int action); void (*playback_hook)(struct device *dev, int action);
void (*post_playback_hook)(struct device *dev, int action);
}; };
...@@ -6700,9 +6700,17 @@ static void comp_generic_playback_hook(struct hda_pcm_stream *hinfo, struct hda_ ...@@ -6700,9 +6700,17 @@ static void comp_generic_playback_hook(struct hda_pcm_stream *hinfo, struct hda_
int i; int i;
for (i = 0; i < HDA_MAX_COMPONENTS; i++) { for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
if (spec->comps[i].dev) if (spec->comps[i].dev && spec->comps[i].pre_playback_hook)
spec->comps[i].pre_playback_hook(spec->comps[i].dev, action);
}
for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
if (spec->comps[i].dev && spec->comps[i].playback_hook)
spec->comps[i].playback_hook(spec->comps[i].dev, action); spec->comps[i].playback_hook(spec->comps[i].dev, action);
} }
for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
if (spec->comps[i].dev && spec->comps[i].post_playback_hook)
spec->comps[i].post_playback_hook(spec->comps[i].dev, action);
}
} }
struct cs35l41_dev_name { struct cs35l41_dev_name {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment