MTK 平台TP调试遇坑

#前言

最近在调试我们项目上的TP驱动,奈何一直不能使用,而且这个项目的硬件确定是没有问题的「这个是前提」,我们在软件上提升了SDK基线,在之前的基线版本上软件是没有问题的。

然后我就赶紧检查了两个方面

  • 确定TP的供电是不是正常的

  • 确定TP的使能脚和复位脚是不是正常的

确认后发现两个都不正常,赶紧排查供电部分的代码,供电出来了,用i2c-tool读取寄存器还是失败

2|xxxx:/ # i2cget -f -y 0 0x14 0x80
Error: Read failed

然后就看复位的代码,发现复位的驱动代码竟然找不到,既然这样,我只好拿出绝招了,硬件强拉复位脚,这样终于可以读到值了。

2|xxx:/ # i2cget -f -y 0 0x14 0x80
0x12

#调试I2C注意什么?

调试注意

这里的总结在之前的文章应该有提过,遇到调试I2C的同学,可以从这几个方面入手,有时候一上来就量波形,而不去看看电压,方向是有点偏了

端口电压是比较需要注意的,有一些芯片,只能支持3.3V,有的主控呢,特别是那些低功耗主控,GPIO口电压只有1.8V,这个就是差别了。所以硬件上可能需要一个转换电路,比较专业的人会叫他做分压电路。

#在驱动里面找不到控制reset脚的代码

我们的dts代码是这样写的

 cap_touch@14 {compatible = "mediatek,cap_touch";reg = <0x14>;interrupt-parent = <&pio>;interrupts = <25 IRQ_TYPE_EDGE_FALLING>;int-gpio = <&pio 25 0>;rst-gpio = <&pio 24 0>;};

但是在我们的触摸驱动里面找不到这个该死的 int-gpiorst-gpio

使用source insight查找关键字

#看了下MTK的触摸框架

然后看了MTK平台的触摸框架,发现人家控制复位脚和使能脚就不是在TP的驱动里面干的。

MTK平台TP驱动框架

驱动分工

#mtk-tpd.c 里面控制GPIO的代码

#dts代码

&touch {vtouch-supply = <&mt6392_vgp1_reg>;tpd-resolution = <720 1280>;use-tpd-button = <0>;tpd-key-num = <4>;tpd-key-local= <139 172 158 0>;tpd-key-dim-local = <60 850 50 30 180 850 50 30 300 850 50 30 420 850 50 30>;tpd-max-touch-num = <5>;tpd-filter-enable = <1>;tpd-filter-pixel-density = <124>;tpd-filter-custom-prameters = <0 0 0 0 0 0 0 0 0 0 0 0>;tpd-filter-custom-speed = <0 0 0>;pinctrl-names = "default", "state_eint_as_int", "state_eint_output0", "state_eint_output1","state_rst_output0", "state_rst_output1";pinctrl-0 = <&CTP_pins_default>;pinctrl-1 = <&CTP_pins_eint_as_int>;pinctrl-2 = <&CTP_pins_eint_output0>;pinctrl-3 = <&CTP_pins_eint_output1>;pinctrl-4 = <&CTP_pins_rst_output0>;pinctrl-5 = <&CTP_pins_rst_output1>;status = "okay";
};

#c代码

