在标准的android驱动中,睡眠唤醒流程非常清晰,能够较方便的更改lcd唤醒时间和led背光的点亮时间,但是也很容易出现问题,比如说闪屏,唤醒慢!

出现闪屏有两个原因

1、 开背光时间在唤醒lcd前!

2、 开背光时间在唤醒lcd后,但是没有等lcd刷屏就点亮背光!

我按照标准驱动流程去分析mtk的做法

他的video最初的注册位置是

Mediatek kernel drivers video  mtkfb.c 里面

入口函数

module_init(mtkfb_init);

在 函数int __init mtkfb_init(void)  中有这样一句

register_early_suspend(&mtkfb_early_suspend_handler);

是注册睡眠机制函数

只要注册这里 就是把 mtkfb_early_suspend_handler  下面的结构体里面的函数

.suspend = mtkfb_early_suspend,

.resume = mtkfb_late_resume,

睡眠、唤醒交给系统来管理

他的调用顺序和

.level = EARLY_SUSPEND_LEVEL_DISABLE_FB,    这个值有关系

去找找背光的驱动

module_init(mt65xx_leds_init);  背光入口函数

在mt65xx_leds_init中注册平台类设备

ret = platform_driver_register(&mt65xx_leds_driver);

他函数注册信息是

static struct platform_driver mt65xx_leds_driver = {

.driver = {

.name = "leds-mt65xx",

.owner = THIS_MODULE,

},

.probe = mt65xx_leds_probe,

.remove = mt65xx_leds_remove,

//.suspend = mt65xx_leds_suspend,

.shutdown   = mt65xx_leds_shutdown,

};

我们也可以再  手机adb  shell里面查找到相关的信息

/sys/bus/platform/devices/leds-mt65xx

/sys/devices/platform/leds-mt65xx

但是没有找到这里的设置路径???奇怪!!那背光灯设置是在什么地方呢????

在mt65xx_leds_probe  函数中

有这样一条代码

g_leds_data[i]->cdev.brightness_set = mt65xx_led_set;

难道是 直接给上层节点直接设置??

继续跟代码

仔细分析 代码 mt65xx_leds_probe函数

if(strcmp(g_leds_data[i]->cdev.name,"lcd-backlight") == 0)

{

rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_duty);

if(rc)

{

LEDS_DEBUG("[LED]device_create_file duty fail!\n");

}

rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_div);

if(rc)

{

LEDS_DEBUG("[LED]device_create_file duty fail!\n");

}

rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_frequency);

if(rc)

{

LEDS_DEBUG("[LED]device_create_file duty fail!\n");

}

rc = device_create_file(g_leds_data[i]->cdev.dev, &dev_attr_pwm_register);

if(rc)

{

LEDS_DEBUG("[LED]device_create_file duty fail!\n");

}

bl_setting = &g_leds_data[i]->cust;

}

建立了节点   之后呢??????????

不得不佩服mtk弄个鸟东西搞这么复杂

进入

/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/

发现有

Brightness

用这种可以设置背光灯亮度

echo 255 > brightness

Brightness   这东西在哪里来的?

在代码  kernel drivers  leds  led-class.c

里面有subsys_initcall(leds_init);

用 subsys_initcall

有这样代码

static struct device_attribute led_class_attrs[] = {

__ATTR(brightness, 0644, led_brightness_show, led_brightness_store),

__ATTR(max_brightness, 0444, led_max_brightness_show, NULL),

#ifdef CONFIG_LEDS_TRIGGERS

__ATTR(trigger, 0644, led_trigger_show, led_trigger_store),

#endif

__ATTR_NULL,

};

生成了brightness节点

上层直接调用……

为什么?????

打log发现   在resume  lcd后就会调用brightness  写值

他没有用

.level = EARLY_SUSPEND_LEVEL_DISABLE_FB, 这个来管理

优点

不会有我开始说的那两种bug,什么时候点亮lcd是由上层控制,上层去判断有没有刷屏!

流程已经写死,只要开发者不破坏此模式就不会有bug

缺点

破坏了源代码的流程,已经完全是一体,真正出现问题比较难改!

