【RK3288 Android6, T8PRO 快捷按键 gpio 配置上拉输入】

news2025/1/17 14:01:28

文章目录

  • 【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 input

Change-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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1496613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式开发的常用软件、学习资源网站推荐

1、软件推荐 1.1、文本编辑软件 ——Notepad 1、适合编写和查看文本文件&#xff0c;也可以安装插件来查看二进制文件、对比文件 2、参考博客&#xff1a;《Notepad实用小技巧》&#xff1b; 1.2、PDF文件阅读软件——福昕PDF阅读器 福昕PDF阅读器&#xff0c;在官网就可以下载…

电商店群系统的搭建需要用到的官方接口如何申请?

电商电子商务企业往往都会需要再很多平台上面铺货&#xff0c;上传商品。 高科技的今天&#xff0c;我们已经不需要手动一个个品去上传了。那通过官方接口&#xff0c;如何实现快速铺货呢&#xff1f; 1688官方开放平台的API接口类型众多&#xff0c;并不是所有的企业都能申请…

springboot3.x集成nacos踩坑,并实现多环境配置

一、nacos安装部署 springboot3.x集成Nacos首先需要将Nacos从1.x升级到2.x&#xff0c;建议直接安装2.x版本&#xff0c;手动将1.x的配置信息迁移到2.x中&#xff0c;先并行一段时间&#xff0c;待全部迁移完成稳定运行之后再停掉1.x&#xff0c;升级和安装、操作请查看官方文…

HBuilder X删除之前登录的账号

打开目录 C:\Users\Administrator\AppData\Roaming\HBuilder X 用 HBuilder X 打开文件 prefs 将账号删除 保存文件 重启HBuilder X即可

开发手札:unity2022+vscode1.87联合开发

不得不说&#xff0c;时间的力量是很强大的&#xff0c;同时熵增理论适用于任何地方。 在现在的公司干了五年多了&#xff0c;五年前配置的内网开发机&#xff0c;i7 870016g1t hddgtx1080已经卡爆了&#xff0c;特别是硬盘掉速严重&#xff0c;开机开软件没有一两分钟都…

班主任管理班级的策略与措施

在教育的世界里&#xff0c;班主任不仅是知识的传递者&#xff0c;更是学生心灵的引路人。那么&#xff0c;如何在这个充满挑战和机遇的岗位上&#xff0c;舞动管理的翅膀&#xff0c;让班级飞得更高更远呢&#xff1f; 深入了解学生。这不仅仅是了解学生的姓名、成绩&#xff…

网络编程:TCP机械臂,UDP文件传输

1.TCP机械臂测试 程序代码&#xff1a; 1 #include<myhead.h>2 #define SER_IP "192.168.126.112" //服务器IP3 #define SER_PORT 8888 //服务器端口号4 5 #define CLI_IP "192.168.126.121" //客户端IP6 #define CLI_PORT 9999 //…

阿里云服务器2核2G性能测评99元一年和61元一年

阿里云2核2G服务器多少钱&#xff1f;99元一年&#xff0c;轻量云服务器是61元一年。2核2G服务器性能如何&#xff1f;性能很不错&#xff0c;不限制CPU性能&#xff0c;99元2核2G服务器是ECS经济型e实例&#xff0c;61元2核2G服务器是轻量应用服务器&#xff0c;都是3M公网带宽…

【智慧互联,有序充电,多场景充电】企业微电网能效及充电管理解决方案

企业需求&#xff08;目的地充电&#xff09; 站在企业的角度&#xff0c;除了要主动承担碳达峰、碳中和的社会责任&#xff0c;也需要考虑自身的经营和利润&#xff0c;需要结合企业的现状进行改造 01用能可靠、清洁 02用能安全怎么重视都不为过 03专业全面的能源管理需求…

windows无界鼠标,多机共享一套键鼠

原因 当前使用一台笔记本和一个台式机。用起来很麻烦。想要找到共享键鼠的方案。找到了无界鼠标这个软件。 安装 在两台电脑上都安装powertoy应用。 https://github.com/microsoft/PowerToys csdn下载 安装完成后找到无界鼠标打开 配置 多台电脑配置相同的key,刷新识别设…

ETAS工具链ISOLAR-AB重要概念,RTE配置,ECU抽取

RTE配置界面&#xff0c;包含ECU抽取关联 首次配置RTE&#xff0c;出现需要勾选的抽取EXTRACT 创建System System制作SWC到ECU的Mapping System制作System Data 的Mapping

简洁实用的wordpress外贸网站模板

坚果蜜饯wordpress跨境电商模板 木瓜干、菠萝干、夏威夷果、芒果干、椰片、巴旦木等wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3944 珠宝手饰wordpress外贸网站模板 金银手饰、珍珠手饰、翡翠手饰、钻石手饰、玉石珠宝手饰wordpress外贸网站模板。 https:…

word如何实现不同章节显示不同页眉

一、问题描述 写论文时遇到如下情形&#xff0c;第二章页眉跟第一章一样&#xff0c;如下图 二、解决方法 在第二章前一页空白处&#xff0c;选择依次布局→分隔符→下一页&#xff0c;如下图 双击第二章页眉&#xff0c;进入页眉编辑状态&#xff0c;点击链接到前一节按钮&a…

利用GPT开发应用001:GPT基础知识及LLM发展

文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下&#xff0c;您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子&#xff1f;您可以创建哪些应用程序&#xff1f;这正是OpenAI正在助力构建的世界&#x…

YOLOv9独家原创改进|加入RT-DETR中的HGBlock!

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 HGBlock是RT-DETR中使用的特征提取模块。 二、HGBlock模块详解 2.1 模块简介 HGBlock的主要思想&#xff1a; 一个并联的卷积模块与…

javascript中字符串处理,常用的方法汇总

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;前端泛海 景天的主页&#xff1a;景天科技苑 文章目录 字符串对象的的相关方法1.获取字符串长度 length2.通过索引获取元素 …

MySQL 备份方案

优质博文&#xff1a;IT-BLOG-CN 一、为什么要备份 【1】容灾恢复&#xff1a;硬件故障、不经意的 Bug 导致数据损坏&#xff0c;或者服务器及其数据由于某些原因不可获取或无法使用等&#xff08;例如&#xff1a;机房大楼烧毁&#xff0c;恶意的黑客攻击或 Mysql 的 Bug 等&…

阿里云服务器Ngnix配置SSL证书开启HTTPS访问

文章目录 前言一、SSL证书是什么&#xff1f;二、如何获取免费SSL证书三、Ngnix配置SSL证书总结 前言 很多童鞋的网站默认访问都是通过80端口的Http服务进行访问&#xff0c;往往都会提示不安全&#xff0c;很多人以为Https有多么高大上&#xff0c;实际不然&#xff0c;他只是…

STM32/GD32——I2C通信协议

芯片选型 Ciga Device — GD32F470系列 通讯规则 I2C协议&#xff08;或称IIC&#xff09;是由飞利浦&#xff08;现在的恩智浦半导体&#xff09;公司开发的一种通用的总线协议。它使用两根线&#xff08;时钟线和数据线&#xff09;来传输数据&#xff0c;支持多个设备共享…

springboot3.x集成SpringDoc Swagger3

近期将springboox2.x升级到了3.x&#xff0c;索性将swagger2也同步升级到swagger3&#xff0c;具体过程如下。 一、添加maven依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>…