被LCD调戏睡不着了

好吧,我承认我不是因为被调戏睡不着的,我是因为今天晚上喝了一杯该死的咖啡,然后就睡不着了,这个点[3:40]在床上翻来覆去,刚开始我摸着楠哥的小腿,过了一会,觉得没意思了,然后再摸楠哥的大腿,我想跟他说几句话,接着是,啪的一个声音,精神小伙给了我一巴掌。

因为睡不着,于是我就坐起来写点奇怪的东西,就有了这篇文章。

我们今天在调试屏幕,已经在LK阶段让屏幕亮起来了,但是在kernel阶段屏幕还是不能亮,排查了很久不知道问题在哪里。

1、测量了复位脚上电时序,可以看到按下power键休眠唤醒的时候可以看到reset脚的电平变化,也就是说这个脚是可以控制的,不过话说回来,如果这个脚不可以控制,在lk阶段怎么可能亮屏呢?

2、测量mipi的lane脚,也可以看到休眠的时候没有波形,唤醒的时候有波形,所以平台端的视频输出是正确的。

3、发现上电时候复位引脚拉高后的延迟时间不够,芯片手册上要求是 10ms以上,但是我们代码实际上写的是5ms,但是实际修改后也没有亮屏。

4、在kernel阶段,我们写入BIST模式的时候不能进入测试模式。这个可以猜测没有写成功是因为上电时序有问题,IC没有进入正常的上电状态。

明天准备排查方向

1、还是从上电时序入手,VDD 和RESET之间的时间,还有RESET和LANE数据的时间,都需要严格遵守,并且要用示波器测量正确。

这一点跟模组厂确认,电源开机后一直打开是没有问题的,所以排除这一点。但是有的屏幕如果复位时序不正确,寄存器是写不进去的。

2、去掉LK的控制,让屏幕在Kernel阶段初始化,因为从没有电到上电有一个过程,这也是为什么LK阶段上电不严格也可以初始化的原因,因为它总是从没有电到有电的冷启动。

3、叫模组厂的FAE过来,我们没有调通,大家应该都有责任把这个事情做好,先把锅甩出去再说。


题外话

在知乎上看到一个问题,如果当时关羽不出手,刘备不出手,张飞不出手,谁能斩华雄。

这里只讨论演义,我看了很多人的答案,我觉得有两个人可以,一个是孙坚,一个是曹洪,孙坚前期打架是很厉害的,当然也还有其他人选,比如典韦,赵云之类的,但是他们当时还没有出现,赵云那时候年纪也还比较小,我选的这两个人也都出现在当时的联合军队中。不过不管是孙坚和曹洪,战斗力应该都打不过华雄,即使能不被反杀,想拿下华雄人头应该还是很难的。


时间来到今天

今天还是一样,我把我熬夜思考出来的秘籍都测试了,开机后可以亮屏幕,但是suspend后再resume,该死的屏幕还是亮不了。

其中还跟模组厂沟通如下:

这个时候,我发现我的背光亮不了。于是我就跟着背光在resume的时候不能亮的思路去寻找。我还想起来,我昨天发了文章,有一个大牛给我回复了,我跟他聊了下。

就是这个该死的宏,在唤醒的时候进行了判断跑了不同的逻辑。

我按照这样修改后,这个该死的屏幕就亮起来了。

