Android [LED]如何配置LCD背光和LED,調試方法 M

 

 

LCD背光和LED配置文件
alps/custom/lk/cust_leds.c
alps/custom//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時鐘,p=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時鐘,p=1,HDuration=32; LDuration=32,pmic_pad=1(PWM5~7在PMIC6320)
頻率計算:52M/(1+1)/64/32=12.695KHz 3.GPIO脈沖
{lcd-backlight, MT65XX_LED_MODE_GPIO, (int)Cust_SetBacklight,{0}},
通過實現Cust_SetBacklight(level,p)函數操作GPIO動作 4.類似OLED屏幕,通過寫LCM 寄存器實現
{lcd-backlight, MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight,{0}},
通過實現
unsigned int Cust_SetBacklight(int level, int p)
{
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時鐘,p=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時鐘,p=1,HDuration=32; LDuration=32,pmic_pad=0
頻率計算:66M/(1+1)/64/32=16.111KHz 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//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 , cust->name, cust->mode, level);

 

發佈留言