OSDN Git Service

ALSA: pcm: Suspend streams globally via device type PM ops
authorTakashi Iwai <tiwai@suse.de>
Fri, 11 Jan 2019 14:58:39 +0000 (15:58 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 15 Jan 2019 16:46:36 +0000 (17:46 +0100)
commit3d21ef0b49f84d3341984caafc5c658739674927
tree6af726a82265963dbebb22b360f66a7befdd6ca8
parentbfeffd155283772bbe78c6a05dec7c0128ee500c
ALSA: pcm: Suspend streams globally via device type PM ops

Until now we rely on each driver calling snd_pcm_suspend*() explicitly
at its own PM handling.  However, this can be done far more easily by
setting the PM ops to each actual snd_pcm device object.

This patch adds the device_type object for PCM stream and assigns to
each PCM stream object.  The type contains only the PM ops for system
suspend; we don't need to deal with the resume in general.

The suspend hook simply calls snd_pcm_suspend_all() for the given PCM
streams.  This implies that the PM order is correctly put, i.e. PCM is
suspended before the main (or codec) driver, which should be true in
general.  If a special ordering is needed, you'd need to adjust the
device PM order manually later.

This patch introduces a new flag, snd_pcm.no_device_suspend, too.
With this flag set, the PCM device object won't invoke
snd_pcm_suspend_all() by itself.  This is needed for ASoC who wants to
manage the PM call orders in its serialized way, and the flag is set
in soc_new_pcm() as default.

For the non-ASoC world, we can get rid of the manual snd_pcm_suspend
calls.  This will be done in the later patches.

Reviewed-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
include/sound/pcm.h
sound/core/pcm.c
sound/soc/soc-pcm.c