RK3399 android7.1 话柄电话功能
实现功能:挂柄接IO口+GND控制话机听筒与系统喇叭的切换(抬起手柄声音由喇叭切换到听筒,挂到磁吸底座喇叭出声)
应用场景: 电子电话班牌,电话机等
硬件接线方式:
电话手柄:听筒接耳机座子<HRP,GND>,麦克风接<MIC+,MIC->
电话底座:磁吸座子接<IO2,GND>
一,IO(gpio)口为系统cpu直出
1.确认gpio引脚
例如(IO2+GND):
io2-gpio =<&gpio2 RK_PD1 GPIO_ACTIVE_HIGH>;
2.将需要对地控制的gpio引脚直接替换原生的耳机控制脚
一般dts中有描述:
rk_headset: rk-headset {compatible = "rockchip_headset";headset_gpio = <&gpio2 RK_PD1 GPIO_ACTIVE_HIGH>;pinctrl-names = "default";pinctrl-0 = <&hp_det>;
};
例如(IO2+GND):
diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
index 65a3266d09..e6a621adce 100644
--- a/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
+++ b/kernel/arch/arm64/boot/dts/rockchip/rk3568-evb1-ddr4-v10.dtsi
@@ -17,10 +17,9 @@rk_headset: rk-headset {compatible = "rockchip_headset";
- headset_gpio = <&gpio3 RK_PC2 GPIO_ACTIVE_HIGH>;
+ headset_gpio = <&gpio2 RK_PD1 GPIO_ACTIVE_HIGH>;pinctrl-names = "default";pinctrl-0 = <&hp_det>;
- io-channels = <&saradc 2>;};vcc2v5_sys: vcc2v5-ddr {
@@ -415,7 +414,7 @@};headphone {hp_det: hp-det {
- rockchip,pins = <3 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
+ rockchip,pins = <2 RK_PD1 RK_FUNC_GPIO &pcfg_pull_up>;};};
二,通过xrm117x驱动 i2c转外部扩展GPIO
1.添加gpio_key.c
代码路径:kernel/drivers/char/gpio_key.c
代码功能:用于管理 GPIO 键,通过一个线程监控 GPIO 键的状态变化并相应地处理这些状态变化。
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/pm.h>
#include <linux/i2c.h>
#include <linux/spi/spi.h>
#include <linux/platform_device.h>
#include <linux/errno.h>