RK3368 es8316和hdmiin共用IIS

1.es8316与hdmiin共用iis的时候,播放声音会杂音,因此当8316使用的时候,需要disable hdmiin功能,可以通过pwdn脚禁止hdmiin芯片

2.当hdmiin使用的时候,需要关闭iis,这个时候就需要禁止主控的mclk和iis功能

以下是3368 8.1的补丁,仅供参考:


    close i2s & mclk when hdmiin open
    
    Change-Id: I6321157b65cd9d524877f0db78e621ca7c2bd308

diff --git a/arch/arm64/boot/dts/rockchip/rk3368.dtsi b/arch/arm64/boot/dts/rockchip/rk3368.dtsi
index 5affdd5..8bf488f 100755
--- a/arch/arm64/boot/dts/rockchip/rk3368.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3368.dtsi
@@ -1294,8 +1294,9 @@
         dma-names = "tx", "rx";
         clock-names = "i2s_clk", "i2s_hclk";
         clocks = <&cru SCLK_I2S_8CH>, <&cru HCLK_I2S_8CH>;
-        pinctrl-names = "default";
+        pinctrl-names = "default","sleep";
         pinctrl-0 = <&i2s_8ch_bus>;
+        pinctrl-1 = <&i2s_8ch_gpio>;
         status = "disabled";
     };
 
@@ -2008,7 +2009,17 @@
                         <2 18 RK_FUNC_1 &pcfg_pull_none>,
                         <2 19 RK_FUNC_1 &pcfg_pull_none>;
             };
