diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0191-rpi-wm8804-soundcard-drop-PWRDN-register-writes.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.19/950-0191-rpi-wm8804-soundcard-drop-PWRDN-register-writes.patch | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0191-rpi-wm8804-soundcard-drop-PWRDN-register-writes.patch b/target/linux/brcm2708/patches-4.19/950-0191-rpi-wm8804-soundcard-drop-PWRDN-register-writes.patch new file mode 100644 index 0000000000..f73d9c9617 --- /dev/null +++ b/target/linux/brcm2708/patches-4.19/950-0191-rpi-wm8804-soundcard-drop-PWRDN-register-writes.patch @@ -0,0 +1,128 @@ +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); |