This source file includes following definitions.
- amba_pclk_enable
- amba_pclk_disable
- amba_pclk_prepare
- amba_pclk_unprepare
1
2
3
4
5
6
7
8
9
10
11 #ifndef ASMARM_AMBA_H
12 #define ASMARM_AMBA_H
13
14 #include <linux/clk.h>
15 #include <linux/device.h>
16 #include <linux/mod_devicetable.h>
17 #include <linux/err.h>
18 #include <linux/resource.h>
19 #include <linux/regulator/consumer.h>
20
21 #define AMBA_NR_IRQS 9
22 #define AMBA_CID 0xb105f00d
23 #define CORESIGHT_CID 0xb105900d
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 struct amba_cs_uci_id {
52 unsigned int devarch;
53 unsigned int devarch_mask;
54 unsigned int devtype;
55 void *data;
56 };
57
58
59 #define UCI_REG_DEVTYPE_OFFSET 0xFCC
60 #define UCI_REG_DEVARCH_OFFSET 0xFBC
61
62 struct clk;
63
64 struct amba_device {
65 struct device dev;
66 struct resource res;
67 struct clk *pclk;
68 unsigned int periphid;
69 unsigned int cid;
70 struct amba_cs_uci_id uci;
71 unsigned int irq[AMBA_NR_IRQS];
72 char *driver_override;
73 };
74
75 struct amba_driver {
76 struct device_driver drv;
77 int (*probe)(struct amba_device *, const struct amba_id *);
78 int (*remove)(struct amba_device *);
79 void (*shutdown)(struct amba_device *);
80 const struct amba_id *id_table;
81 };
82
83
84
85
86
87 enum amba_vendor {
88 AMBA_VENDOR_ARM = 0x41,
89 AMBA_VENDOR_ST = 0x80,
90 AMBA_VENDOR_QCOM = 0x51,
91 AMBA_VENDOR_LSI = 0xb6,
92 AMBA_VENDOR_LINUX = 0xfe,
93 };
94
95
96 #define AMBA_LINUX_ID(conf, rev, part) \
97 (((conf) & 0xff) << 24 | ((rev) & 0xf) << 20 | \
98 AMBA_VENDOR_LINUX << 12 | ((part) & 0xfff))
99
100 extern struct bus_type amba_bustype;
101
102 #define to_amba_device(d) container_of(d, struct amba_device, dev)
103
104 #define amba_get_drvdata(d) dev_get_drvdata(&d->dev)
105 #define amba_set_drvdata(d,p) dev_set_drvdata(&d->dev, p)
106
107 int amba_driver_register(struct amba_driver *);
108 void amba_driver_unregister(struct amba_driver *);
109 struct amba_device *amba_device_alloc(const char *, resource_size_t, size_t);
110 void amba_device_put(struct amba_device *);
111 int amba_device_add(struct amba_device *, struct resource *);
112 int amba_device_register(struct amba_device *, struct resource *);
113 struct amba_device *amba_apb_device_add(struct device *parent, const char *name,
114 resource_size_t base, size_t size,
115 int irq1, int irq2, void *pdata,
116 unsigned int periphid);
117 struct amba_device *amba_ahb_device_add(struct device *parent, const char *name,
118 resource_size_t base, size_t size,
119 int irq1, int irq2, void *pdata,
120 unsigned int periphid);
121 struct amba_device *
122 amba_apb_device_add_res(struct device *parent, const char *name,
123 resource_size_t base, size_t size, int irq1,
124 int irq2, void *pdata, unsigned int periphid,
125 struct resource *resbase);
126 struct amba_device *
127 amba_ahb_device_add_res(struct device *parent, const char *name,
128 resource_size_t base, size_t size, int irq1,
129 int irq2, void *pdata, unsigned int periphid,
130 struct resource *resbase);
131 void amba_device_unregister(struct amba_device *);
132 struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int);
133 int amba_request_regions(struct amba_device *, const char *);
134 void amba_release_regions(struct amba_device *);
135
136 static inline int amba_pclk_enable(struct amba_device *dev)
137 {
138 return clk_enable(dev->pclk);
139 }
140
141 static inline void amba_pclk_disable(struct amba_device *dev)
142 {
143 clk_disable(dev->pclk);
144 }
145
146 static inline int amba_pclk_prepare(struct amba_device *dev)
147 {
148 return clk_prepare(dev->pclk);
149 }
150
151 static inline void amba_pclk_unprepare(struct amba_device *dev)
152 {
153 clk_unprepare(dev->pclk);
154 }
155
156
157 #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff)
158 #define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f)
159 #define AMBA_MANF_BITS(a) (((a) >> 12) & 0xff)
160 #define AMBA_PART_BITS(a) ((a) & 0xfff)
161
162 #define amba_config(d) AMBA_CONFIG_BITS((d)->periphid)
163 #define amba_rev(d) AMBA_REV_BITS((d)->periphid)
164 #define amba_manf(d) AMBA_MANF_BITS((d)->periphid)
165 #define amba_part(d) AMBA_PART_BITS((d)->periphid)
166
167 #define __AMBA_DEV(busid, data, mask) \
168 { \
169 .coherent_dma_mask = mask, \
170 .init_name = busid, \
171 .platform_data = data, \
172 }
173
174
175
176
177
178
179
180 #define AMBA_APB_DEVICE(name, busid, id, base, irqs, data) \
181 struct amba_device name##_device = { \
182 .dev = __AMBA_DEV(busid, data, 0), \
183 .res = DEFINE_RES_MEM(base, SZ_4K), \
184 .irq = irqs, \
185 .periphid = id, \
186 }
187
188
189
190
191 #define AMBA_AHB_DEVICE(name, busid, id, base, irqs, data) \
192 struct amba_device name##_device = { \
193 .dev = __AMBA_DEV(busid, data, ~0ULL), \
194 .res = DEFINE_RES_MEM(base, SZ_4K), \
195 .irq = irqs, \
196 .periphid = id, \
197 }
198
199
200
201
202
203
204
205 #define module_amba_driver(__amba_drv) \
206 module_driver(__amba_drv, amba_driver_register, amba_driver_unregister)
207
208
209
210
211
212
213
214 #define builtin_amba_driver(__amba_drv) \
215 builtin_driver(__amba_drv, amba_driver_register)
216
217 #endif