Skip to content

Commit 1b19439

Browse files
hfakkiznashif
authored andcommitted
drivers: clock control: Add IPLL and EBO clocks for MAX32 MCUs
MAX78002 SoC has IPLL and EBO clocks. Added these clocks for MAX78002. Updated ERFO clock with '_OR' option because MAX78002 doesn't have it. Signed-off-by: Furkan Akkiz <[email protected]>
1 parent c47523c commit 1b19439

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

include/zephyr/drivers/clock_control/adi_max32_clock_control.h

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ struct max32_perclk {
3030
* ADI_MAX32_PRPH_CLK_SRC_INRO
3131
* ADI_MAX32_PRPH_CLK_SRC_ISO
3232
* ADI_MAX32_PRPH_CLK_SRC_IBRO_DIV8
33+
* ADI_MAX32_PRPH_CLK_SRC_IPLL
34+
* ADI_MAX32_PRPH_CLK_SRC_EBO
3335
*/
3436
uint32_t clk_src;
3537
};
@@ -38,11 +40,13 @@ struct max32_perclk {
3840
#define ADI_MAX32_SYSCLK_PRESCALER DT_PROP_OR(DT_NODELABEL(gcr), sysclk_prescaler, 1)
3941

4042
#define ADI_MAX32_CLK_IPO_FREQ DT_PROP(DT_NODELABEL(clk_ipo), clock_frequency)
41-
#define ADI_MAX32_CLK_ERFO_FREQ DT_PROP(DT_NODELABEL(clk_erfo), clock_frequency)
43+
#define ADI_MAX32_CLK_ERFO_FREQ DT_PROP_OR(DT_NODELABEL(clk_erfo), clock_frequency, 0)
4244
#define ADI_MAX32_CLK_IBRO_FREQ DT_PROP(DT_NODELABEL(clk_ibro), clock_frequency)
4345
#define ADI_MAX32_CLK_ISO_FREQ DT_PROP_OR(DT_NODELABEL(clk_iso), clock_frequency, 0)
4446
#define ADI_MAX32_CLK_INRO_FREQ DT_PROP(DT_NODELABEL(clk_inro), clock_frequency)
4547
#define ADI_MAX32_CLK_ERTCO_FREQ DT_PROP(DT_NODELABEL(clk_ertco), clock_frequency)
48+
#define ADI_MAX32_CLK_IPLL_FREQ DT_PROP_OR(DT_NODELABEL(clk_ipll), clock_frequency, 0)
49+
#define ADI_MAX32_CLK_EBO_FREQ DT_PROP_OR(DT_NODELABEL(clk_ebo), clock_frequency, 0)
4650
/* External clock may not be defined so _OR is used */
4751
#define ADI_MAX32_CLK_EXTCLK_FREQ DT_PROP_OR(DT_NODELABEL(clk_extclk), clock_frequency, 0)
4852

@@ -76,6 +80,14 @@ struct max32_perclk {
7680
#define ADI_MAX32_SYSCLK_SRC ADI_MAX32_CLK_EXTCLK
7781
#define ADI_MAX32_SYSCLK_FREQ (ADI_MAX32_CLK_EXTCLK_FREQ / ADI_MAX32_SYSCLK_PRESCALER)
7882
#endif
83+
#if DT_SAME_NODE(DT_GCR_CLOCKS_CTRL, DT_NODELABEL(clk_ipll))
84+
#define ADI_MAX32_SYSCLK_SRC ADI_MAX32_CLK_IPLL
85+
#define ADI_MAX32_SYSCLK_FREQ (ADI_MAX32_CLK_IPLL_FREQ / ADI_MAX32_SYSCLK_PRESCALER)
86+
#endif
87+
#if DT_SAME_NODE(DT_GCR_CLOCKS_CTRL, DT_NODELABEL(clk_ebo))
88+
#define ADI_MAX32_SYSCLK_SRC ADI_MAX32_CLK_EBO
89+
#define ADI_MAX32_SYSCLK_FREQ (ADI_MAX32_CLK_EBO_FREQ / ADI_MAX32_SYSCLK_PRESCALER)
90+
#endif
7991

8092
#ifndef ADI_MAX32_SYSCLK_SRC
8193
#define ADI_MAX32_SYSCLK_SRC ADI_MAX32_CLK_IPO
@@ -93,6 +105,8 @@ struct max32_perclk {
93105
: (clk_src) == ADI_MAX32_PRPH_CLK_SRC_ISO ? ADI_MAX32_CLK_ISO_FREQ \
94106
: (clk_src) == ADI_MAX32_PRPH_CLK_SRC_IBRO_DIV8 ? (ADI_MAX32_CLK_IBRO_FREQ / 8) \
95107
: (clk_src) == ADI_MAX32_PRPH_CLK_SRC_EXTCLK ? ADI_MAX32_CLK_EXTCLK_FREQ \
108+
: (clk_src) == ADI_MAX32_PRPH_CLK_SRC_IPLL ? ADI_MAX32_CLK_IPLL_FREQ \
109+
: (clk_src) == ADI_MAX32_PRPH_CLK_SRC_EBO ? ADI_MAX32_CLK_EBO_FREQ \
96110
: 0)
97111

98112
#endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_ADI_MAX32_CLOCK_CONTROL_H_ */

include/zephyr/dt-bindings/clock/adi_max32_clock.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@
2121
#define ADI_MAX32_PRPH_CLK_SRC_INRO 5 /* Internal Nano Ring Oscillator */
2222
#define ADI_MAX32_PRPH_CLK_SRC_ISO 6 /* Internal Secondary Oscillator */
2323
#define ADI_MAX32_PRPH_CLK_SRC_IBRO_DIV8 7 /* IBRO/8 */
24+
#define ADI_MAX32_PRPH_CLK_SRC_IPLL 8 /* Internal Phase Lock Loop Oscillator */
25+
#define ADI_MAX32_PRPH_CLK_SRC_EBO 9 /* External Base Oscillator */
2426

2527
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_CLOCK_ADI_MAX32_CLOCK_H_ */

0 commit comments

Comments
 (0)