-
+            
+            i2s_8ch_gpio: i2s-8ch-gpio {
+                rockchip,pins =<2 12 RK_FUNC_GPIO &pcfg_pull_none>,
+                        <2 13 RK_FUNC_GPIO &pcfg_pull_none>,
+                        <2 14 RK_FUNC_GPIO &pcfg_pull_none>,
+                        <2 15 RK_FUNC_GPIO &pcfg_pull_none>,
+                        <2 16 RK_FUNC_GPIO &pcfg_pull_none>,
+                        <2 17 RK_FUNC_GPIO &pcfg_pull_none>,

<think> 嗯,用户的问题是关于在RK3568芯片的Android14设备上实现HDMI IN模式的反触控功能。用户引用了多个RK3568在Android11/12上的开发文档,但需求是针对Android14的触控反向传输。 用户提到的"反触控"应该是指HDMI IN模式下的输入反向传输功能,即当外部设备(如机顶盒)通过HDMI输入视频到RK3568设备时,RK3568设备的触摸屏能反向控制外部设备。这需要建立双向通信通道。 从引用内容看,用户应该是Android系统开发者,熟悉HAL层内核驱动开发。引用[3]提到过音频路径的修改,引用[5]有CEC状态查询,说明用户对底层接口有经验。但Android14相比引用的Android11/12可能有较大变更,特别是HIDL向AIDL的演进。 实现这个功能需要分层处理: 1 硬件层要确认RK628D芯片支持CEC/ARC通道(引用[2]提到RK628D带MCU,有潜力) 2 内核驱动需在HDMI IN驱动中实现触摸事件转发,可能通过创建虚拟输入设备 3 HAL层要新增HdmiInTouch模块,处理坐标映射(Android14要求AIDL HAL) 4 Framework需扩展InputManagerService支持反向通道 5 应用层要类似rkCamera3添加权限声明(引用[3]有类似修改) 风险点在于:引用[1]提到原厂只开放了特定demo的HDMI IN支持,可能需要原厂释放内核源码或HAL接口。用户可能需要联系Rockchip获取Android14的HDMI IN开发套件,特别是rk628驱动是否支持CEC数据传输。 考虑到用户已有rkCamera3开发经验(引用[3]),建议优先检查现有内核的/d/cec节点(如引用[5]的cec0)是否支持写入,这是最快捷的测试方式。若不行,可能需要从驱动层为hdmi-in注册input设备,就像处理触摸屏那样。 </think>在RK3568芯片的Android 14系统上实现HDMI IN模式的反触控功能,需从硬件支持、驱动层、HAL层到应用层进行全栈适配。以下是关键实现步骤注意事项: --- ### 一、硬件与协议支持确认 1. **CEC/ARC协议验证** - RK628D芯片需支持**HDMI CEC协议**(Consumer Electronics Control)或**ARC**(Audio Return Channel)实现反向控制[^2]。 - 检查硬件电路是否包含CEC信号线(HDMI引脚13)。 2. **内核驱动层** ```c // 驱动需注册input设备 (示例) struct input_dev *hdmi_input = input_allocate_device(); input_set_capability(hdmi_input, EV_KEY, KEY_UP); // 添加触控事件支持 input_register_device(hdmi_input); ``` - 在RK628D的HDMI IN驱动中扩展**input子系统**,将外部设备的触控事件映射为Linux输入事件[^1]。 --- ### 二、Android系统层适配 1. **HAL层实现** - 在`hardware/interfaces/input`中新增**HdmiInTouch HAL**模块: ```java // Android.bp 配置 hidl_interface { name: "android.hardware.input.touch.IRkHdmiInTouch", srcs: ["IRkHdmiInTouch.hal"], } ``` - 实现`onEvent`回调,将内核事件转发到Framework。 2. **InputManagerService扩展** - 修改`frameworks/base/services/core/java/com/android/server/input/InputManagerService.java`: ```java // 添加HDMI IN触控源识别 if (event.source == SOURCE_HDMI_IN_TOUCH) { dispatchUnhandledEvent(event); // 分发到应用层 } ``` 3. **权限与策略配置** - 在`frameworks/base/core/res/res/values/config.xml`中声明新输入源: ```xml <string-array name="config_inputSources"> <item>SOURCE_HDMI_IN_TOUCH</item> <!-- 新增项 --> </string-array> ``` - 添加权限`android.permission.HDMI_IN_TOUCH_CONTROL`。 --- ### 三、应用层对接 1. **HDMI IN应用修改** - 在rkCamera3等应用中监听触控事件: ```java View hdmiView = findViewById(R.id.hdmi_preview); hdmiView.setOnTouchListener((v, event) -> { if (event.getSource() == InputDevice.SOURCE_HDMI_IN_TOUCH) { sendToExternalDevice(event); // 转发到外部设备 return true; } return false; }); ``` 2. **系统属性控制** - 通过属性`persist.sys.hdmi_in.touch_enabled`开关功能: ```shell adb shell setprop persist.sys.hdmi_in.touch_enabled 1 ``` --- ### 四、调试与验证 1. **内核日志检查** ```shell dmesg | grep -i "hdmi_touch" # 确认驱动加载 cat /proc/bus/input/devices # 查看注册的input设备 ``` 2. **事件监听测试** ```shell getevent -l /dev/input/eventX # 捕获原始触控事件 ``` --- ### 常见问题解决 | 问题现象 | 排查方向 | |---------------------------|-----------------------------------| | 触控事件无响应 | 1. 检查CEC物理连接<br>2. 确认驱动input事件上报<br>3. HAL层数据转发逻辑 | | 事件坐标偏移 | 映射算法需适配外部设备分辨率(在HAL层校正坐标) | | 权限拒绝 | 检查SELinux策略`input`组权限 | > ⚠️ **注意事项** > 1. **原厂SDK依赖**:需Rockchip提供支持CEC的RK628D驱动及Android 14 HAL扩展[^1][^2]。 > 2. **HDCP兼容性**:部分设备可能因HDCP加密限制触控功能。 > 3. **低延迟优化**:触控事件需在`<50ms`内响应,建议使用共享内存传递事件数据。 --- ### 引用技术文档 [^1]: RK628D在Android 11仅支持专用应用打开HDMI IN,需确认Android 14是否开放底层接口。 [^2]: RK628D支持多种接口组合,但反向触控需依赖CEC协议实现。 [^3]: 音频功能通过系统属性触发,可参考类似逻辑实现触控开关。 [^4]: HDMI IN音频与触控同属双向通信场景,硬件设计可复用通道。 [^5]: CEC状态查询命令(`cat /d/cec/cec0/status`)可用于验证协议栈是否激活。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值