【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】
文章目录
- 【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】
- 需求
- 开发过程
- 尝试找到没有用的上拉gpio
- 尝试修改pwm1的gpio的默认上拉模式
- 改动
【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】
需求
T8pro想要模仿T10 的 快捷按键,选择pwm1来作为快捷按键的输入引脚,但是由于硬件设计,需要一个上拉输入的gpio,按键按下,将该gpio接低,实现低处发。
开发过程
尝试找到没有用的上拉gpio
原本硬件同事选择pwm1来作为快捷按键的输入gpio,但是由于手动申请后发现是下拉输入,查看原理图后面的_d 表示的下拉

这里的下拉指的是rk3288芯片内部 gpio电路的默认选择模式
于是找了另外一个上拉的gpio来作为gpio,于是我找到了uart4_rx, 把这个用来上拉gpio

但是实际使用发现功能上是可行的,但是硬件在测量电压电流时,发现在按下后电平从高电平变成低电平的时候电流过大,容易把芯片的这个gpio端子烧坏。
尝试修改pwm1的gpio的默认上拉模式
通过询问光韬,得知pinctrl 这个驱动,是负责将gpio设置上拉下拉的,但是添加节点后,发现没有什么用

通过查看rk3288-pinctrl.dtsi 中 pinctrl的根节点的结构,并且在驱动中打印,发现pinctrl的驱动只是解析了dts里面的每个节点的内容,并保存在内存里面,但是具体的设置pull模式的ops操作函数却没有调用,只是向上层注册,pinctrl这里只是执行了probe。
通过加入日志,打印出bank(第几组) 和 pin_num (第几个)

发现probe的时候确实加载到gpio7_gpio了,但是后面设置pull只有gpio6的那么几个gpio调用到了。

发现gpio6_20 是gpio6_C4, 查看dts发现
基本都是i2c2 和 sdmmc 里面在调用。发现他们的根节点都有pinctrl的配置

