【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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

目录 JS前端架构-识别&分析 JS前端架构-开发框架分析 前端架构-半自动Burp分析 前端架构-自动化项目分析 思维导图 章节知识点 Web&#xff1a;语言/CMS/中间件/数据库/系统/WAF等 系统&#xff1a;操作系统/端口服务/网络环境/防火墙等 应用&#xff1a;APP对象/API接…

一图看懂:什么是“新质生产力”?

◆2023年9月&#xff0c;首次提出“新质生产力”。 ◆2024年1月&#xff0c;强调“加快发展新质生产力&#xff0c;扎实推进高质量发展”。 ◆2024年3月&#xff0c;《政府工作报告》中提出&#xff0c;要大力推进现代化产业体系建设&#xff0c;加快发展新质生产力。充分发挥…

基于Springboot+Layui餐厅点餐系统

一、项目背景 在互联网经济飞速发展的时代&#xff0c;网络化企业管理也在其带领下快速兴起&#xff0c;开发一款自主点餐系统会受到众多商家的青睐。现如今市场上的人力资源价格是非常高昂的&#xff0c;一款自主点餐系统可以减少餐厅的人力开销&#xff0c;将服务员从繁忙的…

青少年如何从零开始学习Python编程?有它就够了!

文章目录 写在前面青少年为什么要学习编程 推荐图书图书特色内容简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家带来一本非常适合青少年学习编程的图书&#xff0c;快来看看吧~ 青少年为什么要学习编程 青少年学习编程&#xff0c;就好比在他们年轻时就开始掌握一种…

Unity UGUI之Scrollbar基本了解

Unity的Scrollbar组件是用于在UI中创建滚动条的组件之一。滚动条通常与其他可滚动的UI元素&#xff08;如滚动视图或列表&#xff09;一起使用&#xff0c;以便用户可以在内容超出可见区域时滚动内容。 以下是Scrollbar的基本信息和用法: 1、创建 在Unity的Hierarchy视图中右…

FreeRTOS操作系统学习——空闲任务及其钩子函数

空闲任务 当 FreeRTOS 的调度器启动以后就会自动的创建一个空闲任务&#xff0c;这样就可以确保至少有一任务可以运行。但是这个空闲任务使用最低优先级&#xff0c;如果应用中有其他高优先级任务处于就绪态的话这个空闲任务就不会跟高优先级的任务抢占 CPU 资源。空闲任务还有…

Iris搭建路由模块controller+审计中间件

Iris搭建路由模块controller审计中间件 封装NewControllerRoute方法&#xff1a;iris_demo/route/route.go封住NewSignRoute方法&#xff0c;添加自定义中间件&#xff1a;iris_demo/util/route_util.go自定义中间件&#xff1a;iris_demo/middleware/audittrail_middleware.go…

【网络】:再谈传输层(UDP)

传输层 一.再谈端口号二.UDP 一.再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序。 在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看); 1.端口号划分 0 - 1023:…

【MybatisPlus】BaseMapper详解,举例说明

一、BaseMapper 简介 MyBatis-Plus 的核心类 BaseMapper 主要是用于提供基本的 CRUD&#xff08;创建、读取、更新、删除&#xff09;操作的接口定义。它是 MyBatis-Plus 框架中的一个重要组成部分&#xff0c;可以大大简化基于 MyBatis 的数据访问层代码的编写。 BaseMapper…

【Python爬虫实战】抓取省市级城市常务会议内容

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

Unity:Animation 三 Playable、ImportModel

目录​​​​​​​ 1. Playables API 1.1 Playable vs Animation 1.2 Advantages of using the Playables API 1.3 PlayableGraph Visualizer 2. Creating models outside of Unity 2.1 Preparing your model files for export 2.1.1 Scaling factors 2.1.2 优化模型文…

streamlit学习-如何修改css样式

streamlit学习-如何修改css样式 效果图代码(srv.py)运行streamlit默认的样式有时并不符合自己的要求。比如手机上的布局太浪费空间,我们希望一屏能放下所有的元素,本文演示了如何操作 效果图 代码(srv.py) import streamlit as st #1.31.1 import cv2 import numpy as np imp…