From bff3d3009b0d3a2be3ed92e4817fcabee9e76955 Mon Sep 17 00:00:00 2001
From: huangcm <1263938474@qq.com>
Date: Sat, 26 Apr 2025 03:02:48 +0000
Subject: [PATCH] feat(audio): fix audio pop pro

---
 longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts              |   14 +++++++-------
 longan/kernel/linux-4.9/sound/soc/sunxi/sun50iw10-codec.c              |   12 +++++++++++-
 longan/device/config/chips/a133/configs/c3/kickpi-k5.dts               |   14 +++++++-------
 android/device/softwinner/ceres-common/configs/ceres_volume_tables.xml |    4 +---
 4 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/android/device/softwinner/ceres-common/configs/ceres_volume_tables.xml b/android/device/softwinner/ceres-common/configs/ceres_volume_tables.xml
index 7325325..136bd53 100644
--- a/android/device/softwinner/ceres-common/configs/ceres_volume_tables.xml
+++ b/android/device/softwinner/ceres-common/configs/ceres_volume_tables.xml
@@ -38,9 +38,7 @@
         <point>33,-5000</point>
         <point>66,-3000</point>
         <point>100,0</point> -->
-        <point>1,-4000</point>
-        <point>33,-3000</point>
-        <point>66,-1700</point>
+        <point>1,-3500</point>
         <point>100,0</point>
     </reference>
     <reference name="DEFAULT_DEVICE_CATEGORY_HEADSET_VOLUME_CURVE">
diff --git a/longan/device/config/chips/a133/configs/c3/kickpi-k5.dts b/longan/device/config/chips/a133/configs/c3/kickpi-k5.dts
index e4694b0..6fae9b3 100755
--- a/longan/device/config/chips/a133/configs/c3/kickpi-k5.dts
+++ b/longan/device/config/chips/a133/configs/c3/kickpi-k5.dts
@@ -991,9 +991,9 @@
 			lineout_vol 	= <0x1a>;
 			headphonegain	= <0x00>;
 			/* Pa enabled about */
-			pa_level 	= <0x00>;
+			pa_level 	= <0x01>;
 			pa_msleep_time 	= <0x78>;
-			//gpio-spk = <&pio PB 7 1 1 1 1>;
+			gpio-spk = <&pio PB 7 1 1 1 1>;
 			/* regulator about */
 			avcc-supply = <&reg_aldo1>;
 			cpvin-supply = <&reg_eldo1>;
@@ -1361,11 +1361,11 @@
 				linux,default_trigger = "heartbeat";
 			};
 
-            spk_en {
-                label = "spk_en";
-                gpios = <&pio PB 7 1 0 1 0>;
-				linux,default_trigger = "default-on";
-            };
+            // spk_en {
+            //     label = "spk_en";
+            //     gpios = <&pio PB 7 1 0 1 0>;
+			// 	linux,default_trigger = "default-on";
+            // };
 
 			fan_en {
 				label = "fan_en";
diff --git a/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts b/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts
index 454790e..00b19e1 100755
--- a/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts
+++ b/longan/device/config/chips/a133/configs/c3/kickpi-k5c.dts
@@ -972,9 +972,9 @@
 			lineout_vol 	= <0x1a>;
 			headphonegain	= <0x00>;
 			/* Pa enabled about */
-			pa_level 	= <0x00>;
+			pa_level 	= <0x01>;
 			pa_msleep_time 	= <0x78>;
-			//gpio-spk = <&pio PB 7 1 1 1 1>;
+			gpio-spk = <&pio PB 7 1 1 1 1>;
 			/* regulator about */
 			avcc-supply = <&reg_aldo1>;
 			cpvin-supply = <&reg_eldo1>;
@@ -1346,11 +1346,11 @@
 				linux,default_trigger = "heartbeat";
 			};
 
-            spk_en {
-                label = "spk_en";
-                gpios = <&pio PB 7 1 0 1 0>;
-				linux,default_trigger = "default-on";
-            };
+            // spk_en {
+            //     label = "spk_en";
+            //     gpios = <&pio PB 7 1 0 1 0>;
+			// 	linux,default_trigger = "default-on";
+            // };
 
 			fan_en {
 				label = "fan_en";
diff --git a/longan/kernel/linux-4.9/sound/soc/sunxi/sun50iw10-codec.c b/longan/kernel/linux-4.9/sound/soc/sunxi/sun50iw10-codec.c
index 42687c9..0ff96ff 100644
--- a/longan/kernel/linux-4.9/sound/soc/sunxi/sun50iw10-codec.c
+++ b/longan/kernel/linux-4.9/sound/soc/sunxi/sun50iw10-codec.c
@@ -888,7 +888,7 @@
 		       0xFF, 0, adc_vol_tlv),
 	/* Headphone Gain */
 	SOC_SINGLE_TLV("headphone gain", SUNXI_DAC_REG, HEADPHONE_GAIN,
-			0x7, 1, headphone_gain_tlv),
+			0x0, 1, headphone_gain_tlv),
 
 	SOC_SINGLE_BOOL_EXT("audiocodec rx_sync switch", 0,
 		sunxi_codec_rx_sync_get_data, sunxi_codec_rx_sync_put_data),
@@ -1333,6 +1333,7 @@
 				int cmd, struct snd_soc_dai *dai)
 {
 	struct sunxi_codec_info *sunxi_codec = snd_soc_codec_get_drvdata(dai->codec);
+    struct codec_spk_config *spk_cfg = &(sunxi_codec->spk_config);
 
 	switch (cmd) {
 	case SNDRV_PCM_TRIGGER_START:
@@ -1347,10 +1348,19 @@
 			if (sunxi_codec->rx_sync_en)
 				sunxi_rx_sync_control(RX_SYNC_AUDIOCODEC, 1);
 		}
+
+        if (spk_cfg->used) {
+            gpio_set_value(spk_cfg->spk_gpio, spk_cfg->pa_level);
+            /* time delay to wait spk pa work fine */
+            // msleep(spk_cfg->pa_msleep);
+        }
 		break;
 	case SNDRV_PCM_TRIGGER_STOP:
 	case SNDRV_PCM_TRIGGER_SUSPEND:
 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+        if (spk_cfg->used)
+            gpio_set_value(spk_cfg->spk_gpio, !(spk_cfg->pa_level));
+
 		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
 			regmap_update_bits(sunxi_codec->regmap, SUNXI_DAC_FIFOC,
 				(1 << DAC_DRQ_EN), (0 << DAC_DRQ_EN));

--
Gitblit v1.6.2