8. LED调试日志

来源:互联网 发布:二战法国 知乎 编辑:程序博客网 时间:2024/06/10 20:50
1. led灯又称三色灯,有R/G/B三基色。均有256(0-255)的亮度级别(用PWM波实现?),256*256*256 = 1600w,通过设置三基色可以配出1600w种颜色,几乎包括所有颜色。2. 驱动只负责关机充电的led指示灯控制,控制代码在(开机状态的控制由上层负责):alps\vendor\mediatek\proprietary\external\charger(关机充电指示灯控制)、alps\vendor\mediatek\proprietary\external\ipod(开启了快速启动的关机充电指示灯控制)alps\vendor\mediatek\proprietary\external\charger\charging_control.cpp(关机充电指示灯控制)mtk默认的控制策略:0~89亮红灯   90~100亮绿灯on_uevent()if (is_charging_source_available()) // 如果正在充电(AC/USB/wireless) - 读取sysfs节点{bc = get_capacity();// 获取电池电量百分比 - 读取"/sys/class/power_supply/battery/capacity"if (bc >= 90) {lights_full();// 关闭red,打开green(255)- 通过 写"/sys/class/leds/green/brightness" ""/sys/class/leds/red/brightness""} else {lights_on();// 关闭green,打开red(255)- 通过 写"/sys/class/leds/green/brightness" ""/sys/class/leds/red/brightness""}}定制化控制策略:0~14亮红灯  15~89亮蓝灯 90~100亮绿灯on_uevent()if (is_charging_source_available()) // 如果正在充电(AC/USB/wireless) - 读取sysfs节点{bc = get_capacity();// 获取电池电量百分比 - 读取"/sys/class/power_supply/battery/capacity"if (bc >= 90) {lights_full();// 关闭red,关闭blue,打开green(255)- 通过 写"/sys/class/leds/green/brightness" "/sys/class/leds/red/brightness"} else {+if((bc >= 15)&&(bc < 90))+lights_on_15_89();// 关闭red,关闭green,打开blue(255)- 通过 写"/sys/class/leds/green/brightness" "/sys/class/leds/red/brightness"+elselights_on();// 关闭green,关闭blue,打开red(255)- 通过 写"/sys/class/leds/green/brightness" "/sys/class/leds/red/brightness"}}3. 关闭三色灯 dts中将led_mode改为0    led0:led@0 {            compatible = "mediatek,red";-       led_mode = <3>;+       led_mode = <0>;        led1:led@1 {            compatible = "mediatek,green";-      led_mode = <2>;+      led_mode = <0>;        led2:led@2 {            compatible = "mediatek,blue";-       led_mode = <3>;+       led_mode = <0>;调试案例案例一: 三色灯只有R/G, Blue无功能 - dts中的GPIO控制脚配置不对现象: 平台: androidN,MTK6737排查过程: 1. Blue无功能,查看硬件原理图:6737的R、G、B分别接在ISINK0、ISINK1、GPIO63(AD27)   2. 修改dts中B的GPIO控制配置: GPIO58->GPIO63/* LEDS GPIO Kernel Standardization start */&pio {-       pinctrl_led0: pinctrl_led0@gpio58 {+       pinctrl_led0: pinctrl_led0@gpio63 {pins_cmd_dat {-pins = <PINMUX_GPIO58__FUNC_GPIO58>;+                       pins = <PINMUX_GPIO63__FUNC_GPIO63>;==>ok案例二: led三色灯(接在PMIC)亮度改为70%平台: androidL,MTK6580步骤: 1. 修改alps\kernel-3.10\drivers\misc\mediatek\leds\mt6580\leds.cmt_brightness_set_pmic()中// 将原本的16ma 改为 12ma,大概降为70%if (pmic_type == MT65XX_LED_PMIC_LCD_ISINK)else if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK0)else if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK1)// 查看原理图: R、G、B分别接在PMIC的ISINK1、ISINK2、ISINK3-pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_2);//12mA+pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_3);//16mAelse if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK2)-pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_2);//12mA+pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_3);//16mAelse if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK3)-pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_2);//12mA+pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_3);//16mA注:根据原理图,6737的R、G、B分别接在ISINK0、ISINK1、GPIO63(AD27)【说明B无法在软件上控制亮度】6737的R、G通过PMIC控制亮灭即亮度, B经dts通过GPIO控制亮灭