aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2009-06-13 14:55:02 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2009-06-13 15:06:28 -0400
commit831dc0f10f7b2a4856094ff160c018bf19f77527 (patch)
treeae12de8cf87de3a30bfacb1d869b1db631fbbe31
parent619439998ac32953d737fbe2dc82eb67024547d0 (diff)
ASoC: Add stub suspend and resume calls for ASoC subdevices
Now that ASoC subdevices can be regular devices they can have normal suspend and resume calls from their buses. However, suspending them individually is not desirable since this can lead to problems such as pops and clicks from devices being suspended with their signals being amplified or clocks being stopped suddenly. This will be resolved by having the normal device model suspend and resume calls call into ASoC which will suspend the entire card while any of its components are suspended. At present this is not yet implemented but in order to aid the transition of drivers to the standard device model this patch adds API calls for the notifications. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r--include/sound/soc.h5
-rw-r--r--sound/soc/soc-core.c39
2 files changed, 44 insertions, 0 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 5297ba7e2c41..e6704c0a4404 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -192,6 +192,11 @@ void snd_soc_unregister_platform(struct snd_soc_platform *platform);
192int snd_soc_register_codec(struct snd_soc_codec *codec); 192int snd_soc_register_codec(struct snd_soc_codec *codec);
193void snd_soc_unregister_codec(struct snd_soc_codec *codec); 193void snd_soc_unregister_codec(struct snd_soc_codec *codec);
194 194
195#ifdef CONFIG_PM
196int snd_soc_suspend_device(struct device *dev);
197int snd_soc_resume_device(struct device *dev);
198#endif
199
195/* pcm <-> DAI connect */ 200/* pcm <-> DAI connect */
196void snd_soc_free_pcms(struct snd_soc_device *socdev); 201void snd_soc_free_pcms(struct snd_soc_device *socdev);
197int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid); 202int snd_soc_new_pcms(struct snd_soc_device *socdev, int idx, const char *xid);
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index e1a920cd8953..44141178ff4a 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -788,6 +788,45 @@ static int soc_resume(struct platform_device *pdev)
788 return 0; 788 return 0;
789} 789}
790 790
791/**
792 * snd_soc_suspend_device: Notify core of device suspend
793 *
794 * @dev: Device being suspended.
795 *
796 * In order to ensure that the entire audio subsystem is suspended in a
797 * coordinated fashion ASoC devices should suspend themselves when
798 * called by ASoC. When the standard kernel suspend process asks the
799 * device to suspend it should call this function to initiate a suspend
800 * of the entire ASoC card.
801 *
802 * \note Currently this function is stubbed out.
803 */
804int snd_soc_suspend_device(struct device *dev)
805{
806 return 0;
807}
808EXPORT_SYMBOL_GPL(snd_soc_suspend_device);
809
810/**
811 * snd_soc_resume_device: Notify core of device resume
812 *
813 * @dev: Device being resumed.
814 *
815 * In order to ensure that the entire audio subsystem is resumed in a
816 * coordinated fashion ASoC devices should resume themselves when called
817 * by ASoC. When the standard kernel resume process asks the device
818 * to resume it should call this function. Once all the components of
819 * the card have notified that they are ready to be resumed the card
820 * will be resumed.
821 *
822 * \note Currently this function is stubbed out.
823 */
824int snd_soc_resume_device(struct device *dev)
825{
826 return 0;
827}
828EXPORT_SYMBOL_GPL(snd_soc_resume_device);
829
791#else 830#else
792#define soc_suspend NULL 831#define soc_suspend NULL
793#define soc_resume NULL 832#define soc_resume NULL