Skip to content

Commit 66df541

Browse files
mwerner96kartben
authored andcommitted
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: #25396 Signed-off-by: Maximilian Werner <[email protected]>
1 parent 48b70cf commit 66df541

File tree

6 files changed

+31
-1
lines changed

6 files changed

+31
-1
lines changed

drivers/pwm/pwm_mcux_tpm.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,8 @@ static const struct pwm_driver_api mcux_tpm_driver_api = {
195195
.get_cycles_per_sec = mcux_tpm_get_cycles_per_sec,
196196
};
197197

198+
#define TO_TPM_PRESCALE_DIVIDE(val) _DO_CONCAT(kTPM_Prescale_Divide_, val)
199+
198200
#define TPM_DEVICE(n) \
199201
PINCTRL_DT_INST_DEFINE(n); \
200202
static const struct mcux_tpm_config mcux_tpm_config_##n = { \
@@ -204,7 +206,7 @@ static const struct pwm_driver_api mcux_tpm_driver_api = {
204206
.clock_subsys = (clock_control_subsys_t) \
205207
DT_INST_CLOCKS_CELL(n, name), \
206208
.tpm_clock_source = kTPM_SystemClock, \
207-
.prescale = kTPM_Prescale_Divide_16, \
209+
.prescale = TO_TPM_PRESCALE_DIVIDE(DT_INST_PROP(n, prescaler)), \
208210
.channel_count = FSL_FEATURE_TPM_CHANNEL_COUNTn((TPM_Type *) \
209211
DT_INST_REG_ADDR(n)), \
210212
.mode = kTPM_EdgeAlignedPwm, \

dts/arm/nxp/nxp_imx95_m7.dtsi

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
reg = <0x424e0000 0x88>;
9292
interrupts = <73 0>;
9393
clocks = <&scmi_clk IMX95_CLK_BUSWAKEUP>;
94+
prescaler = <16>;
9495
status = "disabled";
9596
#pwm-cells = <3>;
9697
};
@@ -100,6 +101,7 @@
100101
reg = <0x424f0000 0x88>;
101102
interrupts = <74 0>;
102103
clocks = <&scmi_clk IMX95_CLK_TPM4>;
104+
prescaler = <16>;
103105
status = "disabled";
104106
#pwm-cells = <3>;
105107
};
@@ -109,6 +111,7 @@
109111
reg = <0x42500000 0x88>;
110112
interrupts = <75 0>;
111113
clocks = <&scmi_clk IMX95_CLK_TPM5>;
114+
prescaler = <16>;
112115
status = "disabled";
113116
#pwm-cells = <3>;
114117
};
@@ -118,6 +121,7 @@
118121
reg = <0x42510000 0x88>;
119122
interrupts = <76 0>;
120123
clocks = <&scmi_clk IMX95_CLK_TPM6>;
124+
prescaler = <16>;
121125
status = "disabled";
122126
#pwm-cells = <3>;
123127
};
@@ -254,6 +258,7 @@
254258
reg = <0x44310000 0x88>;
255259
interrupts = <29 0>;
256260
clocks = <&scmi_clk IMX95_CLK_BUSAON>;
261+
prescaler = <16>;
257262
status = "disabled";
258263
#pwm-cells = <3>;
259264
};
@@ -263,6 +268,7 @@
263268
reg = <0x44320000 0x88>;
264269
interrupts = <30 0>;
265270
clocks = <&scmi_clk IMX95_CLK_TPM2>;
271+
prescaler = <16>;
266272
status = "disabled";
267273
#pwm-cells = <3>;
268274
};

dts/arm/nxp/nxp_kw41z.dtsi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@
204204
interrupts = <0x84 0>;
205205
/* channel information needed - fixme */
206206
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 24>;
207+
prescaler = <16>;
207208
status = "disabled";
208209
#pwm-cells = <3>;
209210
};
@@ -214,6 +215,7 @@
214215
interrupts = <0x88 0>;
215216
/* channel information needed - fixme */
216217
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 25>;
218+
prescaler = <16>;
217219
status = "disabled";
218220
#pwm-cells = <3>;
219221
};
@@ -224,6 +226,7 @@
224226
interrupts = <0x8C 0>;
225227
/* channel information needed - fixme */
226228
clocks = <&sim KINETIS_SIM_BUS_CLK 0x103C 26>;
229+
prescaler = <16>;
227230
status = "disabled";
228231
#pwm-cells = <3>;
229232
};

dts/arm/nxp/nxp_mcxc_common.dtsi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@
252252
reg = <0x40038000 0x88>;
253253
interrupts = <17 0>;
254254
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 24>;
255+
prescaler = <16>;
255256
status = "disabled";
256257
#pwm-cells = <3>;
257258
};
@@ -261,6 +262,7 @@
261262
reg = <0x40039000 0x88>;
262263
interrupts = <18 0>;
263264
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 25>;
265+
prescaler = <16>;
264266
status = "disabled";
265267
#pwm-cells = <3>;
266268
};
@@ -270,6 +272,7 @@
270272
reg = <0x4003a000 0x88>;
271273
interrupts = <19 0>;
272274
clocks = <&sim KINETIS_SIM_MCGPCLK 0x103C 26>;
275+
prescaler = <16>;
273276
status = "disabled";
274277
#pwm-cells = <3>;
275278
};

dts/arm/nxp/nxp_mcxw71.dtsi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@
248248
reg = <0x31000 0x100>;
249249
interrupts = <37 0>;
250250
clocks = <&scg SCG_K4_FIRC_CLK 0xc4>;
251+
prescaler = <16>;
251252
status = "disabled";
252253
#pwm-cells = <3>;
253254
};
@@ -257,6 +258,7 @@
257258
reg = <0x32000 0x100>;
258259
interrupts = <38 0>;
259260
clocks = <&scg SCG_K4_FIRC_CLK 0xc8>;
261+
prescaler = <16>;
260262
status = "disabled";
261263
#pwm-cells = <3>;
262264
};

dts/bindings/pwm/nxp,kinetis-tpm.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,20 @@ properties:
1717
pinctrl-0:
1818
required: true
1919

20+
prescaler:
21+
type: int
22+
required: true
23+
enum:
24+
- 1
25+
- 2
26+
- 4
27+
- 8
28+
- 16
29+
- 32
30+
- 64
31+
- 128
32+
description: Input clock prescaler
33+
2034
"#pwm-cells":
2135
const: 3
2236

0 commit comments

Comments
 (0)