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