Merge branch 'r6040-next'
[linux/fpc-iii.git] / drivers / clk / pistachio / clk.h
blob8d45178dbde3e183e0806594e0fd1800f04076d5
1 /*
2 * Copyright (C) 2014 Google, Inc.
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms and conditions of the GNU General Public License,
6 * version 2, as published by the Free Software Foundation.
7 */
9 #ifndef __PISTACHIO_CLK_H
10 #define __PISTACHIO_CLK_H
12 #include <linux/clk-provider.h>
14 struct pistachio_gate {
15 unsigned int id;
16 unsigned long reg;
17 unsigned int shift;
18 const char *name;
19 const char *parent;
22 #define GATE(_id, _name, _pname, _reg, _shift) \
23 { \
24 .id = _id, \
25 .reg = _reg, \
26 .shift = _shift, \
27 .name = _name, \
28 .parent = _pname, \
31 struct pistachio_mux {
32 unsigned int id;
33 unsigned long reg;
34 unsigned int shift;
35 unsigned int num_parents;
36 const char *name;
37 const char **parents;
40 #define PNAME(x) static const char *x[] __initconst
42 #define MUX(_id, _name, _pnames, _reg, _shift) \
43 { \
44 .id = _id, \
45 .reg = _reg, \
46 .shift = _shift, \
47 .name = _name, \
48 .parents = _pnames, \
49 .num_parents = ARRAY_SIZE(_pnames) \
53 struct pistachio_div {
54 unsigned int id;
55 unsigned long reg;
56 unsigned int width;
57 unsigned int div_flags;
58 const char *name;
59 const char *parent;
62 #define DIV(_id, _name, _pname, _reg, _width) \
63 { \
64 .id = _id, \
65 .reg = _reg, \
66 .width = _width, \
67 .div_flags = 0, \
68 .name = _name, \
69 .parent = _pname, \
72 #define DIV_F(_id, _name, _pname, _reg, _width, _div_flags) \
73 { \
74 .id = _id, \
75 .reg = _reg, \
76 .width = _width, \
77 .div_flags = _div_flags, \
78 .name = _name, \
79 .parent = _pname, \
82 struct pistachio_fixed_factor {
83 unsigned int id;
84 unsigned int div;
85 const char *name;
86 const char *parent;
89 #define FIXED_FACTOR(_id, _name, _pname, _div) \
90 { \
91 .id = _id, \
92 .div = _div, \
93 .name = _name, \
94 .parent = _pname, \
97 struct pistachio_pll_rate_table {
98 unsigned long long fref;
99 unsigned long long fout;
100 unsigned long long refdiv;
101 unsigned long long fbdiv;
102 unsigned long long postdiv1;
103 unsigned long long postdiv2;
104 unsigned long long frac;
107 enum pistachio_pll_type {
108 PLL_GF40LP_LAINT,
109 PLL_GF40LP_FRAC,
112 struct pistachio_pll {
113 unsigned int id;
114 unsigned long reg_base;
115 enum pistachio_pll_type type;
116 struct pistachio_pll_rate_table *rates;
117 unsigned int nr_rates;
118 const char *name;
119 const char *parent;
122 #define PLL(_id, _name, _pname, _type, _reg, _rates) \
124 .id = _id, \
125 .reg_base = _reg, \
126 .type = _type, \
127 .rates = _rates, \
128 .nr_rates = ARRAY_SIZE(_rates), \
129 .name = _name, \
130 .parent = _pname, \
133 #define PLL_FIXED(_id, _name, _pname, _type, _reg) \
135 .id = _id, \
136 .reg_base = _reg, \
137 .type = _type, \
138 .rates = NULL, \
139 .nr_rates = 0, \
140 .name = _name, \
141 .parent = _pname, \
144 struct pistachio_clk_provider {
145 struct device_node *node;
146 void __iomem *base;
147 struct clk_onecell_data clk_data;
150 extern struct pistachio_clk_provider *
151 pistachio_clk_alloc_provider(struct device_node *node, unsigned int num_clks);
152 extern void pistachio_clk_register_provider(struct pistachio_clk_provider *p);
154 extern void pistachio_clk_register_gate(struct pistachio_clk_provider *p,
155 struct pistachio_gate *gate,
156 unsigned int num);
157 extern void pistachio_clk_register_mux(struct pistachio_clk_provider *p,
158 struct pistachio_mux *mux,
159 unsigned int num);
160 extern void pistachio_clk_register_div(struct pistachio_clk_provider *p,
161 struct pistachio_div *div,
162 unsigned int num);
163 extern void
164 pistachio_clk_register_fixed_factor(struct pistachio_clk_provider *p,
165 struct pistachio_fixed_factor *ff,
166 unsigned int num);
167 extern void pistachio_clk_register_pll(struct pistachio_clk_provider *p,
168 struct pistachio_pll *pll,
169 unsigned int num);
171 extern void pistachio_clk_force_enable(struct pistachio_clk_provider *p,
172 unsigned int *clk_ids, unsigned int num);
174 #endif