You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.0 KiB
Diff
129 lines
4.0 KiB
Diff
From 31b533207610f0f703cfdcba3baf404d000f1363 Mon Sep 17 00:00:00 2001
|
|
From: Matthias Reichl <hias@horus.com>
|
|
Date: Sun, 18 Nov 2018 15:24:16 +0100
|
|
Subject: [PATCH] rpi-wm8804-soundcard: drop PWRDN register writes
|
|
|
|
Since kernel 4.0 the PWRDN register bits are under DAPM
|
|
control from the wm8804 driver.
|
|
|
|
Drop code that modifies that register to avoid interfering
|
|
with DAPM.
|
|
|
|
Signed-off-by: Matthias Reichl <hias@horus.com>
|
|
---
|
|
sound/soc/bcm/rpi-wm8804-soundcard.c | 55 ----------------------------
|
|
1 file changed, 55 deletions(-)
|
|
|
|
--- a/sound/soc/bcm/rpi-wm8804-soundcard.c
|
|
+++ b/sound/soc/bcm/rpi-wm8804-soundcard.c
|
|
@@ -54,8 +54,6 @@ struct snd_rpi_wm8804_drvdata {
|
|
struct snd_soc_dai_link *dai;
|
|
/* Required - snd_soc_card name */
|
|
const char *card_name;
|
|
- /* Optional- Overrides the module paramter */
|
|
- unsigned short auto_shutdown_output;
|
|
/* Optional DT node names if card info is defined in DT */
|
|
const char *card_name_dt;
|
|
const char *dai_name_dt;
|
|
@@ -64,51 +62,12 @@ struct snd_rpi_wm8804_drvdata {
|
|
int (*probe)(struct platform_device *pdev);
|
|
};
|
|
|
|
-static short int auto_shutdown_output;
|
|
-module_param(auto_shutdown_output, short, 0660);
|
|
-MODULE_PARM_DESC(auto_shutdown_output, "Shutdown SP/DIF output if playback is stopped");
|
|
-
|
|
static struct gpio_desc *snd_clk44gpio;
|
|
static struct gpio_desc *snd_clk48gpio;
|
|
|
|
#define CLK_44EN_RATE 22579200UL
|
|
#define CLK_48EN_RATE 24576000UL
|
|
|
|
-static int snd_rpi_wm8804_init(struct snd_soc_pcm_runtime *rtd)
|
|
-{
|
|
- struct snd_soc_component *component = rtd->codec_dai->component;
|
|
- int rc;
|
|
-
|
|
- pr_debug("%s\n", __func__);
|
|
-
|
|
- rc = snd_soc_component_update_bits(component, WM8804_PWRDN, 0x4, 0x0);
|
|
- return rc < 0 ? rc : 0;
|
|
-}
|
|
-
|
|
-static int snd_rpi_wm8804_digi_startup(struct snd_pcm_substream *substream)
|
|
-{
|
|
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
- struct snd_soc_component *component = rtd->codec_dai->component;
|
|
- int rc;
|
|
-
|
|
- pr_debug("%s\n", __func__);
|
|
-
|
|
- rc = snd_soc_component_update_bits(component, WM8804_PWRDN, 0x3c, 0x00);
|
|
- return rc < 0 ? rc : 0;
|
|
-}
|
|
-
|
|
-static void snd_rpi_wm8804_digi_shutdown(struct snd_pcm_substream *substream)
|
|
-{
|
|
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
|
- struct snd_soc_component *component = rtd->codec_dai->component;
|
|
-
|
|
- pr_debug("%s %d\n", __func__, auto_shutdown_output);
|
|
-
|
|
- if (auto_shutdown_output)
|
|
- snd_soc_component_update_bits(component, WM8804_PWRDN,
|
|
- 0x3c, 0x3c);
|
|
-}
|
|
-
|
|
static unsigned int snd_rpi_wm8804_enable_clock(unsigned int samplerate)
|
|
{
|
|
switch (samplerate) {
|
|
@@ -204,12 +163,6 @@ static int snd_rpi_wm8804_hw_params(stru
|
|
return ret;
|
|
}
|
|
|
|
- /* Enable TX output */
|
|
- snd_soc_component_update_bits(component, WM8804_PWRDN, 0x4, 0x0);
|
|
-
|
|
- /* Power on */
|
|
- snd_soc_component_update_bits(component, WM8804_PWRDN, 0x9, 0);
|
|
-
|
|
/* set sampling frequency status bits */
|
|
snd_soc_component_update_bits(component, WM8804_SPDTX4, 0x0f,
|
|
sampling_freq);
|
|
@@ -219,8 +172,6 @@ static int snd_rpi_wm8804_hw_params(stru
|
|
|
|
static struct snd_soc_ops snd_rpi_wm8804_ops = {
|
|
.hw_params = snd_rpi_wm8804_hw_params,
|
|
- .startup = snd_rpi_wm8804_digi_startup,
|
|
- .shutdown = snd_rpi_wm8804_digi_shutdown,
|
|
};
|
|
|
|
static struct snd_soc_dai_link snd_justboom_digi_dai[] = {
|
|
@@ -233,7 +184,6 @@ static struct snd_soc_dai_link snd_justb
|
|
static struct snd_rpi_wm8804_drvdata drvdata_justboom_digi = {
|
|
.card_name = "snd_rpi_justboom_digi",
|
|
.dai = snd_justboom_digi_dai,
|
|
- .auto_shutdown_output = 1,
|
|
};
|
|
|
|
static struct snd_soc_dai_link snd_iqaudio_digi_dai[] = {
|
|
@@ -335,8 +285,6 @@ static int snd_rpi_wm8804_probe(struct p
|
|
|
|
snd_soc_card_set_drvdata(&snd_rpi_wm8804, drvdata);
|
|
|
|
- if (!dai->init)
|
|
- dai->init = snd_rpi_wm8804_init;
|
|
if (!dai->ops)
|
|
dai->ops = &snd_rpi_wm8804_ops;
|
|
if (!dai->codec_dai_name)
|
|
@@ -348,9 +296,6 @@ static int snd_rpi_wm8804_probe(struct p
|
|
SND_SOC_DAIFMT_NB_NF |
|
|
SND_SOC_DAIFMT_CBM_CFM;
|
|
|
|
- if (drvdata->auto_shutdown_output)
|
|
- auto_shutdown_output = 1;
|
|
-
|
|
snd_rpi_wm8804.dai_link = dai;
|
|
i2s_node = of_parse_phandle(pdev->dev.of_node,
|
|
"i2s-controller", 0);
|