这个时候才理解pinctrl的驱动的意义是为了设置gpio的默认状态,在其他驱动里面调用的
所以改动应该在rk_key这个快捷按键的驱动中加入pinctrl的驱动接口,具体可以仿照uart_dbg这个。然后用chatgpt写一个驱动加入到rk_key的probe中。
改动如下
改动
kernel
From f3c5c1ee8a908ca647bbc35c812061d6905f2361 Mon Sep 17 00:00:00 2001
From: liangji <liangji@keenon.com>
Date: Mon, 4 Mar 2024 16:33:47 +0800
Subject: [PATCH] feat: support pwm1 as pull up function key inputChange-Id: Ib088d50d6af66d6cc1db5026b821ffc0c8ac15b0
Signed-off-by: liangji <liangji@keenon.com>
---arch/arm/boot/dts/keenon_t8pro_8846.dts | 16 +++++++++++++---arch/arm/boot/dts/keenon_t8pro_lcd_b116xan.dtsi | 4 ++++drivers/input/keyboard/rk_keys.c | 18 ++++++++++++++++++3 files changed, 35 insertions(+), 3 deletions(-)diff --git a/arch/arm/boot/dts/keenon_t8pro_8846.dts b/arch/arm/boot/dts/keenon_t8pro_8846.dts
index 06347be..619ee10 100644
--- a/arch/arm/boot/dts/keenon_t8pro_8846.dts
+++ b/arch/arm/boot/dts/keenon_t8pro_8846.dts
@@ -188,6 +188,7 @@&gpio0 GPIO_B5 GPIO_ACTIVE_LOW&gpio8 GPIO_A0 GPIO_ACTIVE_HIGH&gpio0 GPIO_C1 GPIO_ACTIVE_LOW
+ &gpio7 GPIO_A2 GPIO_ACTIVE_LOW //BL_EN for T8pro&gpio7 GPIO_C3 GPIO_ACTIVE_HIGH&gpio7 GPIO_C4 GPIO_ACTIVE_LOW&gpio5 GPIO_C3 GPIO_ACTIVE_HIGH>; // Set W_DIS=1 may cause EC20-CEHC reset fail
@@ -224,6 +225,11 @@};gpio7_gpio {
+ gpio7_a1: gpio7-a1 {
+ rockchip,pins = <GPIO7_A1>;
+ rockchip,pull = <VALUE_PULL_UP>;
+ };
+gpio7_b7: gpio7-b7 {rockchip,pins = <GPIO7_B7>;rockchip,pull = <VALUE_PULL_UP>;
@@ -674,6 +680,11 @@key {compatible = "rockchip,key";io-channels = <&adc 1>;
+
+ /* add pinctrl into key, to set function key gpio default pull mode */
+ pinctrl-names = "default";
+ pinctrl-0 = <&gpio7_a1>;
+/*vol-up-key {linux,code = <115>;
@@ -704,7 +715,7 @@*/function-key {
- gpios = <&gpio5 GPIO_B7 GPIO_ACTIVE_HIGH>;
+ gpios = <&gpio7 GPIO_A1 GPIO_ACTIVE_LOW>;linux,code = <249>;label = "function";gpio-key;
@@ -741,10 +752,9 @@};&pwm1 {
- status = "okay";
+ status = "disabled";};-&clk_core_dvfs_table {operating-points = </* KHz uV */
diff --git a/arch/arm/boot/dts/keenon_t8pro_lcd_b116xan.dtsi b/arch/arm/boot/dts/keenon_t8pro_lcd_b116xan.dtsi
index f22d2b0..45a7855 100644
--- a/arch/arm/boot/dts/keenon_t8pro_lcd_b116xan.dtsi
+++ b/arch/arm/boot/dts/keenon_t8pro_lcd_b116xan.dtsi
@@ -20,6 +20,10 @@236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255>;default-brightness-level = <200>;enable-gpios = <&gpio7 GPIO_A2 GPIO_ACTIVE_HIGH>;
+ /* T8pro backlight is controlled by hardware, disabled backlight to
+ * release pwm1, and enable BL_EN in init-gpio
+ */
+ status = "disabled";};custom {status = "disabled";
diff --git a/drivers/input/keyboard/rk_keys.c b/drivers/input/keyboard/rk_keys.c
index 1071b54..d708ccee7 100755
--- a/drivers/input/keyboard/rk_keys.c
+++ b/drivers/input/keyboard/rk_keys.c
@@ -24,6 +24,7 @@#include <linux/adc.h>#include <linux/slab.h>#include <linux/wakelock.h>
+#include <linux/pinctrl/consumer.h>#include <linux/iio/iio.h>#include <linux/iio/machine.h>
@@ -320,6 +321,23 @@ static int keys_probe(struct platform_device *pdev)struct input_dev *input = NULL;int i, error = 0;int wakeup, key_num = 0;
+ /* keenon liangji add start */
+ /* add pinctrl to set gpio default pull mode.
+ *
+ * this change is only for the purpose of T8pro function gpio pull up input,
+ * and will not have any impact on other models
+ */
+ struct pinctrl *pinctrl;
+ struct pinctrl_state *state;
+
+ pinctrl = devm_pinctrl_get(dev);
+ state = pinctrl_lookup_state(pinctrl, "default");
+
+ if (!IS_ERR(state) && pinctrl_select_state(pinctrl, state) < 0) {
+ dev_err(dev, "Failed to select pinctrl state\n");
+ goto fail0;
+ }
+ /* keenon liangji add end */key_num = of_get_child_count(np);if (key_num == 0)
--
2.7.4相关文章:
【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】
文章目录 【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】需求开发过程尝试找到没有用的上拉gpio尝试修改pwm1的gpio的默认上拉模式 改动 【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】 需求 T8pro想要模仿T10 的 快捷按键ÿ…...
鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:LoadingProgress)
用于显示加载动效的组件。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 LoadingProgress() 创建加载进展组件。 从API version 9开始,该接口支持在ArkTS卡片中使…...
隐私与创新的交汇点:Partisia Blockchain 重绘技术蓝图
正当我们在这个信息泛滥的时代寻找稳固的信任锚点时,区块链技术应运而生,然而,正如任何科技革命都会遇到的挑战,一个重要的问题摆在了我们面前:如何在不牺牲个人隐私的前提下,享受区块链技术带来的好处&…...
小程序 van-field label和输入框改成上下布局
在组件上面加个样式就行:custom-style"display:block;" <van-field label"备注说明" type"textarea" clearable title-width"100px" custom-style"display:block;" placeholder"请输入" /> …...
跨域资源共享(CORS)
预检请求 预检请求(Preflight Request)是跨域资源共享(CORS)机制中的一种特殊请求,主要用于在实际请求之前进行安全性检查。当一个请求可能不满足同源策略(即请求的源与目标资源的源不同,源包括…...
excel中去除公式,仅保留值
1.单个单元格去除公式 双击单元格,按F9. 2.批量去除公式 选中列然后复制,选择性粘贴,选值粘贴...
大数据和数据要素有什么关系?
大数据与数据要素之间存在密切的关系。大数据是指海量、多样化、高速生成的数据,而数据要素是指构成数据的基本元素或属性。数据要素包括但不限于数据的类型、结构、格式、单位、精度等。 大数据的产生和应用离不开数据要素的支持。数据要素确定了数据的基本特征和…...
Leetcode 59.螺旋矩阵Ⅱ
1.题目 2.思路 (借用代码随想录的图) 1.我们将转一圈看作一个循环(1->2->3->4->5->6->7->8 这是一个循环) 2.在这个循环里,我们要画四条边(上右下左) 填充上行从左到右 填…...
JWT令牌技术
文章目录 什么是令牌技术为什么需要令牌技术呢JWT 令牌JWT 组成JWT 令牌的使用1. 引入 JWT 依赖生成 JWT 令牌解析 JWT 令牌 什么是令牌技术 令牌技术是一种重要的安全技术,它在多个领域中发挥着关键作用。简单来说,令牌(Token)可…...
从零学习Linux操作系统 第三十二部分 ansible中剧本的应用
一、什么是playbook及playbook的组成 1.Playbook的功能 playbook 是由一个或多个play组成的列表 Playboot 文件使用YAML来写的 play就是一个个模块用列表的方式体现出来 playbook的语法是用YAML的预防进行书写的 2.YAML 简介 是一种表达资料序列的格式,类似XM…...
目标网站屏蔽右键检查(使用开发者工具)
问题: 通过网络触手中想要获取某网站的数据出现:鼠标右击,或按ctrl F10 键 无反应(也就是打不开类似谷歌的开发工具) 问题同等与: 解决网页屏蔽F12或右键打开审查元素 引用: 作者ÿ…...
docker安装ES、LogStash、Kibana
文章目录 一、安装Elasticsearch1. 安装Elasticsearch2. 安装IK分词器3. elasticsearch-head 监控的插件4. 配置跨域 二、安装LogStash三、安装kibana四、SpringBoot集成LogStash,将日志输出到ES中五、 启动项目,监控项目运行 提示:以下是本篇…...
解决对接淘宝开放平台添加商品图片问题
问题 之前工作因队友离开,只一天接手其部分且第二天就要上线此工具产品,测试提了一些Bug,在Bug中有一个是添加商品图片。前端告知不能用、电话离职队友说能用。没办法自己上、追踪代码。 en这块代码跟需求好像不太相符,重写。 …...
总结:Spring创建Bean循环依赖问题与@Lazy注解使用详解
总结:Spring创建Bean循环依赖问题与Lazy注解使用详解 一前提知识储备:1.Spring Bean生命周期机制(IOC)2.Spring依赖注入机制(DI)(1)Autowired注解标注属性set方法注入(2&…...
Mac下java环境搭建
JDK 教程:MAC安装JDK及环境变量配置-CSDN博客 建议JDK7和JDK8都装上,因为一些老项目是用JDK7开发,使用JDK8编译时报错。(若没有老项目,直接安装jdk8) 若配置环境变量时找不到JDK的安装路径,有两种方式: 方式一、mac默认位置为:/Library/Java/JavaVirtualMachines/…...
mac设置java环境变量
在 macOS 系统上,设置 JAVA_HOME 环境变量可以通过以下步骤进行: 打开终端应用程序。 输入以下命令来查找 Java 的安装路径:/usr/libexec/java_home 终端会返回 Java 的安装路径,类似 /Library/Java/JavaVirtualMachines/jdk1.…...
【笔记】Android 漫游定制SPN定制有关字段
一、SPN模块简介 【笔记】SPN和PLMN 运营商网络名称显示 Android U 配置 WiFiCalling 场景下PLMN/SPN 显示的代码逻辑介绍 【笔记】Android Telephony 漫游SPN显示定制(Roaming Alpha Tag) 二、相关配置字段 non_roaming_operator_string_array 是否…...
【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型
【MATLAB第99期】#源码分享 | 基于MATLAB的SHEPard模型多输入单输出回归预测模型 Shepard模型(简称SP模型)就是一种直观的、可操作的相似预测法,常用于插值。相似预测法基本原理按照相似原因产生相似结果的原则,从历史样本中集中找出与现在的最相似的一…...
python工具方法 47 基于paddleseg将目标检测数据升级为语义分割数据
在进行项目研究时,通常需要搜集开源数据集。但是所能搜集到的数据集通常会存在形式上的差异,比如我想要的是语义分割数据,而搜集到的数据集却是目标检测数据;在这种情况下所搜集的数据就完成没有利用价值了么?不,其还存在价值,我们可以通过模型训练对数据标签的标注粒度…...
OpenJudge - 38:计算多项式的导函数
总时间限制: 1000ms 内存限制: 65536kB 描述 计算多项式的导函数是一件非常容易的任务。给定一个函数f(x),我们用f(x)来表示其导函数。我们用x^n来表示x的n次幂。为了计算多项式的导函数,你必须知道三条规则: (1)、(C) 0 如果C是常量 (2)、…...
OmenSuperHub:让你的游戏本性能飙升,告别臃肿官方软件
OmenSuperHub:让你的游戏本性能飙升,告别臃肿官方软件 【免费下载链接】OmenSuperHub 使用 WMI BIOS控制性能和风扇速度,自动解除DB功耗限制。 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 还在为官方Omen Gaming Hub的…...
深度学习学习路线:六周攻克核心理论
深度学习学习路线:六周攻克核心理论本文详细解析了深度学习学习路线:六周攻克核心理论,内容如下: 深度学习是后续学习自然语言处理,强化学习,计算机视觉等细分领域的基础,深度学习的应用也非常广…...
从Cortex-M4寄存器到流水线:手把手拆解ARM微处理器执行一条指令的全过程
从Cortex-M4寄存器到流水线:手把手拆解ARM微处理器执行一条指令的全过程 在嵌入式系统开发中,理解处理器如何执行指令是突破性能瓶颈的关键。当我们面对一个简单的ADD R0, R1, R2汇编指令时,表面上看只是将两个寄存器值相加,但背后…...
【AI知识点】交叉注意力机制:从原理到实战,打通多模态信息交互的桥梁
1. 从图文问答看交叉注意力机制的魅力 想象一下这样的场景:你给AI系统展示一张照片,照片里是一只橘猫趴在键盘上睡觉,然后问它"这只猫在做什么?"。要让AI准确回答"猫在键盘上睡觉",它需要同时理解…...
LM2904运算放大器的实战应用:精准监测电池电压的电路设计
1. LM2904运算放大器:电池监测的"火眼金睛" 第一次接触电池电压监测时,我拿着万用表手动测量的狼狈场景至今难忘。直到发现LM2904这颗神器,才真正体会到什么叫"科技改变工作方式"。这款双运放芯片就像给电路装上了24小时…...
免费实时空气质量API接口:一站式获取AQI+PM2.5+NO2+CO+O3+SO2+PM10数据
1. 空气质量API接口的价值与应用场景 空气质量数据对现代生活的重要性不言而喻。无论是个人健康管理、企业决策还是政府监管,实时准确的空气质量信息都发挥着关键作用。作为一个开发者,我曾经在多个项目中需要集成空气质量数据,但市面上的商业…...
深入解析VCS中xprop选项的X态传播机制与应用场景
1. 理解VCS中的X态传播基础 在数字电路仿真中,X态(未知状态)就像电路世界里的"薛定谔的猫"——它既不是明确的0也不是明确的1。这种特殊状态在实际硬件中可能由多种原因产生,比如未初始化的寄存器、多驱动冲突或者信号…...
ZLUDA终极实践指南:在非NVIDIA GPU上无缝运行CUDA程序的完整方案
ZLUDA终极实践指南:在非NVIDIA GPU上无缝运行CUDA程序的完整方案 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA ZLUDA是一个革命性的开源项目,它让开发者和研究者能够在非NVIDIA GPU上…...
Gotestsum核心功能解析:从基础输出到JUnit XML集成
Gotestsum核心功能解析:从基础输出到JUnit XML集成 【免费下载链接】gotestsum go test runner with output optimized for humans, JUnit XML for CI integration, and a summary of the test results. 项目地址: https://gitcode.com/gh_mirrors/go/gotestsum …...
药材烘干返潮,注意这些细节
药材烘干返潮?这些细节要注意在中药材加工行业,烘干后药材出现返潮、霉变,是不少从业者都会遇到的痛点问题,不仅影响药材品质与药效,还会造成不必要的经济损失。结合行业实践与设备应用经验,从三个核心维度…...
