如何配置LCD背光和LED,调试方法
生活随笔
收集整理的這篇文章主要介紹了
如何配置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); 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,调试方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MTK android flash配置
- 下一篇: MTK6515 android打版软件配