MSM8909的触摸屏驱动导致的熄屏后重新亮屏速度慢的原因!【转】

转自:https://blog.csdn.net/kk20000/article/details/83041081

使用的汇顶的触摸驱动的时候会重新亮屏速度慢3秒,而在使用另外一个敦泰触摸驱动的时候没有发现问题。
比较代码后发现,fb_notifier_callback的影响是关键.

有问题的代码是:

static int fb_notifier_callback(struct notifier_block *self,
                                 unsigned long event, void *data)
{
        struct fb_event *evdata = data;
        int *blank;
        struct goodix_ts_data *ts =
                container_of(self, struct goodix_ts_data, fb_notif);

if (evdata && evdata->data && event == FB_EVENT_BLANK &&
                        ts && ts->client) {
                blank = evdata->data;

GTP_DEBUG("fb notifier callback blank :%d",*blank);

if (*blank == FB_BLANK_UNBLANK)
                        goodix_ts_resume(&ts->client->dev);
                else if (*blank == FB_BLANK_POWERDOWN)
                        goodix_ts_suspend(&ts->client->dev);
        }
        return 0;
}

修改为下面的方式后正常:

static int fb_notifier_callback(struct notifier_block *self,

unsigned long event, void *data)
{
        struct fb_event *evdata = data;
        int *blank;
        struct goodix_ts_data *ts =
                container_of(self, struct goodix_ts_data, fb_notif);
        if (evdata && evdata->data && event == FB_EARLY_EVENT_BLANK && ts && ts->client)
        {
                blank = evdata->data;
                GTP_DEBUG ("fb_notifier_callback:goodix blank=%d\n", *blank);
                if (*blank == FB_BLANK_UNBLANK)
                {
                        if (!work_pending (&ts->resume_work))
                        {
                                schedule_work (&ts->resume_work);
                        }
                }
                else if (*blank == FB_BLANK_POWERDOWN)
                {
                        cancel_work_sync (&ts->resume_work);
                        goodix_ts_suspend (&ts->client->dev);
                }
        }
        else if (event == FB_R_EARLY_EVENT_BLANK)
        {
                if (!work_pending (&ts->resume_work))
                {
                        schedule_work (&ts->resume_work);
                }
        }

return 0;
}

所以在使用屏幕通知唤醒的时候,要避免直接调用唤醒函数,而应该采用内核工作队列中来处理。
---------------------
作者:雨滴平头哥
来源:CSDN
原文:https://blog.csdn.net/kk20000/article/details/83041081
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/sky-heaven/p/10765223.html

时间: 2024-10-18 07:50:17

MSM8909的触摸屏驱动导致的熄屏后重新亮屏速度慢的原因!【转】的相关文章

win7下自写驱动导致开机蓝屏调试过程

之前没有接触过驱动调试.这里上手就要解决一个因为某个自定义驱动导致的系统登陆后蓝屏问题,记录下来.   问题: 从客户那边弄来的一个虚拟机,已知是加了我们的驱动之后才会导致蓝屏. 解决过程:   使用windbg直接双机调试 开机登陆后会直接蓝屏,错误码是0x00000050.想要进入安全模式去移除驱动也进不去,会卡在某个驱动加载过程中.首要的就是进入系统去排查是哪个驱动有问题.还好是虚拟机,有如下方式可更改操作系统中内容.,改完之后要在虚拟机射中的使用工具中断开相应映射. 注意:有些与具体设备

指纹解锁亮屏时间 Log 分析

极力推荐Android 开发大总结文章:欢迎收藏 Android 开发技术文章大总结 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.解锁指纹,发送指纹中断Log 2.认证指纹,计算指纹耗时 3.指纹认证成功,keyguard 响应解锁屏流程 4.keyguard 解锁结束,开启动Launcher至绘制工作 5.Launcher 绘制完成,隐藏Keyguard 6.点亮屏幕结束,统计亮屏时间 1. 解锁指纹,发送指纹中断Log 从kernel lo

触摸屏驱动

