diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-01-13 10:24:08 (GMT) |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-01-28 21:30:12 (GMT) |
commit | 1293617cddc40971917150e3f5bf66b7306e2e7e (patch) | |
tree | 857f6dd1c0c278f290963f7a3739f89d1652d98d /sound/i2c | |
parent | a850ef8afd3cd1eecd2e136f8dca0c06599eade8 (diff) | |
download | linux-1293617cddc40971917150e3f5bf66b7306e2e7e.tar.xz |
ALSA: ak411x: Add PM helper functions
Define snd_ak4114_suspend() and snd_ak4114_resume() functions to
handle PM properly, stopping and restarting the work at PM.
Currently only ice1712/juli.c deals with the PM and ak4114, so fix the
calls there appropriately.
The same PM functions are defined in ak4113.c, too, although they
aren't currently called yet (ice1712/quartet.c may be enhanced to
support PM later).
Acked-by: Jaroslav Kysela <perex@perex.cz>
Tested-by: Pavel Hofman <pavel.hofman@ivitera.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/i2c')
-rw-r--r-- | sound/i2c/other/ak4113.c | 16 | ||||
-rw-r--r-- | sound/i2c/other/ak4114.c | 16 |
2 files changed, 32 insertions, 0 deletions
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c index c6bba99..c2b14d9 100644 --- a/sound/i2c/other/ak4113.c +++ b/sound/i2c/other/ak4113.c @@ -636,3 +636,19 @@ static void ak4113_stats(struct work_struct *work) if (atomic_dec_and_test(&chip->wq_processing)) schedule_delayed_work(&chip->work, HZ / 10); } + +#ifdef CONFIG_PM +void snd_ak4113_suspend(struct ak4113 *chip) +{ + atomic_inc(&chip->wq_processing); /* don't schedule new work */ + cancel_delayed_work_sync(&chip->work); +} +EXPORT_SYMBOL(snd_ak4113_suspend); + +void snd_ak4113_resume(struct ak4113 *chip) +{ + atomic_dec(&chip->wq_processing); + snd_ak4113_reinit(chip); +} +EXPORT_SYMBOL(snd_ak4113_resume); +#endif diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c index f6ee1e7..ee639f5 100644 --- a/sound/i2c/other/ak4114.c +++ b/sound/i2c/other/ak4114.c @@ -621,3 +621,19 @@ static void ak4114_stats(struct work_struct *work) if (atomic_dec_and_test(&chip->wq_processing)) schedule_delayed_work(&chip->work, HZ / 10); } + +#ifdef CONFIG_PM +void snd_ak4114_suspend(struct ak4114 *chip) +{ + atomic_inc(&chip->wq_processing); /* don't schedule new work */ + cancel_delayed_work_sync(&chip->work); +} +EXPORT_SYMBOL(snd_ak4114_suspend); + +void snd_ak4114_resume(struct ak4114 *chip) +{ + atomic_dec(&chip->wq_processing); + snd_ak4114_reinit(chip); +} +EXPORT_SYMBOL(snd_ak4114_resume); +#endif |