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);
