如何配置LCD背光和LED,调试方法
LCD背光和LED配置文件
alps/custom/<proj name>lk/cust_leds.c
alps/custom/<proj name>/kernel/leds/mt65xx/cust_leds.c
drvgen.exe编辑修改codegen.dws
配置cust_leds.c参数: static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
{"red", MT65XX_LED_MODE_NONE, -1,{0}},
{"green", MT65XX_LED_MODE_NONE, -1,{0}},
{"blue", MT65XX_LED_MODE_NONE, -1,{0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1,{0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,{0}},
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,{0}},
{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0}},
}; LCD背光
MT6589
使用不同的控制源,配置模式:
1.BL_PWM (BLS_PWM)
{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0}},
2.PWM1~PWM7
如果是PWM1~4
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM1,{0,0,0,0,0}},
{0,0,0,0,0}表示src_clk=32k时钟,div=0,HDuration=4; LDuration=4,pmic_pad=0
频率计算:32K/(0+1)/64/4=125Hz
如果使用PWM5~7
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM5,{1,1,32,32,1}},
{1,1,30,30,1}表示src_clk=52M时钟,div=1,HDuration=32; LDuration=32,pmic_pad=1(PWM5~7在PMIC6320)
频率计算:52M/(1+1)/64/32=126.95KHz 3.GPIO脉冲
{"lcd-backlight", MT65XX_LED_MODE_GPIO, (int)Cust_SetBacklight,{0}},
通过实现Cust_SetBacklight(level,div)函数操作GPIO动作 4.类似OLED屏幕,通过写LCM
寄存器实现
{"lcd-backlight", MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight,{0}},
通过实现
unsigned int Cust_SetBacklight(int level, int div)
{
mtkfb_set_backlight_level(level);
}
通过mtkfb_set_backlight_level(level);实现的函数指针将level传到LCM driver
在LCM的driver中实现.set_backlight=lcm_setbacklight, 5.PMIC6320的Isinks
MT6320只有3个Isink,应该不能满足要求 MT6572
和Mt6589有区别的:
1.PWM1~PWM5
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM1,{0,0,0,0,0}},
{0,0,0,0,0}表示src_clk=32k时钟,div=0,HDuration=4; LDuration=4,pmic_pad=0
频率计算:32K/(0+1)/64/4=125Hz
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM1,{1,1,32,32,0}},
{1,1,30,30,0}表示src_clk=66M时钟,div=1,HDuration=32; LDuration=32,pmic_pad=0
频率计算:66M/(1+1)/64/32=161.11KHz 2.PMIC6323的Isinks
MT6323有4个Isink,每路24mA电流,可以double为48mA,可以接8个LED
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK,{0}}, Button
LED
MT6589 PMIC
mt6530有KPD LDO
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,{0}},
MT6572 mt6323没有KPD
LDO,一般兼容使用Isink或者PWM
ISink0和Isink1合并做Button LED
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK01,{0}},
注意:如果需要修改电流等级和double current,请修改leds.c
brightness_set_pmic()和led_blink_pmic()
电流等级接口:upmu_set_isinks_chx_step(0x0);//0x0 4mA;0x01 8mA;0x2 12mA;0x03 16mA 0x04 20mA;0x05 24mA
double current接口:upmu_set_isinks_chx_double_en(0x1); PWM1~5
{"button-backlight", MT65XX_LED_MODE_PWM, PWM1,{0,0,0,0,0}}, LED
MT6589
1.Pre-charger(PCH_DET) LED
主要使用由于关机充电LED,插USB charger点亮,lk阶段关闭
如果需要打开PCH_DET:
在mt_leds.c(lk)和leds.c 中要打开pre-charger LED 的控制
Upmu_chr_chrind_on(1);//开启
Upmu_chr_chrind_on(0);//关闭 2.使用Isink接LED
{"red", MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK0,{0}},
{"green", MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK1,{0}},
{"blue", MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK2,{0}}, 3.使用PWM控制LED
{"red", MT65XX_LED_MODE_PWM,PWM5,{0,0,0,0,1}},
{"green", MT65XX_LED_MODE_PWM,PWM6,{0,0,0,0,1}},
{"blue", MT65XX_LED_MODE_PWM,PWM7,{0,0,0,0,1}},
注意:Mt6589上的PWM在sleep的时候没有波形输出的,如果sleep需要闪烁设计,请使用PMIC Mt6320上的PWM(PWM5~PWM7) MT6572
与Mt6589的区别:
1.mt6572没有pre-charger LED的PCH_DET pin 2.Mt6572的PWM1~5在sleep的时候,都是没有波形输出的,设计请注意 3.使用Isink设计时,如果1个isink接2路LED,请注意打开double current,或者step调大
Flash light
文件:alps/mediatek/custom/<proj name>/kernel/flashlight/constant_flashlight/leds_stobe.c
实现FL_enable()和FL_disable()
MT6589有专门的flash LDO
MT6572没有Flash
LDO,可以通过控制PWM,GPIO,ISINK等控制Flash light 上层JNI lib文件
alps/mediatek/hardware/liblights/lights.c
如果需要同时打开2个以上的LED,请修改set_speaker_light_locked()里面的逻辑 adb
shell调试LCD背光和LED adb命令查看LED或者backlight的亮度status
cd /sys/class/leds/xxx/brightness
(xxx表示的是light的名字,例如green,blue,red分别表示绿灯、蓝灯和红灯,lcd-backlight表示的是lcd背光。)
如果出现LED或Backlight不正常时,可以通过进入到相应的folder执行如下命令去检测是否driver有问题:
echo brightness_level > brightness 检查是否按照你设置的亮度显示。 对于LED来说brightness_level只要不是0,driver都会让led on。 LCD背光不支持blink,测试LED blink可以执行如下命令:
cd /sys/class/leds/xxx/
echo timer > trigger 这个命令会创建delay_on和delay_off两个文件。
echo on_time > delay_on 这个命令用于设置LED on的时间
echo off_time > delay_on 这个命令用于设置LED off的时间(On和off的时间都是以毫秒为单位的。)
echo timer > trigger 命令清除delay_on和delay_off时间,让led off。
echo none > trigger 删除delay_on/delay_off 节点 在kernel_log
可以看到leds.s中函数调用的情况
如 printk("mt65xx_leds_set_cust: set brightness, name:%s, mode:%d, level:%d\n", cust->name, cust->mode, level);
alps/custom/<proj name>lk/cust_leds.c
alps/custom/<proj name>/kernel/leds/mt65xx/cust_leds.c
drvgen.exe编辑修改codegen.dws
配置cust_leds.c参数: static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
{"red", MT65XX_LED_MODE_NONE, -1,{0}},
{"green", MT65XX_LED_MODE_NONE, -1,{0}},
{"blue", MT65XX_LED_MODE_NONE, -1,{0}},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1,{0}},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,{0}},
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,{0}},
{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0}},
}; LCD背光
MT6589
使用不同的控制源,配置模式:
1.BL_PWM (BLS_PWM)
{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0}},
2.PWM1~PWM7
如果是PWM1~4
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM1,{0,0,0,0,0}},
{0,0,0,0,0}表示src_clk=32k时钟,div=0,HDuration=4; LDuration=4,pmic_pad=0
频率计算:32K/(0+1)/64/4=125Hz
如果使用PWM5~7
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM5,{1,1,32,32,1}},
{1,1,30,30,1}表示src_clk=52M时钟,div=1,HDuration=32; LDuration=32,pmic_pad=1(PWM5~7在PMIC6320)
频率计算:52M/(1+1)/64/32=126.95KHz 3.GPIO脉冲
{"lcd-backlight", MT65XX_LED_MODE_GPIO, (int)Cust_SetBacklight,{0}},
通过实现Cust_SetBacklight(level,div)函数操作GPIO动作 4.类似OLED屏幕,通过写LCM
寄存器实现
{"lcd-backlight", MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight,{0}},
通过实现
unsigned int Cust_SetBacklight(int level, int div)
{
mtkfb_set_backlight_level(level);
}
通过mtkfb_set_backlight_level(level);实现的函数指针将level传到LCM driver
在LCM的driver中实现.set_backlight=lcm_setbacklight, 5.PMIC6320的Isinks
MT6320只有3个Isink,应该不能满足要求 MT6572
和Mt6589有区别的:
1.PWM1~PWM5
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM1,{0,0,0,0,0}},
{0,0,0,0,0}表示src_clk=32k时钟,div=0,HDuration=4; LDuration=4,pmic_pad=0
频率计算:32K/(0+1)/64/4=125Hz
{"lcd-backlight", MT65XX_LED_MODE_PWM, PWM1,{1,1,32,32,0}},
{1,1,30,30,0}表示src_clk=66M时钟,div=1,HDuration=32; LDuration=32,pmic_pad=0
频率计算:66M/(1+1)/64/32=161.11KHz 2.PMIC6323的Isinks
MT6323有4个Isink,每路24mA电流,可以double为48mA,可以接8个LED
{"lcd-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_LCD_ISINK,{0}}, Button
LED
MT6589 PMIC
mt6530有KPD LDO
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,{0}},
MT6572 mt6323没有KPD
LDO,一般兼容使用Isink或者PWM
ISink0和Isink1合并做Button LED
{"button-backlight", MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_NLED_ISINK01,{0}},
注意:如果需要修改电流等级和double current,请修改leds.c
brightness_set_pmic()和led_blink_pmic()
电流等级接口:upmu_set_isinks_chx_step(0x0);//0x0 4mA;0x01 8mA;0x2 12mA;0x03 16mA 0x04 20mA;0x05 24mA
double current接口:upmu_set_isinks_chx_double_en(0x1); PWM1~5
{"button-backlight", MT65XX_LED_MODE_PWM, PWM1,{0,0,0,0,0}}, LED
MT6589
1.Pre-charger(PCH_DET) LED
主要使用由于关机充电LED,插USB charger点亮,lk阶段关闭
如果需要打开PCH_DET:
在mt_leds.c(lk)和leds.c 中要打开pre-charger LED 的控制
Upmu_chr_chrind_on(1);//开启
Upmu_chr_chrind_on(0);//关闭 2.使用Isink接LED
{"red", MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK0,{0}},
{"green", MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK1,{0}},
{"blue", MT65XX_LED_MODE_PMIC,MT65XX_LED_PMIC_NLED_ISINK2,{0}}, 3.使用PWM控制LED
{"red", MT65XX_LED_MODE_PWM,PWM5,{0,0,0,0,1}},
{"green", MT65XX_LED_MODE_PWM,PWM6,{0,0,0,0,1}},
{"blue", MT65XX_LED_MODE_PWM,PWM7,{0,0,0,0,1}},
注意:Mt6589上的PWM在sleep的时候没有波形输出的,如果sleep需要闪烁设计,请使用PMIC Mt6320上的PWM(PWM5~PWM7) MT6572
与Mt6589的区别:
1.mt6572没有pre-charger LED的PCH_DET pin 2.Mt6572的PWM1~5在sleep的时候,都是没有波形输出的,设计请注意 3.使用Isink设计时,如果1个isink接2路LED,请注意打开double current,或者step调大
Flash light
文件:alps/mediatek/custom/<proj name>/kernel/flashlight/constant_flashlight/leds_stobe.c
实现FL_enable()和FL_disable()
MT6589有专门的flash LDO
MT6572没有Flash
LDO,可以通过控制PWM,GPIO,ISINK等控制Flash light 上层JNI lib文件
alps/mediatek/hardware/liblights/lights.c
如果需要同时打开2个以上的LED,请修改set_speaker_light_locked()里面的逻辑 adb
shell调试LCD背光和LED adb命令查看LED或者backlight的亮度status
cd /sys/class/leds/xxx/brightness
(xxx表示的是light的名字,例如green,blue,red分别表示绿灯、蓝灯和红灯,lcd-backlight表示的是lcd背光。)
如果出现LED或Backlight不正常时,可以通过进入到相应的folder执行如下命令去检测是否driver有问题:
echo brightness_level > brightness 检查是否按照你设置的亮度显示。 对于LED来说brightness_level只要不是0,driver都会让led on。 LCD背光不支持blink,测试LED blink可以执行如下命令:
cd /sys/class/leds/xxx/
echo timer > trigger 这个命令会创建delay_on和delay_off两个文件。
echo on_time > delay_on 这个命令用于设置LED on的时间
echo off_time > delay_on 这个命令用于设置LED off的时间(On和off的时间都是以毫秒为单位的。)
echo timer > trigger 命令清除delay_on和delay_off时间,让led off。
echo none > trigger 删除delay_on/delay_off 节点 在kernel_log
可以看到leds.s中函数调用的情况
如 printk("mt65xx_leds_set_cust: set brightness, name:%s, mode:%d, level:%d\n", cust->name, cust->mode, level);
如何配置LCD背光和LED,调试方法的更多相关文章
- [LED]如何配置LCD背光和LED,调试方法
[DESCRIPTION] 如何配置LCD背光和LED,调试方法 [SOLUTION]LCD背光和LED配置文件alps/custom/<proj name>lk/cust_leds.ca ...
- 【STM32H7教程】第7章 STM32H7下载和调试方法(IAR8)
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第7章 STM32H7下载和调试方法(IAR8) 本 ...
- 【STM32H7教程】第5章 STM32H7下载和调试方法(MDK5)
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第5章 STM32H7下载和调试方法(MDK5) 本 ...
- FreeRTOS 调试方法(printf---打印任务执行情况)
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家介绍 FreeRTOS 的调试方法,这里的调试方法主要是教会大家如何获取任务的执行情况,通过获取 ...
- kernel启动console_init之前console不可用时发生crash的调试方法
http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...
- Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
- Cortex-M3/4的Hard Fault调试方法
1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址.写只读存储位置等)和非法的程序行为(比如除以0等)等造成的.常见的4种异常及产 ...
- linux下core文件调试方法
http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映 ...
- 【转】Linux内核调试方法总结
目录[-] 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_sta ...
随机推荐
- VIM 技巧 (二)查找与替换
今天和大家分享下 对于 vim 中 查找与替换方法 例如有一篇文章.中英文不限制. 用户如果想查找其中的文字或单词 在 win系统的Notepad中一般都时 ctrl + F 去查询 而在 vim ...
- 【BZOJ】【1037】【ZJOI2008】生日聚会party
DP orz iwtwiioi 这种题居然是DP……原来统计方案数是可以用动态规划来做的啊= =用一些变量来维护一些信息,保证方案可行性/合法性 人太弱实在是有些忧伤…… /************* ...
- ios 百度地图
百度地图 中的注意事项 1. 百度地图中 使用了c++ 设置buidSeting compoileSource 为 Object-C++ 强制使用oc++编译器 2. 设置 BuidSeti ...
- 【前端】js转码
js转码 function urlencode (str) { str = (str + '').toString(); return encodeURIComponent(str).replace( ...
- .NET设计模式(13):享元模式(Flyweight Pattern)(转)
摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价.那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面 ...
- 关于IE下AJAX的问题探讨
今天JS练手的时候,想封装一个发送AJAX请求的对象,当然,是想要兼容全浏览器的.代码如下: var Ajax = { xhr: null, callback: null, XMLHttp: func ...
- css 内联元素inline 行框全解
首先看一篇文章: CSS框模型:一切皆为框 — 从行框说起 一 行框 看图说话 上图代表了框模型中的行框.line-height 属性设置行间的距离(行高).该属性会影响行框的布局.在应用到一个块级元 ...
- adb或appium下多设备中指定设备的启动
一.先用adb devices列出所有设备序列号 List of devices attached012BDC7N78954789 device132AEC8N57897458 device 二.进入 ...
- uva 11090
I I U P C 2 0 0 6 Problem G: Going in Cycle!! Input: standard input Output: standard output You are ...
- POJ 1470 Closest Common Ancestors (最近公共祖先LCA 的离线算法Tarjan)
Tarjan算法的详细介绍,请戳: http://www.cnblogs.com/chenxiwenruo/p/3529533.html #include <iostream> #incl ...