触摸屏驱动 input子系统框架: 输入子系统的核心文件input.c,其中的file_operations中的.open会找到input_handler得到具体的fops, 在linux内核中是evdev.c来提供handler,它里面有一个evdev_handler,这个evdev_handler中提供了更为详细的fops(evdev_fops),所以应用程序通过标准的接口(open,read,write等)来访问/dev/input/eventn(n=0,1,2,3...) 最终会访问到e

I.MX6Q(TQIMX6Q/TQE9)学习笔记——新版BSP之触摸屏驱动移植

之所以说是驱动移植是因为之前已经在TQ210.AM335x两个平台上移植过了,因此,仅需要少量修改就可以将驱动移植到imx6q.下面开始触摸驱动移植. DTS编写 参考其它DTS的i2c设备写法,我们可以添加如下内容: &i2c1 { clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1_2>; status = "okay&q

基于Windows CE6.0和 AK4182触摸屏驱动实现

本驱动实现了FreescaleImx515平台下的AK4182A 触摸屏采样功能.通过在WINDOWS CE平台上按照WINDOWS CE TOUCH DDSI 接口标准完成了所有的12 bit精度的数据采样功能. 该驱动实现了一个标准的WINDOWS CE 触摸屏驱动,使用中断(Interrupt)实现PEN DOWN 检测,通过定时器(Timer)中断采集Pen Move数据,并同时判断是否PEN UP状态.在此过程中,会通过点过滤算法和压力检测算法去除杂点和平滑,最后有效的原始位置数据会发

AM335x(TQ335x)学习笔记——触摸屏驱动编写

前面几篇文章已经通过配置DTS的方式完成了多个驱动的移植,接下来我们解决TQ335x的触摸驱动问题.由于种种原因,TQ335x的触摸屏驱动是以模块方式提供的,且Linux官方内核中也没有带该触摸屏的驱动源码,单纯的配置DTS是无法完成TQ335x的触摸驱动移植工作的,因此,本文参考内核中原有的pixcir_i2c_ts驱动编写TQ335x的触摸屏(TN92)驱动. 在之前移植TQ210时,我已经编写过TQ210的触摸屏驱动,我的TQ335x还是使用的TQ210的屏,因此,难度不是很大.这里需要说

触摸屏驱动三部曲之功能实现及优化

小伙伴们准备好了吗?又到了看手册写代码的时候了.既懂硬件又懂软件的驱动工程师们.Come On..... 一.总体框图 二.驱动代码 #include <linux/errno.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/input.h> #include <linux/init.h> #i

【视频】嵌入式Linux/Android驱动开发揭秘(1)触摸屏驱动开发

嵌入式Linux/Android驱动开发揭秘(1)触摸屏驱动开发 专题简介:自1971年,美国人SamHurst发明了世界上第一个触摸传感器以来,触摸屏技术不断革新,给了程序设计师和UI工程师无限的想象空间,它极大改善了终端用户对各种设备的操作方便程度,现在我们的日常生活如手机.平板等,已经很大程度上依赖于和习惯于使用和操作触摸屏.做为工程师,我们很有必要掌握触摸屏的工作原理和软件驱动方法,如果您对一窥如何在嵌入式中操控和使用触摸屏这一司空见惯却又神奇的技术感兴趣,敬请关注! 1.LINUX驱动

触摸屏驱动三部曲之硬件原理

零.触摸屏驱动三部曲概述 触摸屏已经在我们的生活中无处不在,所以说写好触摸屏的驱动是很重要的.接下来我会通过三篇文章详细讲解触摸屏的驱动. 1.触摸屏驱动三部曲之硬件原理 写好一个驱动,一定要对硬件有所了解,这节我会讲解触摸屏的基础知识和电阻触摸屏的原理. 2.触摸屏驱动三部曲之输入子系统 输入子系统在驱动中占着举足轻重的位置,按键,触摸屏,鼠标等输入型设备都可以利用input接口函数来实现设备驱动.想知道具体怎么实现的就来看这节吧. 3.触摸屏驱动三部曲之功能实现及优化 这节主要是分析框架,写