xref: /openbmc/linux/drivers/clk/microchip/clk-core.h (revision e3d786a3)
1 /*
2  * Purna Chandra Mandal,<purna.mandal@microchip.com>
3  * Copyright (C) 2015 Microchip Technology Inc.  All rights reserved.
4  *
5  * This program is free software; you can distribute it and/or modify it
6  * under the terms of the GNU General Public License (Version 2) as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * for more details.
13  */
14 #ifndef __MICROCHIP_CLK_PIC32_H_
15 #define __MICROCHIP_CLK_PIC32_H_
16 
17 #include <linux/clk-provider.h>
18 
19 /* PIC32 clock data */
20 struct pic32_clk_common {
21 	struct device *dev;
22 	void __iomem *iobase;
23 	spinlock_t reg_lock; /* clock lock */
24 };
25 
26 /* System PLL clock */
27 struct pic32_sys_pll_data {
28 	struct clk_init_data init_data;
29 	const u32 ctrl_reg;
30 	const u32 status_reg;
31 	const u32 lock_mask;
32 };
33 
34 /* System clock */
35 struct pic32_sys_clk_data {
36 	struct clk_init_data init_data;
37 	const u32 mux_reg;
38 	const u32 slew_reg;
39 	const u32 *parent_map;
40 	const u32 slew_div;
41 };
42 
43 /* Reference Oscillator clock */
44 struct pic32_ref_osc_data {
45 	struct clk_init_data init_data;
46 	const u32 ctrl_reg;
47 	const u32 *parent_map;
48 };
49 
50 /* Peripheral Bus clock */
51 struct pic32_periph_clk_data {
52 	struct clk_init_data init_data;
53 	const u32 ctrl_reg;
54 };
55 
56 /* External Secondary Oscillator clock  */
57 struct pic32_sec_osc_data {
58 	struct clk_init_data init_data;
59 	const u32 enable_reg;
60 	const u32 status_reg;
61 	const u32 enable_mask;
62 	const u32 status_mask;
63 	const unsigned long fixed_rate;
64 };
65 
66 extern const struct clk_ops pic32_pbclk_ops;
67 extern const struct clk_ops pic32_sclk_ops;
68 extern const struct clk_ops pic32_sclk_no_div_ops;
69 extern const struct clk_ops pic32_spll_ops;
70 extern const struct clk_ops pic32_roclk_ops;
71 extern const struct clk_ops pic32_sosc_ops;
72 
73 struct clk *pic32_periph_clk_register(const struct pic32_periph_clk_data *data,
74 				      struct pic32_clk_common *core);
75 struct clk *pic32_refo_clk_register(const struct pic32_ref_osc_data *data,
76 				    struct pic32_clk_common *core);
77 struct clk *pic32_sys_clk_register(const struct pic32_sys_clk_data *data,
78 				   struct pic32_clk_common *core);
79 struct clk *pic32_spll_clk_register(const struct pic32_sys_pll_data *data,
80 				    struct pic32_clk_common *core);
81 struct clk *pic32_sosc_clk_register(const struct pic32_sec_osc_data *data,
82 				    struct pic32_clk_common *core);
83 
84 #endif /* __MICROCHIP_CLK_PIC32_H_*/
85