其实其他平台就像MTK,高通也差不多,大同小异,主要搜索关键词:config_autoBrightnessLevels、config_screenBrightnessBacklight,只是文件路径不同。
通过修改sensorhub上报下光感原始数据,或根据实际情况进行调整brightness level根据个人喜好,可以自动调节亮度功能的灵敏度。
展锐的代码路径如下:
device\sprd\roc1\common\overlay\frameworks\base\core\res\res\values\config.xml
<!-- Array of light sensor LUX values to define our levels for auto backlight brightness support. The N entries of this array define N 1 zones as follows: Zone 0: 0 <= LUX < array[0] Zone 1: array[0] <= LUX < array[1] ... Zone N: array[N - 1] <= LUX < array[N] Zone N 1 array[N] <= LUX < infinity Must be overridden in platform specific overlays --> <integer-array name="config_autoBrightnessLevels"> <item>16</item> <item>32</item> <item>50</item> <item>100</item> <item>140</item> <item>180</item> <item>240</item> <item>300</item> <item>600</item> <item>800</item> <item>1000</item> <item>2000</item> <item>3000</item> <item>4000</item> <item>5000</item> <item>6000</item> <item>8000</item> <item>10000</item> <item>20000</item> <item>30000</item> </integer-array> <!-- Array of desired screen brightness in nits corresponding to the lux values in the config_autoBrightnessLevels array. As with config_screenBrightnessMinimumNits and config_screenBrightnessMaximumNits, the display brightness is defined as the measured brightness of an all-white image. If this is defined then: - config_autoBrightnessLcdBacklightValues should not be defined - config_screenBrightnessNits must be defined - config_screenBrightnessBacklight must be defined This array should have size one greater than the size of the config_autoBrightnessLevels array. The brightness values must be non-negative and non-decreasing. This must be overridden in platform specific overlays --> <array name="config_autoBrightnessDisplayValuesNits"> <item>10.45935</item> <!-- 0-16 --> <item>29.25559</item> <!-- 0-16 --> <item>29.25559</item> <!-- 16-32 --> <item>34.240692</item> <!-- 32-50 --> <item>37.514347</item> <!-- 50-100 --> <item>40.018696</item> <!-- 100-140 --> <item>46.885098</item> <!-- 140-180 --> <item>51.626434</item> <!-- 180-240 --> <item>58.610405</item> <!-- 240-300 --> <item>66.890915</item> <!-- 300-600 --> <item>77.61644</item> <!-- 600-800 --> <item>90.221886</item> <!-- 800-1000 --> <item>105.80314</item> <!-- 1000-2000 --> <item>126.073845</item> <!-- 2000-3000 --> <item>154.16931</item> <!-- 3000-4000 --> <item>191.83717</item> <!-- 4000-5000 --> <item>240.74442</item> <!-- 5000-6000 --> <item>294.84857</item> <!-- 6000-8000 --> <item>348.05453</item> <!-- 8000-10000 --> <item>394.98703</item> <!-- 10000-20000 --> <item>405.2315</item> <!-- 20000-30000 --> <item>410.3658</item> <!-- 30000 --> </array> <!-- An array describing the screen's backlight values corresponding to the brightness values in the config_screenBrightnessNits array. This array should be equal in size to config_screenBrightnessBacklight. --> <integer-array name="config_screenBrightnessBacklight"> <item>0</item> <item>5</item> <item>10</item> <item>15</item> <item>20</item> <item>25</item> <item>30</item> <item>35</item> <item>40</item> <item>45</item> <item>60</item> <item>75</item> <item>90</item> <item>105</item> <item>120<item>
<item>135</item>
<item>150</item>
<item>165</item>
<item>180</item>
<item>195</item>
<item>210</item>
<item>225</item>
<item>240</item>
<item>255</item>
</integer-array>
查看光感数据上报原始值节点:
cat /sys/devices/virtual/sprd_sensorhub/sensor_hub/raw_data_als
可以跟一下代码就会发现在kernel下:
kernel4.14\drivers\iio\sprd_hub\shub_core.c
static ssize_t raw_data_als_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct shub_data *sensor = dev_get_drvdata(dev);
u8 data[2];
u16 *ptr;
int err;
ptr = (u16 *)data;
if (sensor->mcu_mode <= SHUB_OPDOWNLOAD) {
dev_err(dev, "mcu_mode == SHUB_BOOT!\n");
return -EINVAL;
}
err = shub_sipc_read(sensor,
SHUB_GET_LIGHT_RAWDATA_SUBTYPE, data, sizeof(data));
if (err < 0) {
dev_err(dev, "read RegMapR_GetLightRawData failed!\n");
return err;
}
return sprintf(buf, "%d\n", ptr[0]);
}
static DEVICE_ATTR_RO(raw_data_als);