aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.4/950-1020-Update-Allo-Piano-Dac-Driver-for-5.4.y-kernels.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-1020-Update-Allo-Piano-Dac-Driver-for-5.4.y-kernels.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.4/950-1020-Update-Allo-Piano-Dac-Driver-for-5.4.y-kernels.patch246
1 files changed, 0 insertions, 246 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-1020-Update-Allo-Piano-Dac-Driver-for-5.4.y-kernels.patch b/target/linux/bcm27xx/patches-5.4/950-1020-Update-Allo-Piano-Dac-Driver-for-5.4.y-kernels.patch
deleted file mode 100644
index 00d319e291..0000000000
--- a/target/linux/bcm27xx/patches-5.4/950-1020-Update-Allo-Piano-Dac-Driver-for-5.4.y-kernels.patch
+++ /dev/null
@@ -1,246 +0,0 @@
-From 7f7ea09cdfa44c447c31db4884c1bb958d27f10a Mon Sep 17 00:00:00 2001
-From: paul-1 <6473457+paul-1@users.noreply.github.com>
-Date: Wed, 4 Nov 2020 19:11:37 -0500
-Subject: [PATCH] Update Allo Piano Dac Driver for 5.4.y kernels
-
-Add unique names to the individual dac coded drivers
-Remove some of the codec controls that are not used.
-
-Signed-off-by: Paul Hermann <paul@picoreplayer.org>
----
- sound/soc/bcm/allo-piano-dac-plus.c | 129 +++++++++++++++++++++-------
- 1 file changed, 97 insertions(+), 32 deletions(-)
-
---- a/sound/soc/bcm/allo-piano-dac-plus.c
-+++ b/sound/soc/bcm/allo-piano-dac-plus.c
-@@ -2,7 +2,8 @@
- * ALSA ASoC Machine Driver for Allo Piano DAC Plus Subwoofer
- *
- * Author: Baswaraj K <jaikumar@cem-solutions.net>
-- * Copyright 2016
-+ * Copyright 2020
-+ * based on code by David Knell <david.knell@gmail.com)
- * based on code by Daniel Matuschek <info@crazy-audio.com>
- * based on code by Florian Meier <florian.meier@koalo.de>
- *
-@@ -276,8 +277,15 @@ static int snd_allo_piano_dual_mode_put(
- PCM512x_DIGITAL_VOLUME_2, 0xff);
-
- list_for_each_entry(kctl, &snd_card_ptr->controls, list) {
-- if (!strncmp(kctl->id.name, "Digital Playback Volume",
-- sizeof(kctl->id.name))) {
-+ if (!strncmp(kctl->id.name, "Main Digital Playback Volume",
-+ sizeof(kctl->id.name))) {
-+ mc = (struct soc_mixer_control *)
-+ kctl->private_value;
-+ mc->rreg = mc->reg;
-+ break;
-+ }
-+ if (!strncmp(kctl->id.name, "Sub Digital Playback Volume",
-+ sizeof(kctl->id.name))) {
- mc = (struct soc_mixer_control *)
- kctl->private_value;
- mc->rreg = mc->reg;
-@@ -291,13 +299,20 @@ static int snd_allo_piano_dual_mode_put(
- PCM512x_DIGITAL_VOLUME_3, &right_val);
-
- list_for_each_entry(kctl, &snd_card_ptr->controls, list) {
-- if (!strncmp(kctl->id.name, "Digital Playback Volume",
-- sizeof(kctl->id.name))) {
-+ if (!strncmp(kctl->id.name, "Main Digital Playback Volume",
-+ sizeof(kctl->id.name))) {
- mc = (struct soc_mixer_control *)
- kctl->private_value;
- mc->rreg = PCM512x_DIGITAL_VOLUME_3;
- break;
- }
-+ if (!strncmp(kctl->id.name, "Sub Digital Playback Volume",
-+ sizeof(kctl->id.name))) {
-+ mc = (struct soc_mixer_control *)
-+ kctl->private_value;
-+ mc->rreg = PCM512x_DIGITAL_VOLUME_2;
-+ break;
-+ }
- }
-
- snd_soc_component_write(rtd->codec_dais[0]->component,
-@@ -344,13 +359,20 @@ static int snd_allo_piano_mode_put(struc
- PCM512x_DIGITAL_VOLUME_2, &right_val);
-
- list_for_each_entry(kctl, &snd_card_ptr->controls, list) {
-- if (!strncmp(kctl->id.name, "Digital Playback Volume",
-- sizeof(kctl->id.name))) {
-+ if (!strncmp(kctl->id.name, "Main Digital Playback Volume",
-+ sizeof(kctl->id.name))) {
- mc = (struct soc_mixer_control *)
- kctl->private_value;
- mc->rreg = PCM512x_DIGITAL_VOLUME_3;
- break;
- }
-+ if (!strncmp(kctl->id.name, "Sub Digital Playback Volume",
-+ sizeof(kctl->id.name))) {
-+ mc = (struct soc_mixer_control *)
-+ kctl->private_value;
-+ mc->rreg = PCM512x_DIGITAL_VOLUME_2;
-+ break;
-+ }
- }
- snd_soc_component_write(rtd->codec_dais[0]->component,
- PCM512x_DIGITAL_VOLUME_3, left_val);
-@@ -434,12 +456,6 @@ static int pcm512x_set_reg_sub(struct sn
- int ret = 0;
-
- rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name);
-- if (glb_ptr->dual_mode != 1) {
-- ret = snd_soc_component_write(rtd->codec_dais[1]->component,
-- PCM512x_DIGITAL_VOLUME_2, (~left_val));
-- if (ret < 0)
-- return ret;
-- }
-
- if (digital_gain_0db_limit) {
- ret = snd_soc_limit_volume(card, "Subwoofer Playback Volume",
-@@ -449,6 +465,13 @@ static int pcm512x_set_reg_sub(struct sn
- ret);
- }
-
-+ if (glb_ptr->dual_mode != 1) {
-+ ret = snd_soc_component_write(rtd->codec_dais[1]->component,
-+ PCM512x_DIGITAL_VOLUME_2, (~left_val));
-+ if (ret < 0)
-+ return ret;
-+ }
-+
- ret = snd_soc_component_write(rtd->codec_dais[1]->component,
- PCM512x_DIGITAL_VOLUME_3, (~right_val));
- if (ret < 0)
-@@ -674,7 +697,7 @@ static const struct snd_kcontrol_new all
-
- SOC_DOUBLE_R_EXT_TLV("Subwoofer Playback Volume",
- PCM512x_DIGITAL_VOLUME_2,
-- PCM512x_DIGITAL_VOLUME_3, 0, 255, 1,
-+ PCM512x_DIGITAL_VOLUME_3, 0, 207, 1,
- pcm512x_get_reg_sub,
- pcm512x_set_reg_sub,
- digital_tlv_sub),
-@@ -688,7 +711,7 @@ static const struct snd_kcontrol_new all
-
- SOC_DOUBLE_R_EXT_TLV("Master Playback Volume",
- PCM512x_DIGITAL_VOLUME_2,
-- PCM512x_DIGITAL_VOLUME_3, 0, 255, 1,
-+ PCM512x_DIGITAL_VOLUME_3, 0, 207, 1,
- pcm512x_get_reg_master,
- pcm512x_set_reg_master,
- digital_tlv_master),
-@@ -701,10 +724,28 @@ static const struct snd_kcontrol_new all
- pcm512x_set_reg_master_switch),
- };
-
-+static const char * const codec_ctl_pfx[] = { "Main", "Sub" };
-+static const char * const codec_ctl_name[] = {
-+ "Digital Playback Volume",
-+ "Digital Playback Switch",
-+ "Auto Mute Mono Switch",
-+ "Auto Mute Switch",
-+ "Auto Mute Time Left",
-+ "Auto Mute Time Right",
-+ "Clock Missing Period",
-+ "Max Overclock DAC",
-+ "Max Overclock DSP",
-+ "Max Overclock PLL",
-+ "Volume Ramp Down Emergency Rate",
-+ "Volume Ramp Down Emergency Step"
-+};
-+
- static int snd_allo_piano_dac_init(struct snd_soc_pcm_runtime *rtd)
- {
- struct snd_soc_card *card = rtd->card;
- struct glb_pool *glb_ptr;
-+ struct snd_kcontrol *kctl;
-+ int i, j;
-
- glb_ptr = kzalloc(sizeof(struct glb_pool), GFP_KERNEL);
- if (!glb_ptr)
-@@ -719,12 +760,37 @@ static int snd_allo_piano_dac_init(struc
- if (digital_gain_0db_limit) {
- int ret;
-
-- ret = snd_soc_limit_volume(card, "Digital Playback Volume",
-- 207);
-- if (ret < 0)
-- dev_warn(card->dev, "Failed to set volume limit: %d\n",
-- ret);
-+ //Set volume limit on both dacs
-+ for (i = 0; i < ARRAY_SIZE(codec_ctl_pfx); i++) {
-+ char cname[256];
-+
-+ sprintf(cname, "%s %s", codec_ctl_pfx[i], codec_ctl_name[0]);
-+ ret = snd_soc_limit_volume(card, cname, 207);
-+ if (ret < 0)
-+ dev_warn(card->dev, "Failed to set volume limit: %d\n",
-+ ret);
-+ }
-+ }
-+
-+ // Remove codec controls
-+ for (i = 0; i < ARRAY_SIZE(codec_ctl_pfx); i++) {
-+ // Start at 1, leave the Digital Volume control.
-+ for (j = 1; j < ARRAY_SIZE(codec_ctl_name); j++) {
-+ char cname[256];
-+
-+ sprintf(cname, "%s %s", codec_ctl_pfx[i], codec_ctl_name[j]);
-+ kctl = snd_soc_card_get_kcontrol(card, cname);
-+ if (!kctl) {
-+ dev_err(rtd->card->dev, "Control %s not found\n",
-+ cname);
-+ } else {
-+ kctl->vd[0].access =
-+ SNDRV_CTL_ELEM_ACCESS_READWRITE;
-+ snd_ctl_remove(card->snd_card, kctl);
-+ }
-+ }
- }
-+
- return 0;
- }
-
-@@ -868,10 +934,10 @@ static struct snd_soc_dai_link_component
- };
-
- SND_SOC_DAILINK_DEFS(allo_piano_dai_plus,
-- DAILINK_COMP_ARRAY(COMP_CPU("bcm2708-i2s.0")),
-- DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "pcm512x-hifi"),
-- COMP_CODEC(NULL, "pcm512x-hifi")),
-- DAILINK_COMP_ARRAY(COMP_PLATFORM("bcm2708-i2s.0")));
-+ DAILINK_COMP_ARRAY(COMP_EMPTY()),
-+ DAILINK_COMP_ARRAY(COMP_CODEC("pcm512x.1-004c", "pcm512x-hifi"),
-+ COMP_CODEC("pcm512x.1-004d", "pcm512x-hifi")),
-+ DAILINK_COMP_ARRAY(COMP_EMPTY()));
-
- static struct snd_soc_dai_link snd_allo_piano_dac_dai[] = {
- {
-@@ -964,17 +1030,16 @@ static int snd_allo_piano_dac_probe(stru
- snd_allo_piano_dac.set_bias_level =
- snd_allo_piano_set_bias_level;
-
-- ret = snd_soc_register_card(&snd_allo_piano_dac);
-- if (ret < 0) {
-- dev_err(&pdev->dev,
-- "snd_soc_register_card() failed: %d\n", ret);
-- return ret;
-- }
--
- if ((mute_gpio[0]) && (mute_gpio[1]))
- snd_allo_piano_gpio_mute(&snd_allo_piano_dac);
-
-- return 0;
-+ ret = devm_snd_soc_register_card(&pdev->dev, &snd_allo_piano_dac);
-+
-+ if (ret && ret != -EPROBE_DEFER)
-+ dev_err(&pdev->dev,
-+ "snd_soc_register_card() failed: %d\n", ret);
-+ return ret;
-+
- }
-
- return -EINVAL;