diff options
author | Fabio Baltieri <fabiobaltieri@google.com> | 2022-11-16 15:51:04 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-11-22 18:01:34 +0000 |
commit | 877f7514dd7c67498410b4bf7612e2c3c0a73c4b (patch) | |
tree | 820f25534cb39fd1ec5a7a9eddcab772b25409df /zephyr | |
parent | 5d893f998d936f16d8894225ec44a58abf31f7e9 (diff) | |
download | chrome-ec-877f7514dd7c67498410b4bf7612e2c3c0a73c4b.tar.gz |
zephyr: kblight, displight, fan: update pwm api to use pwm_set_pulse_dt
Update the kblight, displight and fan drivers to use pwm_dt_spec and the
pwm_set_pulse_dt API, makes the code a bit more compact.
BRANCH=none
BUG=none
TEST=cq dry run
TEST=poking around with gdb to the data structures
Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
Change-Id: Ib14095d9810575f6371cdd6b8ae91787adddcc6a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4031189
Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Reviewed-by: Keith Short <keithshort@chromium.org>
Reviewed-by: Tristan Honscheid <honscheid@google.com>
Diffstat (limited to 'zephyr')
-rw-r--r-- | zephyr/drivers/cros_displight/cros_displight.c | 14 | ||||
-rw-r--r-- | zephyr/drivers/cros_kblight/pwm_kblight.c | 14 | ||||
-rw-r--r-- | zephyr/shim/src/fan.c | 4 | ||||
-rw-r--r-- | zephyr/test/drivers/keyboard_scan/src/keyboard_backlight.c | 26 |
4 files changed, 38 insertions, 20 deletions
diff --git a/zephyr/drivers/cros_displight/cros_displight.c b/zephyr/drivers/cros_displight/cros_displight.c index 998c2a4407..850b0d7c90 100644 --- a/zephyr/drivers/cros_displight/cros_displight.c +++ b/zephyr/drivers/cros_displight/cros_displight.c @@ -19,16 +19,13 @@ LOG_MODULE_REGISTER(displight, LOG_LEVEL_ERR); BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1, "Exactly one instance of cros-ec,displight should be defined."); -#define DISPLIGHT_PWM_NODE DT_INST_PWMS_CTLR(0) -#define DISPLIGHT_PWM_CHANNEL DT_INST_PWMS_CHANNEL(0) -#define DISPLIGHT_PWM_FLAGS DT_INST_PWMS_FLAGS(0) -#define DISPLIGHT_PWM_PERIOD_NS DT_INST_PWMS_PERIOD(0) +static const struct pwm_dt_spec displight_pwm = PWM_DT_SPEC_INST_GET(0); static int displight_percent; static void displight_set_duty(int percent) { - const struct device *pwm_dev = DEVICE_DT_GET(DISPLIGHT_PWM_NODE); + const struct device *pwm_dev = displight_pwm.dev; uint32_t pulse_ns; int rv; @@ -37,15 +34,14 @@ static void displight_set_duty(int percent) return; } - pulse_ns = DIV_ROUND_NEAREST(DISPLIGHT_PWM_PERIOD_NS * percent, 100); + pulse_ns = DIV_ROUND_NEAREST(displight_pwm.period * percent, 100); LOG_DBG("displight PWM %s set percent (%d), pulse %d", pwm_dev->name, percent, pulse_ns); - rv = pwm_set(pwm_dev, DISPLIGHT_PWM_CHANNEL, DISPLIGHT_PWM_PERIOD_NS, - pulse_ns, DISPLIGHT_PWM_FLAGS); + rv = pwm_set_pulse_dt(&displight_pwm, pulse_ns); if (rv) { - LOG_ERR("pwm_set() failed %s (%d)", pwm_dev->name, rv); + LOG_ERR("pwm_set_pulse_dt failed %s (%d)", pwm_dev->name, rv); } } diff --git a/zephyr/drivers/cros_kblight/pwm_kblight.c b/zephyr/drivers/cros_kblight/pwm_kblight.c index cc4af1d757..ca395f8dba 100644 --- a/zephyr/drivers/cros_kblight/pwm_kblight.c +++ b/zephyr/drivers/cros_kblight/pwm_kblight.c @@ -18,17 +18,14 @@ LOG_MODULE_REGISTER(kblight, LOG_LEVEL_ERR); BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1, "Exactly one instance of cros-ec,kblight-pwm should be defined."); -#define KBLIGHT_PWM_NODE DT_INST_PWMS_CTLR(0) -#define KBLIGHT_PWM_CHANNEL DT_INST_PWMS_CHANNEL(0) -#define KBLIGHT_PWM_FLAGS DT_INST_PWMS_FLAGS(0) -#define KBLIGHT_PWM_PERIOD_NS DT_INST_PWMS_PERIOD(0) +static const struct pwm_dt_spec kblight_pwm_dt = PWM_DT_SPEC_INST_GET(0); static bool kblight_enabled; static int kblight_percent; static void kblight_pwm_set_duty(int percent) { - const struct device *pwm_dev = DEVICE_DT_GET(KBLIGHT_PWM_NODE); + const struct device *pwm_dev = kblight_pwm_dt.dev; uint32_t pulse_ns; int rv; @@ -37,15 +34,14 @@ static void kblight_pwm_set_duty(int percent) return; } - pulse_ns = DIV_ROUND_NEAREST(KBLIGHT_PWM_PERIOD_NS * percent, 100); + pulse_ns = DIV_ROUND_NEAREST(kblight_pwm_dt.period * percent, 100); LOG_DBG("kblight PWM %s set percent (%d), pulse %d", pwm_dev->name, percent, pulse_ns); - rv = pwm_set(pwm_dev, KBLIGHT_PWM_CHANNEL, KBLIGHT_PWM_PERIOD_NS, - pulse_ns, KBLIGHT_PWM_FLAGS); + rv = pwm_set_pulse_dt(&kblight_pwm_dt, pulse_ns); if (rv) { - LOG_ERR("pwm_set() failed %s (%d)", pwm_dev->name, rv); + LOG_ERR("pwm_set_pulse_dt failed %s (%d)", pwm_dev->name, rv); } } diff --git a/zephyr/shim/src/fan.c b/zephyr/shim/src/fan.c index 9bc36f878f..9978e6f4ca 100644 --- a/zephyr/shim/src/fan.c +++ b/zephyr/shim/src/fan.c @@ -125,9 +125,9 @@ static void fan_pwm_update(int ch) LOG_DBG("FAN PWM %s set percent (%d), pulse %d", pwm_dev->name, data->pwm_percent, pulse_ns); - ret = pwm_set_dt(&cfg->pwm, cfg->pwm.period, pulse_ns); + ret = pwm_set_pulse_dt(&cfg->pwm, pulse_ns); if (ret) { - LOG_ERR("pwm_set() failed %s (%d)", pwm_dev->name, ret); + LOG_ERR("pwm_set_pulse_dt failed %s (%d)", pwm_dev->name, ret); } } diff --git a/zephyr/test/drivers/keyboard_scan/src/keyboard_backlight.c b/zephyr/test/drivers/keyboard_scan/src/keyboard_backlight.c index 6ced5c81bd..2865d7efc3 100644 --- a/zephyr/test/drivers/keyboard_scan/src/keyboard_backlight.c +++ b/zephyr/test/drivers/keyboard_scan/src/keyboard_backlight.c @@ -6,16 +6,22 @@ #include "console.h" #include "host_command.h" #include "keyboard_backlight.h" +#include "pwm_mock.h" #include "test/drivers/test_state.h" #include <stdint.h> #include <string.h> +#include <zephyr/drivers/pwm.h> #include <zephyr/kernel.h> #include <zephyr/shell/shell_dummy.h> #include <zephyr/ztest.h> #include <zephyr/ztest_assert.h> +#define KBLIGHT_PWM_NODE DT_COMPAT_GET_ANY_STATUS_OKAY(cros_ec_kblight_pwm) + +extern const struct kblight_drv kblight_pwm; + /** * @brief Send host command to set the backlight percentage * @@ -122,6 +128,26 @@ ZTEST(keyboard_backlight, console_command__bad_params) shell_execute_cmd(get_ec_shell(), "kblight 101"), NULL); } +ZTEST(keyboard_backlight, set_backlight__device_not_ready) +{ + const struct pwm_dt_spec kblight_pwm_dt = + PWM_DT_SPEC_GET(KBLIGHT_PWM_NODE); + const struct device *pwm_dev = kblight_pwm_dt.dev; + int initial_duty; + int initialized_saved; + + initial_duty = pwm_mock_get_duty(pwm_dev, kblight_pwm_dt.channel); + + initialized_saved = pwm_dev->state->initialized; + pwm_dev->state->initialized = 0; + + zassert_ok(kblight_pwm.set(initial_duty + 10), NULL); + zassert_equal(initial_duty, + pwm_mock_get_duty(pwm_dev, kblight_pwm_dt.channel), NULL); + + pwm_dev->state->initialized = initialized_saved; +} + static void reset(void *data) { ARG_UNUSED(data); |