2

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

我正在编写一个不断改变 LED 亮度的应用程序,因此通过通知进行设置对我来说不是一个选项。

我已经阅读了内核驱动程序源 leds-qpnp.c。它与 Xperia Z2 的不同之处在于:

  1. duty_pcts 长度增加到 20。这有利于在 LPG 模式下有更平滑的过渡;
  2. 我在代码设置亮度中看到插值代码。
  3. start、calibrated_max、on_ms 和 off_ms in rgb_config_data:以前从未见过。
  4. N5 没有 PWM_DIRECT_MODE 和 LPG_SYNC_MODE。这导致 N5 具有 rgb_duration_config 而 Z2 具有 qpnp_rgb_set_direct。
  5. schedule_work 不调用 qpnp_rgb_set!它仅在 qpnp_rgb_start_set 中调用。它似乎是启动 LED 的触发器。

根据这些信息,我想出了一个计划:

  1. 回声 TARGET_BRIGHTNESS > 亮度
  2. 回声 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。但是在这一点上,我不知道如何以干净的方式清除标志,而不会在内核中进行肮脏的黑客攻击。

任何人?

4

1 回答 1

1

好吧。我刚刚找到了答案。

只需设置亮度,然后设置 on_off_ms,然后通过 rgb_start 触发。请注意,两个事务需要不同的数字才能发送到 rgb_start

于 2014-07-15T06:06:45.660 回答