void mt_mt65xx_led_set(struct led_classdev *led_cdev, enum led_brightness level)
{struct mt65xx_led_data *led_data =container_of(led_cdev, struct mt65xx_led_data, cdev);/* unsigned long flags; *//* spin_lock_irqsave(&leds_lock, flags); */output_met_backlight_tag(level);printk("=== weiqifa === %s-%d\n",__FUNCTION__,__LINE__);
#ifdef CONFIG_MTK_AAL_SUPPORTif (led_data->level != level) {led_data->level = level;if (strcmp(led_data->cust.name, "lcd-backlight") != 0) {LEDS_DEBUG("Set NLED directly %d at time %lu\n",led_data->level, jiffies);schedule_work(&led_data->work);} else {if (level != 0&& level * CONFIG_LIGHTNESS_MAPPING_VALUE < 255) {level = 1;} else {level =(level * CONFIG_LIGHTNESS_MAPPING_VALUE) /255;}LEDS_DEBUG("Set Backlight directly %d at time %lu, mapping level is %d\n",led_data->level, jiffies, level);/* mt_mt65xx_led_set_cust(&led_data->cust, led_data->level); */disp_aal_notify_backlight_changed((((1 <<MT_LED_INTERNAL_LEVEL_BIT_CNT)- 1) * level +127) / 255);}}
#else/* do something only when level is changed */if (led_data->level != level) {led_data->level = level;if (strcmp(led_data->cust.name, "lcd-backlight") != 0) {LEDS_DEBUG("Set NLED directly %d at time %lu\n",led_data->level, jiffies);schedule_work(&led_data->work);} else {if (level != 0&& level * CONFIG_LIGHTNESS_MAPPING_VALUE < 255) {level = 1;} else {level =(level * CONFIG_LIGHTNESS_MAPPING_VALUE) /255;}LEDS_DEBUG("Set Backlight directly %d at time %lu, mapping level is %d\n",led_data->level, jiffies, level);if (led_data->cust.mode == MT65XX_LED_MODE_CUST_BLS_PWM) {mt_mt65xx_led_set_cust(&led_data->cust,((((1 <<MT_LED_INTERNAL_LEVEL_BIT_CNT)- 1) * level +127) / 255));} else {mt_mt65xx_led_set_cust(&led_data->cust, level);}}}/* spin_unlock_irqrestore(&leds_lock, flags); */
#endif

但是这个背光控制没有在DTS里面设置的,这个真的是一个大坑,我们的背光控制硬件GPIO口是

但是代码中,这里直接通过PWM寄存器控制了,所以就脱离了GPIO口了。也就是我们想在DTS里面找GPIO口配置是不对的。

还有这个宏的作用

CONFIG_MTK_AAL_SUPPORT

这个是自动背光的作用,可以用来节省电量,但是我们不需要这个功能,而且前期调试的时候,光感还没有起来,开了这个就有影响了。

把这个功能关闭后需要全编译一次,要不然功能还没有完全关闭。

MTK8167S的LCD软件流程框架我就不说了,驱动调试的话可以按照原有的驱动来参考编写,也有MTK的调试文档,先不花篇幅在这里了。有需要的可以私聊我。

最后~

感谢这位小哥哥~


  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

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

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

相关文章

python 随机名言_如何用简易代码自动生成经典语录

“不要空想不可能的事情”“增加自己的幸福感”“我们最终将创造地面&#xff0c;并呵护它”“保持希望并学会放弃奇迹”上面所有引号内的句子都是由一段代码生成的&#xff0c;使用的程序由少于20行的python代码组成。当涉及到生成自然语言时&#xff0c;人们通常会想到使用高…

链家笔试2

链家笔试2 把m升水倒入n个相同的杯子(假设容器足够大)&#xff0c;允许有的容器是空的&#xff0c;共有多少种不同的倒法&#xff1f;&#xff08;用k表示&#xff09;5 1 1 和1 5 1 和1 1 5 是同一种倒法 输入&#xff1a; 第一行是测试数据的数目 x(0 < x < 20),以下每…

线性表、顺序表

文章目录线性表、顺序表线性表概念线性结构特点线性表概念两种分类顺序表代码遍历查找插入删除逆置链表&#xff08;用指针实现变长的先行存储结构&#xff09;特点习题线性表、顺序表 线性表概念 线性结构特点 存在唯一一个被称为“第一个”的数据元素存在唯一一个被称为“最…

lte 在网络覆盖方面应该注意哪些问题_LTE弱覆盖问题分析与优化

LTE弱覆盖问题分析与优化摘要&#xff1a;本文结合现网实际工作情况介绍了LTE弱覆盖的发现手段&#xff0c;LTE弱覆盖的成因&#xff0c;以及LTE弱覆盖的解决方法&#xff0c;总结相关经验&#xff0c;为LTE的规划建设提供参考依据。关键字&#xff1a;LTE弱覆盖、MR数据、站点…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(33)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(32) 上一回了开始对于drm_gem_handle_create_tail函数的解析,对于函数的注释和第一段代码进行了讲解,本回开始对于drm_gem_handle_create_tail函数的核心功能代码进行解析。为了便于理解,再次贴出drm…

Linux 5.7 将支持国产 RISC-V 芯片 K210

这是转载的一篇文章&#xff0c;文章主要内容是Linux合入了一个国产芯片k210的代码&#xff0c;虽然这个芯片不是很强大&#xff0c;但是对于学习来说非常有意义&#xff0c;而且&#xff0c;还有人在这个开发板上移植了Linux 0.11。今天早上我在查阅 Linux 内核邮件列表的时候…

动态路由选择协议(二)距离矢量路由选择协议

大多数的路由选择协议属于下面二者之一&#xff1a; 距离矢量&#xff08;distance vector&#xff09;和链路状态&#xff08;link state&#xff09;。 本篇学习的是距离矢量路由选择协议的基础。 大多数的距离矢量算法是R.E.Bellman、L.R.Ford和D.R.Fulkerson所做的工作为基…

我和蓝牙BT,BLE有一腿

你好&#xff0c;很不幸&#xff0c;你被一个标题骗了进来&#xff0c;可能我以后还会骗你&#xff0c;我这篇文章主要是写蓝牙相关的&#xff0c;不会涉及技术细节&#xff0c;主要是总结一些概念&#xff0c;这些概念会帮助你了解蓝牙知识&#xff0c;帮助你在面试或者聊天的…

Python之路,week03 - Python基础3

本节内容 函数与函数式编程函数式编程之参数详解局部变量与全局变量作用域嵌套函数 递归函数式编程介绍高阶函数内置函数1. 函数与函数式编程 1.面向对象&#xff1a;华山派---》类---》class 2.面向过程&#xff1a;少林派---》过程---》def 3.函数式编程&#xff1a;逍遥派--…

循环链表、双链表

文章目录循环链表、双链表双链表插入删除单循环链表双循环链表习题线性表实现方法比较循环链表、双链表 双链表 插入 删除 单循环链表 双循环链表 习题 线性表实现方法比较

[芦半山]Binder的异常机制

文中代码分析基于Android 10.0 (Q)两个进程之间若是要进行Binder通信&#xff0c;那么发起通信的一端我们就称它为Client进程。Client进程调用每一个代理对象的方法&#xff0c;本质上都是一次跨进程通信。如果这个方法是同步方法&#xff08;非oneway修饰&#xff09;&#xf…

bufg和bufgp_如何将自己写的verilog模块封装成IP核(一)

平台与材料一个写好的工程&#xff0c;综合通过&#xff0c;不用布局布线&#xff0c;ISE或Vivado皆可。如果是ISE&#xff0c;需要在properties里取消选中 iobuf 。这样就只能被当做内部模块调用了。Vivado步骤打开Vivado&#xff0c;创建一个工程Tools -> Create or packa…

消息中间件核心实体(1)

接上一篇《消息中间件核心实体(0)》&#xff0c;这一篇继续介绍消息中间件中的一些实体。 上一篇主要是Message、Topic、TopicMeta和Queue这样最基础的实体&#xff0c;这几篇介绍一些发送和消费的过程中会涉及到的实体和组件。 1. 发送 1.1 增强Message属性 Message一般只包含…

sklearn(2

算法库顶层设计 SKLEARN监督学习模块 近邻算法 neighbors支持向量机SVM岭回归 kernal_ridge判别分析discriminant_analysis广义线性模型linear_model集成方法ensemble决策树tree朴素贝叶斯naive_bayes交叉分解cross_decompostition高斯过程gaussian_process多层神经网络neural…

sox处理mp3_SoX 音频处理工具使用方法

一、简介SoX 可以读取和写入常见格式的音频文件&#xff0c;并在此过程中选择性的加入一些声音效果。它可以组合多个输入源及合成音效&#xff0c;在许多系统上也可以作为音频播放器或多轨录音机使用。SoX 工具在大部分 Linux 系统上都可以直接通过软件包管理器安装(如sudo apt…

该死的装修

周末了&#xff0c;没有写技术文~因为最近的新房子需要装修&#xff0c;谈了几个装修公司&#xff0c;不知道为什么&#xff0c;我对装修这个事情非常抵触&#xff0c;繁琐的事情太多了&#xff0c;还没有装修&#xff0c;我就觉得有很多事情要斗争。因为家里有小孩&#xff0c…

SKLEARN模型选择

数据集划分方法 K折交叉验证法 将全部训练集S分成k个不相交的子集&#xff0c;假设S中的训练样例子数为m&#xff0c;那么每一个子集有m/k个训练样例&#xff0c;相应子集称作{s1,s2……sk}每次从分好的子集里面&#xff0c;拿一个作为测试集&#xff0c;其他k-1作为训练集在k…

SpringBoot(十) :邮件服务

原文出处&#xff1a; 纯洁的微笑 springboot仍然在狂速发展&#xff0c;才五个多月没有关注&#xff0c;现在看官网已经到1.5.3.RELEASE版本了。准备慢慢在写写springboot相关的文章&#xff0c;本篇文章使用springboot最新版本1.5.3进行开发。 发送邮件应该是网站的必备功能之…

python中order函数_order by排序

作者Toby&#xff0c;持牌照消费金融模型经理&#xff0c;发明国家算法专利,国内最大医药数据中心数据挖掘部门负责人&#xff01;和重庆儿科医院&#xff0c;中科院教授&#xff0c;赛柏蓝保持慢病数据挖掘项目合作&#xff01;清华大学&#xff0c;百度&#xff0c;腾讯&…

被该死的Openssl编译嘲讽了一个下午

昨晚比较尴尬&#xff0c;下班的时候已经很晚了&#xff0c;到半路突然想起来没有带钥匙回去&#xff0c;赶紧折返回公司拿钥匙&#xff0c;在已经很晚的路上我们又多花费了20分钟&#xff0c;到家已经挺晚了&#xff0c;具体多少点我都不好意思说&#xff0c;我要是说出来&…