123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- From a09a8ebce7251e2a42668bd5ae57c12ed24fdca8 Mon Sep 17 00:00:00 2001
- From: Daniel Matuschek <daniel@hifiberry.com>
- Date: Sat, 31 Jan 2015 16:07:56 +0100
- Subject: [PATCH 084/114] Add a parameter to turn off SPDIF output if no audio
- is playing
- This patch adds the paramater auto_shutdown_output to the kernel module.
- Default behaviour of the module is the same, but when auto_shutdown_output
- is set to 1, the SPDIF oputput will shutdown if no stream is playing.
- ---
- sound/soc/bcm/hifiberry_digi.c | 29 ++++++++++++++++++++++++++++-
- 1 file changed, 28 insertions(+), 1 deletion(-)
- --- a/sound/soc/bcm/hifiberry_digi.c
- +++ b/sound/soc/bcm/hifiberry_digi.c
- @@ -26,6 +26,11 @@
-
- #include "../codecs/wm8804.h"
-
- +static short int auto_shutdown_output = 0;
- +module_param(auto_shutdown_output, short, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
- +MODULE_PARM_DESC(auto_shutdown_output, "Shutdown SP/DIF output if playback is stopped");
- +
- +
- static int samplerate=44100;
-
- static int snd_rpi_hifiberry_digi_init(struct snd_soc_pcm_runtime *rtd)
- @@ -38,6 +43,25 @@ static int snd_rpi_hifiberry_digi_init(s
- return 0;
- }
-
- +static int snd_rpi_hifiberry_digi_startup(struct snd_pcm_substream *substream) {
- + /* turn on digital output */
- + struct snd_soc_pcm_runtime *rtd = substream->private_data;
- + struct snd_soc_codec *codec = rtd->codec;
- + snd_soc_update_bits(codec, WM8804_PWRDN, 0x3c, 0x00);
- + return 0;
- +}
- +
- +static void snd_rpi_hifiberry_digi_shutdown(struct snd_pcm_substream *substream) {
- + /* turn off output */
- + if (auto_shutdown_output) {
- + /* turn off output */
- + struct snd_soc_pcm_runtime *rtd = substream->private_data;
- + struct snd_soc_codec *codec = rtd->codec;
- + snd_soc_update_bits(codec, WM8804_PWRDN, 0x3c, 0x3c);
- + }
- +}
- +
- +
- static int snd_rpi_hifiberry_digi_hw_params(struct snd_pcm_substream *substream,
- struct snd_pcm_hw_params *params)
- {
- @@ -70,7 +94,8 @@ static int snd_rpi_hifiberry_digi_hw_par
- break;
- default:
- dev_err(substream->pcm->dev,
- - "Failed to set WM8804 SYSCLK, unsupported samplerate\n");
- + "Failed to set WM8804 SYSCLK, unsupported samplerate %d\n",
- + samplerate);
- }
-
- snd_soc_dai_set_clkdiv(codec_dai, WM8804_MCLK_DIV, mclk_div);
- @@ -96,6 +121,8 @@ static int snd_rpi_hifiberry_digi_hw_par
- /* machine stream operations */
- static struct snd_soc_ops snd_rpi_hifiberry_digi_ops = {
- .hw_params = snd_rpi_hifiberry_digi_hw_params,
- + .startup = snd_rpi_hifiberry_digi_startup,
- + .shutdown = snd_rpi_hifiberry_digi_shutdown,
- };
-
- static struct snd_soc_dai_link snd_rpi_hifiberry_digi_dai[] = {
|