int tpd_get_gpio_info(struct platform_device *pdev)
{int ret;TPD_DEBUG("[tpd %d] mt_tpd_pinctrl+++++++++++++++++\n", pdev->id);
pr_err("Lomen 0.1\n");pinctrl1 = devm_pinctrl_get(&pdev->dev);if (IS_ERR(pinctrl1)) {ret = PTR_ERR(pinctrl1);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl1!\n");return ret;}
pr_err("Lomen 0.2\n");pins_default = pinctrl_lookup_state(pinctrl1, "default");if (IS_ERR(pins_default)) {ret = PTR_ERR(pins_default);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl default %d!\n", ret);}eint_as_int = pinctrl_lookup_state(pinctrl1, "state_eint_as_int");if (IS_ERR(eint_as_int)) {ret = PTR_ERR(eint_as_int);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl state_eint_as_int!\n");return ret;}eint_output0 = pinctrl_lookup_state(pinctrl1, "state_eint_output0");if (IS_ERR(eint_output0)) {ret = PTR_ERR(eint_output0);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl state_eint_output0!\n");return ret;}eint_output1 = pinctrl_lookup_state(pinctrl1, "state_eint_output1");if (IS_ERR(eint_output1)) {ret = PTR_ERR(eint_output1);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl state_eint_output1!\n");return ret;}if (tpd_dts_data.tpd_use_ext_gpio == false) {rst_output0 = pinctrl_lookup_state(pinctrl1, "state_rst_output0");if (IS_ERR(rst_output0)) {ret = PTR_ERR(rst_output0);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl state_rst_output0!\n");return ret;}rst_output1 = pinctrl_lookup_state(pinctrl1, "state_rst_output1");if (IS_ERR(rst_output1)) {ret = PTR_ERR(rst_output1);dev_err(&pdev->dev, "fwq Cannot find touch pinctrl state_rst_output1!\n");return ret;}}TPD_DEBUG("[tpd%d] mt_tpd_pinctrl----------\n", pdev->id);return 0;
}

然后这部分也排查了后 我们又看了下,触摸还是有问题

从这里可以知道我们在驱动的dts里面配置的复位脚和使能脚压根就没有用上,纯粹就是脱裤子放屁,因为对驱动代码不熟悉导致的低级问题,这种问题反正我经常干了的。

#继续排查电源

我们先判断了GPIO口的状态

复位GPIO

复位GPIO口

xxx:/sys/devices/platform/soc/1000b000.pinctrl # cat mt_gpio  |grep 2424: 011000100124: 00001010ffffffff

第一位是GPIO口模式
第二位是设置GPIO口方向
第三位是当前GPIO口电平

这里看到GPIO口已经是拉高了,但是用万用表测量电压发现这个GPIO口电压还是低电平。

PMU相关引脚

最后发现,这个电没有打开,然后我们打开了这个电源,然后触摸就可以使用了。

最终排查到这个位置之前,我让硬件把这个脚强制拉高测试了下,确实是因为这个电没有导致触摸不了的。这更加坚信了是这个问题。

打开电源

#推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号 

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

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

相关文章

51nod 1379 索函数

Fib[0]0,Fib[1]1,Fib[n]Fib[n-1]Fib[n-2] if n>1. 定义索函数Sor(n)Fib[0]| Fib[1] |Fib[2]|…|Fib[n]. 给定整数n&#xff0c;要求计算Sor(n)%1,000,000,007(1e97). Input第1行&#xff1a;给出一个整数T&#xff0c;表示有T组数据。(1<T<10000) 第2行到T1行&#xf…

昨天小米股价大涨的背后:UWB芯片到底是个什么鬼?

小米10月12日发布了“一指连”小米UWB技术。小米称该技术赋予手机与智能设备空间感知能力&#xff0c;手机指向设备即可定向操控&#xff0c;使小米在“通往未来之路上再迈一步”。来源&#xff1a;腾讯自选股受此消息利好&#xff0c;截止10月12日收盘&#xff0c;小米集团港股…

当你使用微信和QQ的时候,请不要忘记ICQ这个伟大的公司!

距离 ICQ 创立已经 24 年了&#xff0c;仿佛已经跨越了一代人的年纪&#xff0c;而今&#xff0c;我们似乎无法在互联网上找到太多关于 ICQ 的信息。如果有人不知道 ICQ 的话&#xff0c;可以告诉你 ICQ 才是互联网通讯的鼻祖&#xff0c;而不是 QQ、MSN、微信、Facebook。ICQ …

db 是个什么鬼?

最近在处理音频部分的内容&#xff0c;我们讨论一个音频的时候&#xff0c;会谈到声音的大小&#xff0c;就是「分贝」。Decibels,分贝这其中还涉及一个东西&#xff0c;就是放大器&#xff0c;声音经过放大器后&#xff0c;就会变成放大后的声音&#xff0c;这个是硬件放大&am…

原创--DataGrid自动分页例子,通过存储过程

通过存储过程来进行DataGrid自动分页&#xff0c;效率很高&#xff0c;可以进行百万和千万级的分页自己通过50万条记录测试&#xff0c;翻至任何页&#xff0c;需时小于一秒呵呵&#xff0c;仅供自己以后察看使用&#xff0c;所以代码写的不很规范所需的存储过程如下&#xff1…

我看完大连理工研究生的遗书之后

可能是因为年纪大的一丢丢&#xff0c;看到这类新闻会觉得难受&#xff0c;也可能是因为自己也是父亲了&#xff0c;想到这位同学父亲的情况更加受不了。然后回头想想自己这些年的经历&#xff0c;很多次也有过结束生命来解决问题的想法&#xff0c;每次到了最关键的时候&#…

面试官:如何写出让 CPU 跑得更快的代码?

前言代码都是由 CPU 跑起来的&#xff0c;我们代码写的好与坏就决定了 CPU 的执行效率&#xff0c;特别是在编写计算密集型的程序&#xff0c;更要注重 CPU 的执行效率&#xff0c;否则将会大大影响系统性能。CPU 内部嵌入了 CPU Cache&#xff08;高速缓存&#xff09;&#x…

拼音输入法功能大比拼

使用电脑工作或在互联网大潮中冲浪的朋友都离不开输入法的使用&#xff0c;输入法种类繁多&#xff0c;让新接触电脑的朋友目不暇接&#xff0c;难以确定哪一款才是最适合的自己的输入法。 一、拼音走向主流 五笔逐渐衰落尽管目前市场上的输入法种类繁多&#xff0c;各种各样的…

循序渐进PYTHON3(十三) --8-- DJANGO之ADMIN

admin简单使用&#xff1a; 1.urls.py2.settings.py3.models.pyfrom django.db import modelsclassUserInfo(models.Model): uid models.AutoField(primary_keyTrue) user_name models.CharField(max_length30) email models.EmailField() memo models.TextField() img mo…

你见过出道即巅峰吗?

我不知道你们见过没有&#xff0c;反正我见过了。这个消息是我周五上班的时候收到的&#xff0c;这个是一位非电子专业转行嵌入式的同学&#xff0c;之前加我微信后&#xff0c;聊的不是很多&#xff0c;但是非常惊讶的是&#xff0c;刚刚毕业就拿到了一份非常不错的offer。但是…

代码优化导致的奇葩问题

这个是今天在微信群里讨论的一个问题&#xff0c;先看图片点击查看大图代码流程大概是这个样子的点击查看大图查看 length 和 space1 的值&#xff0c;明显看到 length 小于 space1 的值&#xff0c;即使是这样小白都能搞懂流程的情况下&#xff0c;代码还是跑到else里面区执行…

深度:关于Linux内核最硬核的文章

来源 &#xff1a;头条号Linux学习教程&#xff0c;冰凌块儿01前言本文主要讲解什么是Linux内核&#xff0c;以及通过多张图片展示Linux内核的作用与功能&#xff0c;以便于读者能快速理解什么是Linux内核&#xff0c;能看懂Linux内核。拥有超过1300万行的代码&#xff0c;Linu…

springaop----springaop的使用(一)

与大多数技术一样&#xff0c; AOP 已经形成了自己的术语。描述切面的常用术语有通知&#xff08;advice&#xff09;、切点&#xff08;pointcut&#xff09;和连接点&#xff08;join point&#xff09;。从今天开始&#xff0c;我们对spring的切面编程做一个总结。她们都是你…

Microsoft .NET Pet Shop 4 架构与技术分析

1&#xff0e;项目概述与架构分析微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊&#xff0c;大家都知道&#xff0c;一直以来&#xff0c;在.NET和Java之间争论不休&#xff0c;到底使用哪个平台开发的企业级应用性能…

想领取开发套件,就来参加AIoT开发者大赛

你心目中的智慧校园长什么样&#xff1f; 传统校园上自习得排队等位&#xff0c;智慧校园手机一键查询空位&#xff0c;抢座占位有序便利&#xff1b; 传统校园灯光全靠手动调整&#xff0c;智慧校园灯光无感调控&#xff0c;营造全新智能光照环境&#xff1b;传统校园安全防护…

[教程]win10 ,ubuntu双系统安装避坑指南

这篇博客可以解决1.如何安装win10,ubuntu双系统2.如何使用win10引导Ubuntu&#xff0c;并且设置win10引导界面点击阅读原文获取更多信息。win10,ubuntu双系统的安装为什么要装双系统&#xff0c;之前用的虚拟机&#xff0c;但是虚拟机没有显卡&#xff0c;使用gazebo之类的3D仿…

Type-C PD充电简介

一、Type-C简介自1998年以来&#xff0c;USB发布至今&#xff0c;USB已经走过20个年头有余了。在这20年间&#xff0c;USB-IF组织发布N种接口状态&#xff0c;包括A口、B口、MINI-A、MINI-B、Micro-A、Micro-B等等接口形态&#xff0c;由于各家产品不同&#xff0c;不同产品使用…

Linux字符设备驱动内幕

哈喽&#xff0c;我是老吴&#xff0c;继续记录我的学习心得。一、保持专注的几个技巧将最重要的事放在早上做。待在无干扰环境下&#xff0c;比如图书馆。意识到刚坐下开始投入工作前&#xff0c;有点负面小情绪是特别正常的现象。让“开心一刻”成为计划的一部分。拥有合情合…

旧地重游

光阴飞逝1991年跟随父母搬迁至长沙&#xff0c;至今已有16年。2007年春节舅妈大寿借此机会回到儿时旧地以了多年来的心愿。经过1个小时左右颠簸终于快回到儿时生长的地方&#xff0c;那里的路面年久失修&#xff0c;经过昨天的大雨&#xff0c;已经坑坑洼洼路面到处积水&#x…

我要不要离职?

1#读者提问来到四线城市的小公司&#xff0c;其他员工都是公司主动找到他们转正的&#xff0c;有的一个月有的三个月&#xff0c;而我半年过去了&#xff0c;以为时间到了也跟他们一样自动帮我转正。然而没有&#xff0c;昨天忍不住问了公司&#xff0c;今天就拿转正表来给我填…