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