在其他设备上,我可以将值写入 LED 亮度控制界面,例如/sys/class/leds/red/brightness
打开/关闭 LED。但是它不适用于 Nexus 5。
我正在编写一个不断改变 LED 亮度的应用程序,因此通过通知进行设置对我来说不是一个选项。
我已经阅读了内核驱动程序源 leds-qpnp.c。它与 Xperia Z2 的不同之处在于:
- duty_pcts 长度增加到 20。这有利于在 LPG 模式下有更平滑的过渡;
- 我在代码设置亮度中看到插值代码。
- start、calibrated_max、on_ms 和 off_ms in
rgb_config_data
:以前从未见过。 - 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。但是在这一点上,我不知道如何以干净的方式清除标志,而不会在内核中进行肮脏的黑客攻击。
任何人?