在其他设备上,我可以将值写入诸如/sys/class/leds/red/brightness之类的LED亮度控制界面以打开/关闭LED。但是,它不适用于Nexus 5。

我正在编写一个不断更改led亮度的应用程序,因此对我而言,通过通知进行设置不是一种选择。

我已经阅读了内核驱动程序源leds-qpnp.c。与Xperia Z2的区别在于:


duty_pcts的长度增加到20。这对于在LPG模式下进行更平滑的过渡很有好处;
我在代码设置亮度中看到插值代码。
开始,rgb_config_data中的calibrated_max,on_ms和off_ms:以前从未见过。
N5没有PWM_DIRECT_MODE和LPG_SYNC_MODE。这导致N5具有rgb_duration_config,Z2具有qpnp_rgb_set_direct。
schedule_work不会调用qpnp_rgb_set!仅在qpnp_rgb_start_set中调用它。似乎是启动LED的触发器。


从这些信息中,我提出了一个计划:


回声TARGET_BRIGHTNESS>亮度
回声SOME_u8_VALUE> rgb_start


但是它仍然拒绝给LED通电。我的rgb_start已清除回0。

查看执行此操作的代码:

/* Checking lut flags is used to glean if the led really was started */ if (!(led_array[i].rgb_cfg->pwm_cfg->lut_params.flags & PM_PWM_LUT_RAMP_UP)) led_array[i].rgb_cfg->start = 0;

我知道lut_params.flags已经设置为利用LPG。
但是目前我还不知道如何以干净的方式清除这些标志,而又不会在内核中造成脏污。

任何人?

最佳答案

好的。我刚刚找到答案。

只需设置亮度,然后设置on_off_ms,然后通过rgb_start触发即可。请注意,两个事务将需要不同的编号发送到rgb_start

08-25 23:04