drivers: pwm: mcux_tpm: allow configuring the clock prescaler
Allow configuring the clock prescaler divider for the NXP Kinetis Timer/PWM Module (TPM). Setting the prescaler to a lower value allows for higher resolution for the generated PWM waveforms. This change is inspired from the pwm_mcux_ftm driver: Link: https://github.com/zephyrproject-rtos/zephyr/pull/25396 Signed-off-by: Maximilian Werner <maximilian.werner96@gmail.com>
This commit is contained in:
parent
48b70cf180
commit
66df541d6c
6 changed files with 31 additions and 1 deletions
|
@ -195,6 +195,8 @@ static const struct pwm_driver_api mcux_tpm_driver_api = {
|
||||||
.get_cycles_per_sec = mcux_tpm_get_cycles_per_sec,
|
.get_cycles_per_sec = mcux_tpm_get_cycles_per_sec,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TO_TPM_PRESCALE_DIVIDE(val) _DO_CONCAT(kTPM_Prescale_Divide_, val)
|
||||||
|
|
||||||
#define TPM_DEVICE(n) \
|
#define TPM_DEVICE(n) \
|
||||||
PINCTRL_DT_INST_DEFINE(n); \
|
PINCTRL_DT_INST_DEFINE(n); \
|
||||||
static const struct mcux_tpm_config mcux_tpm_config_##n = { \
|
static const struct mcux_tpm_config mcux_tpm_config_##n = { \
|
||||||
|
@ -204,7 +206,7 @@ static const struct pwm_driver_api mcux_tpm_driver_api = {
|
||||||
.clock_subsys = (clock_control_subsys_t) \
|
.clock_subsys = (clock_control_subsys_t) \
|
||||||
DT_INST_CLOCKS_CELL(n, name), \
|
DT_INST_CLOCKS_CELL(n, name), \
|
||||||
.tpm_clock_source = kTPM_SystemClock, \
|
.tpm_clock_source = kTPM_SystemClock, \
|
||||||
.prescale = kTPM_Prescale_Divide_16, \
|
.prescale = TO_TPM_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)), \
|
||||||
.channel_count = FSL_FEATURE_TPM_CHANNEL_COUNTn((TPM_Type *) \
|
.channel_count = FSL_FEATURE_TPM_CHANNEL_COUNTn((TPM_Type *) \
|
||||||
DT_INST_REG_ADDR(n)), \
|
DT_INST_REG_ADDR(n)), \
|
||||||
.mode = kTPM_EdgeAlignedPwm, \
|
.mode = kTPM_EdgeAlignedPwm, \
|
||||||
|
|
|
@ -91,6 +91,7 @@
|
||||||
reg = <0x424e0000 0x88>;
|
reg = <0x424e0000 0x88>;
|
||||||
interrupts = <73 0>;
|
interrupts = <73 0>;
|
||||||
clocks = <&scmi_clk IMX95_CLK_BUSWAKEUP>;
|
clocks = <&scmi_clk IMX95_CLK_BUSWAKEUP>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -100,6 +101,7 @@
|
||||||
reg = <0x424f0000 0x88>;
|
reg = <0x424f0000 0x88>;
|
||||||
interrupts = <74 0>;
|
interrupts = <74 0>;
|
||||||
clocks = <&scmi_clk IMX95_CLK_TPM4>;
|
clocks = <&scmi_clk IMX95_CLK_TPM4>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -109,6 +111,7 @@
|
||||||
reg = <0x42500000 0x88>;
|
reg = <0x42500000 0x88>;
|
||||||
interrupts = <75 0>;
|
interrupts = <75 0>;
|
||||||
clocks = <&scmi_clk IMX95_CLK_TPM5>;
|
clocks = <&scmi_clk IMX95_CLK_TPM5>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -118,6 +121,7 @@
|
||||||
reg = <0x42510000 0x88>;
|
reg = <0x42510000 0x88>;
|
||||||
interrupts = <76 0>;
|
interrupts = <76 0>;
|
||||||
clocks = <&scmi_clk IMX95_CLK_TPM6>;
|
clocks = <&scmi_clk IMX95_CLK_TPM6>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -254,6 +258,7 @@
|
||||||
reg = <0x44310000 0x88>;
|
reg = <0x44310000 0x88>;
|
||||||
interrupts = <29 0>;
|
interrupts = <29 0>;
|
||||||
clocks = <&scmi_clk IMX95_CLK_BUSAON>;
|
clocks = <&scmi_clk IMX95_CLK_BUSAON>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -263,6 +268,7 @@
|
||||||
reg = <0x44320000 0x88>;
|
reg = <0x44320000 0x88>;
|
||||||
interrupts = <30 0>;
|
interrupts = <30 0>;
|
||||||
clocks = <&scmi_clk IMX95_CLK_TPM2>;
|
clocks = <&scmi_clk IMX95_CLK_TPM2>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -204,6 +204,7 @@
|
||||||
interrupts = <0x84 0>;
|
interrupts = <0x84 0>;
|
||||||
/* channel information needed - fixme */
|
/* channel information needed - fixme */
|
||||||
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 24>;
|
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 24>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -214,6 +215,7 @@
|
||||||
interrupts = <0x88 0>;
|
interrupts = <0x88 0>;
|
||||||
/* channel information needed - fixme */
|
/* channel information needed - fixme */
|
||||||
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 25>;
|
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 25>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -224,6 +226,7 @@
|
||||||
interrupts = <0x8C 0>;
|
interrupts = <0x8C 0>;
|
||||||
/* channel information needed - fixme */
|
/* channel information needed - fixme */
|
||||||
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 26>;
|
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 26>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -252,6 +252,7 @@
|
||||||
reg = <0x40038000 0x88>;
|
reg = <0x40038000 0x88>;
|
||||||
interrupts = <17 0>;
|
interrupts = <17 0>;
|
||||||
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 24>;
|
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 24>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -261,6 +262,7 @@
|
||||||
reg = <0x40039000 0x88>;
|
reg = <0x40039000 0x88>;
|
||||||
interrupts = <18 0>;
|
interrupts = <18 0>;
|
||||||
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 25>;
|
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 25>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -270,6 +272,7 @@
|
||||||
reg = <0x4003a000 0x88>;
|
reg = <0x4003a000 0x88>;
|
||||||
interrupts = <19 0>;
|
interrupts = <19 0>;
|
||||||
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 26>;
|
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 26>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -248,6 +248,7 @@
|
||||||
reg = <0x31000 0x100>;
|
reg = <0x31000 0x100>;
|
||||||
interrupts = <37 0>;
|
interrupts = <37 0>;
|
||||||
clocks = <&scg SCG_K4_FIRC_CLK 0xc4>;
|
clocks = <&scg SCG_K4_FIRC_CLK 0xc4>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
@ -257,6 +258,7 @@
|
||||||
reg = <0x32000 0x100>;
|
reg = <0x32000 0x100>;
|
||||||
interrupts = <38 0>;
|
interrupts = <38 0>;
|
||||||
clocks = <&scg SCG_K4_FIRC_CLK 0xc8>;
|
clocks = <&scg SCG_K4_FIRC_CLK 0xc8>;
|
||||||
|
prescaler = <16>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
#pwm-cells = <3>;
|
#pwm-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,6 +17,20 @@ properties:
|
||||||
pinctrl-0:
|
pinctrl-0:
|
||||||
required: true
|
required: true
|
||||||
|
|
||||||
|
prescaler:
|
||||||
|
type: int
|
||||||
|
required: true
|
||||||
|
enum:
|
||||||
|
- 1
|
||||||
|
- 2
|
||||||
|
- 4
|
||||||
|
- 8
|
||||||
|
- 16
|
||||||
|
- 32
|
||||||
|
- 64
|
||||||
|
- 128
|
||||||
|
description: Input clock prescaler
|
||||||
|
|
||||||
"#pwm-cells":
|
"#pwm-cells":
|
||||||
const: 3
|
const: 3
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue