@@ -52,21 +52,6 @@ static int gpio_numaker_configure(const struct device *dev, gpio_pin_t pin, gpio
52
52
return - EINVAL ;
53
53
}
54
54
55
- SYS_UnlockReg ();
56
-
57
- /* Enable GPIO clock */
58
- struct numaker_scc_subsys scc_subsys ;
59
-
60
- memset (& scc_subsys , 0x00 , sizeof (scc_subsys ));
61
- scc_subsys .subsys_id = NUMAKER_SCC_SUBSYS_ID_PCC ;
62
- scc_subsys .pcc .clk_modidx = config -> clk_modidx ;
63
-
64
- /* Equivalent to CLK_EnableModuleClock(config->clk_modidx) */
65
- err = clock_control_on (config -> clk_dev , (clock_control_subsys_t )& scc_subsys );
66
- if (err != 0 ) {
67
- goto move_exit ;
68
- }
69
-
70
55
/* Configure GPIO direction */
71
56
switch (flags & GPIO_DIR_MASK ) {
72
57
case GPIO_INPUT :
@@ -114,7 +99,6 @@ static int gpio_numaker_configure(const struct device *dev, gpio_pin_t pin, gpio
114
99
}
115
100
116
101
move_exit :
117
- SYS_LockReg ();
118
102
return err ;
119
103
}
120
104
@@ -265,8 +249,21 @@ static void gpio_numaker_isr(const struct device *dev)
265
249
\
266
250
static int gpio_numaker_init##n(const struct device *dev) \
267
251
{ \
268
- IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), (GPIO_NUMAKER_IRQ_INIT(n);)) \
269
- return 0; \
252
+ const struct gpio_numaker_config *config = dev->config; \
253
+ struct numaker_scc_subsys scc_subsys; \
254
+ int err; \
255
+ \
256
+ SYS_UnlockReg(); \
257
+ memset(&scc_subsys, 0x00, sizeof(scc_subsys)); \
258
+ scc_subsys.subsys_id = NUMAKER_SCC_SUBSYS_ID_PCC; \
259
+ scc_subsys.pcc.clk_modidx = config->clk_modidx; \
260
+ err = clock_control_on(config->clk_dev, (clock_control_subsys_t)&scc_subsys); \
261
+ if (err == 0) { \
262
+ IF_ENABLED(DT_INST_IRQ_HAS_IDX(n, 0), (GPIO_NUMAKER_IRQ_INIT(n);)) \
263
+ } \
264
+ \
265
+ SYS_LockReg(); \
266
+ return err; \
270
267
} \
271
268
DEVICE_DT_INST_DEFINE(n, &gpio_numaker_init##n, NULL, &gpio_numaker_data##n, \
272
269
&gpio_numaker_config##n, PRE_KERNEL_1, CONFIG_GPIO_INIT_PRIORITY, \
0 commit comments