MTK led闪烁改为呼吸灯模式

1) PMIC的LED:
平台上本身就定义了呼吸函数:
(以o1.mp1,MT6739平台为例)
修改文件: mtk_leds.c(参考路径: /kernel-
4.4/drivers/misc/mediatek/leds/mt6739/mtk_leds.c)
1.注意,需要将如下函数的#if 0改为1,让其可以编译进去。
led_switch_breath_pmic()
2.将mt_mt65xx_blink_set()中的
mt_led_blink_pmic(led_data->cust.data,&nled_tmp_setting);
改为:
led_switch_breath_pmic(led_data->cust.data,&nled_tmp_setting, 1);
虽然这样可以让闪烁变成呼吸灯。但是无法控制时间,不论怎么样的闪烁时间配置,都是采用该同一种功率的呼吸。
具体呼吸灯的配置更改:
datasheet里面可以搜:breath 看其每个参数对应的图。
然后根据led_switch_breath_pmic函数里面,配置的寄存器,查看对应datasheet的
寄存器地址,就可以知道可以配什么值。
2) MT6370/71上面的LED:
因为没有专门为呼吸灯设计的框架,所以这种修改,及时上层设置不同的闪烁时间,到这里也只能
用固定的参数进行呼吸灯设置,这个参数修改在lights.c对应的blink_xx里面配置。
在lights.c里面,以绿灯为例添加,(规则同三种的lights.c修改一样):
char const*const GREEN_BREATH_TOFF = "/sys/class/leds/green/ toff ";
char const*const GREEN_BREATH_TR1 = "/sys/class/leds/green/ tr1";
修改blink_green:

static int blink_green(int level, int onMS, int offMS)
{
static int preStatus = 0; // 0: off, 1: blink, 2: no blink
int nowStatus;
int i = 0;
if (level == 0)
nowStatus = 0;
else if (onMS && offMS)
nowStatus = 1;
else
nowStatus = 2;
if (preStatus == nowStatus)
return -1;
#ifdef LIGHTS_DBG_ON
ALOGD("blink_green, level=%d, onMS=%d, offMS=%d\n", level, onMS, offMS);
#endif
if (nowStatus == 0) {
write_int(GREEN_LED_FILE, 0);
}
else if (nowStatus == 1) {
ALOGD("MTK:blink green\n");
write_str(GREEN_TRIGGER_FILE, " breath_mode ");
while (((access(GREEN_BREATH_TOFF, F_OK) == -1) || (access(GREEN_BREATH_TR1, R_OK|W_OK)
== -1)) && i<10) {
ALOGD("GREEN_BREATH_TR1/TR1 doesn't exist or cannot write!!\n");
led_wait_delay(5);//sleep 5ms for wait kernel LED class create led delay_off/delay_on
node of fs
i++;
}
write_int(GREEN_BREATH_TOFF, 14);
write_int(GREEN_BREATH_TR1, 11);
write_int(GREEN_LED_FILE, 0); // default full brightness
write_int(GREEN_LED_FILE, 255); // default full brightness
}
else {//常亮
ALOGD("MTK:set green brightness!!\n");
write_str(GREEN_TRIGGER_FILE, "cc_mode");
write_int(GREEN_LED_FILE, 255); // default full brightness
}
preStatus = nowStatus;
return 0;
}


之后按照三种的检测,看是否要修改.rc文件。
同理修改red 或者blue。
因为breath 的呼吸参数不只一个,这里只是用toff和tr1来进行,更多参数可以手操adb,写
breath_mode > trigger后,看生成什么文件
然后在对应blink_xx函数的如下位置中,根据逻辑,添加读写顺序。
else if (nowStatus == 1) {
}
write_int :向结点写数值
write_str :向结点写字符串
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值