drivers: pwm: pwm_mcux: Reload mode option
DTS property "nxp,reload" selects how to load the buffered-registers with new values. Signed-off-by: Grixa Yrev <grixayrev@yandex.ru>
This commit is contained in:
parent
b4fb5300da
commit
15a83fe0a0
2 changed files with 22 additions and 2 deletions
|
@ -25,6 +25,7 @@ struct pwm_mcux_config {
|
||||||
const struct device *clock_dev;
|
const struct device *clock_dev;
|
||||||
clock_control_subsys_t clock_subsys;
|
clock_control_subsys_t clock_subsys;
|
||||||
pwm_clock_prescale_t prescale;
|
pwm_clock_prescale_t prescale;
|
||||||
|
pwm_register_reload_t reload;
|
||||||
pwm_mode_t mode;
|
pwm_mode_t mode;
|
||||||
bool run_wait;
|
bool run_wait;
|
||||||
bool run_debug;
|
bool run_debug;
|
||||||
|
@ -80,7 +81,7 @@ static int mcux_pwm_set_cycles(const struct device *dev, uint32_t channel,
|
||||||
|
|
||||||
data->period_cycles[channel] = period_cycles;
|
data->period_cycles[channel] = period_cycles;
|
||||||
|
|
||||||
LOG_DBG("SETUP dutycycle to %u\n", duty_cycle);
|
LOG_DBG("SETUP dutycycle to %u", duty_cycle);
|
||||||
|
|
||||||
if (clock_control_get_rate(config->clock_dev, config->clock_subsys,
|
if (clock_control_get_rate(config->clock_dev, config->clock_subsys,
|
||||||
&clock_freq)) {
|
&clock_freq)) {
|
||||||
|
@ -153,9 +154,12 @@ static int pwm_mcux_init(const struct device *dev)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_DBG("Set prescaler %d, reload mode %d",
|
||||||
|
1 << config->prescale, config->reload);
|
||||||
|
|
||||||
PWM_GetDefaultConfig(&pwm_config);
|
PWM_GetDefaultConfig(&pwm_config);
|
||||||
pwm_config.prescale = config->prescale;
|
pwm_config.prescale = config->prescale;
|
||||||
pwm_config.reloadLogic = kPWM_ReloadPwmFullCycle;
|
pwm_config.reloadLogic = config->reload;
|
||||||
pwm_config.clockSource = kPWM_BusClock;
|
pwm_config.clockSource = kPWM_BusClock;
|
||||||
pwm_config.enableDebugMode = config->run_debug;
|
pwm_config.enableDebugMode = config->run_debug;
|
||||||
pwm_config.enableWait = config->run_wait;
|
pwm_config.enableWait = config->run_wait;
|
||||||
|
@ -193,6 +197,8 @@ static const struct pwm_driver_api pwm_mcux_driver_api = {
|
||||||
.index = DT_INST_PROP(n, index), \
|
.index = DT_INST_PROP(n, index), \
|
||||||
.mode = kPWM_EdgeAligned, \
|
.mode = kPWM_EdgeAligned, \
|
||||||
.prescale = _CONCAT(kPWM_Prescale_Divide_, DT_INST_PROP(n, nxp_prescaler)),\
|
.prescale = _CONCAT(kPWM_Prescale_Divide_, DT_INST_PROP(n, nxp_prescaler)),\
|
||||||
|
.reload = DT_ENUM_IDX_OR(DT_DRV_INST(n), nxp_reload,\
|
||||||
|
kPWM_ReloadPwmFullCycle),\
|
||||||
.clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \
|
.clock_dev = DEVICE_DT_GET(DT_INST_CLOCKS_CTLR(n)), \
|
||||||
.clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\
|
.clock_subsys = (clock_control_subsys_t)DT_INST_CLOCKS_CELL(n, name),\
|
||||||
.run_wait = DT_INST_PROP(n, run_in_wait), \
|
.run_wait = DT_INST_PROP(n, run_in_wait), \
|
||||||
|
|
|
@ -33,6 +33,20 @@ properties:
|
||||||
description: |
|
description: |
|
||||||
Clock prescaler at the input of the PWM.
|
Clock prescaler at the input of the PWM.
|
||||||
|
|
||||||
|
nxp,reload:
|
||||||
|
type: string
|
||||||
|
enum:
|
||||||
|
- "immediate"
|
||||||
|
- "half-cycle"
|
||||||
|
- "full-cycle"
|
||||||
|
- "half-and-full-cycle"
|
||||||
|
description: |
|
||||||
|
Select how to load the buffered-registers with new values:
|
||||||
|
"immediate" - buffered-registers get loaded with new values as soon as LDOK bit is set;
|
||||||
|
"half-cycle" - registers loaded on a PWM half cycle;
|
||||||
|
"full-cycle" - registers loaded on a PWM full cycle;
|
||||||
|
"half-and-full-cycle" - registers loaded on a PWM half & full cycle.
|
||||||
|
|
||||||
"#pwm-cells":
|
"#pwm-cells":
|
||||||
const: 2
|
const: 2
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue