android MTK驱动背光唤醒流程
在标准的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驱动背光唤醒流程的更多相关文章
- android的休眠和唤醒流程
android休眠唤醒流程: power按键事件上报给android系统,最终由windownmanager接收到,当有按键事件时判断是否需要休眠后唤醒系统,然后调用powermanager系统服务去 ...
- Android中Linux suspend/resume流程
Android中Linux suspend/resume流程首先我们从linux kernel 的suspend说起,不管你是使用echo mem > /sys/power/state 或者使用 ...
- Android USB驱动源码分析(-)
Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...
- Android底层驱动开发(一)
1 Android为什么要增加硬件抽象层HAL A 统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B 解决GPL版权问题,因为linux内核基于GPL协议.这个G ...
- Android系统之LK启动流程分析(一)
1.前言 LK是Little Kernel的缩写,在Qualcomm平台的Android系统中普遍采用LK作为bootloader,它是一个开源项目,LK是整个系统的引导部分,所以不是独立存在的,但是 ...
- 深入理解 Android 之 View 的绘制流程
概述 本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定 ...
- android wifi驱动移植详细过程
转自:http://bbs.imp3.net/thread-10558924-1-1.html 对于刚入手android没多久的人来说,android wifi 驱动的移植确实还是有难度的,不过参考了 ...
- Android 4.4 音量调节流程分析(二)
之前在Android 4.4 音量调节流程分析(一)里已经有简单的分析音量控制的流程,今天想接着继续分析下音量大小计算的方法.对于任一播放文件而言其本身都有着固定大小的音量Volume_Max,而在A ...
- 【转】Linux下Android ADB驱动安装详解
原文网址:http://blog.csdn.net/zhenwenxian/article/details/5901350 Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比 ...
随机推荐
- sql server 快捷键
书签:清除所有书签. CTRL-SHIFT-F2 书签:插入或删除书签(切换). CTRL+F2 书签:移动到下一个书签. F2 功能键 书签:移动到上一个书签. SHIFT+F2 取消查询. ALT ...
- uname -r和uname -a了解
1.uname -r :显示操作系统的发行版号2.uname -a :显示系统名.节点名称.操作系统的发行版号.操作系统版本.运行系统的机器 ID 号. #uname -aHP-UX RX1600 B ...
- C++ 关键字 explicit, export, mutable
转自 explicit 如果A类有某个构造函数的单个输入参数,是B类(包括基本数据类型)的对象或引用,则C++的编译器会在需要A类形参的函数调用中,自动调用该构造函数,将B类实参隐式地转换为A类实参. ...
- bianwu | 数据行 | 填写意见
protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e) { //首先判断是否是数据行 if (e.Row.RowT ...
- AR专用汉明码
增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像.视频.3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动. ...
- recycleview + checkbox 实现单选
使用map集合记录checkbox的选中状态 private HashMap<Integer,Boolean> positionMap; positionMap = new HashMap ...
- 每日一九度之 题目1043:Day of Week
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7336 解决:2563 题目描述: We now use the Gregorian style of dating in Russia. ...
- Cpdetector编码识别
概述 浏览器在打开一个网页时,首要任务是判断网页的编码格式,然后采用合适的编码进行解析:我们常用的文本编辑器在打开文档时同样需要判断文档的编码进行相应的解析.这涉及到的技术就是编码甄别,下面我们介绍一 ...
- Maven项目的目录结构+maven的安装与配置
1.首先下载maven,然后配置环境变量,在MyEclipse里面配置maven 2.配置maven的pom.xml文件 3.下载和更新资源 右击项目,有一个Maven4Myeclipse,里面有三个 ...
- iq 格式分析
po iq {type:1 name:iq xml:"<iq xmlns="jabber:client" to="testhjy@ecouser.net/ ...