关于上层怎么去判断什么时候去点亮背光 ,这个问题,现在还没跟,以后有时间慢慢跟,不过做驱动,跟到这里已经可以满足驱动的要求了!

android MTK驱动背光唤醒流程的更多相关文章

  1. android的休眠和唤醒流程

    android休眠唤醒流程: power按键事件上报给android系统,最终由windownmanager接收到,当有按键事件时判断是否需要休眠后唤醒系统,然后调用powermanager系统服务去 ...

  2. Android中Linux suspend/resume流程

    Android中Linux suspend/resume流程首先我们从linux kernel 的suspend说起,不管你是使用echo mem > /sys/power/state 或者使用 ...

  3. Android USB驱动源码分析(-)

    Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...

  4. Android底层驱动开发(一)

    1   Android为什么要增加硬件抽象层HAL A    统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B   解决GPL版权问题,因为linux内核基于GPL协议.这个G ...

  5. Android系统之LK启动流程分析(一)

    1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...

  6. 深入理解 Android 之 View 的绘制流程

    概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...

  7. android wifi驱动移植详细过程

    转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...

  8. Android 4.4 音量调节流程分析(二)

    之前在Android 4.4 音量调节流程分析(一)里已经有简单的分析音量控制的流程,今天想接着继续分析下音量大小计算的方法.对于任一播放文件而言其本身都有着固定大小的音量Volume_Max,而在A ...

  9. 【转】Linux下Android ADB驱动安装详解

    原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比 ...

随机推荐

  1. php header()函数设置页面Cache缓存

    header()函数在php的使用很大,下面我来介绍利用它实现页面缓存的一些方法,但使用header前必须注意,在它之前不能任何输出,包括空格. 手册上,我们对于cache都是写着如何设置,以便让代码 ...

  2. PMO究竟啥样?(3)

    PMO究竟啥样?(3) 继续上一篇,PMO究竟啥样?到这篇,这篇文章就完毕啦. 超卓基地COE,4大典型责任 我们知道全部的公司,它都是要不断地继续改善和优化,包括公司内安排级的项目处理的机制,也需求 ...

  3. Ubuntu中root用户和user用户的相互切换(转)

    Ubuntu是最近很流行的一款Linux系统,因为Ubuntu默认是不启动root用户,现在介绍如何进入root的方法. (1)从user用户切换到root用户 不管是用图形模式登录Ubuntu,还是 ...

  4. 深入学习netty系列(1)

    一.Server端的编程模型 示例代码1 EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup ...

  5. YTU 3005: 皇后问题(栈和队列)

    3005: 皇后问题(栈和队列) 时间限制: 1 Sec  内存限制: 128 MB 提交: 6  解决: 3 题目描述 编写一个函数,求解皇后问题:在n*n的方格棋盘上,放置n个皇后,要求每个皇后不 ...

  6. MVC设计模式下实现数据库的连接,并获取所有数据到浏览器页面上显示

    实现建立一个学生的java类:里面封装了属性的全部属性: public class Student { private int id; private String username; private ...

  7. UVa(1658),Admiral,海军上将,拆点,MCMF

    题目链接:https://uva.onlinejudge.org/external/16/1658.pdf 题意:求1到N的两条路(不能相交),距离和最小. 分析: 第一次做拆点,有点意思.刚开始一直 ...

  8. nohup & rabbitmq & python

    用Python脚本执行rabbitmq的消费 nohup python consumer.py > out.log & 结果郁闷啊,怎么都查看不到输出! 终于找到了答案: 原来pytho ...

  9. corefile的设置与使用

    一.简介 corefile是Linux下程序崩溃时生成的文件,可以用来分析程序崩溃的原因,因为它内部包含了程序崩溃时的堆栈信息. 二.corefile的设置 默认情况下,程序崩溃是不会生成corefi ...

  10. OBD芯片应用开发手册 OBD2开发 内部资料分享 汽车电子通讯开发TDA61 TDA66芯片

    OBD产品及各种汽车电子相关的开发.往往需要开发者学习各种汽车协议,深入了解全部OBD规范和汽车各性能参数.这往往需要开发者很长的时间学习研究,大大延缓了OBD产品的上市开发进度.为此深圳芯方案电子公 ...