From 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 02:46:07 +0000
Subject: [PATCH] add audio

---
 kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi    |   11 +----
 mk-rootfs.sh                                           |    3 +
 kernel/drivers/headset_observe/rk_headset.c            |    9 ++++
 kernel/drivers/headset_observe/rockchip_headset_core.c |   28 ++++++++++++++
 kernel/drivers/headset_observe/rk_headset.h            |    1 
 kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi      |   11 -----
 6 files changed, 44 insertions(+), 19 deletions(-)

diff --git a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
index 3135b2f..ad8ce8e 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/NK-R36S0.dtsi
@@ -34,15 +34,6 @@
 		vin-supply = <&vcc3v3_sys>;
 	};
 
-	vcc3v3_vga: vcc3v3-vga {
-		compatible = "regulator-fixed";
-		regulator-name = "vcc3v3_vga";
-		regulator-always-on;
-		regulator-boot-on;
-		gpio = <&gpio0 RK_PD5 GPIO_ACTIVE_HIGH>;
-		enable-active-high;
-		vin-supply = <&vcc3v3_sys>;
-	};
 
 	pcie30_avdd0v9: pcie30-avdd0v9 {
 		compatible = "regulator-fixed";
@@ -146,7 +137,7 @@
 			};
 			
 			hp_en {
-				gpio_num = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>;//HP_EN_GPIO3_A6_3V3
+				gpio_num = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>;//HP_EN_GPIO3_A6_3V3
 				gpio_function = <0>;
 			};
 			
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
index 93e1bd7..828ef81 100755
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
@@ -216,13 +216,13 @@
 		status = "okay";
 		compatible = "rockchip,multicodecs-card";
 		rockchip,card-name = "rockchip-rk809";
-		hp-det-gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>;
+		hp-det-gpio = <&gpio0 RK_PD5 GPIO_ACTIVE_LOW>;
 		rockchip,format = "i2s";
 		rockchip,mclk-fs = <256>;
 		rockchip,cpu = <&i2s1_8ch>;
 		rockchip,codec = <&rk809_codec>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&hp_det>;
+//		pinctrl-names = "default";
+//		pinctrl-0 = <&hp_det>;
 	};
 
 	spdif-sound {
@@ -1329,11 +1329,6 @@
 
 &pinctrl {
 
-	headphone {
-		hp_det: hp-det {
-			rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>;
-		};
-	};
 
 	mxc6655xa {
 		mxc6655xa_irq_gpio: mxc6655xa_irq_gpio {
diff --git a/kernel/drivers/headset_observe/rk_headset.c b/kernel/drivers/headset_observe/rk_headset.c
index 5b16db7..64115a5 100644
--- a/kernel/drivers/headset_observe/rk_headset.c
+++ b/kernel/drivers/headset_observe/rk_headset.c
@@ -155,6 +155,7 @@
 	int level2 = 0;
 	struct rk_headset_pdata *pdata = headset_info->pdata;
 	static unsigned int old_status = 0;
+	int ret;
 
 	printk("---headsetobserve_work---\n");
 	mutex_lock(&headset_info->mutex_lock[HEADSET]);
@@ -182,6 +183,10 @@
 	    headset_info->headset_status ? "in" : "out");
 	if (headset_info->headset_status == HEADSET_IN) {
 		headset_info->cur_headset_status = BIT_HEADSET_NO_MIC;
+		ret = gpio_direction_output(pdata->spk_ctl_gpio,0);
+		if (ret < 0) {
+			printk("spk_ctl_gpio set direction fail\n");
+		}
 		if (pdata->headset_insert_type == HEADSET_IN_HIGH)
 			irq_set_irq_type(headset_info->irq[HEADSET],
 					 IRQF_TRIGGER_FALLING);
@@ -196,6 +201,10 @@
 			goto out;
 		}
 	} else if (headset_info->headset_status == HEADSET_OUT) {
+		ret = gpio_direction_output(pdata->spk_ctl_gpio,1);
+		if (ret < 0) {
+			 printk("spk_ctl_gpio set direction fail\n");
+		}
 		headset_info->hook_status = HOOK_UP;
 		if (headset_info->isHook_irq == enable) {
 			DBG("disable headset_hook irq\n");
diff --git a/kernel/drivers/headset_observe/rk_headset.h b/kernel/drivers/headset_observe/rk_headset.h
index c10961c..ffde994 100644
--- a/kernel/drivers/headset_observe/rk_headset.h
+++ b/kernel/drivers/headset_observe/rk_headset.h
@@ -11,6 +11,7 @@
 struct rk_headset_pdata {
 	/* heaset about */
 	unsigned int headset_gpio;
+	unsigned int spk_ctl_gpio;
 	/* Headphones into the state level */
 	unsigned int headset_insert_type;
 	/* hook about */
diff --git a/kernel/drivers/headset_observe/rockchip_headset_core.c b/kernel/drivers/headset_observe/rockchip_headset_core.c
index 3c2eeb7..547c71a 100644
--- a/kernel/drivers/headset_observe/rockchip_headset_core.c
+++ b/kernel/drivers/headset_observe/rockchip_headset_core.c
@@ -73,6 +73,34 @@
 						     HEADSET_IN_LOW :
 						     HEADSET_IN_HIGH;
 	}
+
+        /* spk-ctl */
+        ret = of_get_named_gpio_flags(node, "spk_ctl_gpio", 0, &flags);
+        if (ret < 0) {
+                dev_err(&pdev->dev, "Can not read property headset_gpio\n");
+                goto err;
+        } else {
+                pdata->spk_ctl_gpio = ret;
+                ret = devm_gpio_request(&pdev->dev, pdata->spk_ctl_gpio,
+                                        "spk_ctl_gpio");
+                if (ret < 0) {
+                        dev_err(&pdev->dev, "spk_ctl_gpio request fail\n");
+                        goto err;
+                }
+		
+		ret = gpio_get_value(pdata->headset_gpio);
+		printk(" headset_gpio value : %d\n",ret);
+		if (ret == 0)
+                	ret = gpio_direction_output(pdata->spk_ctl_gpio,0);
+		else 
+			ret = gpio_direction_output(pdata->spk_ctl_gpio,1);
+                if (ret < 0) {
+                        dev_err(&pdev->dev,
+                                "spk_ctl_gpio set direction fail\n");
+                        goto err;
+                }
+        }	
+
 	/* hook */
 	ret = of_get_named_gpio_flags(node, "hook_gpio", 0, &pdata->hook_gpio);
 	if (ret < 0) {
diff --git a/mk-rootfs.sh b/mk-rootfs.sh
index 3a106e9..7e451ca 100755
--- a/mk-rootfs.sh
+++ b/mk-rootfs.sh
@@ -1,7 +1,8 @@
 #!/bin/bash -e
 #TARGET_ROOTFS_DIR=/home/data/rootfs/rk356x/ubuntu20-lxde/lxde_ubuntu20_rootfs
 #TARGET_ROOTFS_DIR=/home/data/rootfs/rk356x/debian10/rk3568_likong
-TARGET_ROOTFS_DIR=/home/data/rootfs/rk356x/debian11/debian11_rootfs
+#TARGET_ROOTFS_DIR=/home/data/rootfs/rk356x/debian11/debian11_rootfs
+TARGET_ROOTFS_DIR=/home/data/rootfs/rk356x/debian10/debian_rootfs_5.10
 MOUNTPOINT=./temp
 ROOTFSIMAGE=rootfs.ext4
 OUT=$PWD/tools/linux/Linux_Pack_Firmware/rockdev/Image/

--
Gitblit v1.6.2