diff options
author | Fabio Baltieri <fabiobaltieri@google.com> | 2022-04-28 12:04:54 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-04-29 10:19:57 +0000 |
commit | 4654b2ccd31a19dbc06b878739e29019177f61a9 (patch) | |
tree | 23a572158bc94d992c3e810abde96998a047e961 | |
parent | 98770c9327a95f2a13425eb6e3bb65ea19292992 (diff) | |
download | chrome-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.h | 2 | ||||
-rw-r--r-- | zephyr/drivers/cros_displight/cros_displight.c | 16 | ||||
-rw-r--r-- | zephyr/drivers/cros_kblight/pwm_kblight.c | 16 | ||||
-rw-r--r-- | zephyr/projects/corsola/src/krabby/led.c | 14 | ||||
-rw-r--r-- | zephyr/shim/include/board_led.h | 2 | ||||
-rw-r--r-- | zephyr/shim/src/fan.c | 21 | ||||
-rw-r--r-- | zephyr/shim/src/led_driver/led_pwm.c | 32 | ||||
-rw-r--r-- | zephyr/shim/src/pwm_led.c | 23 |
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. |