1、不插充电器开机,原因是开机初始化屏后,流程跑到检测电池电量时,为低电量,进行POWEROFF操作,AMOLED屏会出现红屏闪。
2、插充电器开机,必须作出判断是否在充电,充电状态下,读出的电池电压会需高,需要加大判断低电量的判断条件。
3、源码链接http://download.youkuaiyun.com/detail/diandaer/9902237
开机闪烁电源指示灯
vendor\mediatek\proprietary\hardware\liblights\lights.c
static int
set_speaker_light_locked(__attribute__((__unused__)) struct light_device_t* dev,
struct light_state_t const* state)
{
if (red) {
#if 0
blink_green(0, 0, 0);
blink_blue(0, 0, 0);
#endif
blink_red(red, onMS, offMS);
}
#if 1
else {
blink_red(0, 0, 0);
}
#else
else if (green) {
blink_red(0, 0, 0);
blink_blue(0, 0, 0);
blink_green(green, onMS, offMS);
}
else if (blue) {
blink_red(0, 0, 0);
blink_green(0, 0, 0);
blink_blue(blue, onMS, offMS);
}
else {
blink_red(0, 0, 0);
blink_green(0, 0, 0);
blink_blue(0, 0, 0);
}
#endif
}
device\mediatek\mt6739\init.mt6739.rc
on boot
chown system system /sys/class/blue/red/trigger
chmod 777 /sys/class/leds/blue/trigger
write /sys/class/leds/blue/trigger timer
chown system system /sys/class/leds/blue/delay_on
chown system system /sys/class/leds/blue/delay_off
chmod 777 /sys/class/leds/blue/delay_on
chmod 777 /sys/class/leds/blue/delay_off 777
write /sys/class/leds/blue/delay_on 200
write /sys/class/leds/blue/delay_off 200
on property:sys.boot_completed=1
write /sys/class/leds/blue/trigger none
chmod 0777 /sys/class/leds/blue/brightness
write /sys/class/leds/blue/brightness 100
配置蓝灯
led2:led@2 {
compatible = "mediatek,blue";
led_mode = <2>; //GPIO模式
data = <6>;
OLED配置背光
dts设置背光模式,这样LK的背光就不用处理了
compatible = "mediatek,lcd-backlight";
led_mode = <4>;
data = <1>;
屏.c里面添加
.set_backlight = oled_set_backlight,
static void oled_set_backlight(unsigned int level)
{
unsigned char level_temp=0;
level_temp=level;
if(level<=0)
{
level=0;
}
else if(level>=255)
{
level=255;
}
#ifdef BUILD_LK
printf("backlight:oled_set_backlight level=%d\n",level);
#else
printk("backlight:oled_set_backlight level=%d\n",level);
#endif
dsi_set_cmdq_V2(0x51, 1, &level_temp, 1);
}
kernel修改
1、kernel-4.14\drivers\misc\mediatek\leds\mt6739\mtk_leds.c
函数mt_mt65xx_led_set下添加
backlight_debug_log(led_data->level, level);
+ oled_set_backlight_by_cmdq(level);
2、kernel-4.14\drivers\misc\mediatek\video\mt6739\videox\disp_lcm.c添加
int oled_disp_lcm_set_backlight_ext(struct disp_lcm_handle *plcm,unsigned int level)
{
struct LCM_DRIVER *lcm_drv = NULL;
DISPFUNC();
if (!_is_lcm_inited(plcm)) {
DISPERR("lcm_drv is null\n");
return -1;
}
lcm_drv = plcm->drv;
if (lcm_drv->set_backlight) {
lcm_drv->set_backlight( level);
}
return 0;
}
3、kernel-4.14\drivers\misc\mediatek\video\mt6739\videox\disp_lcm.h添加
int oled_disp_lcm_set_backlight_ext(struct disp_lcm_handle *plcm,unsigned int level);
4、kernel-4.14\drivers\misc\mediatek\video\mt6739\videox\primary_display.c 添加
int oled_set_backlight_by_cmdq(unsigned int level)
{
oled_disp_lcm_set_backlight_ext(pgc->plcm,level );
return 0;
}