接触摸屏后进recovery无显示

LCD亮屏时间分析 1、添加log,打印亮灭屏期间lcd大概花的时间 fbmem.c中 int fb_blank(struct fb_info *info, int blank) { struct fb_event event; int ret = -EINVAL, early_ret; if (blank > FB_BLANK_POWERDOWN) blank = FB_BLANK_POWE... 阅读详情

Platform: RK3368

OS: Android 6.0

Kernel: 3.10.0

现象:接触摸屏后进recovery无显示,进Android系统正常;不接触摸屏正常显示recovery UI。

串口信息:

locale is [(null)]
stage is []
reason is [(null)]
cannot find/open a drm device: No such file or directory
fb0 reports (possibly inaccurate):
  vi.bits_per_pixel = 16
  vi.red.offset   =  11   .length =   5
  vi.green.offset =   5   .length =   6
  vi.blue.offset  =   0   .length =   5
  fi.line_length = 2048
framebuffer: 0 (1024 x 600) double_buffer 1

跟踪recovery代码发现打开fb正常,但阻塞在fbdev_blank里面的ioctl没有出来:

static void fbdev_blank(minui_backend* backend __unused, bool blank)
{
    int ret;

    ret = ioctl(fb_fd, FBIOBLANK, blank ? FB_BLANK_POWERDOWN : FB_BLANK_UNBLANK);
    if (ret < 0)
        perror("ioctl(): blank");
}

最后经过问题排查,将原因锁定到触摸屏驱动drivers/input/touchscreen/gt9xx。在resume和suspend中操作regulator时卡在wile循环中没有出来。所有导致kernel的驱动没有完整跑完,fb的ioctl也就没有返回。将触摸屏驱动resume和suspend代码修改一下解决。

-       regulator_tp = regulator_get(NULL,"vcc_tp");
-       if(regulator_tp ==NULL)
-       {
-               printk("!!!!%s:%d:get regulator_tp failed\n",__func__,__LINE__);
-               return 0;
-       }
-       while(regulator_is_enabled(regulator_tp))
-       {
-               reg = regulator_disable(regulator_tp);
-               msleep(10);
-       }
-       regulator_put(regulator_tp);
+
+       reg = regulator_disable(ts->tp_regulator);
+       if (reg < 0)
+               GTP_ERROR("failed to disable tp regulator\n");
        msleep(20);
        return 0;

为什么触摸屏和显示有关联呢?因为tp驱动的suspend与resume与fb关联在一起了。当fb BLANK时会回调tp的resume或者suspend.

    ts->tp.tp_resume = goodix_ts_early_resume;
    ts->tp.tp_suspend = goodix_ts_early_suspend;
    tp_register_fb(&ts->tp);
static inline int fb_notifier_callback(struct notifier_block *self,
				unsigned long action, void *data)
{
	struct tp_device *tp;
	struct fb_event *event = data;
	int blank_mode = *((int *)event->data);
	int ret = 0;

	tp = container_of(self, struct tp_device, fb_notif);

	//printk("%s.....lin=%d tp->status=%x,blank_mode=%x\n",__func__,__LINE__,tp->status,blank_mode);

	mutex_lock(&tp->ops_lock);

	if (action == FB_EARLY_EVENT_BLANK) {
		switch (blank_mode) {
		case FB_BLANK_UNBLANK:
			break;
		default:
			ret = tp->tp_suspend(tp);
			break;
		}
	}
	else if (action == FB_EVENT_BLANK) {
		switch (blank_mode) {
		case FB_BLANK_UNBLANK:
			tp->tp_resume(tp);
			break;
		default:
			break;
		}
	}
	mutex_unlock(&tp->ops_lock);

	if (ret < 0)
	{
		printk("TP_notifier_callback error action=%x,blank_mode=%x\n",(int)action,blank_mode);
		return ret;
	}

	return NOTIFY_OK;
}

static inline int tp_register_fb(struct tp_device *tp)
{
	memset(&tp->fb_notif, 0, sizeof(tp->fb_notif));
	tp->fb_notif.notifier_call = fb_notifier_callback;
	mutex_init(&tp->ops_lock);

	return fb_register_client(&tp->fb_notif);
}



linux 通知链(notifier chain) 最近在公司瑞芯微平台的触控终端上加了一颗雷达芯片作为距离传感器实现接近唤醒功能(即当有人靠近时实现自动亮屏),但是在 platform 驱动中注册了 resume 和 suspend 函数后发现当系统挂起或者是唤醒的时候并不能调用这两个函数,后查阅相关资料发现,瑞芯微的系统并不会让系统进入到深度休眠所以系统无法调用到 suspend 和 resume 函数;后发现可以通过 linux 的通知链机制进行处理; static int radar_power_event(struct noti... 阅读详情

相关推荐

从基本理解到深入探究 Linux kernel 通知链(notifier chain)

文章目录基本理解Linux kernel 事件通知链深入探究Linux kernel 事件通知链 基本理解Linux kernel 事件通知链 linux/drivers/video/fb_notify.c 一般人会使用这个几个接口就行了,若不想放弃请看下面深入探究Linux kernel 事件通知链。 深入探究Linux kernel 事件通知链 https://blog.csdn.ne...

Wu_Being 的优快云 博客 7456

TP休眠流程

在智能设备上,tp一般随lcd休眠,这样可以减少整机功耗,防止tp误触。也就是说,按下电源键熄屏后,lcd会走休眠流程,该过程lcd会发通知lcd已经进入休眠了,由于tp驱动中注册了lcd内核通知链,tp也随之进入休眠。按电源键唤醒后,lcd唤醒了,tp也随之唤醒。如 #if defined(CONFIG_FB) INIT_WORK(&data-&gt;fb_notify_work,...

Android开发 3288

从零开始:为你的安卓设备定制一个带TWRP风格的Recovery(基于AOSP源码)

本文详细介绍了如何从AOSP源码开始,为安卓设备定制一个支持触控操作和文件管理的TWRP风格Recovery。内容涵盖开发环境搭建、源码解析、图形化界面实现及高级功能集成,帮助开发者掌握recovery.img的制作方法,满足高级用户的定制需求。

weixin_29161785的博客 364

ANDROID Porting系列十一Power Management

ANDROID Porting系列十一、Power Management 分类: 2.----ANDROID 2010-07-16 20:36 2782人阅读 评论(1) 收藏 举报 http://source.android.com/porting/power_management.html 介绍   wake_locks Wake Locks类型 探索Wa

lqf785435771的专栏 665

Android刷机入门:解锁Bootloader与刷入OrangeFox/TWRP Recovery全攻略

在Android系统定制与优化领域,Bootloader(引导加载程序)是设备启动的底层核心,它负责初始化硬件并加载操作系统。厂商设置的BL锁(Bootloader Lock)作为安全验证机制,限制了用户安装未经官方签名的系统镜像。解锁BL锁是获得设备底层控制权的关键,它允许刷入功能强大的第三方Recovery,如TWRP或基于其深度定制的OrangeFox Recovery。这些Recovery工具实质上是独立运行的微型操作系统,提供了图形化界面、完整的文件管理、分区备份以及安装自定义ROM和模块的能力,

weixin_30444105的博客 458

华为P20开关机全攻略:强制重启、Recovery与Fastboot模式详解

在Android系统维护中,掌握设备的电源管理与特殊启动模式是解决常见故障和进行深度维护的基础。其核心原理在于通过不同的物理按键组合,触发设备固件中的底层引导程序,从而进入独立的系统环境。这项技术的价值在于,它为用户提供了在操作系统无法正常启动时,进行故障恢复、缓存清理甚至系统重装的底层通道,是设备维护的“安全网”。典型的应用场景包括系统卡死无响应、应用频繁闪退、执行OTA升级失败或需要进行出厂重置等。例如,通过同时长按【电源键和音量下键】可执行强制重启,解决死机问题;而通过【电源键和音量上键】组合则可进入

weixin_34248023的博客 437

android 触摸屏 旋转,Android recovery 模式下屏幕显示旋转

Android recovery 模式下屏幕显示旋转大家在网上搜索 Android屏幕旋转,成千上万的文章,但是没有几个是写recovery 模式的。难道你们只旋转正常模式下的屏幕方向,不管recovery模式,那升级的画面岂不是有问题。很对人使用的是MTK平台,对与MTK平台,MTK已经帮你做好了,你只用修改一下配置就行了。MTK平台我们可以在bootable/recovery/minui/mt...

weixin_42347750的博客 802

RK3588 recovery模式与misc分区深度解析:从启动到升级的全链路设计

本文深度解析了RK3588平台中Recovery模式与Misc分区的协同设计原理。通过对比STM32的Bootloader方案,阐述了Recovery作为独立迷你Linux系统如何实现系统升级与修复,以及Misc分区作为关键状态寄存器如何引导启动流程。文章详细剖析了从正常系统触发、u-boot决策到Recovery执行的全链路OTA升级机制,并提供了实战配置要点,是理解嵌入式Linux系统可靠升级与防变砖设计的核心指南。

weixin_29306011的博客 221

我对安卓recovery的流程大致总结

下面是我从网上学习和recovery代码中大致总结出来的流程,可能不是很详细到位,大家可参考,不对之处,请指正,技术无边,多多交流。 recovery大概流程总结: 1、首先bootloader(有些平台是在uboot有些是在kernel,有些平台则在uboot和kernel都可以)通过reboot_mode传递一个参数给recovery那边作为启动参数。 2、bootloader和recover...

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 3055

Android10 Recovery系列(一)隐藏recovery菜单项

这里总结一下隐藏recovery菜单先的三种方式1、直接在device.cpp中注释2、通过属性值定义和修改recovery_main.cpp 实现3、通过定义配置文件和修改recovery_main.cpp实现本文主要介绍了前两种方法的实现版权声明:本文为优快云博主「Erorrs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

fighting_2017的博客 750

旋转屏幕显示方向-rk3568

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

qq_24093081的博客 5508

recovery输入事件及处理分析

代码是基于android4.1的。 1recovery输入事件及处理分析 1.1时序图 support touch" name="image_operate_43411352383662625" alt="Recovery support touch" src="http://s12.sinaimg.cn/mw690/89f592f5gcdfc5adec1eb&690" widt

whut_fn的专栏 1125

通过U盘实现西门子二代精简触摸屏恢复出厂设置的具体方法

通过U盘实现西门子二代精简触摸屏恢复出厂设置的具体方法

Robot_PLC_HMI_Automation 6270

TWRP Recovery的进化论:从定制化编译到安卓系统自由之门

本文深入解析TWRP Recovery的技术架构与编译过程,重点探讨如何为特定设备如坚果Pro2进行定制化适配。通过详细分析设备树配置、内核编译及功能扩展,展现TWRP作为安卓刷机与系统自由的核心工具,如何赋能开发者实现硬件掌控与个性化定制。

gitlab7runner的博客 896

Linux下Linpack测试GPU和CPU性能

前面的文章已经介绍了如何搭建Linpack环境:https://blog.youkuaiyun.com/liu_feng_zi_/article/details/107429720 接下来说明如何使用 一、编写运行脚本: 新建文件:run_linpack.sh,内容如下: export HPL_DIR =/root/LHC/Linpack/hpl-2.0_FERMI_v15 export MKL_NUM_THREADS=6 export OMP_NUM_THREADS=6 export MKL_DYNAMI.

liu_feng_zi_的专栏 4633

单晶塑性abaqus-umat自学

单晶塑性abaqus-umat 摘要1. 简介2. 单晶弹塑性本构模型回顾2.1运动学 本文以翻译黄永刚老师的umat文章为主,这个颜色的为个人的理解。 摘要 包含单晶塑性的abaqus用户材料子程序。本文回顾有限元形式的单晶弹塑性和黏弹塑性,包含小变形理论,以及严格的有限变形和有限旋转理论。单晶的非弹性变形由于晶体滑移,假定遵从Schmid准则。提出多种多样的分切应力与剪切变形的自硬化和潜硬化关系,并且包含在子程序内。 1. 简介   有限元程序ABAQUS已经广泛应用在固体的变形与应力分析。除了自身大量

Niklas4088的博客 1万+

如何构建编译TWRP touch recovery

所有的TWRP2.x的源都是公开的。您可以在自己的环境中编译。本指南不会一步一步的说明。如果你不熟悉基本的Linux命令,那么你可能会不能够做到这一点。 目前,您可以使用CM7,CM9,CM10,或CM10.1源代码。首先,你需要同步CM源代码,并得到这一切成立编译任何代码基础环境。我建议你​​遵循CM像这样的网站上的指南之一: http://wiki.cyanogenmod.co

冲你的风 6018

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8946

TWRP进化论:为何一款Recovery工具能让老旧三星平板重获新生?

本文探讨了TWRP恢复工具如何让老旧三星平板(如SMT560/SMT561)重获新生。通过刷入自定义ROM、优化系统性能和扩展功能生命周期,TWRP为设备提供了官方停止支持后的持续更新方案,并详细介绍了其技术原理和实际应用指南。

ik678901234的博客 1149

AutoCAD提示找不到acdb24.dll、AcGe24.dll、AcPal.dll、AcUt.dll怎么办?

在我们安装了AutoCAD 2023版本以后,打开CAD,可能会出现dll文件丢失的情况,如下所示:1、由于找不到acdb24.dll,无法继续执行代码。重新安装程序可能解决此问题。2、由于找不到AcGe24.dll,无法继续执行代码。重新安装程序可能解决此问题。3、由于找不到AcPal.dll,无法继续执行代码。重新安装程序可能解决此问题。4、由于找不到AcUt.dll,无法继续执行代码。重新安装程序可能解决此问题。遇到AutoCAD启动系统错误,由于找不到dll文件该怎么处理呢?

huoxu369的博客 1万+

Lede(OpenWrt)安装和双宽带叠加

LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。LEDE是OpenWRT项目的一个分支项目。LEDE操作系统包括许多路由器有用的功能,如网络地址转换、防火墙、端口转发、DHCP服务器等。

我的博客 6441

小米手机变砖自救指南:Fastboot与Recovery模式下的线刷救砖全流程

Android设备的系统故障,如无法开机、卡在启动界面,通常源于系统分区损坏或引导程序异常。其核心原理在于利用设备底层尚存的Fastboot(引导加载模式)和Recovery(系统恢复环境)作为“后门”,通过线刷方式重新写入完整的系统镜像。这项技术的价值在于,它能让用户在不依赖售后维修的情况下,自主修复因刷机失败、系统更新中断或误操作导致的“软砖”状态,极大地节省了时间和成本。在应用场景上,尤其适用于小米等提供了官方线刷工具和固件的品牌机型。本文聚焦于**小米手机**的救砖实战,详细解析了从驱动安装、官方M

weixin_34408717的博客 440

Labview 机器视觉(4)之 图像处理进阶 - 动态ROI与批量保存

本文深入探讨了LabVIEW机器视觉中动态ROI与批量保存两大进阶技术。动态ROI通过模式匹配或粒子分析实现检测区域的自动追踪,解决了产品位置变化带来的挑战。同时,文章详细介绍了如何设计高效的文件命名规则与异步保存机制,以实现海量图像数据的批量保存与管理,从而构建稳定、高效的工业自动化检测系统。

weixin_29234423的博客 218

谷歌-安卓系统使用必读,什么是root, Recovery, Radio, APP TO SD, Rom

1、什么是Android 系统。——Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。——2008年9月22日,美国运营商T-MobileUSA在纽约正式发布第一款Google手机——T-Mobile ...

bangzhiqian8115的博客 288

讲透 ABAP CDS 注解名称:简单名、结构化名、@ 与 @<、作用域与分组

本文从开发者角度梳理ABAP CDS注解的命名规则与实战写法,重点解析: 语法规则:@与@<的使用场景、结构化命名规范、作用域唯一性要求 评估机制:ABAP运行时与组件框架的注解处理差异 分组技巧:花括号分组简化重复前缀的书写 实战示例:包含完整CDS View Entity(演示注解分组与@<用法)和ABAP报表(读取打印注解) 常见问题:命名错误导致激活失败、框架忽略等注意事项 最后通过航空预订统计案例,展示如何结合多种注解类型实现业务需求。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 261

在MATLAB中将C语言代码转化为可执行的mexw64文件

这样,您可以将高效的C语言算法集成到MATLAB环境中,以便更好地利用MATLAB的功能和特性。请记住,在使用mex转换C语言代码之前,您需要正确编写和测试C语言代码,并确保它与MATLAB的mex接口兼容。MATLAB是一种功能强大的数值计算软件,它提供了一个机制,可以将C语言代码转化为MATLAB可执行的mexw64文件。在上述命令中,"-output"选项指定生成的mex文件的名称,"myfunction"是您选择的名称,"myfunction.c"是要编译的C语言源文件。步骤1:编写C语言代码。

CodeRoarX的博客 1427
上一篇: Android设备的序列号与ro.serialno
下一篇: codec音频路由调试
D00PING
博客等级 码龄12年 96粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值