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