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);

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);

如何配置LCD背光和LED,调试方法的更多相关文章

  1. [LED]如何配置LCD背光和LED,调试方法

    [DESCRIPTION] 如何配置LCD背光和LED,调试方法 [SOLUTION]LCD背光和LED配置文件alps/custom/<proj name>lk/cust_leds.ca ...

  2. 【STM32H7教程】第7章 STM32H7下载和调试方法(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第7章   STM32H7下载和调试方法(IAR8) 本 ...

  3. 【STM32H7教程】第5章 STM32H7下载和调试方法(MDK5)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第5章   STM32H7下载和调试方法(MDK5) 本 ...

  4. FreeRTOS 调试方法(printf---打印任务执行情况)

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家介绍 FreeRTOS 的调试方法,这里的调试方法主要是教会大家如何获取任务的执行情况,通过获取 ...

  5. kernel启动console_init之前console不可用时发生crash的调试方法

    http://code.google.com/p/innosoc/wiki/KernelBootCrashDebug 注: 如在i386_start_kernel中加入:early_printk(&q ...

  6. Linux内核调试方法总结【转】

    转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...

  7. Cortex-M3/4的Hard Fault调试方法

    1 Cortex-M3/4的Fault简介 Cortex-M3/4的Fault异常是由于非法的存储器访问(比如访问0地址.写只读存储位置等)和非法的程序行为(比如除以0等)等造成的.常见的4种异常及产 ...

  8. linux下core文件调试方法

    http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映 ...

  9. 【转】Linux内核调试方法总结

    目录[-] 一  调试前的准备 二  内核中的bug 三  内核调试配置选项 1  内核配置 2  调试原子操作 四  引发bug并打印信息 1  BUG()和BUG_ON() 2  dump_sta ...

随机推荐

  1. Winform DataGridView扩展

    public class ObjectPropertyCompare<T> : IComparer<T> { private readonly PropertyDescript ...

  2. vsm 的理解

    vsm相对于最原始的sm多了这样一个部分 if(depthcampare <=zInSM) fPercentLit  = 1;//noshadow; else { variance = zzIn ...

  3. HDU 1028Ignatius and the Princess III(母函数简单题)

     Ignatius and the Princess III Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d ...

  4. 编程计算并输出1~n之间所有素数之和

    http://www.tuicool.com/articles/qaaA3i   TODO

  5. CSRF攻击之原理讲解

    |=——————————————————————=| |=————–=[ CSRF攻击原理解析 ]=——————=| |=——————————————————————=| |=——————-=[ By ...

  6. 一个有趣的Ajax Hack示范

    今天在梦之光芒的BLOG上看见了一个Ajax Hack示范,其实跨站发现很容易,但是要做到大危害还是很难,偷偷COOKIE什么的只针对用户而已,XSS WORM的那种利用才是可怕的. 来看看他的一段V ...

  7. IOS快速集成下拉上拉刷新

    http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5% ...

  8. 标准管道(popen)

    NAME popen, pclose - pipe stream to or from a process SYNOPSIS #include <stdio.h> FILE *popen( ...

  9. JS之数组

    1.数组的定义: (1)字面量:  var arr = [1, 2, 3];  (2) new:   var arr = new Array(1, 2, 3);(using new and don't ...

  10. STL erase函数

    1 各种迭代器erase实现 析构的基本工具 Template <class T> inline void destroy(T* pointer){ pointer->~T(); } ...