如何配置LCD背光和LED,調試方法

來源:互聯網
上載者:User
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 LEDMT6589PMIC mt6530有KPD LDO
 {"button-backlight",  MT65XX_LED_MODE_PMIC, MT65XX_LED_PMIC_BUTTON,{0}},
 
MT6572mt6323沒有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 pin2.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);

  

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.