1 /*
2  * Copyright (c) 2023 Gerson Fernando Budke <nandojve@gmail.com
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_ATMEL_SAM_PMC_H_
8 #define ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_ATMEL_SAM_PMC_H_
9 
10 #include <zephyr/drivers/clock_control.h>
11 #include <zephyr/dt-bindings/clock/atmel_sam_pmc.h>
12 
13 #define SAM_DT_PMC_CONTROLLER DEVICE_DT_GET(DT_NODELABEL(pmc))
14 
15 struct atmel_sam_pmc_config {
16 	uint32_t clock_type;
17 	uint32_t peripheral_id;
18 };
19 
20 #define SAM_DT_CLOCK_PMC_CFG(clock_id, node_id)					\
21 	{									\
22 	.clock_type = DT_CLOCKS_CELL_BY_IDX(node_id, clock_id, clock_type),	\
23 	.peripheral_id = DT_CLOCKS_CELL_BY_IDX(node_id, clock_id, peripheral_id)\
24 	}
25 
26 #define SAM_DT_INST_CLOCK_PMC_CFG(inst) SAM_DT_CLOCK_PMC_CFG(0, DT_DRV_INST(inst))
27 
28 #define SAM_DT_CLOCKS_PMC_CFG(node_id)						\
29 	{									\
30 		LISTIFY(DT_NUM_CLOCKS(node_id),					\
31 			SAM_DT_CLOCK_PMC_CFG, (,), node_id)			\
32 	}
33 
34 #define SAM_DT_INST_CLOCKS_PMC_CFG(inst)					\
35 	SAM_DT_CLOCKS_PMC_CFG(DT_DRV_INST(inst))
36 
37 #endif /* ZEPHYR_INCLUDE_DRIVERS_CLOCK_CONTROL_ATMEL_SAM_PMC_H_ */
38