背光调节通信图,如下
如论上层哪里控制背光,上图部分是共用的流程,每次设置一个新的背光值,都会从上一个背光值开始,在RampAnimator.java以计算出的步长调整背光到目标背光值,因此是一个渐变的过程。
所有调节背光都是PowerManagerService.java调用DisplayManagerService.java的requestPowerState函数。
Android7.1 背光初始化

总结
- android背光控制,没有背光曲线;
- 背光频率根据硬件电路设计确认,硬件提供;
- 调节背光值得最大值和最小值,确保当在最大值或最小值时,满足屏背光电压电流要求
- 开机动画阶段背光值不是存在于数据库中,因此开机动画阶段背光值不是launcher起来后的背光值,背光值分为三个阶段的值:
a、boot阶段的背光值
b、system_server初始化时的默认值,配置在frameworks\base\packages\SettingsProvider\res\values\defaults.xml中
c、launcher起来应用设置的背光值,从数据库中取值,若新升级的系统,也是从frameworks\base\packages\SettingsProvider\res\values\defaults.xml获取初值。
d、若三个阶段的默认值不同,开机过程会出现背光变化或黑屏。 - 在背光范围未调好时,初值配置不合理,开机过程会出现黑屏(实际未黑屏,只是亮度太低)
- 根据硬件测量屏背光的电流电压值,调整背光的最大值、最小值,配置在android\frameworks\base\core\res\res\values\config.xml中,分别为:config_screenBrightnessSettingMinimum、config_screenBrightnessSettingMaximum
全志a40i背光调试
1、设置默认值、最小值、最大值
代码位置:android\frameworks\base\core\java\android\os\PowerManager.java
public int getMinimumScreenBrightnessSetting() {
//return mContext.getResources().getInteger(
// com.android.internal.R.integer.config_screenBrightnessSettingMinimum);
//=====keven modify 2014-04-15=
int sysmin = mContext.getResources().getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingMinimum);
int limitmin = SystemProperties.getInt(“ro.yj.minbrightness”,0); //modify by momkey for ro.yj.minbrightness
return limitmin == 0 ? sysmin : limitmin;
//=====keven modify 2014-04-15=
}
/**
- Gets the maximum supported screen brightness setting.
- The screen may be allowed to become dimmer than this value but
- this is the maximum value that can be set by the user.
- @hide
*/
public int getMaximumScreenBrightnessSetting() {
//return mContext.getResources().getInteger(
// com.android.internal.R.integer.config_screenBrightnessSettingMaximum);
//=====keven modify 2014-04-15=
int sysmax = mContext.getResources().getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingMaximum);
//int limitmax = SystemProperties.getInt(“ro.bright.limitmax”,0);
int limitmax = SystemProperties.getInt(“ro.yj.maxbrightness”,0);//modify by momkey for ro.yj.maxbrightness
return limitmax == 0 ? sysmax : limitmax;
//=====keven modify 2014-04-15=
}
/**
- Gets the default screen brightness setting.
- @hide
*/
public int getDefaultScreenBrightnessSetting() {
modify by momkey start for ro.yj.defaultbrightness///
int YJint = 0;
YJint = SystemProperties.getInt(“ro.yj.defaultbrightness”, 0);
if(YJint > 0) {
System.out.printf(“ro.yj.defaultbrightness is %d\n”, YJint);
return YJint;
}
modify by momkey end for ro.yj.defaultbrightness
return mContext.getResources().getInteger(
com.android.internal.R.integer.config_screenBrightnessSettingDefault);
}
最小值最大值控制最小最大占空比,使不超过屏支持范围
默认值需要修改属性配置和config.xml,否则开机是开机动画阶段亮度和正常启动后亮度不同
2、sys_config.fex配置
lcd_pwm_used = 1
lcd_pwm_ch = 0
lcd_pwm_freq = 20
lcd_pwm_pol = 1
lcd_pwm_max_limit = 250
重点:lcd_pwm_freq
该值并不是实际的背光芯片频率,该值和硬件设计的电路有关,根据硬件设计实际测量设定