0001
0002
0003
0004
0005
0006 #ifndef __MICROCHIP_CLK_PIC32_H_
0007 #define __MICROCHIP_CLK_PIC32_H_
0008
0009 #include <linux/clk-provider.h>
0010
0011
0012 struct pic32_clk_common {
0013 struct device *dev;
0014 void __iomem *iobase;
0015 spinlock_t reg_lock;
0016 };
0017
0018
0019 struct pic32_sys_pll_data {
0020 struct clk_init_data init_data;
0021 const u32 ctrl_reg;
0022 const u32 status_reg;
0023 const u32 lock_mask;
0024 };
0025
0026
0027 struct pic32_sys_clk_data {
0028 struct clk_init_data init_data;
0029 const u32 mux_reg;
0030 const u32 slew_reg;
0031 const u32 *parent_map;
0032 const u32 slew_div;
0033 };
0034
0035
0036 struct pic32_ref_osc_data {
0037 struct clk_init_data init_data;
0038 const u32 ctrl_reg;
0039 const u32 *parent_map;
0040 };
0041
0042
0043 struct pic32_periph_clk_data {
0044 struct clk_init_data init_data;
0045 const u32 ctrl_reg;
0046 };
0047
0048
0049 struct pic32_sec_osc_data {
0050 struct clk_init_data init_data;
0051 const u32 enable_reg;
0052 const u32 status_reg;
0053 const u32 enable_mask;
0054 const u32 status_mask;
0055 const unsigned long fixed_rate;
0056 };
0057
0058 extern const struct clk_ops pic32_pbclk_ops;
0059 extern const struct clk_ops pic32_sclk_ops;
0060 extern const struct clk_ops pic32_sclk_no_div_ops;
0061 extern const struct clk_ops pic32_spll_ops;
0062 extern const struct clk_ops pic32_roclk_ops;
0063 extern const struct clk_ops pic32_sosc_ops;
0064
0065 struct clk *pic32_periph_clk_register(const struct pic32_periph_clk_data *data,
0066 struct pic32_clk_common *core);
0067 struct clk *pic32_refo_clk_register(const struct pic32_ref_osc_data *data,
0068 struct pic32_clk_common *core);
0069 struct clk *pic32_sys_clk_register(const struct pic32_sys_clk_data *data,
0070 struct pic32_clk_common *core);
0071 struct clk *pic32_spll_clk_register(const struct pic32_sys_pll_data *data,
0072 struct pic32_clk_common *core);
0073 struct clk *pic32_sosc_clk_register(const struct pic32_sec_osc_data *data,
0074 struct pic32_clk_common *core);
0075
0076 #endif