RK系列SDK -- RK平臺耳機檢測

RK 公版 SDK 包含兩種耳機檢測處理:
  • Hook ADC 模式:硬件上 HOOK 直接接到 ADC ,根據 ADC 獲取的電壓值來區分三段四段耳機類型。
    流程框圖:
    hook adc耳機檢測模式
  • Hook Interrupt 模式:硬件上 HOOK 直接接 RK 芯片端的一個 GPIO 口,通過中斷的方式來區分三段四段耳機類型。
    流程框圖:
    hool interrupt耳機檢測模式
耳機檢測代碼路徑:

kernel/drivers/headset_observe

DTS配置
//RK3399_kernel4.4 adc檢測模式:
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts
old mode 100644
new mode 100755
index 92f50db..d3317fd
--- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire-excavator-edp.dts
@@ -111,6 +111,14 @@
 		rockchip,codec = <&rt5651 &rt5651 &tc358749x>;
 		status = "okay";
 	};
+	
+    rk_headset{
+        compatible = "rockchip_headset";
+        headset_gpio = <&gpio4 28 GPIO_ACTIVE_LOW>;//GPIO4_D4
+        pinctrl-names = "default";
+        pinctrl-0 = <&hp_det>;
+        io-channels = <&saradc 2>;
+    };
 };
+
+&saradc {
+	status = "okay";
+};
 
 &backlight {
@@ -284,5 +292,11 @@
 				<2 12 RK_FUNC_GPIO &pcfg_pull_none>;
 		};
 	};
+	
+    headphone {
+        hp_det: hp-det {
+            rockchip,pins = <4 28 RK_FUNC_GPIO &pcfg_pull_up>;
+        };
+    };
 };
 

//RK3288 adc檢測模式:
+/{
+    rockchip_headset {
+        compatible = "rockchip_headset";
+        headset_gpio = <&gpio0 14 GPIO_ACTIVE_LOW>;
+        pinctrl-names = "default";
+        pinctrl-0 = <&gpio0_b6>;
+        io-channels = <&adc 2>;        
+    };
+};
+
+
+&pinctrl {
+    gpio0_gpio {
+            gpio0_b6: gpio0-b6 {
+                rockchip,pins = <GPIO0_B6>;
+                rockchip,pull = <VALUE_PULL_DOWN>;
+            };
+        };    
+};
+
+&adc {
+    status = "okay";
+};

(注:不同平臺 pinctrl 節點的 gpio 配置不一樣,需要結合實際調整)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章