drivers: pwm: support for numaker m55m1x
Modify Nuvoton numaker pwm driver for m55m1x series. Add pwm nodes in m55m1x.dtsi Signed-off-by: cyliang tw <cyliang@nuvoton.com>
This commit is contained in:
parent
46a3bbb35a
commit
a5f8645038
2 changed files with 49 additions and 0 deletions
|
@ -25,6 +25,7 @@ LOG_MODULE_REGISTER(pwm_numaker, CONFIG_PWM_LOG_LEVEL);
|
|||
#define NUMAKER_SYSCLK_FREQ DT_PROP(DT_NODELABEL(sysclk), clock_frequency)
|
||||
/* EPWM channel 0~5 mask */
|
||||
#define NUMAKER_PWM_CHANNEL_MASK (0x3FU)
|
||||
#define NUMAKER_PWM_HCLK0 1U
|
||||
|
||||
/* Device config */
|
||||
struct pwm_numaker_config {
|
||||
|
@ -432,6 +433,29 @@ static int pwm_numaker_clk_get_rate(EPWM_T *epwm, uint32_t *rate)
|
|||
uint32_t clk_src;
|
||||
uint32_t epwm_clk_src;
|
||||
|
||||
#if defined(CONFIG_SOC_SERIES_M55M1X)
|
||||
if (epwm == EPWM0) {
|
||||
clk_src = CLK->EPWMSEL & CLK_EPWMSEL_EPWM0SEL_Msk;
|
||||
} else if (epwm == EPWM1) {
|
||||
clk_src = CLK->EPWMSEL & CLK_EPWMSEL_EPWM1SEL_Msk;
|
||||
} else {
|
||||
LOG_ERR("Invalid EPWM node");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (clk_src == NUMAKER_PWM_HCLK0) {
|
||||
/* clock source is from HCLK0 clock */
|
||||
epwm_clk_src = CLK_GetHCLK0Freq();
|
||||
} else {
|
||||
/* clock source is from PCLK */
|
||||
SystemCoreClockUpdate();
|
||||
if (epwm == EPWM0) {
|
||||
epwm_clk_src = CLK_GetPCLK0Freq();
|
||||
} else { /* (epwm == EPWM1) */
|
||||
epwm_clk_src = CLK_GetPCLK2Freq();
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (epwm == EPWM0) {
|
||||
clk_src = CLK->CLKSEL2 & CLK_CLKSEL2_EPWM0SEL_Msk;
|
||||
} else if (epwm == EPWM1) {
|
||||
|
@ -453,6 +477,7 @@ static int pwm_numaker_clk_get_rate(EPWM_T *epwm, uint32_t *rate)
|
|||
epwm_clk_src = CLK_GetPCLK1Freq();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
*rate = epwm_clk_src;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -436,6 +436,30 @@
|
|||
status = "disabled";
|
||||
#io-channel-cells = <1>;
|
||||
};
|
||||
|
||||
epwm0: epwm@40242000 {
|
||||
compatible = "nuvoton,numaker-pwm";
|
||||
reg = <0x40242000 0x37c>;
|
||||
interrupts = <31 0>, <32 0>, <33 0>;
|
||||
interrupt-names = "pair0", "pair1", "pair2";
|
||||
resets = <&rst NUMAKER_SYS_EPWM0RST>;
|
||||
prescaler = <19>;
|
||||
clocks = <&pcc NUMAKER_EPWM0_MODULE NUMAKER_CLK_EPWMSEL_EPWM0SEL_PCLK0 0>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
epwm1: epwm@40282000 {
|
||||
compatible = "nuvoton,numaker-pwm";
|
||||
reg = <0x40282000 0x37c>;
|
||||
interrupts = <35 0>, <36 0>, <37 0>;
|
||||
interrupt-names = "pair0", "pair1", "pair2";
|
||||
resets = <&rst NUMAKER_SYS_EPWM1RST>;
|
||||
prescaler = <19>;
|
||||
clocks = <&pcc NUMAKER_EPWM1_MODULE NUMAKER_CLK_EPWMSEL_EPWM1SEL_PCLK2 0>;
|
||||
#pwm-cells = <3>;
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue