summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Baltieri <fabiobaltieri@google.com>2022-04-28 12:04:54 +0000
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-04-29 10:19:57 +0000
commit4654b2ccd31a19dbc06b878739e29019177f61a9 (patch)
tree23a572158bc94d992c3e810abde96998a047e961
parent98770c9327a95f2a13425eb6e3bb65ea19292992 (diff)
downloadchrome-ec-4654b2ccd31a19dbc06b878739e29019177f61a9.tar.gz
zephyr: shim: update to the new pwm_set Zephyr API
The PWM api have been changed to drop the _pin_ name, and also to remove the _usec and _msec variants and only use nsec as an argument. Change all internal PWM drivers to work in nsec and use the new APIs. BRANCH=none BUG=none TEST=flash brya, check the pwm frequency on the scope TEST=zmake testall Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com> Cq-Depend: chromium:3613455, chromium:3613464, chromium:3614845 Change-Id: I30ab1420820846409a87497badf37bc69c61c148 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3613907 Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
-rw-r--r--include/led_pwm.h2
-rw-r--r--zephyr/drivers/cros_displight/cros_displight.c16
-rw-r--r--zephyr/drivers/cros_kblight/pwm_kblight.c16
-rw-r--r--zephyr/projects/corsola/src/krabby/led.c14
-rw-r--r--zephyr/shim/include/board_led.h2
-rw-r--r--zephyr/shim/src/fan.c21
-rw-r--r--zephyr/shim/src/led_driver/led_pwm.c32
-rw-r--r--zephyr/shim/src/pwm_led.c23
8 files changed, 60 insertions, 66 deletions
diff --git a/include/led_pwm.h b/include/led_pwm.h
index 7f286130e7..cb5ea70f14 100644
--- a/include/led_pwm.h
+++ b/include/led_pwm.h
@@ -20,7 +20,7 @@ struct pwm_led_dt_channel {
const struct device *dev;
uint32_t channel;
pwm_flags_t flags;
- uint32_t period_us;
+ uint32_t period_ns;
};
struct pwm_led {
diff --git a/zephyr/drivers/cros_displight/cros_displight.c b/zephyr/drivers/cros_displight/cros_displight.c
index b7c04e2bb1..d54706d0c8 100644
--- a/zephyr/drivers/cros_displight/cros_displight.c
+++ b/zephyr/drivers/cros_displight/cros_displight.c
@@ -21,14 +21,14 @@ BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
#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_US (USEC_PER_SEC/DT_INST_PROP(0, frequency))
+#define DISPLIGHT_PWM_PERIOD_NS (NSEC_PER_SEC/DT_INST_PROP(0, frequency))
static int displight_percent;
static void displight_set_duty(int percent)
{
const struct device *pwm_dev = DEVICE_DT_GET(DISPLIGHT_PWM_NODE);
- uint32_t pulse_us;
+ uint32_t pulse_ns;
int rv;
if (!device_is_ready(pwm_dev)) {
@@ -36,17 +36,15 @@ static void displight_set_duty(int percent)
return;
}
- pulse_us = DIV_ROUND_NEAREST(DISPLIGHT_PWM_PERIOD_US * percent, 100);
+ pulse_ns = DIV_ROUND_NEAREST(DISPLIGHT_PWM_PERIOD_NS * percent, 100);
LOG_DBG("displight PWM %s set percent (%d), pulse %d",
- pwm_dev->name, percent, pulse_us);
+ pwm_dev->name, percent, pulse_ns);
- rv = pwm_pin_set_usec(pwm_dev, DISPLIGHT_PWM_CHANNEL,
- DISPLIGHT_PWM_PERIOD_US, pulse_us,
- DISPLIGHT_PWM_FLAGS);
+ rv = pwm_set(pwm_dev, DISPLIGHT_PWM_CHANNEL, DISPLIGHT_PWM_PERIOD_NS,
+ pulse_ns, DISPLIGHT_PWM_FLAGS);
if (rv) {
- LOG_ERR("pwm_pin_set_usec() failed %s (%d)",
- pwm_dev->name, rv);
+ LOG_ERR("pwm_set() 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 0f82f3ce99..c58d6cae06 100644
--- a/zephyr/drivers/cros_kblight/pwm_kblight.c
+++ b/zephyr/drivers/cros_kblight/pwm_kblight.c
@@ -21,7 +21,7 @@ BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
#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_US (USEC_PER_SEC/DT_INST_PROP(0, frequency))
+#define KBLIGHT_PWM_PERIOD_NS (NSEC_PER_SEC/DT_INST_PROP(0, frequency))
static bool kblight_enabled;
static int kblight_percent;
@@ -29,7 +29,7 @@ static int kblight_percent;
static void kblight_pwm_set_duty(int percent)
{
const struct device *pwm_dev = DEVICE_DT_GET(KBLIGHT_PWM_NODE);
- uint32_t pulse_us;
+ uint32_t pulse_ns;
int rv;
if (!device_is_ready(pwm_dev)) {
@@ -37,17 +37,15 @@ static void kblight_pwm_set_duty(int percent)
return;
}
- pulse_us = DIV_ROUND_NEAREST(KBLIGHT_PWM_PERIOD_US * percent, 100);
+ pulse_ns = DIV_ROUND_NEAREST(KBLIGHT_PWM_PERIOD_NS * percent, 100);
LOG_DBG("kblight PWM %s set percent (%d), pulse %d",
- pwm_dev->name, percent, pulse_us);
+ pwm_dev->name, percent, pulse_ns);
- rv = pwm_pin_set_usec(pwm_dev, KBLIGHT_PWM_CHANNEL,
- KBLIGHT_PWM_PERIOD_US, pulse_us,
- KBLIGHT_PWM_FLAGS);
+ rv = pwm_set(pwm_dev, KBLIGHT_PWM_CHANNEL, KBLIGHT_PWM_PERIOD_NS,
+ pulse_ns, KBLIGHT_PWM_FLAGS);
if (rv) {
- LOG_ERR("pwm_pin_set_usec() failed %s (%d)",
- pwm_dev->name, rv);
+ LOG_ERR("pwm_set() failed %s (%d)", pwm_dev->name, rv);
}
}
diff --git a/zephyr/projects/corsola/src/krabby/led.c b/zephyr/projects/corsola/src/krabby/led.c
index 8e2cf10cd9..23db221d77 100644
--- a/zephyr/projects/corsola/src/krabby/led.c
+++ b/zephyr/projects/corsola/src/krabby/led.c
@@ -17,7 +17,7 @@ LOG_MODULE_REGISTER(board_led, LOG_LEVEL_ERR);
/*If we need pwm output in ITE chip power saving mode, then we should set
* frequency <= 324Hz.
*/
-#define BOARD_LED_PWM_PERIOD_US BOARD_LED_HZ_TO_PERIOD_US(324)
+#define BOARD_LED_PWM_PERIOD_NS BOARD_LED_HZ_TO_PERIOD_NS(324)
static const struct board_led_pwm_dt_channel board_led_power_white =
BOARD_LED_PWM_DT_CHANNEL_INITIALIZER(DT_NODELABEL(led_power_white));
@@ -65,7 +65,7 @@ const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
static void board_led_pwm_set_duty(const struct board_led_pwm_dt_channel *ch,
int percent)
{
- uint32_t pulse_us;
+ uint32_t pulse_ns;
int rv;
if (!device_is_ready(ch->dev)) {
@@ -73,15 +73,15 @@ static void board_led_pwm_set_duty(const struct board_led_pwm_dt_channel *ch,
return;
}
- pulse_us = DIV_ROUND_NEAREST(BOARD_LED_PWM_PERIOD_US * percent, 100);
+ pulse_ns = DIV_ROUND_NEAREST(BOARD_LED_PWM_PERIOD_NS * percent, 100);
LOG_DBG("Board LED PWM %s set percent (%d), pulse %d",
- ch->dev->name, percent, pulse_us);
+ ch->dev->name, percent, pulse_ns);
- rv = pwm_pin_set_usec(ch->dev, ch->channel, BOARD_LED_PWM_PERIOD_US,
- pulse_us, ch->flags);
+ rv = pwm_set(ch->dev, ch->channel, BOARD_LED_PWM_PERIOD_NS, pulse_ns,
+ ch->flags);
if (rv) {
- LOG_ERR("pwm_pin_set_usec() failed %s (%d)", ch->dev->name, rv);
+ LOG_ERR("pwm_set() failed %s (%d)", ch->dev->name, rv);
}
}
diff --git a/zephyr/shim/include/board_led.h b/zephyr/shim/include/board_led.h
index 9f775d4f1b..205c96c4c3 100644
--- a/zephyr/shim/include/board_led.h
+++ b/zephyr/shim/include/board_led.h
@@ -19,6 +19,6 @@ struct board_led_pwm_dt_channel {
.flags = DT_PWMS_FLAGS(node_id), \
}
-#define BOARD_LED_HZ_TO_PERIOD_US(freq_hz) (USEC_PER_SEC / freq_hz)
+#define BOARD_LED_HZ_TO_PERIOD_NS(freq_hz) (NSEC_PER_SEC / freq_hz)
#endif /* __BOARD_LED_H */
diff --git a/zephyr/shim/src/fan.c b/zephyr/shim/src/fan.c
index 6051146897..49afb0f508 100644
--- a/zephyr/shim/src/fan.c
+++ b/zephyr/shim/src/fan.c
@@ -56,7 +56,7 @@ BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
.pwm = DEVICE_DT_GET(DT_PWMS_CTLR(node_id)), \
.channel = DT_PWMS_CHANNEL(node_id), \
.flags = DT_PWMS_FLAGS(node_id), \
- .period_us = (USEC_PER_SEC/DT_PROP(node_id, pwm_frequency)), \
+ .period_ns = (NSEC_PER_SEC/DT_PROP(node_id, pwm_frequency)), \
.tach = DEVICE_DT_GET(DT_PHANDLE(node_id, tach)), \
},
@@ -107,7 +107,7 @@ struct fan_config {
const struct device *pwm;
uint32_t channel;
pwm_flags_t flags;
- uint32_t period_us;
+ uint32_t period_ns;
const struct device *tach;
};
@@ -121,7 +121,7 @@ static void fan_pwm_update(int ch)
{
const struct fan_config *cfg = &fan_config[ch];
struct fan_data *data = &fan_data[ch];
- uint32_t pulse_us;
+ uint32_t pulse_ns;
int ret;
if (!device_is_ready(cfg->pwm)) {
@@ -130,20 +130,19 @@ static void fan_pwm_update(int ch)
}
if (data->pwm_enabled) {
- pulse_us = DIV_ROUND_NEAREST(
- cfg->period_us * data->pwm_percent, 100);
+ pulse_ns = DIV_ROUND_NEAREST(
+ cfg->period_ns * data->pwm_percent, 100);
} else {
- pulse_us = 0;
+ pulse_ns = 0;
}
LOG_DBG("FAN PWM %s set percent (%d), pulse %d", cfg->pwm->name,
- data->pwm_percent, pulse_us);
+ data->pwm_percent, pulse_ns);
- ret = pwm_pin_set_usec(cfg->pwm, cfg->channel, cfg->period_us,
- pulse_us, cfg->flags);
+ ret = pwm_set(cfg->pwm, cfg->channel, cfg->period_ns, pulse_ns,
+ cfg->flags);
if (ret) {
- LOG_ERR("pwm_pin_set_usec() failed %s (%d)",
- cfg->pwm->name, ret);
+ LOG_ERR("pwm_set() failed %s (%d)", cfg->pwm->name, ret);
}
}
diff --git a/zephyr/shim/src/led_driver/led_pwm.c b/zephyr/shim/src/led_driver/led_pwm.c
index 81e5e78f77..eee80243cb 100644
--- a/zephyr/shim/src/led_driver/led_pwm.c
+++ b/zephyr/shim/src/led_driver/led_pwm.c
@@ -24,7 +24,7 @@ struct pwm_pin_t {
const struct device *pwm;
uint8_t channel;
pwm_flags_t flags;
- uint32_t pulse_us; /* PWM Duty cycle us */
+ uint32_t pulse_ns; /* PWM Duty cycle ns */
};
/*
@@ -52,17 +52,17 @@ struct led_pins_node_t {
};
/*
- * Period in us from frequency(Hz) defined in pins node
+ * Period in ns from frequency(Hz) defined in pins node
* period in sec = 1/freq
- * period in usec = (1*usec_per_sec)/freq
- * This value is also used calculate duty_cycle in us (pulse_us below).
- * Duty cycle in perct defined in pin node is used to calculate pulse_us
- * pulse_us = (period_us*duty_cycle_in_perct)/100
- * e.g. freq = 500 Hz, period_us = 1000000/500 = 2000us
- * duty_cycle = 50 %, pulse_us = (2000*50)/100 = 1000us
+ * period in nsec = (1*nsec_per_sec)/freq
+ * This value is also used calculate duty_cycle in ns (pulse_ns below).
+ * Duty cycle in perct defined in pin node is used to calculate pulse_ns
+ * pulse_ns = (period_ns*duty_cycle_in_perct)/100
+ * e.g. freq = 500 Hz, period_ns = 1000000000/500 = 2000000ns
+ * duty_cycle = 50 %, pulse_ns = (2000000*50)/100 = 1000000ns
*/
-const uint32_t period_us =
- (USEC_PER_SEC / DT_PROP(PWM_LED_PINS_NODE, pwm_frequency));
+const uint32_t period_ns =
+ (NSEC_PER_SEC / DT_PROP(PWM_LED_PINS_NODE, pwm_frequency));
#define SET_PIN(node_id, prop, i) \
{ \
@@ -71,8 +71,8 @@ const uint32_t period_us =
.channel = DT_PWMS_CHANNEL( \
DT_PHANDLE_BY_IDX(node_id, prop, i)), \
.flags = DT_PWMS_FLAGS(DT_PHANDLE_BY_IDX(node_id, prop, i)), \
- .pulse_us = DIV_ROUND_NEAREST( \
- period_us * DT_PHA_BY_IDX(node_id, prop, i, value), 100), \
+ .pulse_ns = DIV_ROUND_NEAREST( \
+ period_ns * DT_PHA_BY_IDX(node_id, prop, i, value), 100), \
},
#define SET_PWM_PIN(node_id) \
@@ -102,7 +102,7 @@ struct led_pins_node_t pins_node[] = {
* Iterate through LED pins nodes to find the color matching node.
* Set all the PWM channels defined in the node to the defined value,
* to enable the color. Defined value is duty cycle in percentage
- * converted to duty cycle in us (pulse_us)
+ * converted to duty cycle in ns (pulse_ns)
*/
void led_set_color(enum led_color color, enum ec_led_id led_id)
{
@@ -110,11 +110,11 @@ void led_set_color(enum led_color color, enum ec_led_id led_id)
if ((pins_node[i].led_color == color) &&
(pins_node[i].led_id == led_id)) {
for (int j = 0; j < pins_node[i].pins_count; j++) {
- pwm_pin_set_usec(
+ pwm_set(
pins_node[i].pwm_pins[j].pwm,
pins_node[i].pwm_pins[j].channel,
- period_us,
- pins_node[i].pwm_pins[j].pulse_us,
+ period_ns,
+ pins_node[i].pwm_pins[j].pulse_ns,
pins_node[i].pwm_pins[j].flags);
}
break; /* Found the matching pin node, break here */
diff --git a/zephyr/shim/src/pwm_led.c b/zephyr/shim/src/pwm_led.c
index cfa7005f04..5a72a07395 100644
--- a/zephyr/shim/src/pwm_led.c
+++ b/zephyr/shim/src/pwm_led.c
@@ -25,8 +25,8 @@ BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) <= 1,
BUILD_ASSERT(DT_INST_PROP_LEN(0, leds) <= 2,
"Unsupported number of LEDs defined");
-#define PWM_LED_PERIOD_US (USEC_PER_SEC/DT_INST_PROP(0, frequency))
-#define PWM_SIDESEL_PERIOD_US (PWM_LED_PERIOD_US * 2)
+#define PWM_LED_PERIOD_NS (NSEC_PER_SEC/DT_INST_PROP(0, frequency))
+#define PWM_SIDESEL_PERIOD_NS (PWM_LED_PERIOD_NS * 2)
#define PWM_LED_NAME(node_id) DT_STRING_UPPER_TOKEN(node_id, ec_led_name)
#define PWM_LED_NAME_WITH_COMMA(node_id) PWM_LED_NAME(node_id),
@@ -41,7 +41,7 @@ BUILD_ASSERT(ARRAY_SIZE(supported_led_ids) == DT_INST_PROP_LEN(0, leds),
static void pwm_led_set_duty(const struct pwm_led_dt_channel *ch, int percent)
{
- uint32_t pulse_us;
+ uint32_t pulse_ns;
int rv;
if (!device_is_ready(ch->dev)) {
@@ -49,31 +49,30 @@ static void pwm_led_set_duty(const struct pwm_led_dt_channel *ch, int percent)
return;
}
- pulse_us = DIV_ROUND_NEAREST(ch->period_us * percent, 100);
+ pulse_ns = DIV_ROUND_NEAREST(ch->period_ns * percent, 100);
LOG_DBG("LED PWM %s set percent (%d), pulse %d", ch->dev->name, percent,
- pulse_us);
+ pulse_ns);
- rv = pwm_pin_set_usec(ch->dev, ch->channel, ch->period_us, pulse_us,
- ch->flags);
+ rv = pwm_set(ch->dev, ch->channel, ch->period_ns, pulse_ns, ch->flags);
if (rv) {
- LOG_ERR("pwm_pin_set_usec() failed %s (%d)", ch->dev->name, rv);
+ LOG_ERR("pwm_set() failed %s (%d)", ch->dev->name, rv);
}
}
-#define PWM_CHANNEL_DT_BY_IDX_INIT(node_id, led_ch, _period_us) \
+#define PWM_CHANNEL_DT_BY_IDX_INIT(node_id, led_ch, _period_ns) \
{ \
.dev = DEVICE_DT_GET(DT_PWMS_CTLR_BY_IDX(node_id, led_ch)), \
.channel = DT_PWMS_CHANNEL_BY_IDX(node_id, led_ch), \
.flags = DT_PWMS_FLAGS_BY_IDX(node_id, led_ch), \
- .period_us = _period_us, \
+ .period_ns = _period_ns, \
}
#define PWM_CHANNEL_DT_BY_IDX(node_id, prop, idx, led_ch) \
static const struct pwm_led_dt_channel _pwm_led_dt_##idx##_ch_##led_ch = \
PWM_CHANNEL_DT_BY_IDX_INIT( \
DT_PHANDLE_BY_IDX(node_id, prop, idx), led_ch, \
- PWM_LED_PERIOD_US);
+ PWM_LED_PERIOD_NS);
#define PWM_CHANNEL_DT_BY_IDX_COND(node_id, prop, idx, led_ch) \
IF_ENABLED(DT_PROP_HAS_IDX( \
@@ -181,7 +180,7 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
static const struct pwm_led_dt_channel _pwm_led_dt_sidesel =
PWM_CHANNEL_DT_BY_IDX_INIT(DT_INST_PROP(0, sidesel), 0,
- PWM_SIDESEL_PERIOD_US);
+ PWM_SIDESEL_PERIOD_NS);
/* Illuminates the LED on the side of the active charging port. If not charging,
* illuminates both LEDs.