1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
---|---|
2 | /* |
3 | * Purna Chandra Mandal,<purna.mandal@microchip.com> |
4 | * Copyright (C) 2015 Microchip Technology Inc. All rights reserved. |
5 | */ |
6 | #ifndef __MICROCHIP_CLK_PIC32_H_ |
7 | #define __MICROCHIP_CLK_PIC32_H_ |
8 | |
9 | #include <linux/clk-provider.h> |
10 | |
11 | /* PIC32 clock data */ |
12 | struct pic32_clk_common { |
13 | struct device *dev; |
14 | void __iomem *iobase; |
15 | spinlock_t reg_lock; /* clock lock */ |
16 | }; |
17 | |
18 | /* System PLL clock */ |
19 | struct pic32_sys_pll_data { |
20 | struct clk_init_data init_data; |
21 | const u32 ctrl_reg; |
22 | const u32 status_reg; |
23 | const u32 lock_mask; |
24 | }; |
25 | |
26 | /* System clock */ |
27 | struct pic32_sys_clk_data { |
28 | struct clk_init_data init_data; |
29 | const u32 mux_reg; |
30 | const u32 slew_reg; |
31 | const u32 *parent_map; |
32 | const u32 slew_div; |
33 | }; |
34 | |
35 | /* Reference Oscillator clock */ |
36 | struct pic32_ref_osc_data { |
37 | struct clk_init_data init_data; |
38 | const u32 ctrl_reg; |
39 | const u32 *parent_map; |
40 | }; |
41 | |
42 | /* Peripheral Bus clock */ |
43 | struct pic32_periph_clk_data { |
44 | struct clk_init_data init_data; |
45 | const u32 ctrl_reg; |
46 | }; |
47 | |
48 | /* External Secondary Oscillator clock */ |
49 | struct pic32_sec_osc_data { |
50 | struct clk_init_data init_data; |
51 | const u32 enable_reg; |
52 | const u32 status_reg; |
53 | const u32 enable_mask; |
54 | const u32 status_mask; |
55 | const unsigned long fixed_rate; |
56 | }; |
57 | |
58 | extern const struct clk_ops pic32_pbclk_ops; |
59 | extern const struct clk_ops pic32_sclk_ops; |
60 | extern const struct clk_ops pic32_sclk_no_div_ops; |
61 | extern const struct clk_ops pic32_spll_ops; |
62 | extern const struct clk_ops pic32_roclk_ops; |
63 | extern const struct clk_ops pic32_sosc_ops; |
64 | |
65 | struct clk *pic32_periph_clk_register(const struct pic32_periph_clk_data *data, |
66 | struct pic32_clk_common *core); |
67 | struct clk *pic32_refo_clk_register(const struct pic32_ref_osc_data *data, |
68 | struct pic32_clk_common *core); |
69 | struct clk *pic32_sys_clk_register(const struct pic32_sys_clk_data *data, |
70 | struct pic32_clk_common *core); |
71 | struct clk *pic32_spll_clk_register(const struct pic32_sys_pll_data *data, |
72 | struct pic32_clk_common *core); |
73 | struct clk *pic32_sosc_clk_register(const struct pic32_sec_osc_data *data, |
74 | struct pic32_clk_common *core); |
75 | |
76 | #endif /* __MICROCHIP_CLK_PIC32_H_*/ |
77 |