1. led灯又称三色灯,有R/G/B三基色。均有256(0-255)的亮度级别(用PWM波实现?),
256*256*256 = 1600w,通过设置三基色可以配出1600w种颜色,几乎包括所有颜色。
调试: 通过adb读写led亮度
ac50sax: # find /sys -name brightness
/sys/devices/platform/leds-mt65xx/leds/red/brightness
/sys/devices/platform/leds-mt65xx/leds/blue/brightness
/sys/devices/platform/leds-mt65xx/leds/green/brightness
/sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness
ac50sax: # cat /sys/devices/platform/leds-mt65xx/leds/red/brightness
ac50sax: # echo 255 > /sys/devices/platform/leds-mt65xx/leds/red/brightness
ac50sax: # echo 0 > /sys/devices/platform/leds-mt65xx/leds/red/brightness
ac50sax: # echo 0 > /sys/devices/platform/leds-mt65xx/leds/blue/brightness
ac50sax: # echo 255 > /sys/devices/platform/leds-mt65xx/leds/blue/brightness
ac50sax: # echo 0 > /sys/devices/platform/leds-mt65xx/leds/green/brightness
ac50sax: # echo 255 > /sys/devices/platform/leds-mt65xx/leds/green/brightness
ac50sax: # cat /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness
ac50sax: # echo 255 > /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness
ac50sax: # echo 0 > /sys/devices/platform/leds-mt65xx/leds/lcd-backlight/brightness
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"
+ else
lights_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>;
一、 mt6739平台(kernel-4.4)三色灯 即充电指示灯驱动实现:
1. mt6739.dts
+ charge_led: charge_led {
+ compatible = "mediatek,mt6739_leds";
+ };
mtkfb: mtkfb {
compatible = "mediatek,mtkfb";
};
2. k39tv1_bsp_1g.dts
&odm {
led0:led@0 {
compatible = "mediatek,red"; // 6739的red led接在pmic上
led_mode = <0>;
data = <1>;
pwm_config = <0 0 0 0 0>;
};
led1:led@1 {
compatible = "mediatek,green"; // GPIO122
led_mode = <2>;
data = <1>;
pwm_config = <0 0 0 0 0>;
};
led2:led@2 {
compatible = "mediatek,blue"; // GPIO17
led_mode = <2>;
data = <2>;
pwm_config = <0 0 0 0 0>;
};
+ /* LEDS GPIO Kernel Standardization start */
+ &charge_led {
+ pinctrl-names = "pinctrl_led1_low", "pinctrl_led1_high", "pinctrl_led2_low", "pinctrl_led2_high";
+ pinctrl-0 = <&pinctrl_led1_low>;
+ pinctrl-1 = <&pinctrl_led1_high>;
+ pinctrl-2 = <&pinctrl_led2_low>;
+ pinctrl-3 = <&pinctrl_led2_high>;
+ status = "okay";
+ };
+
+ &pio {
+ pinctrl_led1_low: pinctrl_led1_low {
+ pins_cmd_dat {
+ pins = <PINMUX_GPIO122__FUNC_GPIO122>;
+ slew-rate = <1>;
+ output-low;
+ };
+ };
+
+ pinctrl_led1_high: pinctrl_led1_high {
+ pins_cmd_dat {
+ pins = <PINMUX_GPIO122__FUNC_GPIO122>;
+ slew-rate = <1>
8. LED调试日志
最新推荐文章于 2024-08-07 09:57:11 发布