summaryrefslogtreecommitdiff
path: root/zephyr
diff options
context:
space:
mode:
authorFabio Baltieri <fabiobaltieri@google.com>2022-11-16 15:51:04 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-11-22 18:01:34 +0000
commit877f7514dd7c67498410b4bf7612e2c3c0a73c4b (patch)
tree820f25534cb39fd1ec5a7a9eddcab772b25409df /zephyr
parent5d893f998d936f16d8894225ec44a58abf31f7e9 (diff)
downloadchrome-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.c14
-rw-r--r--zephyr/drivers/cros_kblight/pwm_kblight.c14
-rw-r--r--zephyr/shim/src/fan.c4
-rw-r--r--zephyr/test/drivers/keyboard_scan/src/keyboard_backlight.c26
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);