blob: dd7967d28b5c00a317ecd82ba9f173740458bcb1 [file] [log] [blame]
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001/* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#include <linux/kernel.h>
14#include <linux/init.h>
15#include <linux/err.h>
16#include <linux/ctype.h>
17#include <linux/io.h>
18#include <linux/spinlock.h>
19#include <linux/delay.h>
20#include <linux/clk.h>
21
22#include <mach/clk.h>
23
24#include "clock-local2.h"
25#include "clock-pll.h"
26
27enum {
28 GCC_BASE,
29 MMSS_BASE,
30 LPASS_BASE,
31 MSS_BASE,
32 N_BASES,
33};
34
35static void __iomem *virt_bases[N_BASES];
36
37#define GCC_REG_BASE(x) (void __iomem *)(virt_bases[GCC_BASE] + (x))
38#define MMSS_REG_BASE(x) (void __iomem *)(virt_bases[MMSS_BASE] + (x))
39#define LPASS_REG_BASE(x) (void __iomem *)(virt_bases[LPASS_BASE] + (x))
40#define MSS_REG_BASE(x) (void __iomem *)(virt_bases[MSS_BASE] + (x))
41
42#define GPLL0_MODE_REG 0x0000
43#define GPLL0_L_REG 0x0004
44#define GPLL0_M_REG 0x0008
45#define GPLL0_N_REG 0x000C
46#define GPLL0_USER_CTL_REG 0x0010
47#define GPLL0_CONFIG_CTL_REG 0x0014
48#define GPLL0_TEST_CTL_REG 0x0018
49#define GPLL0_STATUS_REG 0x001C
50
51#define GPLL1_MODE_REG 0x0040
52#define GPLL1_L_REG 0x0044
53#define GPLL1_M_REG 0x0048
54#define GPLL1_N_REG 0x004C
55#define GPLL1_USER_CTL_REG 0x0050
56#define GPLL1_CONFIG_CTL_REG 0x0054
57#define GPLL1_TEST_CTL_REG 0x0058
58#define GPLL1_STATUS_REG 0x005C
59
60#define MMPLL0_MODE_REG 0x0000
61#define MMPLL0_L_REG 0x0004
62#define MMPLL0_M_REG 0x0008
63#define MMPLL0_N_REG 0x000C
64#define MMPLL0_USER_CTL_REG 0x0010
65#define MMPLL0_CONFIG_CTL_REG 0x0014
66#define MMPLL0_TEST_CTL_REG 0x0018
67#define MMPLL0_STATUS_REG 0x001C
68
69#define MMPLL1_MODE_REG 0x0040
70#define MMPLL1_L_REG 0x0044
71#define MMPLL1_M_REG 0x0048
72#define MMPLL1_N_REG 0x004C
73#define MMPLL1_USER_CTL_REG 0x0050
74#define MMPLL1_CONFIG_CTL_REG 0x0054
75#define MMPLL1_TEST_CTL_REG 0x0058
76#define MMPLL1_STATUS_REG 0x005C
77
78#define MMPLL3_MODE_REG 0x0080
79#define MMPLL3_L_REG 0x0084
80#define MMPLL3_M_REG 0x0088
81#define MMPLL3_N_REG 0x008C
82#define MMPLL3_USER_CTL_REG 0x0090
83#define MMPLL3_CONFIG_CTL_REG 0x0094
84#define MMPLL3_TEST_CTL_REG 0x0098
85#define MMPLL3_STATUS_REG 0x009C
86
87#define LPAPLL_MODE_REG 0x0000
88#define LPAPLL_L_REG 0x0004
89#define LPAPLL_M_REG 0x0008
90#define LPAPLL_N_REG 0x000C
91#define LPAPLL_USER_CTL_REG 0x0010
92#define LPAPLL_CONFIG_CTL_REG 0x0014
93#define LPAPLL_TEST_CTL_REG 0x0018
94#define LPAPLL_STATUS_REG 0x001C
95
96#define GCC_DEBUG_CLK_CTL_REG 0x1880
97#define CLOCK_FRQ_MEASURE_CTL_REG 0x1884
98#define CLOCK_FRQ_MEASURE_STATUS_REG 0x1888
99#define GCC_XO_DIV4_CBCR_REG 0x10C8
100#define APCS_GPLL_ENA_VOTE_REG 0x1480
101#define MMSS_PLL_VOTE_APCS_REG 0x0100
102#define MMSS_DEBUG_CLK_CTL_REG 0x0900
103#define LPASS_DEBUG_CLK_CTL_REG 0x29000
104#define LPASS_LPA_PLL_VOTE_APPS_REG 0x2000
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700105#define MSS_DEBUG_CLK_CTL_REG 0x0078
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700106
107#define USB30_MASTER_CMD_RCGR 0x03D4
108#define USB30_MOCK_UTMI_CMD_RCGR 0x03E8
109#define USB_HSIC_SYSTEM_CMD_RCGR 0x041C
110#define USB_HSIC_CMD_RCGR 0x0440
111#define USB_HSIC_IO_CAL_CMD_RCGR 0x0458
112#define USB_HS_SYSTEM_CMD_RCGR 0x0490
113#define SDCC1_APPS_CMD_RCGR 0x04D0
114#define SDCC2_APPS_CMD_RCGR 0x0510
115#define SDCC3_APPS_CMD_RCGR 0x0550
116#define SDCC4_APPS_CMD_RCGR 0x0590
117#define BLSP1_QUP1_SPI_APPS_CMD_RCGR 0x064C
118#define BLSP1_UART1_APPS_CMD_RCGR 0x068C
119#define BLSP1_QUP2_SPI_APPS_CMD_RCGR 0x06CC
120#define BLSP1_UART2_APPS_CMD_RCGR 0x070C
121#define BLSP1_QUP3_SPI_APPS_CMD_RCGR 0x074C
122#define BLSP1_UART3_APPS_CMD_RCGR 0x078C
123#define BLSP1_QUP4_SPI_APPS_CMD_RCGR 0x07CC
124#define BLSP1_UART4_APPS_CMD_RCGR 0x080C
125#define BLSP1_QUP5_SPI_APPS_CMD_RCGR 0x084C
126#define BLSP1_UART5_APPS_CMD_RCGR 0x088C
127#define BLSP1_QUP6_SPI_APPS_CMD_RCGR 0x08CC
128#define BLSP1_UART6_APPS_CMD_RCGR 0x090C
129#define BLSP2_QUP1_SPI_APPS_CMD_RCGR 0x098C
130#define BLSP2_UART1_APPS_CMD_RCGR 0x09CC
131#define BLSP2_QUP2_SPI_APPS_CMD_RCGR 0x0A0C
132#define BLSP2_UART2_APPS_CMD_RCGR 0x0A4C
133#define BLSP2_QUP3_SPI_APPS_CMD_RCGR 0x0A8C
134#define BLSP2_UART3_APPS_CMD_RCGR 0x0ACC
135#define BLSP2_QUP4_SPI_APPS_CMD_RCGR 0x0B0C
136#define BLSP2_UART4_APPS_CMD_RCGR 0x0B4C
137#define BLSP2_QUP5_SPI_APPS_CMD_RCGR 0x0B8C
138#define BLSP2_UART5_APPS_CMD_RCGR 0x0BCC
139#define BLSP2_QUP6_SPI_APPS_CMD_RCGR 0x0C0C
140#define BLSP2_UART6_APPS_CMD_RCGR 0x0C4C
141#define PDM2_CMD_RCGR 0x0CD0
142#define TSIF_REF_CMD_RCGR 0x0D90
143#define CE1_CMD_RCGR 0x1050
144#define CE2_CMD_RCGR 0x1090
145#define GP1_CMD_RCGR 0x1904
146#define GP2_CMD_RCGR 0x1944
147#define GP3_CMD_RCGR 0x1984
148#define LPAIF_SPKR_CMD_RCGR 0xA000
149#define LPAIF_PRI_CMD_RCGR 0xB000
150#define LPAIF_SEC_CMD_RCGR 0xC000
151#define LPAIF_TER_CMD_RCGR 0xD000
152#define LPAIF_QUAD_CMD_RCGR 0xE000
153#define LPAIF_PCM0_CMD_RCGR 0xF000
154#define LPAIF_PCM1_CMD_RCGR 0x10000
155#define RESAMPLER_CMD_RCGR 0x11000
156#define SLIMBUS_CMD_RCGR 0x12000
157#define LPAIF_PCMOE_CMD_RCGR 0x13000
158#define AHBFABRIC_CMD_RCGR 0x18000
159#define VCODEC0_CMD_RCGR 0x1000
160#define PCLK0_CMD_RCGR 0x2000
161#define PCLK1_CMD_RCGR 0x2020
162#define MDP_CMD_RCGR 0x2040
163#define EXTPCLK_CMD_RCGR 0x2060
164#define VSYNC_CMD_RCGR 0x2080
165#define EDPPIXEL_CMD_RCGR 0x20A0
166#define EDPLINK_CMD_RCGR 0x20C0
167#define EDPAUX_CMD_RCGR 0x20E0
168#define HDMI_CMD_RCGR 0x2100
169#define BYTE0_CMD_RCGR 0x2120
170#define BYTE1_CMD_RCGR 0x2140
171#define ESC0_CMD_RCGR 0x2160
172#define ESC1_CMD_RCGR 0x2180
173#define CSI0PHYTIMER_CMD_RCGR 0x3000
174#define CSI1PHYTIMER_CMD_RCGR 0x3030
175#define CSI2PHYTIMER_CMD_RCGR 0x3060
176#define CSI0_CMD_RCGR 0x3090
177#define CSI1_CMD_RCGR 0x3100
178#define CSI2_CMD_RCGR 0x3160
179#define CSI3_CMD_RCGR 0x31C0
180#define CCI_CMD_RCGR 0x3300
181#define MCLK0_CMD_RCGR 0x3360
182#define MCLK1_CMD_RCGR 0x3390
183#define MCLK2_CMD_RCGR 0x33C0
184#define MCLK3_CMD_RCGR 0x33F0
185#define MMSS_GP0_CMD_RCGR 0x3420
186#define MMSS_GP1_CMD_RCGR 0x3450
187#define JPEG0_CMD_RCGR 0x3500
188#define JPEG1_CMD_RCGR 0x3520
189#define JPEG2_CMD_RCGR 0x3540
190#define VFE0_CMD_RCGR 0x3600
191#define VFE1_CMD_RCGR 0x3620
192#define CPP_CMD_RCGR 0x3640
193#define GFX3D_CMD_RCGR 0x4000
194#define RBCPR_CMD_RCGR 0x4060
195#define AHB_CMD_RCGR 0x5000
196#define AXI_CMD_RCGR 0x5040
197#define OCMEMNOC_CMD_RCGR 0x5090
198
199#define MMSS_BCR 0x0240
200#define USB_30_BCR 0x03C0
201#define USB3_PHY_BCR 0x03FC
202#define USB_HS_HSIC_BCR 0x0400
203#define USB_HS_BCR 0x0480
204#define SDCC1_BCR 0x04C0
205#define SDCC2_BCR 0x0500
206#define SDCC3_BCR 0x0540
207#define SDCC4_BCR 0x0580
208#define BLSP1_BCR 0x05C0
209#define BLSP1_QUP1_BCR 0x0640
210#define BLSP1_UART1_BCR 0x0680
211#define BLSP1_QUP2_BCR 0x06C0
212#define BLSP1_UART2_BCR 0x0700
213#define BLSP1_QUP3_BCR 0x0740
214#define BLSP1_UART3_BCR 0x0780
215#define BLSP1_QUP4_BCR 0x07C0
216#define BLSP1_UART4_BCR 0x0800
217#define BLSP1_QUP5_BCR 0x0840
218#define BLSP1_UART5_BCR 0x0880
219#define BLSP1_QUP6_BCR 0x08C0
220#define BLSP1_UART6_BCR 0x0900
221#define BLSP2_BCR 0x0940
222#define BLSP2_QUP1_BCR 0x0980
223#define BLSP2_UART1_BCR 0x09C0
224#define BLSP2_QUP2_BCR 0x0A00
225#define BLSP2_UART2_BCR 0x0A40
226#define BLSP2_QUP3_BCR 0x0A80
227#define BLSP2_UART3_BCR 0x0AC0
228#define BLSP2_QUP4_BCR 0x0B00
229#define BLSP2_UART4_BCR 0x0B40
230#define BLSP2_QUP5_BCR 0x0B80
231#define BLSP2_UART5_BCR 0x0BC0
232#define BLSP2_QUP6_BCR 0x0C00
233#define BLSP2_UART6_BCR 0x0C40
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700234#define BOOT_ROM_BCR 0x0E00
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700235#define PDM_BCR 0x0CC0
236#define PRNG_BCR 0x0D00
237#define BAM_DMA_BCR 0x0D40
238#define TSIF_BCR 0x0D80
239#define CE1_BCR 0x1040
240#define CE2_BCR 0x1080
241#define AUDIO_CORE_BCR 0x4000
242#define VENUS0_BCR 0x1020
243#define MDSS_BCR 0x2300
244#define CAMSS_PHY0_BCR 0x3020
245#define CAMSS_PHY1_BCR 0x3050
246#define CAMSS_PHY2_BCR 0x3080
247#define CAMSS_CSI0_BCR 0x30B0
248#define CAMSS_CSI0PHY_BCR 0x30C0
249#define CAMSS_CSI0RDI_BCR 0x30D0
250#define CAMSS_CSI0PIX_BCR 0x30E0
251#define CAMSS_CSI1_BCR 0x3120
252#define CAMSS_CSI1PHY_BCR 0x3130
253#define CAMSS_CSI1RDI_BCR 0x3140
254#define CAMSS_CSI1PIX_BCR 0x3150
255#define CAMSS_CSI2_BCR 0x3180
256#define CAMSS_CSI2PHY_BCR 0x3190
257#define CAMSS_CSI2RDI_BCR 0x31A0
258#define CAMSS_CSI2PIX_BCR 0x31B0
259#define CAMSS_CSI3_BCR 0x31E0
260#define CAMSS_CSI3PHY_BCR 0x31F0
261#define CAMSS_CSI3RDI_BCR 0x3200
262#define CAMSS_CSI3PIX_BCR 0x3210
263#define CAMSS_ISPIF_BCR 0x3220
264#define CAMSS_CCI_BCR 0x3340
265#define CAMSS_MCLK0_BCR 0x3380
266#define CAMSS_MCLK1_BCR 0x33B0
267#define CAMSS_MCLK2_BCR 0x33E0
268#define CAMSS_MCLK3_BCR 0x3410
269#define CAMSS_GP0_BCR 0x3440
270#define CAMSS_GP1_BCR 0x3470
271#define CAMSS_TOP_BCR 0x3480
272#define CAMSS_MICRO_BCR 0x3490
273#define CAMSS_JPEG_BCR 0x35A0
274#define CAMSS_VFE_BCR 0x36A0
275#define CAMSS_CSI_VFE0_BCR 0x3700
276#define CAMSS_CSI_VFE1_BCR 0x3710
277#define OCMEMNOC_BCR 0x50B0
278#define MMSSNOCAHB_BCR 0x5020
279#define MMSSNOCAXI_BCR 0x5060
280#define OXILI_GFX3D_CBCR 0x4028
281#define OXILICX_AHB_CBCR 0x403C
282#define OXILICX_AXI_CBCR 0x4038
283#define OXILI_BCR 0x4020
284#define OXILICX_BCR 0x4030
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700285#define LPASS_Q6SS_BCR 0x6000
286#define MSS_Q6SS_BCR 0x1068
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700287
288#define OCMEM_SYS_NOC_AXI_CBCR 0x0244
289#define OCMEM_NOC_CFG_AHB_CBCR 0x0248
290#define MMSS_NOC_CFG_AHB_CBCR 0x024C
291
292#define USB30_MASTER_CBCR 0x03C8
293#define USB30_MOCK_UTMI_CBCR 0x03D0
294#define USB_HSIC_AHB_CBCR 0x0408
295#define USB_HSIC_SYSTEM_CBCR 0x040C
296#define USB_HSIC_CBCR 0x0410
297#define USB_HSIC_IO_CAL_CBCR 0x0414
298#define USB_HS_SYSTEM_CBCR 0x0484
299#define USB_HS_AHB_CBCR 0x0488
300#define SDCC1_APPS_CBCR 0x04C4
301#define SDCC1_AHB_CBCR 0x04C8
302#define SDCC2_APPS_CBCR 0x0504
303#define SDCC2_AHB_CBCR 0x0508
304#define SDCC3_APPS_CBCR 0x0544
305#define SDCC3_AHB_CBCR 0x0548
306#define SDCC4_APPS_CBCR 0x0584
307#define SDCC4_AHB_CBCR 0x0588
308#define BLSP1_AHB_CBCR 0x05C4
309#define BLSP1_QUP1_SPI_APPS_CBCR 0x0644
310#define BLSP1_QUP1_I2C_APPS_CBCR 0x0648
311#define BLSP1_UART1_APPS_CBCR 0x0684
312#define BLSP1_UART1_SIM_CBCR 0x0688
313#define BLSP1_QUP2_SPI_APPS_CBCR 0x06C4
314#define BLSP1_QUP2_I2C_APPS_CBCR 0x06C8
315#define BLSP1_UART2_APPS_CBCR 0x0704
316#define BLSP1_UART2_SIM_CBCR 0x0708
317#define BLSP1_QUP3_SPI_APPS_CBCR 0x0744
318#define BLSP1_QUP3_I2C_APPS_CBCR 0x0748
319#define BLSP1_UART3_APPS_CBCR 0x0784
320#define BLSP1_UART3_SIM_CBCR 0x0788
321#define BLSP1_QUP4_SPI_APPS_CBCR 0x07C4
322#define BLSP1_QUP4_I2C_APPS_CBCR 0x07C8
323#define BLSP1_UART4_APPS_CBCR 0x0804
324#define BLSP1_UART4_SIM_CBCR 0x0808
325#define BLSP1_QUP5_SPI_APPS_CBCR 0x0844
326#define BLSP1_QUP5_I2C_APPS_CBCR 0x0848
327#define BLSP1_UART5_APPS_CBCR 0x0884
328#define BLSP1_UART5_SIM_CBCR 0x0888
329#define BLSP1_QUP6_SPI_APPS_CBCR 0x08C4
330#define BLSP1_QUP6_I2C_APPS_CBCR 0x08C8
331#define BLSP1_UART6_APPS_CBCR 0x0904
332#define BLSP1_UART6_SIM_CBCR 0x0908
333#define BLSP2_AHB_CBCR 0x0944
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700334#define BOOT_ROM_AHB_CBCR 0x0E04
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700335#define BLSP2_QUP1_SPI_APPS_CBCR 0x0984
336#define BLSP2_QUP1_I2C_APPS_CBCR 0x0988
337#define BLSP2_UART1_APPS_CBCR 0x09C4
338#define BLSP2_UART1_SIM_CBCR 0x09C8
339#define BLSP2_QUP2_SPI_APPS_CBCR 0x0A04
340#define BLSP2_QUP2_I2C_APPS_CBCR 0x0A08
341#define BLSP2_UART2_APPS_CBCR 0x0A44
342#define BLSP2_UART2_SIM_CBCR 0x0A48
343#define BLSP2_QUP3_SPI_APPS_CBCR 0x0A84
344#define BLSP2_QUP3_I2C_APPS_CBCR 0x0A88
345#define BLSP2_UART3_APPS_CBCR 0x0AC4
346#define BLSP2_UART3_SIM_CBCR 0x0AC8
347#define BLSP2_QUP4_SPI_APPS_CBCR 0x0B04
348#define BLSP2_QUP4_I2C_APPS_CBCR 0x0B08
349#define BLSP2_UART4_APPS_CBCR 0x0B44
350#define BLSP2_UART4_SIM_CBCR 0x0B48
351#define BLSP2_QUP5_SPI_APPS_CBCR 0x0B84
352#define BLSP2_QUP5_I2C_APPS_CBCR 0x0B88
353#define BLSP2_UART5_APPS_CBCR 0x0BC4
354#define BLSP2_UART5_SIM_CBCR 0x0BC8
355#define BLSP2_QUP6_SPI_APPS_CBCR 0x0C04
356#define BLSP2_QUP6_I2C_APPS_CBCR 0x0C08
357#define BLSP2_UART6_APPS_CBCR 0x0C44
358#define BLSP2_UART6_SIM_CBCR 0x0C48
359#define PDM_AHB_CBCR 0x0CC4
360#define PDM_XO4_CBCR 0x0CC8
361#define PDM2_CBCR 0x0CCC
362#define PRNG_AHB_CBCR 0x0D04
363#define BAM_DMA_AHB_CBCR 0x0D44
364#define TSIF_AHB_CBCR 0x0D84
365#define TSIF_REF_CBCR 0x0D88
366#define MSG_RAM_AHB_CBCR 0x0E44
367#define CE1_CBCR 0x1044
368#define CE1_AXI_CBCR 0x1048
369#define CE1_AHB_CBCR 0x104C
370#define CE2_CBCR 0x1084
371#define CE2_AXI_CBCR 0x1088
372#define CE2_AHB_CBCR 0x108C
373#define GCC_AHB_CBCR 0x10C0
374#define GP1_CBCR 0x1900
375#define GP2_CBCR 0x1940
376#define GP3_CBCR 0x1980
377#define AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR 0xA014
378#define AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR 0xA018
379#define AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR 0xA01C
380#define AUDIO_CORE_LPAIF_PRI_OSR_CBCR 0xB014
381#define AUDIO_CORE_LPAIF_PRI_IBIT_CBCR 0xB018
382#define AUDIO_CORE_LPAIF_PRI_EBIT_CBCR 0xB01C
383#define AUDIO_CORE_LPAIF_SEC_OSR_CBCR 0xC014
384#define AUDIO_CORE_LPAIF_SEC_IBIT_CBCR 0xC018
385#define AUDIO_CORE_LPAIF_SEC_EBIT_CBCR 0xC01C
386#define AUDIO_CORE_LPAIF_TER_OSR_CBCR 0xD014
387#define AUDIO_CORE_LPAIF_TER_IBIT_CBCR 0xD018
388#define AUDIO_CORE_LPAIF_TER_EBIT_CBCR 0xD01C
389#define AUDIO_CORE_LPAIF_QUAD_OSR_CBCR 0xE014
390#define AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR 0xE018
391#define AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR 0xE01C
392#define AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR 0xF014
393#define AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR 0xF018
394#define AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR 0x10014
395#define AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR 0x10018
396#define AUDIO_CORE_RESAMPLER_CORE_CBCR 0x11014
397#define AUDIO_CORE_RESAMPLER_LFABIF_CBCR 0x11018
398#define AUDIO_CORE_SLIMBUS_CORE_CBCR 0x12014
399#define AUDIO_CORE_SLIMBUS_LFABIF_CBCR 0x12018
400#define AUDIO_CORE_LPAIF_PCM_DATA_OE_CBCR 0x13014
401#define VENUS0_VCODEC0_CBCR 0x1028
402#define VENUS0_AHB_CBCR 0x1030
403#define VENUS0_AXI_CBCR 0x1034
404#define VENUS0_OCMEMNOC_CBCR 0x1038
405#define MDSS_AHB_CBCR 0x2308
406#define MDSS_HDMI_AHB_CBCR 0x230C
407#define MDSS_AXI_CBCR 0x2310
408#define MDSS_PCLK0_CBCR 0x2314
409#define MDSS_PCLK1_CBCR 0x2318
410#define MDSS_MDP_CBCR 0x231C
411#define MDSS_MDP_LUT_CBCR 0x2320
412#define MDSS_EXTPCLK_CBCR 0x2324
413#define MDSS_VSYNC_CBCR 0x2328
414#define MDSS_EDPPIXEL_CBCR 0x232C
415#define MDSS_EDPLINK_CBCR 0x2330
416#define MDSS_EDPAUX_CBCR 0x2334
417#define MDSS_HDMI_CBCR 0x2338
418#define MDSS_BYTE0_CBCR 0x233C
419#define MDSS_BYTE1_CBCR 0x2340
420#define MDSS_ESC0_CBCR 0x2344
421#define MDSS_ESC1_CBCR 0x2348
422#define CAMSS_PHY0_CSI0PHYTIMER_CBCR 0x3024
423#define CAMSS_PHY1_CSI1PHYTIMER_CBCR 0x3054
424#define CAMSS_PHY2_CSI2PHYTIMER_CBCR 0x3084
425#define CAMSS_CSI0_CBCR 0x30B4
426#define CAMSS_CSI0_AHB_CBCR 0x30BC
427#define CAMSS_CSI0PHY_CBCR 0x30C4
428#define CAMSS_CSI0RDI_CBCR 0x30D4
429#define CAMSS_CSI0PIX_CBCR 0x30E4
430#define CAMSS_CSI1_CBCR 0x3124
431#define CAMSS_CSI1_AHB_CBCR 0x3128
432#define CAMSS_CSI1PHY_CBCR 0x3134
433#define CAMSS_CSI1RDI_CBCR 0x3144
434#define CAMSS_CSI1PIX_CBCR 0x3154
435#define CAMSS_CSI2_CBCR 0x3184
436#define CAMSS_CSI2_AHB_CBCR 0x3188
437#define CAMSS_CSI2PHY_CBCR 0x3194
438#define CAMSS_CSI2RDI_CBCR 0x31A4
439#define CAMSS_CSI2PIX_CBCR 0x31B4
440#define CAMSS_CSI3_CBCR 0x31E4
441#define CAMSS_CSI3_AHB_CBCR 0x31E8
442#define CAMSS_CSI3PHY_CBCR 0x31F4
443#define CAMSS_CSI3RDI_CBCR 0x3204
444#define CAMSS_CSI3PIX_CBCR 0x3214
445#define CAMSS_ISPIF_AHB_CBCR 0x3224
446#define CAMSS_CCI_CCI_CBCR 0x3344
447#define CAMSS_CCI_CCI_AHB_CBCR 0x3348
448#define CAMSS_MCLK0_CBCR 0x3384
449#define CAMSS_MCLK1_CBCR 0x33B4
450#define CAMSS_MCLK2_CBCR 0x33E4
451#define CAMSS_MCLK3_CBCR 0x3414
452#define CAMSS_GP0_CBCR 0x3444
453#define CAMSS_GP1_CBCR 0x3474
454#define CAMSS_TOP_AHB_CBCR 0x3484
455#define CAMSS_MICRO_AHB_CBCR 0x3494
456#define CAMSS_JPEG_JPEG0_CBCR 0x35A8
457#define CAMSS_JPEG_JPEG1_CBCR 0x35AC
458#define CAMSS_JPEG_JPEG2_CBCR 0x35B0
459#define CAMSS_JPEG_JPEG_AHB_CBCR 0x35B4
460#define CAMSS_JPEG_JPEG_AXI_CBCR 0x35B8
461#define CAMSS_JPEG_JPEG_OCMEMNOC_CBCR 0x35BC
462#define CAMSS_VFE_VFE0_CBCR 0x36A8
463#define CAMSS_VFE_VFE1_CBCR 0x36AC
464#define CAMSS_VFE_CPP_CBCR 0x36B0
465#define CAMSS_VFE_CPP_AHB_CBCR 0x36B4
466#define CAMSS_VFE_VFE_AHB_CBCR 0x36B8
467#define CAMSS_VFE_VFE_AXI_CBCR 0x36BC
468#define CAMSS_VFE_VFE_OCMEMNOC_CBCR 0x36C0
469#define CAMSS_CSI_VFE0_CBCR 0x3704
470#define CAMSS_CSI_VFE1_CBCR 0x3714
471#define MMSS_MMSSNOC_AXI_CBCR 0x506C
472#define MMSS_MMSSNOC_AHB_CBCR 0x5024
473#define MMSS_MMSSNOC_BTO_AHB_CBCR 0x5028
474#define MMSS_MISC_AHB_CBCR 0x502C
475#define MMSS_S0_AXI_CBCR 0x5064
476#define OCMEMNOC_CBCR 0x50B4
Vikram Mulukutlaa967db42012-05-10 16:20:40 -0700477#define LPASS_Q6SS_AHB_LFABIF_CBCR 0x22000
478#define LPASS_Q6SS_XO_CBCR 0x26000
479#define MSS_XO_Q6_CBCR 0x108C
480#define MSS_BUS_Q6_CBCR 0x10A4
481#define MSS_CFG_AHB_CBCR 0x0280
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700482
483#define APCS_CLOCK_BRANCH_ENA_VOTE 0x1484
484#define APCS_CLOCK_SLEEP_ENA_VOTE 0x1488
485
486/* Mux source select values */
487#define cxo_source_val 0
488#define gpll0_source_val 1
489#define gpll1_source_val 2
490#define gnd_source_val 5
491#define mmpll0_mm_source_val 1
492#define mmpll1_mm_source_val 2
493#define mmpll3_mm_source_val 3
494#define gpll0_mm_source_val 5
495#define cxo_mm_source_val 0
496#define mm_gnd_source_val 6
497#define gpll1_hsic_source_val 4
498#define cxo_lpass_source_val 0
499#define lpapll0_lpass_source_val 1
500#define gpll0_lpass_source_val 5
501#define edppll_270_mm_source_val 4
502#define edppll_350_mm_source_val 4
503#define dsipll_750_mm_source_val 1
504#define dsipll_250_mm_source_val 2
505#define hdmipll_297_mm_source_val 3
506
507#define F(f, s, div, m, n) \
508 { \
509 .freq_hz = (f), \
510 .src_clk = &s##_clk_src.c, \
511 .m_val = (m), \
512 .n_val = ~((n)-(m)), \
513 .d_val = ~(n),\
514 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
515 | BVAL(10, 8, s##_source_val), \
516 }
517
518#define F_MM(f, s, div, m, n) \
519 { \
520 .freq_hz = (f), \
521 .src_clk = &s##_clk_src.c, \
522 .m_val = (m), \
523 .n_val = ~((n)-(m)), \
524 .d_val = ~(n),\
525 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
526 | BVAL(10, 8, s##_mm_source_val), \
527 }
528
529#define F_MDSS(f, s, div, m, n) \
530 { \
531 .freq_hz = (f), \
532 .m_val = (m), \
533 .n_val = ~((n)-(m)), \
534 .d_val = ~(n),\
535 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
536 | BVAL(10, 8, s##_mm_source_val), \
537 }
538
539#define F_HSIC(f, s, div, m, n) \
540 { \
541 .freq_hz = (f), \
542 .src_clk = &s##_clk_src.c, \
543 .m_val = (m), \
544 .n_val = ~((n)-(m)), \
545 .d_val = ~(n),\
546 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
547 | BVAL(10, 8, s##_hsic_source_val), \
548 }
549
550#define F_LPASS(f, s, div, m, n) \
551 { \
552 .freq_hz = (f), \
553 .src_clk = &s##_clk_src.c, \
554 .m_val = (m), \
555 .n_val = ~((n)-(m)), \
556 .d_val = ~(n),\
557 .div_src_val = BVAL(4, 0, (int)(2*(div) - 1)) \
558 | BVAL(10, 8, s##_lpass_source_val), \
559 }
560
561#define VDD_DIG_FMAX_MAP1(l1, f1) \
562 .vdd_class = &vdd_dig, \
563 .fmax[VDD_DIG_##l1] = (f1)
564#define VDD_DIG_FMAX_MAP2(l1, f1, l2, f2) \
565 .vdd_class = &vdd_dig, \
566 .fmax[VDD_DIG_##l1] = (f1), \
567 .fmax[VDD_DIG_##l2] = (f2)
568#define VDD_DIG_FMAX_MAP3(l1, f1, l2, f2, l3, f3) \
569 .vdd_class = &vdd_dig, \
570 .fmax[VDD_DIG_##l1] = (f1), \
571 .fmax[VDD_DIG_##l2] = (f2), \
572 .fmax[VDD_DIG_##l3] = (f3)
573
574enum vdd_dig_levels {
575 VDD_DIG_NONE,
576 VDD_DIG_LOW,
577 VDD_DIG_NOMINAL,
578 VDD_DIG_HIGH
579};
580
581static int set_vdd_dig(struct clk_vdd_class *vdd_class, int level)
582{
583 /* TODO: Actually call into regulator APIs to set VDD_DIG here. */
584 return 0;
585}
586
587static DEFINE_VDD_CLASS(vdd_dig, set_vdd_dig);
588
589static int cxo_clk_enable(struct clk *clk)
590{
591 /* TODO: Remove from here once the rpm xo clock is ready. */
592 return 0;
593}
594
595static void cxo_clk_disable(struct clk *clk)
596{
597 /* TODO: Remove from here once the rpm xo clock is ready. */
598 return;
599}
600
Matt Wagantallc4388bf2012-05-14 23:03:00 -0700601static enum handoff cxo_clk_handoff(struct clk *clk)
602{
603 /* TODO: Remove from here once the rpm xo clock is ready. */
604 return HANDOFF_ENABLED_CLK;
605}
606
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700607static struct clk_ops clk_ops_cxo = {
608 .enable = cxo_clk_enable,
609 .disable = cxo_clk_disable,
Matt Wagantallc4388bf2012-05-14 23:03:00 -0700610 .handoff = cxo_clk_handoff,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -0700611};
612
613static struct fixed_clk cxo_clk_src = {
614 .c = {
615 .rate = 19200000,
616 .dbg_name = "cxo_clk_src",
617 .ops = &clk_ops_cxo,
618 .warned = true,
619 CLK_INIT(cxo_clk_src.c),
620 },
621};
622
623static struct pll_vote_clk gpll0_clk_src = {
624 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
625 .en_mask = BIT(0),
626 .status_reg = (void __iomem *)GPLL0_STATUS_REG,
627 .status_mask = BIT(17),
628 .parent = &cxo_clk_src.c,
629 .base = &virt_bases[GCC_BASE],
630 .c = {
631 .rate = 600000000,
632 .dbg_name = "gpll0_clk_src",
633 .ops = &clk_ops_pll_vote,
634 .warned = true,
635 CLK_INIT(gpll0_clk_src.c),
636 },
637};
638
639static struct pll_vote_clk gpll1_clk_src = {
640 .en_reg = (void __iomem *)APCS_GPLL_ENA_VOTE_REG,
641 .en_mask = BIT(1),
642 .status_reg = (void __iomem *)GPLL1_STATUS_REG,
643 .status_mask = BIT(17),
644 .parent = &cxo_clk_src.c,
645 .base = &virt_bases[GCC_BASE],
646 .c = {
647 .rate = 480000000,
648 .dbg_name = "gpll1_clk_src",
649 .ops = &clk_ops_pll_vote,
650 .warned = true,
651 CLK_INIT(gpll1_clk_src.c),
652 },
653};
654
655static struct pll_vote_clk lpapll0_clk_src = {
656 .en_reg = (void __iomem *)LPASS_LPA_PLL_VOTE_APPS_REG,
657 .en_mask = BIT(0),
658 .status_reg = (void __iomem *)LPAPLL_STATUS_REG,
659 .status_mask = BIT(17),
660 .parent = &cxo_clk_src.c,
661 .base = &virt_bases[LPASS_BASE],
662 .c = {
663 .rate = 491520000,
664 .dbg_name = "lpapll0_clk_src",
665 .ops = &clk_ops_pll_vote,
666 .warned = true,
667 CLK_INIT(lpapll0_clk_src.c),
668 },
669};
670
671static struct pll_vote_clk mmpll0_clk_src = {
672 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
673 .en_mask = BIT(0),
674 .status_reg = (void __iomem *)MMPLL0_STATUS_REG,
675 .status_mask = BIT(17),
676 .parent = &cxo_clk_src.c,
677 .base = &virt_bases[MMSS_BASE],
678 .c = {
679 .dbg_name = "mmpll0_clk_src",
680 .rate = 800000000,
681 .ops = &clk_ops_pll_vote,
682 .warned = true,
683 CLK_INIT(mmpll0_clk_src.c),
684 },
685};
686
687static struct pll_vote_clk mmpll1_clk_src = {
688 .en_reg = (void __iomem *)MMSS_PLL_VOTE_APCS_REG,
689 .en_mask = BIT(1),
690 .status_reg = (void __iomem *)MMPLL1_STATUS_REG,
691 .status_mask = BIT(17),
692 .parent = &cxo_clk_src.c,
693 .base = &virt_bases[MMSS_BASE],
694 .c = {
695 .dbg_name = "mmpll1_clk_src",
696 .rate = 1000000000,
697 .ops = &clk_ops_pll_vote,
698 .warned = true,
699 CLK_INIT(mmpll1_clk_src.c),
700 },
701};
702
703static struct pll_clk mmpll3_clk_src = {
704 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
705 .status_reg = (void __iomem *)MMPLL3_STATUS_REG,
706 .parent = &cxo_clk_src.c,
707 .base = &virt_bases[MMSS_BASE],
708 .c = {
709 .dbg_name = "mmpll3_clk_src",
710 .rate = 1000000000,
711 .ops = &clk_ops_local_pll,
712 CLK_INIT(mmpll3_clk_src.c),
713 },
714};
715
716static struct clk_freq_tbl ftbl_gcc_usb30_master_clk[] = {
717 F(125000000, gpll0, 1, 5, 24),
718 F_END
719};
720
721static struct rcg_clk usb30_master_clk_src = {
722 .cmd_rcgr_reg = USB30_MASTER_CMD_RCGR,
723 .set_rate = set_rate_mnd,
724 .freq_tbl = ftbl_gcc_usb30_master_clk,
725 .current_freq = &rcg_dummy_freq,
726 .base = &virt_bases[GCC_BASE],
727 .c = {
728 .dbg_name = "usb30_master_clk_src",
729 .ops = &clk_ops_rcg_mnd,
730 VDD_DIG_FMAX_MAP1(NOMINAL, 125000000),
731 CLK_INIT(usb30_master_clk_src.c),
732 },
733};
734
735static struct clk_freq_tbl ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk[] = {
736 F( 960000, cxo, 10, 1, 2),
737 F( 4800000, cxo, 4, 0, 0),
738 F( 9600000, cxo, 2, 0, 0),
739 F(15000000, gpll0, 10, 1, 4),
740 F(19200000, cxo, 1, 0, 0),
741 F(25000000, gpll0, 12, 1, 2),
742 F(50000000, gpll0, 12, 0, 0),
743 F_END
744};
745
746static struct rcg_clk blsp1_qup1_spi_apps_clk_src = {
747 .cmd_rcgr_reg = BLSP1_QUP1_SPI_APPS_CMD_RCGR,
748 .set_rate = set_rate_mnd,
749 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
750 .current_freq = &rcg_dummy_freq,
751 .base = &virt_bases[GCC_BASE],
752 .c = {
753 .dbg_name = "blsp1_qup1_spi_apps_clk_src",
754 .ops = &clk_ops_rcg_mnd,
755 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
756 CLK_INIT(blsp1_qup1_spi_apps_clk_src.c),
757 },
758};
759
760static struct rcg_clk blsp1_qup2_spi_apps_clk_src = {
761 .cmd_rcgr_reg = BLSP1_QUP2_SPI_APPS_CMD_RCGR,
762 .set_rate = set_rate_mnd,
763 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
764 .current_freq = &rcg_dummy_freq,
765 .base = &virt_bases[GCC_BASE],
766 .c = {
767 .dbg_name = "blsp1_qup2_spi_apps_clk_src",
768 .ops = &clk_ops_rcg_mnd,
769 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
770 CLK_INIT(blsp1_qup2_spi_apps_clk_src.c),
771 },
772};
773
774static struct rcg_clk blsp1_qup3_spi_apps_clk_src = {
775 .cmd_rcgr_reg = BLSP1_QUP3_SPI_APPS_CMD_RCGR,
776 .set_rate = set_rate_mnd,
777 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
778 .current_freq = &rcg_dummy_freq,
779 .base = &virt_bases[GCC_BASE],
780 .c = {
781 .dbg_name = "blsp1_qup3_spi_apps_clk_src",
782 .ops = &clk_ops_rcg_mnd,
783 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
784 CLK_INIT(blsp1_qup3_spi_apps_clk_src.c),
785 },
786};
787
788static struct rcg_clk blsp1_qup4_spi_apps_clk_src = {
789 .cmd_rcgr_reg = BLSP1_QUP4_SPI_APPS_CMD_RCGR,
790 .set_rate = set_rate_mnd,
791 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
792 .current_freq = &rcg_dummy_freq,
793 .base = &virt_bases[GCC_BASE],
794 .c = {
795 .dbg_name = "blsp1_qup4_spi_apps_clk_src",
796 .ops = &clk_ops_rcg_mnd,
797 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
798 CLK_INIT(blsp1_qup4_spi_apps_clk_src.c),
799 },
800};
801
802static struct rcg_clk blsp1_qup5_spi_apps_clk_src = {
803 .cmd_rcgr_reg = BLSP1_QUP5_SPI_APPS_CMD_RCGR,
804 .set_rate = set_rate_mnd,
805 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
806 .current_freq = &rcg_dummy_freq,
807 .base = &virt_bases[GCC_BASE],
808 .c = {
809 .dbg_name = "blsp1_qup5_spi_apps_clk_src",
810 .ops = &clk_ops_rcg_mnd,
811 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
812 CLK_INIT(blsp1_qup5_spi_apps_clk_src.c),
813 },
814};
815
816static struct rcg_clk blsp1_qup6_spi_apps_clk_src = {
817 .cmd_rcgr_reg = BLSP1_QUP6_SPI_APPS_CMD_RCGR,
818 .set_rate = set_rate_mnd,
819 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
820 .current_freq = &rcg_dummy_freq,
821 .base = &virt_bases[GCC_BASE],
822 .c = {
823 .dbg_name = "blsp1_qup6_spi_apps_clk_src",
824 .ops = &clk_ops_rcg_mnd,
825 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
826 CLK_INIT(blsp1_qup6_spi_apps_clk_src.c),
827 },
828};
829
830static struct clk_freq_tbl ftbl_gcc_blsp1_2_uart1_6_apps_clk[] = {
831 F( 3686400, gpll0, 1, 96, 15625),
832 F( 7372800, gpll0, 1, 192, 15625),
833 F(14745600, gpll0, 1, 384, 15625),
834 F(16000000, gpll0, 5, 2, 15),
835 F(19200000, cxo, 1, 0, 0),
836 F(24000000, gpll0, 5, 1, 5),
837 F(32000000, gpll0, 1, 4, 75),
838 F(40000000, gpll0, 15, 0, 0),
839 F(46400000, gpll0, 1, 29, 375),
840 F(48000000, gpll0, 12.5, 0, 0),
841 F(51200000, gpll0, 1, 32, 375),
842 F(56000000, gpll0, 1, 7, 75),
843 F(58982400, gpll0, 1, 1536, 15625),
844 F(60000000, gpll0, 10, 0, 0),
845 F_END
846};
847
848static struct rcg_clk blsp1_uart1_apps_clk_src = {
849 .cmd_rcgr_reg = BLSP1_UART1_APPS_CMD_RCGR,
850 .set_rate = set_rate_mnd,
851 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
852 .current_freq = &rcg_dummy_freq,
853 .base = &virt_bases[GCC_BASE],
854 .c = {
855 .dbg_name = "blsp1_uart1_apps_clk_src",
856 .ops = &clk_ops_rcg_mnd,
857 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
858 CLK_INIT(blsp1_uart1_apps_clk_src.c),
859 },
860};
861
862static struct rcg_clk blsp1_uart2_apps_clk_src = {
863 .cmd_rcgr_reg = BLSP1_UART2_APPS_CMD_RCGR,
864 .set_rate = set_rate_mnd,
865 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
866 .current_freq = &rcg_dummy_freq,
867 .base = &virt_bases[GCC_BASE],
868 .c = {
869 .dbg_name = "blsp1_uart2_apps_clk_src",
870 .ops = &clk_ops_rcg_mnd,
871 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
872 CLK_INIT(blsp1_uart2_apps_clk_src.c),
873 },
874};
875
876static struct rcg_clk blsp1_uart3_apps_clk_src = {
877 .cmd_rcgr_reg = BLSP1_UART3_APPS_CMD_RCGR,
878 .set_rate = set_rate_mnd,
879 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
880 .current_freq = &rcg_dummy_freq,
881 .base = &virt_bases[GCC_BASE],
882 .c = {
883 .dbg_name = "blsp1_uart3_apps_clk_src",
884 .ops = &clk_ops_rcg_mnd,
885 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
886 CLK_INIT(blsp1_uart3_apps_clk_src.c),
887 },
888};
889
890static struct rcg_clk blsp1_uart4_apps_clk_src = {
891 .cmd_rcgr_reg = BLSP1_UART4_APPS_CMD_RCGR,
892 .set_rate = set_rate_mnd,
893 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
894 .current_freq = &rcg_dummy_freq,
895 .base = &virt_bases[GCC_BASE],
896 .c = {
897 .dbg_name = "blsp1_uart4_apps_clk_src",
898 .ops = &clk_ops_rcg_mnd,
899 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
900 CLK_INIT(blsp1_uart4_apps_clk_src.c),
901 },
902};
903
904static struct rcg_clk blsp1_uart5_apps_clk_src = {
905 .cmd_rcgr_reg = BLSP1_UART5_APPS_CMD_RCGR,
906 .set_rate = set_rate_mnd,
907 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
908 .current_freq = &rcg_dummy_freq,
909 .base = &virt_bases[GCC_BASE],
910 .c = {
911 .dbg_name = "blsp1_uart5_apps_clk_src",
912 .ops = &clk_ops_rcg_mnd,
913 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
914 CLK_INIT(blsp1_uart5_apps_clk_src.c),
915 },
916};
917
918static struct rcg_clk blsp1_uart6_apps_clk_src = {
919 .cmd_rcgr_reg = BLSP1_UART6_APPS_CMD_RCGR,
920 .set_rate = set_rate_mnd,
921 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
922 .current_freq = &rcg_dummy_freq,
923 .base = &virt_bases[GCC_BASE],
924 .c = {
925 .dbg_name = "blsp1_uart6_apps_clk_src",
926 .ops = &clk_ops_rcg_mnd,
927 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
928 CLK_INIT(blsp1_uart6_apps_clk_src.c),
929 },
930};
931
932static struct rcg_clk blsp2_qup1_spi_apps_clk_src = {
933 .cmd_rcgr_reg = BLSP2_QUP1_SPI_APPS_CMD_RCGR,
934 .set_rate = set_rate_mnd,
935 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
936 .current_freq = &rcg_dummy_freq,
937 .base = &virt_bases[GCC_BASE],
938 .c = {
939 .dbg_name = "blsp2_qup1_spi_apps_clk_src",
940 .ops = &clk_ops_rcg_mnd,
941 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
942 CLK_INIT(blsp2_qup1_spi_apps_clk_src.c),
943 },
944};
945
946static struct rcg_clk blsp2_qup2_spi_apps_clk_src = {
947 .cmd_rcgr_reg = BLSP2_QUP2_SPI_APPS_CMD_RCGR,
948 .set_rate = set_rate_mnd,
949 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
950 .current_freq = &rcg_dummy_freq,
951 .base = &virt_bases[GCC_BASE],
952 .c = {
953 .dbg_name = "blsp2_qup2_spi_apps_clk_src",
954 .ops = &clk_ops_rcg_mnd,
955 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
956 CLK_INIT(blsp2_qup2_spi_apps_clk_src.c),
957 },
958};
959
960static struct rcg_clk blsp2_qup3_spi_apps_clk_src = {
961 .cmd_rcgr_reg = BLSP2_QUP3_SPI_APPS_CMD_RCGR,
962 .set_rate = set_rate_mnd,
963 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
964 .current_freq = &rcg_dummy_freq,
965 .base = &virt_bases[GCC_BASE],
966 .c = {
967 .dbg_name = "blsp2_qup3_spi_apps_clk_src",
968 .ops = &clk_ops_rcg_mnd,
969 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
970 CLK_INIT(blsp2_qup3_spi_apps_clk_src.c),
971 },
972};
973
974static struct rcg_clk blsp2_qup4_spi_apps_clk_src = {
975 .cmd_rcgr_reg = BLSP2_QUP4_SPI_APPS_CMD_RCGR,
976 .set_rate = set_rate_mnd,
977 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
978 .current_freq = &rcg_dummy_freq,
979 .base = &virt_bases[GCC_BASE],
980 .c = {
981 .dbg_name = "blsp2_qup4_spi_apps_clk_src",
982 .ops = &clk_ops_rcg_mnd,
983 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
984 CLK_INIT(blsp2_qup4_spi_apps_clk_src.c),
985 },
986};
987
988static struct rcg_clk blsp2_qup5_spi_apps_clk_src = {
989 .cmd_rcgr_reg = BLSP2_QUP5_SPI_APPS_CMD_RCGR,
990 .set_rate = set_rate_mnd,
991 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
992 .current_freq = &rcg_dummy_freq,
993 .base = &virt_bases[GCC_BASE],
994 .c = {
995 .dbg_name = "blsp2_qup5_spi_apps_clk_src",
996 .ops = &clk_ops_rcg_mnd,
997 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
998 CLK_INIT(blsp2_qup5_spi_apps_clk_src.c),
999 },
1000};
1001
1002static struct rcg_clk blsp2_qup6_spi_apps_clk_src = {
1003 .cmd_rcgr_reg = BLSP2_QUP6_SPI_APPS_CMD_RCGR,
1004 .set_rate = set_rate_mnd,
1005 .freq_tbl = ftbl_gcc_blsp1_2_qup1_6_spi_apps_clk,
1006 .current_freq = &rcg_dummy_freq,
1007 .base = &virt_bases[GCC_BASE],
1008 .c = {
1009 .dbg_name = "blsp2_qup6_spi_apps_clk_src",
1010 .ops = &clk_ops_rcg_mnd,
1011 VDD_DIG_FMAX_MAP2(LOW, 25000000, NOMINAL, 50000000),
1012 CLK_INIT(blsp2_qup6_spi_apps_clk_src.c),
1013 },
1014};
1015
1016static struct rcg_clk blsp2_uart1_apps_clk_src = {
1017 .cmd_rcgr_reg = BLSP2_UART1_APPS_CMD_RCGR,
1018 .set_rate = set_rate_mnd,
1019 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1020 .current_freq = &rcg_dummy_freq,
1021 .base = &virt_bases[GCC_BASE],
1022 .c = {
1023 .dbg_name = "blsp2_uart1_apps_clk_src",
1024 .ops = &clk_ops_rcg_mnd,
1025 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1026 CLK_INIT(blsp2_uart1_apps_clk_src.c),
1027 },
1028};
1029
1030static struct rcg_clk blsp2_uart2_apps_clk_src = {
1031 .cmd_rcgr_reg = BLSP2_UART2_APPS_CMD_RCGR,
1032 .set_rate = set_rate_mnd,
1033 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1034 .current_freq = &rcg_dummy_freq,
1035 .base = &virt_bases[GCC_BASE],
1036 .c = {
1037 .dbg_name = "blsp2_uart2_apps_clk_src",
1038 .ops = &clk_ops_rcg_mnd,
1039 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1040 CLK_INIT(blsp2_uart2_apps_clk_src.c),
1041 },
1042};
1043
1044static struct rcg_clk blsp2_uart3_apps_clk_src = {
1045 .cmd_rcgr_reg = BLSP2_UART3_APPS_CMD_RCGR,
1046 .set_rate = set_rate_mnd,
1047 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1048 .current_freq = &rcg_dummy_freq,
1049 .base = &virt_bases[GCC_BASE],
1050 .c = {
1051 .dbg_name = "blsp2_uart3_apps_clk_src",
1052 .ops = &clk_ops_rcg_mnd,
1053 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1054 CLK_INIT(blsp2_uart3_apps_clk_src.c),
1055 },
1056};
1057
1058static struct rcg_clk blsp2_uart4_apps_clk_src = {
1059 .cmd_rcgr_reg = BLSP2_UART4_APPS_CMD_RCGR,
1060 .set_rate = set_rate_mnd,
1061 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1062 .current_freq = &rcg_dummy_freq,
1063 .base = &virt_bases[GCC_BASE],
1064 .c = {
1065 .dbg_name = "blsp2_uart4_apps_clk_src",
1066 .ops = &clk_ops_rcg_mnd,
1067 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1068 CLK_INIT(blsp2_uart4_apps_clk_src.c),
1069 },
1070};
1071
1072static struct rcg_clk blsp2_uart5_apps_clk_src = {
1073 .cmd_rcgr_reg = BLSP2_UART5_APPS_CMD_RCGR,
1074 .set_rate = set_rate_mnd,
1075 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1076 .current_freq = &rcg_dummy_freq,
1077 .base = &virt_bases[GCC_BASE],
1078 .c = {
1079 .dbg_name = "blsp2_uart5_apps_clk_src",
1080 .ops = &clk_ops_rcg_mnd,
1081 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1082 CLK_INIT(blsp2_uart5_apps_clk_src.c),
1083 },
1084};
1085
1086static struct rcg_clk blsp2_uart6_apps_clk_src = {
1087 .cmd_rcgr_reg = BLSP2_UART6_APPS_CMD_RCGR,
1088 .set_rate = set_rate_mnd,
1089 .freq_tbl = ftbl_gcc_blsp1_2_uart1_6_apps_clk,
1090 .current_freq = &rcg_dummy_freq,
1091 .base = &virt_bases[GCC_BASE],
1092 .c = {
1093 .dbg_name = "blsp2_uart6_apps_clk_src",
1094 .ops = &clk_ops_rcg_mnd,
1095 VDD_DIG_FMAX_MAP2(LOW, 31580000, NOMINAL, 63160000),
1096 CLK_INIT(blsp2_uart6_apps_clk_src.c),
1097 },
1098};
1099
1100static struct clk_freq_tbl ftbl_gcc_ce1_clk[] = {
1101 F( 50000000, gpll0, 12, 0, 0),
1102 F(100000000, gpll0, 6, 0, 0),
1103 F_END
1104};
1105
1106static struct rcg_clk ce1_clk_src = {
1107 .cmd_rcgr_reg = CE1_CMD_RCGR,
1108 .set_rate = set_rate_hid,
1109 .freq_tbl = ftbl_gcc_ce1_clk,
1110 .current_freq = &rcg_dummy_freq,
1111 .base = &virt_bases[GCC_BASE],
1112 .c = {
1113 .dbg_name = "ce1_clk_src",
1114 .ops = &clk_ops_rcg,
1115 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1116 CLK_INIT(ce1_clk_src.c),
1117 },
1118};
1119
1120static struct clk_freq_tbl ftbl_gcc_ce2_clk[] = {
1121 F( 50000000, gpll0, 12, 0, 0),
1122 F(100000000, gpll0, 6, 0, 0),
1123 F_END
1124};
1125
1126static struct rcg_clk ce2_clk_src = {
1127 .cmd_rcgr_reg = CE2_CMD_RCGR,
1128 .set_rate = set_rate_hid,
1129 .freq_tbl = ftbl_gcc_ce2_clk,
1130 .current_freq = &rcg_dummy_freq,
1131 .base = &virt_bases[GCC_BASE],
1132 .c = {
1133 .dbg_name = "ce2_clk_src",
1134 .ops = &clk_ops_rcg,
1135 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1136 CLK_INIT(ce2_clk_src.c),
1137 },
1138};
1139
1140static struct clk_freq_tbl ftbl_gcc_gp_clk[] = {
1141 F(19200000, cxo, 1, 0, 0),
1142 F_END
1143};
1144
1145static struct rcg_clk gp1_clk_src = {
1146 .cmd_rcgr_reg = GP1_CMD_RCGR,
1147 .set_rate = set_rate_mnd,
1148 .freq_tbl = ftbl_gcc_gp_clk,
1149 .current_freq = &rcg_dummy_freq,
1150 .base = &virt_bases[GCC_BASE],
1151 .c = {
1152 .dbg_name = "gp1_clk_src",
1153 .ops = &clk_ops_rcg_mnd,
1154 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1155 CLK_INIT(gp1_clk_src.c),
1156 },
1157};
1158
1159static struct rcg_clk gp2_clk_src = {
1160 .cmd_rcgr_reg = GP2_CMD_RCGR,
1161 .set_rate = set_rate_mnd,
1162 .freq_tbl = ftbl_gcc_gp_clk,
1163 .current_freq = &rcg_dummy_freq,
1164 .base = &virt_bases[GCC_BASE],
1165 .c = {
1166 .dbg_name = "gp2_clk_src",
1167 .ops = &clk_ops_rcg_mnd,
1168 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1169 CLK_INIT(gp2_clk_src.c),
1170 },
1171};
1172
1173static struct rcg_clk gp3_clk_src = {
1174 .cmd_rcgr_reg = GP3_CMD_RCGR,
1175 .set_rate = set_rate_mnd,
1176 .freq_tbl = ftbl_gcc_gp_clk,
1177 .current_freq = &rcg_dummy_freq,
1178 .base = &virt_bases[GCC_BASE],
1179 .c = {
1180 .dbg_name = "gp3_clk_src",
1181 .ops = &clk_ops_rcg_mnd,
1182 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1183 CLK_INIT(gp3_clk_src.c),
1184 },
1185};
1186
1187static struct clk_freq_tbl ftbl_gcc_pdm2_clk[] = {
1188 F(60000000, gpll0, 10, 0, 0),
1189 F_END
1190};
1191
1192static struct rcg_clk pdm2_clk_src = {
1193 .cmd_rcgr_reg = PDM2_CMD_RCGR,
1194 .set_rate = set_rate_hid,
1195 .freq_tbl = ftbl_gcc_pdm2_clk,
1196 .current_freq = &rcg_dummy_freq,
1197 .base = &virt_bases[GCC_BASE],
1198 .c = {
1199 .dbg_name = "pdm2_clk_src",
1200 .ops = &clk_ops_rcg,
1201 VDD_DIG_FMAX_MAP1(LOW, 60000000),
1202 CLK_INIT(pdm2_clk_src.c),
1203 },
1204};
1205
1206static struct clk_freq_tbl ftbl_gcc_sdcc1_2_apps_clk[] = {
1207 F( 144000, cxo, 16, 3, 25),
1208 F( 400000, cxo, 12, 1, 4),
1209 F( 20000000, gpll0, 15, 1, 2),
1210 F( 25000000, gpll0, 12, 1, 2),
1211 F( 50000000, gpll0, 12, 0, 0),
1212 F(100000000, gpll0, 6, 0, 0),
1213 F(200000000, gpll0, 3, 0, 0),
1214 F_END
1215};
1216
1217static struct clk_freq_tbl ftbl_gcc_sdcc3_4_apps_clk[] = {
1218 F( 144000, cxo, 16, 3, 25),
1219 F( 400000, cxo, 12, 1, 4),
1220 F( 20000000, gpll0, 15, 1, 2),
1221 F( 25000000, gpll0, 12, 1, 2),
1222 F( 50000000, gpll0, 12, 0, 0),
1223 F(100000000, gpll0, 6, 0, 0),
1224 F_END
1225};
1226
1227static struct rcg_clk sdcc1_apps_clk_src = {
1228 .cmd_rcgr_reg = SDCC1_APPS_CMD_RCGR,
1229 .set_rate = set_rate_mnd,
1230 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
1231 .current_freq = &rcg_dummy_freq,
1232 .base = &virt_bases[GCC_BASE],
1233 .c = {
1234 .dbg_name = "sdcc1_apps_clk_src",
1235 .ops = &clk_ops_rcg_mnd,
1236 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1237 CLK_INIT(sdcc1_apps_clk_src.c),
1238 },
1239};
1240
1241static struct rcg_clk sdcc2_apps_clk_src = {
1242 .cmd_rcgr_reg = SDCC2_APPS_CMD_RCGR,
1243 .set_rate = set_rate_mnd,
1244 .freq_tbl = ftbl_gcc_sdcc1_2_apps_clk,
1245 .current_freq = &rcg_dummy_freq,
1246 .base = &virt_bases[GCC_BASE],
1247 .c = {
1248 .dbg_name = "sdcc2_apps_clk_src",
1249 .ops = &clk_ops_rcg_mnd,
1250 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
1251 CLK_INIT(sdcc2_apps_clk_src.c),
1252 },
1253};
1254
1255static struct rcg_clk sdcc3_apps_clk_src = {
1256 .cmd_rcgr_reg = SDCC3_APPS_CMD_RCGR,
1257 .set_rate = set_rate_mnd,
1258 .freq_tbl = ftbl_gcc_sdcc3_4_apps_clk,
1259 .current_freq = &rcg_dummy_freq,
1260 .base = &virt_bases[GCC_BASE],
1261 .c = {
1262 .dbg_name = "sdcc3_apps_clk_src",
1263 .ops = &clk_ops_rcg_mnd,
1264 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1265 CLK_INIT(sdcc3_apps_clk_src.c),
1266 },
1267};
1268
1269static struct rcg_clk sdcc4_apps_clk_src = {
1270 .cmd_rcgr_reg = SDCC4_APPS_CMD_RCGR,
1271 .set_rate = set_rate_mnd,
1272 .freq_tbl = ftbl_gcc_sdcc3_4_apps_clk,
1273 .current_freq = &rcg_dummy_freq,
1274 .base = &virt_bases[GCC_BASE],
1275 .c = {
1276 .dbg_name = "sdcc4_apps_clk_src",
1277 .ops = &clk_ops_rcg_mnd,
1278 VDD_DIG_FMAX_MAP2(LOW, 50000000, NOMINAL, 100000000),
1279 CLK_INIT(sdcc4_apps_clk_src.c),
1280 },
1281};
1282
1283static struct clk_freq_tbl ftbl_gcc_tsif_ref_clk[] = {
1284 F(105000, cxo, 2, 1, 91),
1285 F_END
1286};
1287
1288static struct rcg_clk tsif_ref_clk_src = {
1289 .cmd_rcgr_reg = TSIF_REF_CMD_RCGR,
1290 .set_rate = set_rate_mnd,
1291 .freq_tbl = ftbl_gcc_tsif_ref_clk,
1292 .current_freq = &rcg_dummy_freq,
1293 .base = &virt_bases[GCC_BASE],
1294 .c = {
1295 .dbg_name = "tsif_ref_clk_src",
1296 .ops = &clk_ops_rcg_mnd,
1297 VDD_DIG_FMAX_MAP1(LOW, 105500),
1298 CLK_INIT(tsif_ref_clk_src.c),
1299 },
1300};
1301
1302static struct clk_freq_tbl ftbl_gcc_usb30_mock_utmi_clk[] = {
1303 F(60000000, gpll0, 10, 0, 0),
1304 F_END
1305};
1306
1307static struct rcg_clk usb30_mock_utmi_clk_src = {
1308 .cmd_rcgr_reg = USB30_MOCK_UTMI_CMD_RCGR,
1309 .set_rate = set_rate_hid,
1310 .freq_tbl = ftbl_gcc_usb30_mock_utmi_clk,
1311 .current_freq = &rcg_dummy_freq,
1312 .base = &virt_bases[GCC_BASE],
1313 .c = {
1314 .dbg_name = "usb30_mock_utmi_clk_src",
1315 .ops = &clk_ops_rcg,
1316 VDD_DIG_FMAX_MAP1(NOMINAL, 60000000),
1317 CLK_INIT(usb30_mock_utmi_clk_src.c),
1318 },
1319};
1320
1321static struct clk_freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1322 F(75000000, gpll0, 8, 0, 0),
1323 F_END
1324};
1325
1326static struct rcg_clk usb_hs_system_clk_src = {
1327 .cmd_rcgr_reg = USB_HS_SYSTEM_CMD_RCGR,
1328 .set_rate = set_rate_hid,
1329 .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1330 .current_freq = &rcg_dummy_freq,
1331 .base = &virt_bases[GCC_BASE],
1332 .c = {
1333 .dbg_name = "usb_hs_system_clk_src",
1334 .ops = &clk_ops_rcg,
1335 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1336 CLK_INIT(usb_hs_system_clk_src.c),
1337 },
1338};
1339
1340static struct clk_freq_tbl ftbl_gcc_usb_hsic_clk[] = {
1341 F_HSIC(480000000, gpll1, 1, 0, 0),
1342 F_END
1343};
1344
1345static struct rcg_clk usb_hsic_clk_src = {
1346 .cmd_rcgr_reg = USB_HSIC_CMD_RCGR,
1347 .set_rate = set_rate_hid,
1348 .freq_tbl = ftbl_gcc_usb_hsic_clk,
1349 .current_freq = &rcg_dummy_freq,
1350 .base = &virt_bases[GCC_BASE],
1351 .c = {
1352 .dbg_name = "usb_hsic_clk_src",
1353 .ops = &clk_ops_rcg,
1354 VDD_DIG_FMAX_MAP1(LOW, 480000000),
1355 CLK_INIT(usb_hsic_clk_src.c),
1356 },
1357};
1358
1359static struct clk_freq_tbl ftbl_gcc_usb_hsic_io_cal_clk[] = {
1360 F(9600000, cxo, 2, 0, 0),
1361 F_END
1362};
1363
1364static struct rcg_clk usb_hsic_io_cal_clk_src = {
1365 .cmd_rcgr_reg = USB_HSIC_IO_CAL_CMD_RCGR,
1366 .set_rate = set_rate_hid,
1367 .freq_tbl = ftbl_gcc_usb_hsic_io_cal_clk,
1368 .current_freq = &rcg_dummy_freq,
1369 .base = &virt_bases[GCC_BASE],
1370 .c = {
1371 .dbg_name = "usb_hsic_io_cal_clk_src",
1372 .ops = &clk_ops_rcg,
1373 VDD_DIG_FMAX_MAP1(LOW, 9600000),
1374 CLK_INIT(usb_hsic_io_cal_clk_src.c),
1375 },
1376};
1377
1378static struct clk_freq_tbl ftbl_gcc_usb_hsic_system_clk[] = {
1379 F(75000000, gpll0, 8, 0, 0),
1380 F_END
1381};
1382
1383static struct rcg_clk usb_hsic_system_clk_src = {
1384 .cmd_rcgr_reg = USB_HSIC_SYSTEM_CMD_RCGR,
1385 .set_rate = set_rate_hid,
1386 .freq_tbl = ftbl_gcc_usb_hsic_system_clk,
1387 .current_freq = &rcg_dummy_freq,
1388 .base = &virt_bases[GCC_BASE],
1389 .c = {
1390 .dbg_name = "usb_hsic_system_clk_src",
1391 .ops = &clk_ops_rcg,
1392 VDD_DIG_FMAX_MAP2(LOW, 37500000, NOMINAL, 75000000),
1393 CLK_INIT(usb_hsic_system_clk_src.c),
1394 },
1395};
1396
1397static struct local_vote_clk gcc_bam_dma_ahb_clk = {
1398 .cbcr_reg = BAM_DMA_AHB_CBCR,
1399 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1400 .en_mask = BIT(12),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001401 .base = &virt_bases[GCC_BASE],
1402 .c = {
1403 .dbg_name = "gcc_bam_dma_ahb_clk",
1404 .ops = &clk_ops_vote,
1405 CLK_INIT(gcc_bam_dma_ahb_clk.c),
1406 },
1407};
1408
1409static struct local_vote_clk gcc_blsp1_ahb_clk = {
1410 .cbcr_reg = BLSP1_AHB_CBCR,
1411 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1412 .en_mask = BIT(17),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001413 .base = &virt_bases[GCC_BASE],
1414 .c = {
1415 .dbg_name = "gcc_blsp1_ahb_clk",
1416 .ops = &clk_ops_vote,
1417 CLK_INIT(gcc_blsp1_ahb_clk.c),
1418 },
1419};
1420
1421static struct branch_clk gcc_blsp1_qup1_i2c_apps_clk = {
1422 .cbcr_reg = BLSP1_QUP1_I2C_APPS_CBCR,
1423 .parent = &cxo_clk_src.c,
1424 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001425 .base = &virt_bases[GCC_BASE],
1426 .c = {
1427 .dbg_name = "gcc_blsp1_qup1_i2c_apps_clk",
1428 .ops = &clk_ops_branch,
1429 CLK_INIT(gcc_blsp1_qup1_i2c_apps_clk.c),
1430 },
1431};
1432
1433static struct branch_clk gcc_blsp1_qup1_spi_apps_clk = {
1434 .cbcr_reg = BLSP1_QUP1_SPI_APPS_CBCR,
1435 .parent = &blsp1_qup1_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001436 .base = &virt_bases[GCC_BASE],
1437 .c = {
1438 .dbg_name = "gcc_blsp1_qup1_spi_apps_clk",
1439 .ops = &clk_ops_branch,
1440 CLK_INIT(gcc_blsp1_qup1_spi_apps_clk.c),
1441 },
1442};
1443
1444static struct branch_clk gcc_blsp1_qup2_i2c_apps_clk = {
1445 .cbcr_reg = BLSP1_QUP2_I2C_APPS_CBCR,
1446 .parent = &cxo_clk_src.c,
1447 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001448 .base = &virt_bases[GCC_BASE],
1449 .c = {
1450 .dbg_name = "gcc_blsp1_qup2_i2c_apps_clk",
1451 .ops = &clk_ops_branch,
1452 CLK_INIT(gcc_blsp1_qup2_i2c_apps_clk.c),
1453 },
1454};
1455
1456static struct branch_clk gcc_blsp1_qup2_spi_apps_clk = {
1457 .cbcr_reg = BLSP1_QUP2_SPI_APPS_CBCR,
1458 .parent = &blsp1_qup2_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001459 .base = &virt_bases[GCC_BASE],
1460 .c = {
1461 .dbg_name = "gcc_blsp1_qup2_spi_apps_clk",
1462 .ops = &clk_ops_branch,
1463 CLK_INIT(gcc_blsp1_qup2_spi_apps_clk.c),
1464 },
1465};
1466
1467static struct branch_clk gcc_blsp1_qup3_i2c_apps_clk = {
1468 .cbcr_reg = BLSP1_QUP3_I2C_APPS_CBCR,
1469 .parent = &cxo_clk_src.c,
1470 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001471 .base = &virt_bases[GCC_BASE],
1472 .c = {
1473 .dbg_name = "gcc_blsp1_qup3_i2c_apps_clk",
1474 .ops = &clk_ops_branch,
1475 CLK_INIT(gcc_blsp1_qup3_i2c_apps_clk.c),
1476 },
1477};
1478
1479static struct branch_clk gcc_blsp1_qup3_spi_apps_clk = {
1480 .cbcr_reg = BLSP1_QUP3_SPI_APPS_CBCR,
1481 .parent = &blsp1_qup3_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001482 .base = &virt_bases[GCC_BASE],
1483 .c = {
1484 .dbg_name = "gcc_blsp1_qup3_spi_apps_clk",
1485 .ops = &clk_ops_branch,
1486 CLK_INIT(gcc_blsp1_qup3_spi_apps_clk.c),
1487 },
1488};
1489
1490static struct branch_clk gcc_blsp1_qup4_i2c_apps_clk = {
1491 .cbcr_reg = BLSP1_QUP4_I2C_APPS_CBCR,
1492 .parent = &cxo_clk_src.c,
1493 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001494 .base = &virt_bases[GCC_BASE],
1495 .c = {
1496 .dbg_name = "gcc_blsp1_qup4_i2c_apps_clk",
1497 .ops = &clk_ops_branch,
1498 CLK_INIT(gcc_blsp1_qup4_i2c_apps_clk.c),
1499 },
1500};
1501
1502static struct branch_clk gcc_blsp1_qup4_spi_apps_clk = {
1503 .cbcr_reg = BLSP1_QUP4_SPI_APPS_CBCR,
1504 .parent = &blsp1_qup4_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001505 .base = &virt_bases[GCC_BASE],
1506 .c = {
1507 .dbg_name = "gcc_blsp1_qup4_spi_apps_clk",
1508 .ops = &clk_ops_branch,
1509 CLK_INIT(gcc_blsp1_qup4_spi_apps_clk.c),
1510 },
1511};
1512
1513static struct branch_clk gcc_blsp1_qup5_i2c_apps_clk = {
1514 .cbcr_reg = BLSP1_QUP5_I2C_APPS_CBCR,
1515 .parent = &cxo_clk_src.c,
1516 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001517 .base = &virt_bases[GCC_BASE],
1518 .c = {
1519 .dbg_name = "gcc_blsp1_qup5_i2c_apps_clk",
1520 .ops = &clk_ops_branch,
1521 CLK_INIT(gcc_blsp1_qup5_i2c_apps_clk.c),
1522 },
1523};
1524
1525static struct branch_clk gcc_blsp1_qup5_spi_apps_clk = {
1526 .cbcr_reg = BLSP1_QUP5_SPI_APPS_CBCR,
1527 .parent = &blsp1_qup5_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001528 .base = &virt_bases[GCC_BASE],
1529 .c = {
1530 .dbg_name = "gcc_blsp1_qup5_spi_apps_clk",
1531 .ops = &clk_ops_branch,
1532 CLK_INIT(gcc_blsp1_qup5_spi_apps_clk.c),
1533 },
1534};
1535
1536static struct branch_clk gcc_blsp1_qup6_i2c_apps_clk = {
1537 .cbcr_reg = BLSP1_QUP6_I2C_APPS_CBCR,
1538 .parent = &cxo_clk_src.c,
1539 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001540 .base = &virt_bases[GCC_BASE],
1541 .c = {
1542 .dbg_name = "gcc_blsp1_qup6_i2c_apps_clk",
1543 .ops = &clk_ops_branch,
1544 CLK_INIT(gcc_blsp1_qup6_i2c_apps_clk.c),
1545 },
1546};
1547
1548static struct branch_clk gcc_blsp1_qup6_spi_apps_clk = {
1549 .cbcr_reg = BLSP1_QUP6_SPI_APPS_CBCR,
1550 .parent = &blsp1_qup6_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001551 .base = &virt_bases[GCC_BASE],
1552 .c = {
1553 .dbg_name = "gcc_blsp1_qup6_spi_apps_clk",
1554 .ops = &clk_ops_branch,
1555 CLK_INIT(gcc_blsp1_qup6_spi_apps_clk.c),
1556 },
1557};
1558
1559static struct branch_clk gcc_blsp1_uart1_apps_clk = {
1560 .cbcr_reg = BLSP1_UART1_APPS_CBCR,
1561 .parent = &blsp1_uart1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001562 .base = &virt_bases[GCC_BASE],
1563 .c = {
1564 .dbg_name = "gcc_blsp1_uart1_apps_clk",
1565 .ops = &clk_ops_branch,
1566 CLK_INIT(gcc_blsp1_uart1_apps_clk.c),
1567 },
1568};
1569
1570static struct branch_clk gcc_blsp1_uart2_apps_clk = {
1571 .cbcr_reg = BLSP1_UART2_APPS_CBCR,
1572 .parent = &blsp1_uart2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001573 .base = &virt_bases[GCC_BASE],
1574 .c = {
1575 .dbg_name = "gcc_blsp1_uart2_apps_clk",
1576 .ops = &clk_ops_branch,
1577 CLK_INIT(gcc_blsp1_uart2_apps_clk.c),
1578 },
1579};
1580
1581static struct branch_clk gcc_blsp1_uart3_apps_clk = {
1582 .cbcr_reg = BLSP1_UART3_APPS_CBCR,
1583 .parent = &blsp1_uart3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001584 .base = &virt_bases[GCC_BASE],
1585 .c = {
1586 .dbg_name = "gcc_blsp1_uart3_apps_clk",
1587 .ops = &clk_ops_branch,
1588 CLK_INIT(gcc_blsp1_uart3_apps_clk.c),
1589 },
1590};
1591
1592static struct branch_clk gcc_blsp1_uart4_apps_clk = {
1593 .cbcr_reg = BLSP1_UART4_APPS_CBCR,
1594 .parent = &blsp1_uart4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001595 .base = &virt_bases[GCC_BASE],
1596 .c = {
1597 .dbg_name = "gcc_blsp1_uart4_apps_clk",
1598 .ops = &clk_ops_branch,
1599 CLK_INIT(gcc_blsp1_uart4_apps_clk.c),
1600 },
1601};
1602
1603static struct branch_clk gcc_blsp1_uart5_apps_clk = {
1604 .cbcr_reg = BLSP1_UART5_APPS_CBCR,
1605 .parent = &blsp1_uart5_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001606 .base = &virt_bases[GCC_BASE],
1607 .c = {
1608 .dbg_name = "gcc_blsp1_uart5_apps_clk",
1609 .ops = &clk_ops_branch,
1610 CLK_INIT(gcc_blsp1_uart5_apps_clk.c),
1611 },
1612};
1613
1614static struct branch_clk gcc_blsp1_uart6_apps_clk = {
1615 .cbcr_reg = BLSP1_UART6_APPS_CBCR,
1616 .parent = &blsp1_uart6_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001617 .base = &virt_bases[GCC_BASE],
1618 .c = {
1619 .dbg_name = "gcc_blsp1_uart6_apps_clk",
1620 .ops = &clk_ops_branch,
1621 CLK_INIT(gcc_blsp1_uart6_apps_clk.c),
1622 },
1623};
1624
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001625static struct local_vote_clk gcc_boot_rom_ahb_clk = {
1626 .cbcr_reg = BOOT_ROM_AHB_CBCR,
1627 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1628 .en_mask = BIT(10),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07001629 .base = &virt_bases[GCC_BASE],
1630 .c = {
1631 .dbg_name = "gcc_boot_rom_ahb_clk",
1632 .ops = &clk_ops_vote,
1633 CLK_INIT(gcc_boot_rom_ahb_clk.c),
1634 },
1635};
1636
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001637static struct local_vote_clk gcc_blsp2_ahb_clk = {
1638 .cbcr_reg = BLSP2_AHB_CBCR,
1639 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1640 .en_mask = BIT(15),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001641 .base = &virt_bases[GCC_BASE],
1642 .c = {
1643 .dbg_name = "gcc_blsp2_ahb_clk",
1644 .ops = &clk_ops_vote,
1645 CLK_INIT(gcc_blsp2_ahb_clk.c),
1646 },
1647};
1648
1649static struct branch_clk gcc_blsp2_qup1_i2c_apps_clk = {
1650 .cbcr_reg = BLSP2_QUP1_I2C_APPS_CBCR,
1651 .parent = &cxo_clk_src.c,
1652 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001653 .base = &virt_bases[GCC_BASE],
1654 .c = {
1655 .dbg_name = "gcc_blsp2_qup1_i2c_apps_clk",
1656 .ops = &clk_ops_branch,
1657 CLK_INIT(gcc_blsp2_qup1_i2c_apps_clk.c),
1658 },
1659};
1660
1661static struct branch_clk gcc_blsp2_qup1_spi_apps_clk = {
1662 .cbcr_reg = BLSP2_QUP1_SPI_APPS_CBCR,
1663 .parent = &blsp2_qup1_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001664 .base = &virt_bases[GCC_BASE],
1665 .c = {
1666 .dbg_name = "gcc_blsp2_qup1_spi_apps_clk",
1667 .ops = &clk_ops_branch,
1668 CLK_INIT(gcc_blsp2_qup1_spi_apps_clk.c),
1669 },
1670};
1671
1672static struct branch_clk gcc_blsp2_qup2_i2c_apps_clk = {
1673 .cbcr_reg = BLSP2_QUP2_I2C_APPS_CBCR,
1674 .parent = &cxo_clk_src.c,
1675 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001676 .base = &virt_bases[GCC_BASE],
1677 .c = {
1678 .dbg_name = "gcc_blsp2_qup2_i2c_apps_clk",
1679 .ops = &clk_ops_branch,
1680 CLK_INIT(gcc_blsp2_qup2_i2c_apps_clk.c),
1681 },
1682};
1683
1684static struct branch_clk gcc_blsp2_qup2_spi_apps_clk = {
1685 .cbcr_reg = BLSP2_QUP2_SPI_APPS_CBCR,
1686 .parent = &blsp2_qup2_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001687 .base = &virt_bases[GCC_BASE],
1688 .c = {
1689 .dbg_name = "gcc_blsp2_qup2_spi_apps_clk",
1690 .ops = &clk_ops_branch,
1691 CLK_INIT(gcc_blsp2_qup2_spi_apps_clk.c),
1692 },
1693};
1694
1695static struct branch_clk gcc_blsp2_qup3_i2c_apps_clk = {
1696 .cbcr_reg = BLSP2_QUP3_I2C_APPS_CBCR,
1697 .parent = &cxo_clk_src.c,
1698 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001699 .base = &virt_bases[GCC_BASE],
1700 .c = {
1701 .dbg_name = "gcc_blsp2_qup3_i2c_apps_clk",
1702 .ops = &clk_ops_branch,
1703 CLK_INIT(gcc_blsp2_qup3_i2c_apps_clk.c),
1704 },
1705};
1706
1707static struct branch_clk gcc_blsp2_qup3_spi_apps_clk = {
1708 .cbcr_reg = BLSP2_QUP3_SPI_APPS_CBCR,
1709 .parent = &blsp2_qup3_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001710 .base = &virt_bases[GCC_BASE],
1711 .c = {
1712 .dbg_name = "gcc_blsp2_qup3_spi_apps_clk",
1713 .ops = &clk_ops_branch,
1714 CLK_INIT(gcc_blsp2_qup3_spi_apps_clk.c),
1715 },
1716};
1717
1718static struct branch_clk gcc_blsp2_qup4_i2c_apps_clk = {
1719 .cbcr_reg = BLSP2_QUP4_I2C_APPS_CBCR,
1720 .parent = &cxo_clk_src.c,
1721 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001722 .base = &virt_bases[GCC_BASE],
1723 .c = {
1724 .dbg_name = "gcc_blsp2_qup4_i2c_apps_clk",
1725 .ops = &clk_ops_branch,
1726 CLK_INIT(gcc_blsp2_qup4_i2c_apps_clk.c),
1727 },
1728};
1729
1730static struct branch_clk gcc_blsp2_qup4_spi_apps_clk = {
1731 .cbcr_reg = BLSP2_QUP4_SPI_APPS_CBCR,
1732 .parent = &blsp2_qup4_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001733 .base = &virt_bases[GCC_BASE],
1734 .c = {
1735 .dbg_name = "gcc_blsp2_qup4_spi_apps_clk",
1736 .ops = &clk_ops_branch,
1737 CLK_INIT(gcc_blsp2_qup4_spi_apps_clk.c),
1738 },
1739};
1740
1741static struct branch_clk gcc_blsp2_qup5_i2c_apps_clk = {
1742 .cbcr_reg = BLSP2_QUP5_I2C_APPS_CBCR,
1743 .parent = &cxo_clk_src.c,
1744 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001745 .base = &virt_bases[GCC_BASE],
1746 .c = {
1747 .dbg_name = "gcc_blsp2_qup5_i2c_apps_clk",
1748 .ops = &clk_ops_branch,
1749 CLK_INIT(gcc_blsp2_qup5_i2c_apps_clk.c),
1750 },
1751};
1752
1753static struct branch_clk gcc_blsp2_qup5_spi_apps_clk = {
1754 .cbcr_reg = BLSP2_QUP5_SPI_APPS_CBCR,
1755 .parent = &blsp2_qup5_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001756 .base = &virt_bases[GCC_BASE],
1757 .c = {
1758 .dbg_name = "gcc_blsp2_qup5_spi_apps_clk",
1759 .ops = &clk_ops_branch,
1760 CLK_INIT(gcc_blsp2_qup5_spi_apps_clk.c),
1761 },
1762};
1763
1764static struct branch_clk gcc_blsp2_qup6_i2c_apps_clk = {
1765 .cbcr_reg = BLSP2_QUP6_I2C_APPS_CBCR,
1766 .parent = &cxo_clk_src.c,
1767 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001768 .base = &virt_bases[GCC_BASE],
1769 .c = {
1770 .dbg_name = "gcc_blsp2_qup6_i2c_apps_clk",
1771 .ops = &clk_ops_branch,
1772 CLK_INIT(gcc_blsp2_qup6_i2c_apps_clk.c),
1773 },
1774};
1775
1776static struct branch_clk gcc_blsp2_qup6_spi_apps_clk = {
1777 .cbcr_reg = BLSP2_QUP6_SPI_APPS_CBCR,
1778 .parent = &blsp2_qup6_spi_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001779 .base = &virt_bases[GCC_BASE],
1780 .c = {
1781 .dbg_name = "gcc_blsp2_qup6_spi_apps_clk",
1782 .ops = &clk_ops_branch,
1783 CLK_INIT(gcc_blsp2_qup6_spi_apps_clk.c),
1784 },
1785};
1786
1787static struct branch_clk gcc_blsp2_uart1_apps_clk = {
1788 .cbcr_reg = BLSP2_UART1_APPS_CBCR,
1789 .parent = &blsp2_uart1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001790 .base = &virt_bases[GCC_BASE],
1791 .c = {
1792 .dbg_name = "gcc_blsp2_uart1_apps_clk",
1793 .ops = &clk_ops_branch,
1794 CLK_INIT(gcc_blsp2_uart1_apps_clk.c),
1795 },
1796};
1797
1798static struct branch_clk gcc_blsp2_uart2_apps_clk = {
1799 .cbcr_reg = BLSP2_UART2_APPS_CBCR,
1800 .parent = &blsp2_uart2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001801 .base = &virt_bases[GCC_BASE],
1802 .c = {
1803 .dbg_name = "gcc_blsp2_uart2_apps_clk",
1804 .ops = &clk_ops_branch,
1805 CLK_INIT(gcc_blsp2_uart2_apps_clk.c),
1806 },
1807};
1808
1809static struct branch_clk gcc_blsp2_uart3_apps_clk = {
1810 .cbcr_reg = BLSP2_UART3_APPS_CBCR,
1811 .parent = &blsp2_uart3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001812 .base = &virt_bases[GCC_BASE],
1813 .c = {
1814 .dbg_name = "gcc_blsp2_uart3_apps_clk",
1815 .ops = &clk_ops_branch,
1816 CLK_INIT(gcc_blsp2_uart3_apps_clk.c),
1817 },
1818};
1819
1820static struct branch_clk gcc_blsp2_uart4_apps_clk = {
1821 .cbcr_reg = BLSP2_UART4_APPS_CBCR,
1822 .parent = &blsp2_uart4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001823 .base = &virt_bases[GCC_BASE],
1824 .c = {
1825 .dbg_name = "gcc_blsp2_uart4_apps_clk",
1826 .ops = &clk_ops_branch,
1827 CLK_INIT(gcc_blsp2_uart4_apps_clk.c),
1828 },
1829};
1830
1831static struct branch_clk gcc_blsp2_uart5_apps_clk = {
1832 .cbcr_reg = BLSP2_UART5_APPS_CBCR,
1833 .parent = &blsp2_uart5_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001834 .base = &virt_bases[GCC_BASE],
1835 .c = {
1836 .dbg_name = "gcc_blsp2_uart5_apps_clk",
1837 .ops = &clk_ops_branch,
1838 CLK_INIT(gcc_blsp2_uart5_apps_clk.c),
1839 },
1840};
1841
1842static struct branch_clk gcc_blsp2_uart6_apps_clk = {
1843 .cbcr_reg = BLSP2_UART6_APPS_CBCR,
1844 .parent = &blsp2_uart6_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001845 .base = &virt_bases[GCC_BASE],
1846 .c = {
1847 .dbg_name = "gcc_blsp2_uart6_apps_clk",
1848 .ops = &clk_ops_branch,
1849 CLK_INIT(gcc_blsp2_uart6_apps_clk.c),
1850 },
1851};
1852
1853static struct local_vote_clk gcc_ce1_clk = {
1854 .cbcr_reg = CE1_CBCR,
1855 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1856 .en_mask = BIT(5),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001857 .base = &virt_bases[GCC_BASE],
1858 .c = {
1859 .dbg_name = "gcc_ce1_clk",
1860 .ops = &clk_ops_vote,
1861 CLK_INIT(gcc_ce1_clk.c),
1862 },
1863};
1864
1865static struct local_vote_clk gcc_ce1_ahb_clk = {
1866 .cbcr_reg = CE1_AHB_CBCR,
1867 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1868 .en_mask = BIT(3),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001869 .base = &virt_bases[GCC_BASE],
1870 .c = {
1871 .dbg_name = "gcc_ce1_ahb_clk",
1872 .ops = &clk_ops_vote,
1873 CLK_INIT(gcc_ce1_ahb_clk.c),
1874 },
1875};
1876
1877static struct local_vote_clk gcc_ce1_axi_clk = {
1878 .cbcr_reg = CE1_AXI_CBCR,
1879 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1880 .en_mask = BIT(4),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001881 .base = &virt_bases[GCC_BASE],
1882 .c = {
1883 .dbg_name = "gcc_ce1_axi_clk",
1884 .ops = &clk_ops_vote,
1885 CLK_INIT(gcc_ce1_axi_clk.c),
1886 },
1887};
1888
1889static struct local_vote_clk gcc_ce2_clk = {
1890 .cbcr_reg = CE2_CBCR,
1891 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1892 .en_mask = BIT(2),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001893 .base = &virt_bases[GCC_BASE],
1894 .c = {
1895 .dbg_name = "gcc_ce2_clk",
1896 .ops = &clk_ops_vote,
1897 CLK_INIT(gcc_ce2_clk.c),
1898 },
1899};
1900
1901static struct local_vote_clk gcc_ce2_ahb_clk = {
1902 .cbcr_reg = CE2_AHB_CBCR,
1903 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1904 .en_mask = BIT(0),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001905 .base = &virt_bases[GCC_BASE],
1906 .c = {
1907 .dbg_name = "gcc_ce1_ahb_clk",
1908 .ops = &clk_ops_vote,
1909 CLK_INIT(gcc_ce1_ahb_clk.c),
1910 },
1911};
1912
1913static struct local_vote_clk gcc_ce2_axi_clk = {
1914 .cbcr_reg = CE2_AXI_CBCR,
1915 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1916 .en_mask = BIT(1),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001917 .base = &virt_bases[GCC_BASE],
1918 .c = {
1919 .dbg_name = "gcc_ce1_axi_clk",
1920 .ops = &clk_ops_vote,
1921 CLK_INIT(gcc_ce2_axi_clk.c),
1922 },
1923};
1924
1925static struct branch_clk gcc_gp1_clk = {
1926 .cbcr_reg = GP1_CBCR,
1927 .parent = &gp1_clk_src.c,
1928 .base = &virt_bases[GCC_BASE],
1929 .c = {
1930 .dbg_name = "gcc_gp1_clk",
1931 .ops = &clk_ops_branch,
1932 CLK_INIT(gcc_gp1_clk.c),
1933 },
1934};
1935
1936static struct branch_clk gcc_gp2_clk = {
1937 .cbcr_reg = GP2_CBCR,
1938 .parent = &gp2_clk_src.c,
1939 .base = &virt_bases[GCC_BASE],
1940 .c = {
1941 .dbg_name = "gcc_gp2_clk",
1942 .ops = &clk_ops_branch,
1943 CLK_INIT(gcc_gp2_clk.c),
1944 },
1945};
1946
1947static struct branch_clk gcc_gp3_clk = {
1948 .cbcr_reg = GP3_CBCR,
1949 .parent = &gp3_clk_src.c,
1950 .base = &virt_bases[GCC_BASE],
1951 .c = {
1952 .dbg_name = "gcc_gp3_clk",
1953 .ops = &clk_ops_branch,
1954 CLK_INIT(gcc_gp3_clk.c),
1955 },
1956};
1957
1958static struct branch_clk gcc_pdm2_clk = {
1959 .cbcr_reg = PDM2_CBCR,
1960 .parent = &pdm2_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001961 .base = &virt_bases[GCC_BASE],
1962 .c = {
1963 .dbg_name = "gcc_pdm2_clk",
1964 .ops = &clk_ops_branch,
1965 CLK_INIT(gcc_pdm2_clk.c),
1966 },
1967};
1968
1969static struct branch_clk gcc_pdm_ahb_clk = {
1970 .cbcr_reg = PDM_AHB_CBCR,
1971 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001972 .base = &virt_bases[GCC_BASE],
1973 .c = {
1974 .dbg_name = "gcc_pdm_ahb_clk",
1975 .ops = &clk_ops_branch,
1976 CLK_INIT(gcc_pdm_ahb_clk.c),
1977 },
1978};
1979
1980static struct local_vote_clk gcc_prng_ahb_clk = {
1981 .cbcr_reg = PRNG_AHB_CBCR,
1982 .vote_reg = APCS_CLOCK_BRANCH_ENA_VOTE,
1983 .en_mask = BIT(13),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001984 .base = &virt_bases[GCC_BASE],
1985 .c = {
1986 .dbg_name = "gcc_prng_ahb_clk",
1987 .ops = &clk_ops_vote,
1988 CLK_INIT(gcc_prng_ahb_clk.c),
1989 },
1990};
1991
1992static struct branch_clk gcc_sdcc1_ahb_clk = {
1993 .cbcr_reg = SDCC1_AHB_CBCR,
1994 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07001995 .base = &virt_bases[GCC_BASE],
1996 .c = {
1997 .dbg_name = "gcc_sdcc1_ahb_clk",
1998 .ops = &clk_ops_branch,
1999 CLK_INIT(gcc_sdcc1_ahb_clk.c),
2000 },
2001};
2002
2003static struct branch_clk gcc_sdcc1_apps_clk = {
2004 .cbcr_reg = SDCC1_APPS_CBCR,
2005 .parent = &sdcc1_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002006 .base = &virt_bases[GCC_BASE],
2007 .c = {
2008 .dbg_name = "gcc_sdcc1_apps_clk",
2009 .ops = &clk_ops_branch,
2010 CLK_INIT(gcc_sdcc1_apps_clk.c),
2011 },
2012};
2013
2014static struct branch_clk gcc_sdcc2_ahb_clk = {
2015 .cbcr_reg = SDCC2_AHB_CBCR,
2016 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002017 .base = &virt_bases[GCC_BASE],
2018 .c = {
2019 .dbg_name = "gcc_sdcc2_ahb_clk",
2020 .ops = &clk_ops_branch,
2021 CLK_INIT(gcc_sdcc2_ahb_clk.c),
2022 },
2023};
2024
2025static struct branch_clk gcc_sdcc2_apps_clk = {
2026 .cbcr_reg = SDCC2_APPS_CBCR,
2027 .parent = &sdcc2_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002028 .base = &virt_bases[GCC_BASE],
2029 .c = {
2030 .dbg_name = "gcc_sdcc2_apps_clk",
2031 .ops = &clk_ops_branch,
2032 CLK_INIT(gcc_sdcc2_apps_clk.c),
2033 },
2034};
2035
2036static struct branch_clk gcc_sdcc3_ahb_clk = {
2037 .cbcr_reg = SDCC3_AHB_CBCR,
2038 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002039 .base = &virt_bases[GCC_BASE],
2040 .c = {
2041 .dbg_name = "gcc_sdcc3_ahb_clk",
2042 .ops = &clk_ops_branch,
2043 CLK_INIT(gcc_sdcc3_ahb_clk.c),
2044 },
2045};
2046
2047static struct branch_clk gcc_sdcc3_apps_clk = {
2048 .cbcr_reg = SDCC3_APPS_CBCR,
2049 .parent = &sdcc3_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002050 .base = &virt_bases[GCC_BASE],
2051 .c = {
2052 .dbg_name = "gcc_sdcc3_apps_clk",
2053 .ops = &clk_ops_branch,
2054 CLK_INIT(gcc_sdcc3_apps_clk.c),
2055 },
2056};
2057
2058static struct branch_clk gcc_sdcc4_ahb_clk = {
2059 .cbcr_reg = SDCC4_AHB_CBCR,
2060 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002061 .base = &virt_bases[GCC_BASE],
2062 .c = {
2063 .dbg_name = "gcc_sdcc4_ahb_clk",
2064 .ops = &clk_ops_branch,
2065 CLK_INIT(gcc_sdcc4_ahb_clk.c),
2066 },
2067};
2068
2069static struct branch_clk gcc_sdcc4_apps_clk = {
2070 .cbcr_reg = SDCC4_APPS_CBCR,
2071 .parent = &sdcc4_apps_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002072 .base = &virt_bases[GCC_BASE],
2073 .c = {
2074 .dbg_name = "gcc_sdcc4_apps_clk",
2075 .ops = &clk_ops_branch,
2076 CLK_INIT(gcc_sdcc4_apps_clk.c),
2077 },
2078};
2079
2080static struct branch_clk gcc_tsif_ahb_clk = {
2081 .cbcr_reg = TSIF_AHB_CBCR,
2082 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002083 .base = &virt_bases[GCC_BASE],
2084 .c = {
2085 .dbg_name = "gcc_tsif_ahb_clk",
2086 .ops = &clk_ops_branch,
2087 CLK_INIT(gcc_tsif_ahb_clk.c),
2088 },
2089};
2090
2091static struct branch_clk gcc_tsif_ref_clk = {
2092 .cbcr_reg = TSIF_REF_CBCR,
2093 .parent = &tsif_ref_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002094 .base = &virt_bases[GCC_BASE],
2095 .c = {
2096 .dbg_name = "gcc_tsif_ref_clk",
2097 .ops = &clk_ops_branch,
2098 CLK_INIT(gcc_tsif_ref_clk.c),
2099 },
2100};
2101
2102static struct branch_clk gcc_usb30_master_clk = {
2103 .cbcr_reg = USB30_MASTER_CBCR,
2104 .parent = &usb30_master_clk_src.c,
2105 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002106 .base = &virt_bases[GCC_BASE],
2107 .c = {
2108 .dbg_name = "gcc_usb30_master_clk",
2109 .ops = &clk_ops_branch,
2110 CLK_INIT(gcc_usb30_master_clk.c),
2111 },
2112};
2113
2114static struct branch_clk gcc_usb30_mock_utmi_clk = {
2115 .cbcr_reg = USB30_MOCK_UTMI_CBCR,
2116 .parent = &usb30_mock_utmi_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002117 .base = &virt_bases[GCC_BASE],
2118 .c = {
2119 .dbg_name = "gcc_usb30_mock_utmi_clk",
2120 .ops = &clk_ops_branch,
2121 CLK_INIT(gcc_usb30_mock_utmi_clk.c),
2122 },
2123};
2124
2125static struct branch_clk gcc_usb_hs_ahb_clk = {
2126 .cbcr_reg = USB_HS_AHB_CBCR,
2127 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002128 .base = &virt_bases[GCC_BASE],
2129 .c = {
2130 .dbg_name = "gcc_usb_hs_ahb_clk",
2131 .ops = &clk_ops_branch,
2132 CLK_INIT(gcc_usb_hs_ahb_clk.c),
2133 },
2134};
2135
2136static struct branch_clk gcc_usb_hs_system_clk = {
2137 .cbcr_reg = USB_HS_SYSTEM_CBCR,
2138 .parent = &usb_hs_system_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002139 .base = &virt_bases[GCC_BASE],
2140 .c = {
2141 .dbg_name = "gcc_usb_hs_system_clk",
2142 .ops = &clk_ops_branch,
2143 CLK_INIT(gcc_usb_hs_system_clk.c),
2144 },
2145};
2146
2147static struct branch_clk gcc_usb_hsic_ahb_clk = {
2148 .cbcr_reg = USB_HSIC_AHB_CBCR,
2149 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002150 .base = &virt_bases[GCC_BASE],
2151 .c = {
2152 .dbg_name = "gcc_usb_hsic_ahb_clk",
2153 .ops = &clk_ops_branch,
2154 CLK_INIT(gcc_usb_hsic_ahb_clk.c),
2155 },
2156};
2157
2158static struct branch_clk gcc_usb_hsic_clk = {
2159 .cbcr_reg = USB_HSIC_CBCR,
2160 .parent = &usb_hsic_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002161 .base = &virt_bases[GCC_BASE],
2162 .c = {
2163 .dbg_name = "gcc_usb_hsic_clk",
2164 .ops = &clk_ops_branch,
2165 CLK_INIT(gcc_usb_hsic_clk.c),
2166 },
2167};
2168
2169static struct branch_clk gcc_usb_hsic_io_cal_clk = {
2170 .cbcr_reg = USB_HSIC_IO_CAL_CBCR,
2171 .parent = &usb_hsic_io_cal_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002172 .base = &virt_bases[GCC_BASE],
2173 .c = {
2174 .dbg_name = "gcc_usb_hsic_io_cal_clk",
2175 .ops = &clk_ops_branch,
2176 CLK_INIT(gcc_usb_hsic_io_cal_clk.c),
2177 },
2178};
2179
2180static struct branch_clk gcc_usb_hsic_system_clk = {
2181 .cbcr_reg = USB_HSIC_SYSTEM_CBCR,
2182 .parent = &usb_hsic_system_clk_src.c,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002183 .base = &virt_bases[GCC_BASE],
2184 .c = {
2185 .dbg_name = "gcc_usb_hsic_system_clk",
2186 .ops = &clk_ops_branch,
2187 CLK_INIT(gcc_usb_hsic_system_clk.c),
2188 },
2189};
2190
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07002191static struct branch_clk gcc_mss_cfg_ahb_clk = {
2192 .cbcr_reg = MSS_CFG_AHB_CBCR,
2193 .has_sibling = 1,
2194 .base = &virt_bases[GCC_BASE],
2195 .c = {
2196 .dbg_name = "gcc_mss_cfg_ahb_clk",
2197 .ops = &clk_ops_branch,
2198 CLK_INIT(gcc_mss_cfg_ahb_clk.c),
2199 },
2200};
2201
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002202static struct clk_freq_tbl ftbl_mmss_ahb_clk[] = {
2203 F_MM(19200000, cxo, 1, 0, 0),
2204 F_MM(40000000, gpll0, 15, 0, 0),
2205 F_MM(80000000, mmpll0, 10, 0, 0),
2206 F_END,
2207};
2208
2209/* TODO: This may go away (may be controlled by the RPM). */
2210static struct rcg_clk ahb_clk_src = {
2211 .cmd_rcgr_reg = 0x5000,
2212 .set_rate = set_rate_hid,
2213 .freq_tbl = ftbl_mmss_ahb_clk,
2214 .current_freq = &rcg_dummy_freq,
2215 .base = &virt_bases[MMSS_BASE],
2216 .c = {
2217 .dbg_name = "ahb_clk_src",
2218 .ops = &clk_ops_rcg,
2219 VDD_DIG_FMAX_MAP2(LOW, 40000000, NOMINAL, 80000000),
2220 CLK_INIT(ahb_clk_src.c),
2221 },
2222};
2223
2224static struct clk_freq_tbl ftbl_mmss_axi_clk[] = {
2225 F_MM( 19200000, cxo, 1, 0, 0),
2226 F_MM(150000000, gpll0, 4, 0, 0),
2227 F_MM(333330000, mmpll1, 3, 0, 0),
2228 F_MM(400000000, mmpll0, 2, 0, 0),
2229 F_END
2230};
2231
2232static struct rcg_clk axi_clk_src = {
2233 .cmd_rcgr_reg = 0x5040,
2234 .set_rate = set_rate_hid,
2235 .freq_tbl = ftbl_mmss_axi_clk,
2236 .current_freq = &rcg_dummy_freq,
2237 .base = &virt_bases[MMSS_BASE],
2238 .c = {
2239 .dbg_name = "axi_clk_src",
2240 .ops = &clk_ops_rcg,
2241 VDD_DIG_FMAX_MAP3(LOW, 150000000, NOMINAL, 333330000,
2242 HIGH, 400000000),
2243 CLK_INIT(axi_clk_src.c),
2244 },
2245};
2246
2247static struct clk_freq_tbl ftbl_camss_csi0_3_clk[] = {
2248 F_MM(100000000, gpll0, 6, 0, 0),
2249 F_MM(200000000, mmpll0, 4, 0, 0),
2250 F_END
2251};
2252
2253static struct rcg_clk csi0_clk_src = {
2254 .cmd_rcgr_reg = CSI0_CMD_RCGR,
2255 .set_rate = set_rate_hid,
2256 .freq_tbl = ftbl_camss_csi0_3_clk,
2257 .current_freq = &rcg_dummy_freq,
2258 .base = &virt_bases[MMSS_BASE],
2259 .c = {
2260 .dbg_name = "csi0_clk_src",
2261 .ops = &clk_ops_rcg,
2262 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2263 CLK_INIT(csi0_clk_src.c),
2264 },
2265};
2266
2267static struct rcg_clk csi1_clk_src = {
2268 .cmd_rcgr_reg = CSI1_CMD_RCGR,
2269 .set_rate = set_rate_hid,
2270 .freq_tbl = ftbl_camss_csi0_3_clk,
2271 .current_freq = &rcg_dummy_freq,
2272 .base = &virt_bases[MMSS_BASE],
2273 .c = {
2274 .dbg_name = "csi1_clk_src",
2275 .ops = &clk_ops_rcg,
2276 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2277 CLK_INIT(csi1_clk_src.c),
2278 },
2279};
2280
2281static struct rcg_clk csi2_clk_src = {
2282 .cmd_rcgr_reg = CSI2_CMD_RCGR,
2283 .set_rate = set_rate_hid,
2284 .freq_tbl = ftbl_camss_csi0_3_clk,
2285 .current_freq = &rcg_dummy_freq,
2286 .base = &virt_bases[MMSS_BASE],
2287 .c = {
2288 .dbg_name = "csi2_clk_src",
2289 .ops = &clk_ops_rcg,
2290 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2291 CLK_INIT(csi2_clk_src.c),
2292 },
2293};
2294
2295static struct rcg_clk csi3_clk_src = {
2296 .cmd_rcgr_reg = CSI3_CMD_RCGR,
2297 .set_rate = set_rate_hid,
2298 .freq_tbl = ftbl_camss_csi0_3_clk,
2299 .current_freq = &rcg_dummy_freq,
2300 .base = &virt_bases[MMSS_BASE],
2301 .c = {
2302 .dbg_name = "csi3_clk_src",
2303 .ops = &clk_ops_rcg,
2304 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2305 CLK_INIT(csi3_clk_src.c),
2306 },
2307};
2308
2309static struct clk_freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
2310 F_MM( 37500000, gpll0, 16, 0, 0),
2311 F_MM( 50000000, gpll0, 12, 0, 0),
2312 F_MM( 60000000, gpll0, 10, 0, 0),
2313 F_MM( 80000000, gpll0, 7.5, 0, 0),
2314 F_MM(100000000, gpll0, 6, 0, 0),
2315 F_MM(109090000, gpll0, 5.5, 0, 0),
2316 F_MM(150000000, gpll0, 4, 0, 0),
2317 F_MM(200000000, gpll0, 3, 0, 0),
2318 F_MM(228570000, mmpll0, 3.5, 0, 0),
2319 F_MM(266670000, mmpll0, 3, 0, 0),
2320 F_MM(320000000, mmpll0, 2.5, 0, 0),
2321 F_END
2322};
2323
2324static struct rcg_clk vfe0_clk_src = {
2325 .cmd_rcgr_reg = VFE0_CMD_RCGR,
2326 .set_rate = set_rate_hid,
2327 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2328 .current_freq = &rcg_dummy_freq,
2329 .base = &virt_bases[MMSS_BASE],
2330 .c = {
2331 .dbg_name = "vfe0_clk_src",
2332 .ops = &clk_ops_rcg,
2333 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2334 HIGH, 320000000),
2335 CLK_INIT(vfe0_clk_src.c),
2336 },
2337};
2338
2339static struct rcg_clk vfe1_clk_src = {
2340 .cmd_rcgr_reg = VFE1_CMD_RCGR,
2341 .set_rate = set_rate_hid,
2342 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
2343 .current_freq = &rcg_dummy_freq,
2344 .base = &virt_bases[MMSS_BASE],
2345 .c = {
2346 .dbg_name = "vfe1_clk_src",
2347 .ops = &clk_ops_rcg,
2348 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2349 HIGH, 320000000),
2350 CLK_INIT(vfe1_clk_src.c),
2351 },
2352};
2353
2354static struct clk_freq_tbl ftbl_mdss_mdp_clk[] = {
2355 F_MM( 37500000, gpll0, 16, 0, 0),
2356 F_MM( 60000000, gpll0, 10, 0, 0),
2357 F_MM( 75000000, gpll0, 8, 0, 0),
2358 F_MM( 85710000, gpll0, 7, 0, 0),
2359 F_MM(100000000, gpll0, 6, 0, 0),
2360 F_MM(133330000, mmpll0, 6, 0, 0),
2361 F_MM(160000000, mmpll0, 5, 0, 0),
2362 F_MM(200000000, mmpll0, 4, 0, 0),
2363 F_MM(266670000, mmpll0, 3, 0, 0),
2364 F_MM(320000000, mmpll0, 2.5, 0, 0),
2365 F_END
2366};
2367
2368static struct rcg_clk mdp_clk_src = {
2369 .cmd_rcgr_reg = MDP_CMD_RCGR,
2370 .set_rate = set_rate_hid,
2371 .freq_tbl = ftbl_mdss_mdp_clk,
2372 .current_freq = &rcg_dummy_freq,
2373 .base = &virt_bases[MMSS_BASE],
2374 .c = {
2375 .dbg_name = "mdp_clk_src",
2376 .ops = &clk_ops_rcg,
2377 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2378 HIGH, 320000000),
2379 CLK_INIT(mdp_clk_src.c),
2380 },
2381};
2382
2383static struct clk_freq_tbl ftbl_camss_cci_cci_clk[] = {
2384 F_MM(19200000, cxo, 1, 0, 0),
2385 F_END
2386};
2387
2388static struct rcg_clk cci_clk_src = {
2389 .cmd_rcgr_reg = CCI_CMD_RCGR,
2390 .set_rate = set_rate_hid,
2391 .freq_tbl = ftbl_camss_cci_cci_clk,
2392 .current_freq = &rcg_dummy_freq,
2393 .base = &virt_bases[MMSS_BASE],
2394 .c = {
2395 .dbg_name = "cci_clk_src",
2396 .ops = &clk_ops_rcg,
2397 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2398 CLK_INIT(cci_clk_src.c),
2399 },
2400};
2401
2402static struct clk_freq_tbl ftbl_camss_gp0_1_clk[] = {
2403 F_MM( 10000, cxo, 16, 1, 120),
2404 F_MM( 20000, cxo, 16, 1, 50),
2405 F_MM( 6000000, gpll0, 10, 1, 10),
2406 F_MM(12000000, gpll0, 10, 1, 5),
2407 F_MM(13000000, gpll0, 10, 13, 60),
2408 F_MM(24000000, gpll0, 5, 1, 5),
2409 F_END
2410};
2411
2412static struct rcg_clk mmss_gp0_clk_src = {
2413 .cmd_rcgr_reg = MMSS_GP0_CMD_RCGR,
2414 .set_rate = set_rate_mnd,
2415 .freq_tbl = ftbl_camss_gp0_1_clk,
2416 .current_freq = &rcg_dummy_freq,
2417 .base = &virt_bases[MMSS_BASE],
2418 .c = {
2419 .dbg_name = "mmss_gp0_clk_src",
2420 .ops = &clk_ops_rcg_mnd,
2421 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2422 CLK_INIT(mmss_gp0_clk_src.c),
2423 },
2424};
2425
2426static struct rcg_clk mmss_gp1_clk_src = {
2427 .cmd_rcgr_reg = MMSS_GP1_CMD_RCGR,
2428 .set_rate = set_rate_mnd,
2429 .freq_tbl = ftbl_camss_gp0_1_clk,
2430 .current_freq = &rcg_dummy_freq,
2431 .base = &virt_bases[MMSS_BASE],
2432 .c = {
2433 .dbg_name = "mmss_gp1_clk_src",
2434 .ops = &clk_ops_rcg_mnd,
2435 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2436 CLK_INIT(mmss_gp1_clk_src.c),
2437 },
2438};
2439
2440static struct clk_freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
2441 F_MM( 75000000, gpll0, 8, 0, 0),
2442 F_MM(150000000, gpll0, 4, 0, 0),
2443 F_MM(200000000, gpll0, 3, 0, 0),
2444 F_MM(228570000, mmpll0, 3.5, 0, 0),
2445 F_MM(266670000, mmpll0, 3, 0, 0),
2446 F_MM(320000000, mmpll0, 2.5, 0, 0),
2447 F_END
2448};
2449
2450static struct rcg_clk jpeg0_clk_src = {
2451 .cmd_rcgr_reg = JPEG0_CMD_RCGR,
2452 .set_rate = set_rate_hid,
2453 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2454 .current_freq = &rcg_dummy_freq,
2455 .base = &virt_bases[MMSS_BASE],
2456 .c = {
2457 .dbg_name = "jpeg0_clk_src",
2458 .ops = &clk_ops_rcg,
2459 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2460 HIGH, 320000000),
2461 CLK_INIT(jpeg0_clk_src.c),
2462 },
2463};
2464
2465static struct rcg_clk jpeg1_clk_src = {
2466 .cmd_rcgr_reg = JPEG1_CMD_RCGR,
2467 .set_rate = set_rate_hid,
2468 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2469 .current_freq = &rcg_dummy_freq,
2470 .base = &virt_bases[MMSS_BASE],
2471 .c = {
2472 .dbg_name = "jpeg1_clk_src",
2473 .ops = &clk_ops_rcg,
2474 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2475 HIGH, 320000000),
2476 CLK_INIT(jpeg1_clk_src.c),
2477 },
2478};
2479
2480static struct rcg_clk jpeg2_clk_src = {
2481 .cmd_rcgr_reg = JPEG2_CMD_RCGR,
2482 .set_rate = set_rate_hid,
2483 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
2484 .current_freq = &rcg_dummy_freq,
2485 .base = &virt_bases[MMSS_BASE],
2486 .c = {
2487 .dbg_name = "jpeg2_clk_src",
2488 .ops = &clk_ops_rcg,
2489 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2490 HIGH, 320000000),
2491 CLK_INIT(jpeg2_clk_src.c),
2492 },
2493};
2494
2495static struct clk_freq_tbl ftbl_camss_mclk0_3_clk[] = {
2496 F_MM(66670000, gpll0, 9, 0, 0),
2497 F_END
2498};
2499
2500static struct rcg_clk mclk0_clk_src = {
2501 .cmd_rcgr_reg = MCLK0_CMD_RCGR,
2502 .set_rate = set_rate_hid,
2503 .freq_tbl = ftbl_camss_mclk0_3_clk,
2504 .current_freq = &rcg_dummy_freq,
2505 .base = &virt_bases[MMSS_BASE],
2506 .c = {
2507 .dbg_name = "mclk0_clk_src",
2508 .ops = &clk_ops_rcg,
2509 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2510 CLK_INIT(mclk0_clk_src.c),
2511 },
2512};
2513
2514static struct rcg_clk mclk1_clk_src = {
2515 .cmd_rcgr_reg = MCLK1_CMD_RCGR,
2516 .set_rate = set_rate_hid,
2517 .freq_tbl = ftbl_camss_mclk0_3_clk,
2518 .current_freq = &rcg_dummy_freq,
2519 .base = &virt_bases[MMSS_BASE],
2520 .c = {
2521 .dbg_name = "mclk1_clk_src",
2522 .ops = &clk_ops_rcg,
2523 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2524 CLK_INIT(mclk1_clk_src.c),
2525 },
2526};
2527
2528static struct rcg_clk mclk2_clk_src = {
2529 .cmd_rcgr_reg = MCLK2_CMD_RCGR,
2530 .set_rate = set_rate_hid,
2531 .freq_tbl = ftbl_camss_mclk0_3_clk,
2532 .current_freq = &rcg_dummy_freq,
2533 .base = &virt_bases[MMSS_BASE],
2534 .c = {
2535 .dbg_name = "mclk2_clk_src",
2536 .ops = &clk_ops_rcg,
2537 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2538 CLK_INIT(mclk2_clk_src.c),
2539 },
2540};
2541
2542static struct rcg_clk mclk3_clk_src = {
2543 .cmd_rcgr_reg = MCLK3_CMD_RCGR,
2544 .set_rate = set_rate_hid,
2545 .freq_tbl = ftbl_camss_mclk0_3_clk,
2546 .current_freq = &rcg_dummy_freq,
2547 .base = &virt_bases[MMSS_BASE],
2548 .c = {
2549 .dbg_name = "mclk3_clk_src",
2550 .ops = &clk_ops_rcg,
2551 VDD_DIG_FMAX_MAP1(LOW, 66670000),
2552 CLK_INIT(mclk3_clk_src.c),
2553 },
2554};
2555
2556static struct clk_freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
2557 F_MM(100000000, gpll0, 6, 0, 0),
2558 F_MM(200000000, mmpll0, 4, 0, 0),
2559 F_END
2560};
2561
2562static struct rcg_clk csi0phytimer_clk_src = {
2563 .cmd_rcgr_reg = CSI0PHYTIMER_CMD_RCGR,
2564 .set_rate = set_rate_hid,
2565 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2566 .current_freq = &rcg_dummy_freq,
2567 .base = &virt_bases[MMSS_BASE],
2568 .c = {
2569 .dbg_name = "csi0phytimer_clk_src",
2570 .ops = &clk_ops_rcg,
2571 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2572 CLK_INIT(csi0phytimer_clk_src.c),
2573 },
2574};
2575
2576static struct rcg_clk csi1phytimer_clk_src = {
2577 .cmd_rcgr_reg = CSI1PHYTIMER_CMD_RCGR,
2578 .set_rate = set_rate_hid,
2579 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2580 .current_freq = &rcg_dummy_freq,
2581 .base = &virt_bases[MMSS_BASE],
2582 .c = {
2583 .dbg_name = "csi1phytimer_clk_src",
2584 .ops = &clk_ops_rcg,
2585 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2586 CLK_INIT(csi1phytimer_clk_src.c),
2587 },
2588};
2589
2590static struct rcg_clk csi2phytimer_clk_src = {
2591 .cmd_rcgr_reg = CSI2PHYTIMER_CMD_RCGR,
2592 .set_rate = set_rate_hid,
2593 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
2594 .current_freq = &rcg_dummy_freq,
2595 .base = &virt_bases[MMSS_BASE],
2596 .c = {
2597 .dbg_name = "csi2phytimer_clk_src",
2598 .ops = &clk_ops_rcg,
2599 VDD_DIG_FMAX_MAP2(LOW, 100000000, NOMINAL, 200000000),
2600 CLK_INIT(csi2phytimer_clk_src.c),
2601 },
2602};
2603
2604static struct clk_freq_tbl ftbl_camss_vfe_cpp_clk[] = {
2605 F_MM(150000000, gpll0, 4, 0, 0),
2606 F_MM(266670000, mmpll0, 3, 0, 0),
2607 F_MM(320000000, mmpll0, 2.5, 0, 0),
2608 F_END
2609};
2610
2611static struct rcg_clk cpp_clk_src = {
2612 .cmd_rcgr_reg = CPP_CMD_RCGR,
2613 .set_rate = set_rate_hid,
2614 .freq_tbl = ftbl_camss_vfe_cpp_clk,
2615 .current_freq = &rcg_dummy_freq,
2616 .base = &virt_bases[MMSS_BASE],
2617 .c = {
2618 .dbg_name = "cpp_clk_src",
2619 .ops = &clk_ops_rcg,
2620 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2621 HIGH, 320000000),
2622 CLK_INIT(cpp_clk_src.c),
2623 },
2624};
2625
2626static struct clk_freq_tbl ftbl_mdss_byte0_1_clk[] = {
2627 F_MDSS( 93750000, dsipll_750, 8, 0, 0),
2628 F_MDSS(187500000, dsipll_750, 4, 0, 0),
2629 F_END
2630};
2631
2632static struct rcg_clk byte0_clk_src = {
2633 .cmd_rcgr_reg = BYTE0_CMD_RCGR,
2634 .set_rate = set_rate_hid,
2635 .freq_tbl = ftbl_mdss_byte0_1_clk,
2636 .current_freq = &rcg_dummy_freq,
2637 .base = &virt_bases[MMSS_BASE],
2638 .c = {
2639 .dbg_name = "byte0_clk_src",
2640 .ops = &clk_ops_rcg,
2641 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
2642 HIGH, 188000000),
2643 CLK_INIT(byte0_clk_src.c),
2644 },
2645};
2646
2647static struct rcg_clk byte1_clk_src = {
2648 .cmd_rcgr_reg = BYTE1_CMD_RCGR,
2649 .set_rate = set_rate_hid,
2650 .freq_tbl = ftbl_mdss_byte0_1_clk,
2651 .current_freq = &rcg_dummy_freq,
2652 .base = &virt_bases[MMSS_BASE],
2653 .c = {
2654 .dbg_name = "byte1_clk_src",
2655 .ops = &clk_ops_rcg,
2656 VDD_DIG_FMAX_MAP3(LOW, 93800000, NOMINAL, 187500000,
2657 HIGH, 188000000),
2658 CLK_INIT(byte1_clk_src.c),
2659 },
2660};
2661
2662static struct clk_freq_tbl ftbl_mdss_edpaux_clk[] = {
2663 F_MM(19200000, cxo, 1, 0, 0),
2664 F_END
2665};
2666
2667static struct rcg_clk edpaux_clk_src = {
2668 .cmd_rcgr_reg = EDPAUX_CMD_RCGR,
2669 .set_rate = set_rate_hid,
2670 .freq_tbl = ftbl_mdss_edpaux_clk,
2671 .current_freq = &rcg_dummy_freq,
2672 .base = &virt_bases[MMSS_BASE],
2673 .c = {
2674 .dbg_name = "edpaux_clk_src",
2675 .ops = &clk_ops_rcg,
2676 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2677 CLK_INIT(edpaux_clk_src.c),
2678 },
2679};
2680
2681static struct clk_freq_tbl ftbl_mdss_edplink_clk[] = {
2682 F_MDSS(135000000, edppll_270, 2, 0, 0),
2683 F_MDSS(270000000, edppll_270, 11, 0, 0),
2684 F_END
2685};
2686
2687static struct rcg_clk edplink_clk_src = {
2688 .cmd_rcgr_reg = EDPLINK_CMD_RCGR,
2689 .set_rate = set_rate_hid,
2690 .freq_tbl = ftbl_mdss_edplink_clk,
2691 .current_freq = &rcg_dummy_freq,
2692 .base = &virt_bases[MMSS_BASE],
2693 .c = {
2694 .dbg_name = "edplink_clk_src",
2695 .ops = &clk_ops_rcg,
2696 VDD_DIG_FMAX_MAP2(LOW, 135000000, NOMINAL, 270000000),
2697 CLK_INIT(edplink_clk_src.c),
2698 },
2699};
2700
2701static struct clk_freq_tbl ftbl_mdss_edppixel_clk[] = {
2702 F_MDSS(175000000, edppll_350, 2, 0, 0),
2703 F_MDSS(350000000, edppll_350, 11, 0, 0),
2704 F_END
2705};
2706
2707static struct rcg_clk edppixel_clk_src = {
2708 .cmd_rcgr_reg = EDPPIXEL_CMD_RCGR,
2709 .set_rate = set_rate_mnd,
2710 .freq_tbl = ftbl_mdss_edppixel_clk,
2711 .current_freq = &rcg_dummy_freq,
2712 .base = &virt_bases[MMSS_BASE],
2713 .c = {
2714 .dbg_name = "edppixel_clk_src",
2715 .ops = &clk_ops_rcg_mnd,
2716 VDD_DIG_FMAX_MAP2(LOW, 175000000, NOMINAL, 350000000),
2717 CLK_INIT(edppixel_clk_src.c),
2718 },
2719};
2720
2721static struct clk_freq_tbl ftbl_mdss_esc0_1_clk[] = {
2722 F_MM(19200000, cxo, 1, 0, 0),
2723 F_END
2724};
2725
2726static struct rcg_clk esc0_clk_src = {
2727 .cmd_rcgr_reg = ESC0_CMD_RCGR,
2728 .set_rate = set_rate_hid,
2729 .freq_tbl = ftbl_mdss_esc0_1_clk,
2730 .current_freq = &rcg_dummy_freq,
2731 .base = &virt_bases[MMSS_BASE],
2732 .c = {
2733 .dbg_name = "esc0_clk_src",
2734 .ops = &clk_ops_rcg,
2735 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2736 CLK_INIT(esc0_clk_src.c),
2737 },
2738};
2739
2740static struct rcg_clk esc1_clk_src = {
2741 .cmd_rcgr_reg = ESC1_CMD_RCGR,
2742 .set_rate = set_rate_hid,
2743 .freq_tbl = ftbl_mdss_esc0_1_clk,
2744 .current_freq = &rcg_dummy_freq,
2745 .base = &virt_bases[MMSS_BASE],
2746 .c = {
2747 .dbg_name = "esc1_clk_src",
2748 .ops = &clk_ops_rcg,
2749 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2750 CLK_INIT(esc1_clk_src.c),
2751 },
2752};
2753
2754static struct clk_freq_tbl ftbl_mdss_extpclk_clk[] = {
2755 F_MDSS(148500000, hdmipll_297, 2, 0, 0),
2756 F_END
2757};
2758
2759static struct rcg_clk extpclk_clk_src = {
2760 .cmd_rcgr_reg = EXTPCLK_CMD_RCGR,
2761 .set_rate = set_rate_hid,
2762 .freq_tbl = ftbl_mdss_extpclk_clk,
2763 .current_freq = &rcg_dummy_freq,
2764 .base = &virt_bases[MMSS_BASE],
2765 .c = {
2766 .dbg_name = "extpclk_clk_src",
2767 .ops = &clk_ops_rcg,
2768 VDD_DIG_FMAX_MAP2(LOW, 148500000, NOMINAL, 297000000),
2769 CLK_INIT(extpclk_clk_src.c),
2770 },
2771};
2772
2773static struct clk_freq_tbl ftbl_mdss_hdmi_clk[] = {
2774 F_MDSS(19200000, cxo, 1, 0, 0),
2775 F_END
2776};
2777
2778static struct rcg_clk hdmi_clk_src = {
2779 .cmd_rcgr_reg = HDMI_CMD_RCGR,
2780 .set_rate = set_rate_hid,
2781 .freq_tbl = ftbl_mdss_hdmi_clk,
2782 .current_freq = &rcg_dummy_freq,
2783 .base = &virt_bases[MMSS_BASE],
2784 .c = {
2785 .dbg_name = "hdmi_clk_src",
2786 .ops = &clk_ops_rcg,
2787 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2788 CLK_INIT(hdmi_clk_src.c),
2789 },
2790};
2791
2792static struct clk_freq_tbl ftbl_mdss_pclk0_1_clk[] = {
2793 F_MDSS(125000000, dsipll_250, 2, 0, 0),
2794 F_MDSS(250000000, dsipll_250, 1, 0, 0),
2795 F_END
2796};
2797
2798static struct rcg_clk pclk0_clk_src = {
2799 .cmd_rcgr_reg = PCLK0_CMD_RCGR,
2800 .set_rate = set_rate_mnd,
2801 .freq_tbl = ftbl_mdss_pclk0_1_clk,
2802 .current_freq = &rcg_dummy_freq,
2803 .base = &virt_bases[MMSS_BASE],
2804 .c = {
2805 .dbg_name = "pclk0_clk_src",
2806 .ops = &clk_ops_rcg_mnd,
2807 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
2808 CLK_INIT(pclk0_clk_src.c),
2809 },
2810};
2811
2812static struct rcg_clk pclk1_clk_src = {
2813 .cmd_rcgr_reg = PCLK1_CMD_RCGR,
2814 .set_rate = set_rate_mnd,
2815 .freq_tbl = ftbl_mdss_pclk0_1_clk,
2816 .current_freq = &rcg_dummy_freq,
2817 .base = &virt_bases[MMSS_BASE],
2818 .c = {
2819 .dbg_name = "pclk1_clk_src",
2820 .ops = &clk_ops_rcg_mnd,
2821 VDD_DIG_FMAX_MAP2(LOW, 125000000, NOMINAL, 250000000),
2822 CLK_INIT(pclk1_clk_src.c),
2823 },
2824};
2825
2826static struct clk_freq_tbl ftbl_mdss_vsync_clk[] = {
2827 F_MDSS(19200000, cxo, 1, 0, 0),
2828 F_END
2829};
2830
2831static struct rcg_clk vsync_clk_src = {
2832 .cmd_rcgr_reg = VSYNC_CMD_RCGR,
2833 .set_rate = set_rate_hid,
2834 .freq_tbl = ftbl_mdss_vsync_clk,
2835 .current_freq = &rcg_dummy_freq,
2836 .base = &virt_bases[MMSS_BASE],
2837 .c = {
2838 .dbg_name = "vsync_clk_src",
2839 .ops = &clk_ops_rcg,
2840 VDD_DIG_FMAX_MAP2(LOW, 20000000, NOMINAL, 40000000),
2841 CLK_INIT(vsync_clk_src.c),
2842 },
2843};
2844
2845static struct clk_freq_tbl ftbl_venus0_vcodec0_clk[] = {
2846 F_MM( 50000000, gpll0, 12, 0, 0),
2847 F_MM(100000000, gpll0, 6, 0, 0),
2848 F_MM(133330000, mmpll0, 6, 0, 0),
2849 F_MM(200000000, mmpll0, 4, 0, 0),
2850 F_MM(266670000, mmpll0, 3, 0, 0),
2851 F_MM(410000000, mmpll3, 2, 0, 0),
2852 F_END
2853};
2854
2855static struct rcg_clk vcodec0_clk_src = {
2856 .cmd_rcgr_reg = VCODEC0_CMD_RCGR,
2857 .set_rate = set_rate_mnd,
2858 .freq_tbl = ftbl_venus0_vcodec0_clk,
2859 .current_freq = &rcg_dummy_freq,
2860 .base = &virt_bases[MMSS_BASE],
2861 .c = {
2862 .dbg_name = "vcodec0_clk_src",
2863 .ops = &clk_ops_rcg_mnd,
2864 VDD_DIG_FMAX_MAP3(LOW, 133330000, NOMINAL, 266670000,
2865 HIGH, 410000000),
2866 CLK_INIT(vcodec0_clk_src.c),
2867 },
2868};
2869
2870static struct branch_clk camss_cci_cci_ahb_clk = {
2871 .cbcr_reg = CAMSS_CCI_CCI_AHB_CBCR,
2872 .parent = &ahb_clk_src.c,
2873 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002874 .base = &virt_bases[MMSS_BASE],
2875 .c = {
2876 .dbg_name = "camss_cci_cci_ahb_clk",
2877 .ops = &clk_ops_branch,
2878 CLK_INIT(camss_cci_cci_ahb_clk.c),
2879 },
2880};
2881
2882static struct branch_clk camss_cci_cci_clk = {
2883 .cbcr_reg = CAMSS_CCI_CCI_CBCR,
2884 .parent = &cci_clk_src.c,
2885 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002886 .base = &virt_bases[MMSS_BASE],
2887 .c = {
2888 .dbg_name = "camss_cci_cci_clk",
2889 .ops = &clk_ops_branch,
2890 CLK_INIT(camss_cci_cci_clk.c),
2891 },
2892};
2893
2894static struct branch_clk camss_csi0_ahb_clk = {
2895 .cbcr_reg = CAMSS_CSI0_AHB_CBCR,
2896 .parent = &ahb_clk_src.c,
2897 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002898 .base = &virt_bases[MMSS_BASE],
2899 .c = {
2900 .dbg_name = "camss_csi0_ahb_clk",
2901 .ops = &clk_ops_branch,
2902 CLK_INIT(camss_csi0_ahb_clk.c),
2903 },
2904};
2905
2906static struct branch_clk camss_csi0_clk = {
2907 .cbcr_reg = CAMSS_CSI0_CBCR,
2908 .parent = &csi0_clk_src.c,
2909 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002910 .base = &virt_bases[MMSS_BASE],
2911 .c = {
2912 .dbg_name = "camss_csi0_clk",
2913 .ops = &clk_ops_branch,
2914 CLK_INIT(camss_csi0_clk.c),
2915 },
2916};
2917
2918static struct branch_clk camss_csi0phy_clk = {
2919 .cbcr_reg = CAMSS_CSI0PHY_CBCR,
2920 .parent = &csi0_clk_src.c,
2921 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002922 .base = &virt_bases[MMSS_BASE],
2923 .c = {
2924 .dbg_name = "camss_csi0phy_clk",
2925 .ops = &clk_ops_branch,
2926 CLK_INIT(camss_csi0phy_clk.c),
2927 },
2928};
2929
2930static struct branch_clk camss_csi0pix_clk = {
2931 .cbcr_reg = CAMSS_CSI0PIX_CBCR,
2932 .parent = &csi0_clk_src.c,
2933 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002934 .base = &virt_bases[MMSS_BASE],
2935 .c = {
2936 .dbg_name = "camss_csi0pix_clk",
2937 .ops = &clk_ops_branch,
2938 CLK_INIT(camss_csi0pix_clk.c),
2939 },
2940};
2941
2942static struct branch_clk camss_csi0rdi_clk = {
2943 .cbcr_reg = CAMSS_CSI0RDI_CBCR,
2944 .parent = &csi0_clk_src.c,
2945 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002946 .base = &virt_bases[MMSS_BASE],
2947 .c = {
2948 .dbg_name = "camss_csi0rdi_clk",
2949 .ops = &clk_ops_branch,
2950 CLK_INIT(camss_csi0rdi_clk.c),
2951 },
2952};
2953
2954static struct branch_clk camss_csi1_ahb_clk = {
2955 .cbcr_reg = CAMSS_CSI1_AHB_CBCR,
2956 .parent = &ahb_clk_src.c,
2957 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002958 .base = &virt_bases[MMSS_BASE],
2959 .c = {
2960 .dbg_name = "camss_csi1_ahb_clk",
2961 .ops = &clk_ops_branch,
2962 CLK_INIT(camss_csi1_ahb_clk.c),
2963 },
2964};
2965
2966static struct branch_clk camss_csi1_clk = {
2967 .cbcr_reg = CAMSS_CSI1_CBCR,
2968 .parent = &csi1_clk_src.c,
2969 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002970 .base = &virt_bases[MMSS_BASE],
2971 .c = {
2972 .dbg_name = "camss_csi1_clk",
2973 .ops = &clk_ops_branch,
2974 CLK_INIT(camss_csi1_clk.c),
2975 },
2976};
2977
2978static struct branch_clk camss_csi1phy_clk = {
2979 .cbcr_reg = CAMSS_CSI1PHY_CBCR,
2980 .parent = &csi1_clk_src.c,
2981 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002982 .base = &virt_bases[MMSS_BASE],
2983 .c = {
2984 .dbg_name = "camss_csi1phy_clk",
2985 .ops = &clk_ops_branch,
2986 CLK_INIT(camss_csi1phy_clk.c),
2987 },
2988};
2989
2990static struct branch_clk camss_csi1pix_clk = {
2991 .cbcr_reg = CAMSS_CSI1PIX_CBCR,
2992 .parent = &csi1_clk_src.c,
2993 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07002994 .base = &virt_bases[MMSS_BASE],
2995 .c = {
2996 .dbg_name = "camss_csi1pix_clk",
2997 .ops = &clk_ops_branch,
2998 CLK_INIT(camss_csi1pix_clk.c),
2999 },
3000};
3001
3002static struct branch_clk camss_csi1rdi_clk = {
3003 .cbcr_reg = CAMSS_CSI1RDI_CBCR,
3004 .parent = &csi1_clk_src.c,
3005 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003006 .base = &virt_bases[MMSS_BASE],
3007 .c = {
3008 .dbg_name = "camss_csi1rdi_clk",
3009 .ops = &clk_ops_branch,
3010 CLK_INIT(camss_csi1rdi_clk.c),
3011 },
3012};
3013
3014static struct branch_clk camss_csi2_ahb_clk = {
3015 .cbcr_reg = CAMSS_CSI2_AHB_CBCR,
3016 .parent = &ahb_clk_src.c,
3017 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003018 .base = &virt_bases[MMSS_BASE],
3019 .c = {
3020 .dbg_name = "camss_csi2_ahb_clk",
3021 .ops = &clk_ops_branch,
3022 CLK_INIT(camss_csi2_ahb_clk.c),
3023 },
3024};
3025
3026static struct branch_clk camss_csi2_clk = {
3027 .cbcr_reg = CAMSS_CSI2_CBCR,
3028 .parent = &csi2_clk_src.c,
3029 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003030 .base = &virt_bases[MMSS_BASE],
3031 .c = {
3032 .dbg_name = "camss_csi2_clk",
3033 .ops = &clk_ops_branch,
3034 CLK_INIT(camss_csi2_clk.c),
3035 },
3036};
3037
3038static struct branch_clk camss_csi2phy_clk = {
3039 .cbcr_reg = CAMSS_CSI2PHY_CBCR,
3040 .parent = &csi2_clk_src.c,
3041 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003042 .base = &virt_bases[MMSS_BASE],
3043 .c = {
3044 .dbg_name = "camss_csi2phy_clk",
3045 .ops = &clk_ops_branch,
3046 CLK_INIT(camss_csi2phy_clk.c),
3047 },
3048};
3049
3050static struct branch_clk camss_csi2pix_clk = {
3051 .cbcr_reg = CAMSS_CSI2PIX_CBCR,
3052 .parent = &csi2_clk_src.c,
3053 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003054 .base = &virt_bases[MMSS_BASE],
3055 .c = {
3056 .dbg_name = "camss_csi2pix_clk",
3057 .ops = &clk_ops_branch,
3058 CLK_INIT(camss_csi2pix_clk.c),
3059 },
3060};
3061
3062static struct branch_clk camss_csi2rdi_clk = {
3063 .cbcr_reg = CAMSS_CSI2RDI_CBCR,
3064 .parent = &csi2_clk_src.c,
3065 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003066 .base = &virt_bases[MMSS_BASE],
3067 .c = {
3068 .dbg_name = "camss_csi2rdi_clk",
3069 .ops = &clk_ops_branch,
3070 CLK_INIT(camss_csi2rdi_clk.c),
3071 },
3072};
3073
3074static struct branch_clk camss_csi3_ahb_clk = {
3075 .cbcr_reg = CAMSS_CSI3_AHB_CBCR,
3076 .parent = &ahb_clk_src.c,
3077 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003078 .base = &virt_bases[MMSS_BASE],
3079 .c = {
3080 .dbg_name = "camss_csi3_ahb_clk",
3081 .ops = &clk_ops_branch,
3082 CLK_INIT(camss_csi3_ahb_clk.c),
3083 },
3084};
3085
3086static struct branch_clk camss_csi3_clk = {
3087 .cbcr_reg = CAMSS_CSI3_CBCR,
3088 .parent = &csi3_clk_src.c,
3089 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003090 .base = &virt_bases[MMSS_BASE],
3091 .c = {
3092 .dbg_name = "camss_csi3_clk",
3093 .ops = &clk_ops_branch,
3094 CLK_INIT(camss_csi3_clk.c),
3095 },
3096};
3097
3098static struct branch_clk camss_csi3phy_clk = {
3099 .cbcr_reg = CAMSS_CSI3PHY_CBCR,
3100 .parent = &csi3_clk_src.c,
3101 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003102 .base = &virt_bases[MMSS_BASE],
3103 .c = {
3104 .dbg_name = "camss_csi3phy_clk",
3105 .ops = &clk_ops_branch,
3106 CLK_INIT(camss_csi3phy_clk.c),
3107 },
3108};
3109
3110static struct branch_clk camss_csi3pix_clk = {
3111 .cbcr_reg = CAMSS_CSI3PIX_CBCR,
3112 .parent = &csi3_clk_src.c,
3113 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003114 .base = &virt_bases[MMSS_BASE],
3115 .c = {
3116 .dbg_name = "camss_csi3pix_clk",
3117 .ops = &clk_ops_branch,
3118 CLK_INIT(camss_csi3pix_clk.c),
3119 },
3120};
3121
3122static struct branch_clk camss_csi3rdi_clk = {
3123 .cbcr_reg = CAMSS_CSI3RDI_CBCR,
3124 .parent = &csi3_clk_src.c,
3125 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003126 .base = &virt_bases[MMSS_BASE],
3127 .c = {
3128 .dbg_name = "camss_csi3rdi_clk",
3129 .ops = &clk_ops_branch,
3130 CLK_INIT(camss_csi3rdi_clk.c),
3131 },
3132};
3133
3134static struct branch_clk camss_csi_vfe0_clk = {
3135 .cbcr_reg = CAMSS_CSI_VFE0_CBCR,
3136 .parent = &vfe0_clk_src.c,
3137 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003138 .base = &virt_bases[MMSS_BASE],
3139 .c = {
3140 .dbg_name = "camss_csi_vfe0_clk",
3141 .ops = &clk_ops_branch,
3142 CLK_INIT(camss_csi_vfe0_clk.c),
3143 },
3144};
3145
3146static struct branch_clk camss_csi_vfe1_clk = {
3147 .cbcr_reg = CAMSS_CSI_VFE1_CBCR,
3148 .parent = &vfe1_clk_src.c,
3149 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003150 .base = &virt_bases[MMSS_BASE],
3151 .c = {
3152 .dbg_name = "camss_csi_vfe1_clk",
3153 .ops = &clk_ops_branch,
3154 CLK_INIT(camss_csi_vfe1_clk.c),
3155 },
3156};
3157
3158static struct branch_clk camss_gp0_clk = {
3159 .cbcr_reg = CAMSS_GP0_CBCR,
3160 .parent = &mmss_gp0_clk_src.c,
3161 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003162 .base = &virt_bases[MMSS_BASE],
3163 .c = {
3164 .dbg_name = "camss_gp0_clk",
3165 .ops = &clk_ops_branch,
3166 CLK_INIT(camss_gp0_clk.c),
3167 },
3168};
3169
3170static struct branch_clk camss_gp1_clk = {
3171 .cbcr_reg = CAMSS_GP1_CBCR,
3172 .parent = &mmss_gp1_clk_src.c,
3173 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003174 .base = &virt_bases[MMSS_BASE],
3175 .c = {
3176 .dbg_name = "camss_gp1_clk",
3177 .ops = &clk_ops_branch,
3178 CLK_INIT(camss_gp1_clk.c),
3179 },
3180};
3181
3182static struct branch_clk camss_ispif_ahb_clk = {
3183 .cbcr_reg = CAMSS_ISPIF_AHB_CBCR,
3184 .parent = &ahb_clk_src.c,
3185 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003186 .base = &virt_bases[MMSS_BASE],
3187 .c = {
3188 .dbg_name = "camss_ispif_ahb_clk",
3189 .ops = &clk_ops_branch,
3190 CLK_INIT(camss_ispif_ahb_clk.c),
3191 },
3192};
3193
3194static struct branch_clk camss_jpeg_jpeg0_clk = {
3195 .cbcr_reg = CAMSS_JPEG_JPEG0_CBCR,
3196 .parent = &jpeg0_clk_src.c,
3197 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003198 .base = &virt_bases[MMSS_BASE],
3199 .c = {
3200 .dbg_name = "camss_jpeg_jpeg0_clk",
3201 .ops = &clk_ops_branch,
3202 CLK_INIT(camss_jpeg_jpeg0_clk.c),
3203 },
3204};
3205
3206static struct branch_clk camss_jpeg_jpeg1_clk = {
3207 .cbcr_reg = CAMSS_JPEG_JPEG1_CBCR,
3208 .parent = &jpeg1_clk_src.c,
3209 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003210 .base = &virt_bases[MMSS_BASE],
3211 .c = {
3212 .dbg_name = "camss_jpeg_jpeg1_clk",
3213 .ops = &clk_ops_branch,
3214 CLK_INIT(camss_jpeg_jpeg1_clk.c),
3215 },
3216};
3217
3218static struct branch_clk camss_jpeg_jpeg2_clk = {
3219 .cbcr_reg = CAMSS_JPEG_JPEG2_CBCR,
3220 .parent = &jpeg2_clk_src.c,
3221 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003222 .base = &virt_bases[MMSS_BASE],
3223 .c = {
3224 .dbg_name = "camss_jpeg_jpeg2_clk",
3225 .ops = &clk_ops_branch,
3226 CLK_INIT(camss_jpeg_jpeg2_clk.c),
3227 },
3228};
3229
3230static struct branch_clk camss_jpeg_jpeg_ahb_clk = {
3231 .cbcr_reg = CAMSS_JPEG_JPEG_AHB_CBCR,
3232 .parent = &ahb_clk_src.c,
3233 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003234 .base = &virt_bases[MMSS_BASE],
3235 .c = {
3236 .dbg_name = "camss_jpeg_jpeg_ahb_clk",
3237 .ops = &clk_ops_branch,
3238 CLK_INIT(camss_jpeg_jpeg_ahb_clk.c),
3239 },
3240};
3241
3242static struct branch_clk camss_jpeg_jpeg_axi_clk = {
3243 .cbcr_reg = CAMSS_JPEG_JPEG_AXI_CBCR,
3244 .parent = &axi_clk_src.c,
3245 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003246 .base = &virt_bases[MMSS_BASE],
3247 .c = {
3248 .dbg_name = "camss_jpeg_jpeg_axi_clk",
3249 .ops = &clk_ops_branch,
3250 CLK_INIT(camss_jpeg_jpeg_axi_clk.c),
3251 },
3252};
3253
3254static struct branch_clk camss_jpeg_jpeg_ocmemnoc_clk = {
3255 .cbcr_reg = CAMSS_JPEG_JPEG_OCMEMNOC_CBCR,
3256 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003257 .base = &virt_bases[MMSS_BASE],
3258 .c = {
3259 .dbg_name = "camss_jpeg_jpeg_ocmemnoc_clk",
3260 .ops = &clk_ops_branch,
3261 CLK_INIT(camss_jpeg_jpeg_ocmemnoc_clk.c),
3262 },
3263};
3264
3265static struct branch_clk camss_mclk0_clk = {
3266 .cbcr_reg = CAMSS_MCLK0_CBCR,
3267 .parent = &mclk0_clk_src.c,
3268 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003269 .base = &virt_bases[MMSS_BASE],
3270 .c = {
3271 .dbg_name = "camss_mclk0_clk",
3272 .ops = &clk_ops_branch,
3273 CLK_INIT(camss_mclk0_clk.c),
3274 },
3275};
3276
3277static struct branch_clk camss_mclk1_clk = {
3278 .cbcr_reg = CAMSS_MCLK1_CBCR,
3279 .parent = &mclk1_clk_src.c,
3280 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003281 .base = &virt_bases[MMSS_BASE],
3282 .c = {
3283 .dbg_name = "camss_mclk1_clk",
3284 .ops = &clk_ops_branch,
3285 CLK_INIT(camss_mclk1_clk.c),
3286 },
3287};
3288
3289static struct branch_clk camss_mclk2_clk = {
3290 .cbcr_reg = CAMSS_MCLK2_CBCR,
3291 .parent = &mclk2_clk_src.c,
3292 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003293 .base = &virt_bases[MMSS_BASE],
3294 .c = {
3295 .dbg_name = "camss_mclk2_clk",
3296 .ops = &clk_ops_branch,
3297 CLK_INIT(camss_mclk2_clk.c),
3298 },
3299};
3300
3301static struct branch_clk camss_mclk3_clk = {
3302 .cbcr_reg = CAMSS_MCLK3_CBCR,
3303 .parent = &mclk3_clk_src.c,
3304 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003305 .base = &virt_bases[MMSS_BASE],
3306 .c = {
3307 .dbg_name = "camss_mclk3_clk",
3308 .ops = &clk_ops_branch,
3309 CLK_INIT(camss_mclk3_clk.c),
3310 },
3311};
3312
3313static struct branch_clk camss_micro_ahb_clk = {
3314 .cbcr_reg = CAMSS_MICRO_AHB_CBCR,
3315 .parent = &ahb_clk_src.c,
3316 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003317 .base = &virt_bases[MMSS_BASE],
3318 .c = {
3319 .dbg_name = "camss_micro_ahb_clk",
3320 .ops = &clk_ops_branch,
3321 CLK_INIT(camss_micro_ahb_clk.c),
3322 },
3323};
3324
3325static struct branch_clk camss_phy0_csi0phytimer_clk = {
3326 .cbcr_reg = CAMSS_PHY0_CSI0PHYTIMER_CBCR,
3327 .parent = &csi0phytimer_clk_src.c,
3328 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003329 .base = &virt_bases[MMSS_BASE],
3330 .c = {
3331 .dbg_name = "camss_phy0_csi0phytimer_clk",
3332 .ops = &clk_ops_branch,
3333 CLK_INIT(camss_phy0_csi0phytimer_clk.c),
3334 },
3335};
3336
3337static struct branch_clk camss_phy1_csi1phytimer_clk = {
3338 .cbcr_reg = CAMSS_PHY1_CSI1PHYTIMER_CBCR,
3339 .parent = &csi1phytimer_clk_src.c,
3340 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003341 .base = &virt_bases[MMSS_BASE],
3342 .c = {
3343 .dbg_name = "camss_phy1_csi1phytimer_clk",
3344 .ops = &clk_ops_branch,
3345 CLK_INIT(camss_phy1_csi1phytimer_clk.c),
3346 },
3347};
3348
3349static struct branch_clk camss_phy2_csi2phytimer_clk = {
3350 .cbcr_reg = CAMSS_PHY2_CSI2PHYTIMER_CBCR,
3351 .parent = &csi2phytimer_clk_src.c,
3352 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003353 .base = &virt_bases[MMSS_BASE],
3354 .c = {
3355 .dbg_name = "camss_phy2_csi2phytimer_clk",
3356 .ops = &clk_ops_branch,
3357 CLK_INIT(camss_phy2_csi2phytimer_clk.c),
3358 },
3359};
3360
3361static struct branch_clk camss_top_ahb_clk = {
3362 .cbcr_reg = CAMSS_TOP_AHB_CBCR,
3363 .parent = &ahb_clk_src.c,
3364 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003365 .base = &virt_bases[MMSS_BASE],
3366 .c = {
3367 .dbg_name = "camss_top_ahb_clk",
3368 .ops = &clk_ops_branch,
3369 CLK_INIT(camss_top_ahb_clk.c),
3370 },
3371};
3372
3373static struct branch_clk camss_vfe_cpp_ahb_clk = {
3374 .cbcr_reg = CAMSS_VFE_CPP_AHB_CBCR,
3375 .parent = &ahb_clk_src.c,
3376 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003377 .base = &virt_bases[MMSS_BASE],
3378 .c = {
3379 .dbg_name = "camss_vfe_cpp_ahb_clk",
3380 .ops = &clk_ops_branch,
3381 CLK_INIT(camss_vfe_cpp_ahb_clk.c),
3382 },
3383};
3384
3385static struct branch_clk camss_vfe_cpp_clk = {
3386 .cbcr_reg = CAMSS_VFE_CPP_CBCR,
3387 .parent = &cpp_clk_src.c,
3388 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003389 .base = &virt_bases[MMSS_BASE],
3390 .c = {
3391 .dbg_name = "camss_vfe_cpp_clk",
3392 .ops = &clk_ops_branch,
3393 CLK_INIT(camss_vfe_cpp_clk.c),
3394 },
3395};
3396
3397static struct branch_clk camss_vfe_vfe0_clk = {
3398 .cbcr_reg = CAMSS_VFE_VFE0_CBCR,
3399 .parent = &vfe0_clk_src.c,
3400 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003401 .base = &virt_bases[MMSS_BASE],
3402 .c = {
3403 .dbg_name = "camss_vfe_vfe0_clk",
3404 .ops = &clk_ops_branch,
3405 CLK_INIT(camss_vfe_vfe0_clk.c),
3406 },
3407};
3408
3409static struct branch_clk camss_vfe_vfe1_clk = {
3410 .cbcr_reg = CAMSS_VFE_VFE1_CBCR,
3411 .parent = &vfe1_clk_src.c,
3412 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003413 .base = &virt_bases[MMSS_BASE],
3414 .c = {
3415 .dbg_name = "camss_vfe_vfe1_clk",
3416 .ops = &clk_ops_branch,
3417 CLK_INIT(camss_vfe_vfe1_clk.c),
3418 },
3419};
3420
3421static struct branch_clk camss_vfe_vfe_ahb_clk = {
3422 .cbcr_reg = CAMSS_VFE_VFE_AHB_CBCR,
3423 .parent = &ahb_clk_src.c,
3424 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003425 .base = &virt_bases[MMSS_BASE],
3426 .c = {
3427 .dbg_name = "camss_vfe_vfe_ahb_clk",
3428 .ops = &clk_ops_branch,
3429 CLK_INIT(camss_vfe_vfe_ahb_clk.c),
3430 },
3431};
3432
3433static struct branch_clk camss_vfe_vfe_axi_clk = {
3434 .cbcr_reg = CAMSS_VFE_VFE_AXI_CBCR,
3435 .parent = &axi_clk_src.c,
3436 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003437 .base = &virt_bases[MMSS_BASE],
3438 .c = {
3439 .dbg_name = "camss_vfe_vfe_axi_clk",
3440 .ops = &clk_ops_branch,
3441 CLK_INIT(camss_vfe_vfe_axi_clk.c),
3442 },
3443};
3444
3445static struct branch_clk camss_vfe_vfe_ocmemnoc_clk = {
3446 .cbcr_reg = CAMSS_VFE_VFE_OCMEMNOC_CBCR,
3447 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003448 .base = &virt_bases[MMSS_BASE],
3449 .c = {
3450 .dbg_name = "camss_vfe_vfe_ocmemnoc_clk",
3451 .ops = &clk_ops_branch,
3452 CLK_INIT(camss_vfe_vfe_ocmemnoc_clk.c),
3453 },
3454};
3455
3456static struct branch_clk mdss_ahb_clk = {
3457 .cbcr_reg = MDSS_AHB_CBCR,
3458 .parent = &ahb_clk_src.c,
3459 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003460 .base = &virt_bases[MMSS_BASE],
3461 .c = {
3462 .dbg_name = "mdss_ahb_clk",
3463 .ops = &clk_ops_branch,
3464 CLK_INIT(mdss_ahb_clk.c),
3465 },
3466};
3467
3468static struct branch_clk mdss_axi_clk = {
3469 .cbcr_reg = MDSS_AXI_CBCR,
3470 .parent = &axi_clk_src.c,
3471 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003472 .base = &virt_bases[MMSS_BASE],
3473 .c = {
3474 .dbg_name = "mdss_axi_clk",
3475 .ops = &clk_ops_branch,
3476 CLK_INIT(mdss_axi_clk.c),
3477 },
3478};
3479
3480static struct branch_clk mdss_byte0_clk = {
3481 .cbcr_reg = MDSS_BYTE0_CBCR,
3482 .parent = &byte0_clk_src.c,
3483 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003484 .base = &virt_bases[MMSS_BASE],
3485 .c = {
3486 .dbg_name = "mdss_byte0_clk",
3487 .ops = &clk_ops_branch,
3488 CLK_INIT(mdss_byte0_clk.c),
3489 },
3490};
3491
3492static struct branch_clk mdss_byte1_clk = {
3493 .cbcr_reg = MDSS_BYTE1_CBCR,
3494 .parent = &byte1_clk_src.c,
3495 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003496 .base = &virt_bases[MMSS_BASE],
3497 .c = {
3498 .dbg_name = "mdss_byte1_clk",
3499 .ops = &clk_ops_branch,
3500 CLK_INIT(mdss_byte1_clk.c),
3501 },
3502};
3503
3504static struct branch_clk mdss_edpaux_clk = {
3505 .cbcr_reg = MDSS_EDPAUX_CBCR,
3506 .parent = &edpaux_clk_src.c,
3507 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003508 .base = &virt_bases[MMSS_BASE],
3509 .c = {
3510 .dbg_name = "mdss_edpaux_clk",
3511 .ops = &clk_ops_branch,
3512 CLK_INIT(mdss_edpaux_clk.c),
3513 },
3514};
3515
3516static struct branch_clk mdss_edplink_clk = {
3517 .cbcr_reg = MDSS_EDPLINK_CBCR,
3518 .parent = &edplink_clk_src.c,
3519 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003520 .base = &virt_bases[MMSS_BASE],
3521 .c = {
3522 .dbg_name = "mdss_edplink_clk",
3523 .ops = &clk_ops_branch,
3524 CLK_INIT(mdss_edplink_clk.c),
3525 },
3526};
3527
3528static struct branch_clk mdss_edppixel_clk = {
3529 .cbcr_reg = MDSS_EDPPIXEL_CBCR,
3530 .parent = &edppixel_clk_src.c,
3531 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003532 .base = &virt_bases[MMSS_BASE],
3533 .c = {
3534 .dbg_name = "mdss_edppixel_clk",
3535 .ops = &clk_ops_branch,
3536 CLK_INIT(mdss_edppixel_clk.c),
3537 },
3538};
3539
3540static struct branch_clk mdss_esc0_clk = {
3541 .cbcr_reg = MDSS_ESC0_CBCR,
3542 .parent = &esc0_clk_src.c,
3543 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003544 .base = &virt_bases[MMSS_BASE],
3545 .c = {
3546 .dbg_name = "mdss_esc0_clk",
3547 .ops = &clk_ops_branch,
3548 CLK_INIT(mdss_esc0_clk.c),
3549 },
3550};
3551
3552static struct branch_clk mdss_esc1_clk = {
3553 .cbcr_reg = MDSS_ESC1_CBCR,
3554 .parent = &esc1_clk_src.c,
3555 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003556 .base = &virt_bases[MMSS_BASE],
3557 .c = {
3558 .dbg_name = "mdss_esc1_clk",
3559 .ops = &clk_ops_branch,
3560 CLK_INIT(mdss_esc1_clk.c),
3561 },
3562};
3563
3564static struct branch_clk mdss_extpclk_clk = {
3565 .cbcr_reg = MDSS_EXTPCLK_CBCR,
3566 .parent = &extpclk_clk_src.c,
3567 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003568 .base = &virt_bases[MMSS_BASE],
3569 .c = {
3570 .dbg_name = "mdss_extpclk_clk",
3571 .ops = &clk_ops_branch,
3572 CLK_INIT(mdss_extpclk_clk.c),
3573 },
3574};
3575
3576static struct branch_clk mdss_hdmi_ahb_clk = {
3577 .cbcr_reg = MDSS_HDMI_AHB_CBCR,
3578 .parent = &ahb_clk_src.c,
3579 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003580 .base = &virt_bases[MMSS_BASE],
3581 .c = {
3582 .dbg_name = "mdss_hdmi_ahb_clk",
3583 .ops = &clk_ops_branch,
3584 CLK_INIT(mdss_hdmi_ahb_clk.c),
3585 },
3586};
3587
3588static struct branch_clk mdss_hdmi_clk = {
3589 .cbcr_reg = MDSS_HDMI_CBCR,
3590 .parent = &hdmi_clk_src.c,
3591 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003592 .base = &virt_bases[MMSS_BASE],
3593 .c = {
3594 .dbg_name = "mdss_hdmi_clk",
3595 .ops = &clk_ops_branch,
3596 CLK_INIT(mdss_hdmi_clk.c),
3597 },
3598};
3599
3600static struct branch_clk mdss_mdp_clk = {
3601 .cbcr_reg = MDSS_MDP_CBCR,
3602 .parent = &mdp_clk_src.c,
3603 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003604 .base = &virt_bases[MMSS_BASE],
3605 .c = {
3606 .dbg_name = "mdss_mdp_clk",
3607 .ops = &clk_ops_branch,
3608 CLK_INIT(mdss_mdp_clk.c),
3609 },
3610};
3611
3612static struct branch_clk mdss_mdp_lut_clk = {
3613 .cbcr_reg = MDSS_MDP_LUT_CBCR,
3614 .parent = &mdp_clk_src.c,
3615 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003616 .base = &virt_bases[MMSS_BASE],
3617 .c = {
3618 .dbg_name = "mdss_mdp_lut_clk",
3619 .ops = &clk_ops_branch,
3620 CLK_INIT(mdss_mdp_lut_clk.c),
3621 },
3622};
3623
3624static struct branch_clk mdss_pclk0_clk = {
3625 .cbcr_reg = MDSS_PCLK0_CBCR,
3626 .parent = &pclk0_clk_src.c,
3627 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003628 .base = &virt_bases[MMSS_BASE],
3629 .c = {
3630 .dbg_name = "mdss_pclk0_clk",
3631 .ops = &clk_ops_branch,
3632 CLK_INIT(mdss_pclk0_clk.c),
3633 },
3634};
3635
3636static struct branch_clk mdss_pclk1_clk = {
3637 .cbcr_reg = MDSS_PCLK1_CBCR,
3638 .parent = &pclk1_clk_src.c,
3639 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003640 .base = &virt_bases[MMSS_BASE],
3641 .c = {
3642 .dbg_name = "mdss_pclk1_clk",
3643 .ops = &clk_ops_branch,
3644 CLK_INIT(mdss_pclk1_clk.c),
3645 },
3646};
3647
3648static struct branch_clk mdss_vsync_clk = {
3649 .cbcr_reg = MDSS_VSYNC_CBCR,
3650 .parent = &vsync_clk_src.c,
3651 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003652 .base = &virt_bases[MMSS_BASE],
3653 .c = {
3654 .dbg_name = "mdss_vsync_clk",
3655 .ops = &clk_ops_branch,
3656 CLK_INIT(mdss_vsync_clk.c),
3657 },
3658};
3659
3660static struct branch_clk mmss_misc_ahb_clk = {
3661 .cbcr_reg = MMSS_MISC_AHB_CBCR,
3662 .parent = &ahb_clk_src.c,
3663 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003664 .base = &virt_bases[MMSS_BASE],
3665 .c = {
3666 .dbg_name = "mmss_misc_ahb_clk",
3667 .ops = &clk_ops_branch,
3668 CLK_INIT(mmss_misc_ahb_clk.c),
3669 },
3670};
3671
3672static struct branch_clk mmss_mmssnoc_ahb_clk = {
3673 .cbcr_reg = MMSS_MMSSNOC_AHB_CBCR,
3674 .parent = &ahb_clk_src.c,
3675 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003676 .base = &virt_bases[MMSS_BASE],
3677 .c = {
3678 .dbg_name = "mmss_mmssnoc_ahb_clk",
3679 .ops = &clk_ops_branch,
3680 CLK_INIT(mmss_mmssnoc_ahb_clk.c),
3681 },
3682};
3683
3684static struct branch_clk mmss_mmssnoc_bto_ahb_clk = {
3685 .cbcr_reg = MMSS_MMSSNOC_BTO_AHB_CBCR,
3686 .parent = &ahb_clk_src.c,
3687 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003688 .base = &virt_bases[MMSS_BASE],
3689 .c = {
3690 .dbg_name = "mmss_mmssnoc_bto_ahb_clk",
3691 .ops = &clk_ops_branch,
3692 CLK_INIT(mmss_mmssnoc_bto_ahb_clk.c),
3693 },
3694};
3695
3696static struct branch_clk mmss_mmssnoc_axi_clk = {
3697 .cbcr_reg = MMSS_MMSSNOC_AXI_CBCR,
3698 .parent = &axi_clk_src.c,
3699 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003700 .base = &virt_bases[MMSS_BASE],
3701 .c = {
3702 .dbg_name = "mmss_mmssnoc_axi_clk",
3703 .ops = &clk_ops_branch,
3704 CLK_INIT(mmss_mmssnoc_axi_clk.c),
3705 },
3706};
3707
3708static struct branch_clk mmss_s0_axi_clk = {
3709 .cbcr_reg = MMSS_S0_AXI_CBCR,
3710 .parent = &axi_clk_src.c,
3711 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003712 .base = &virt_bases[MMSS_BASE],
3713 .c = {
3714 .dbg_name = "mmss_s0_axi_clk",
3715 .ops = &clk_ops_branch,
3716 CLK_INIT(mmss_s0_axi_clk.c),
3717 },
3718};
3719
3720static struct branch_clk venus0_ahb_clk = {
3721 .cbcr_reg = VENUS0_AHB_CBCR,
3722 .parent = &ahb_clk_src.c,
3723 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003724 .base = &virt_bases[MMSS_BASE],
3725 .c = {
3726 .dbg_name = "venus0_ahb_clk",
3727 .ops = &clk_ops_branch,
3728 CLK_INIT(venus0_ahb_clk.c),
3729 },
3730};
3731
3732static struct branch_clk venus0_axi_clk = {
3733 .cbcr_reg = VENUS0_AXI_CBCR,
3734 .parent = &axi_clk_src.c,
3735 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003736 .base = &virt_bases[MMSS_BASE],
3737 .c = {
3738 .dbg_name = "venus0_axi_clk",
3739 .ops = &clk_ops_branch,
3740 CLK_INIT(venus0_axi_clk.c),
3741 },
3742};
3743
3744static struct branch_clk venus0_ocmemnoc_clk = {
3745 .cbcr_reg = VENUS0_OCMEMNOC_CBCR,
3746 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003747 .base = &virt_bases[MMSS_BASE],
3748 .c = {
3749 .dbg_name = "venus0_ocmemnoc_clk",
3750 .ops = &clk_ops_branch,
3751 CLK_INIT(venus0_ocmemnoc_clk.c),
3752 },
3753};
3754
3755static struct branch_clk venus0_vcodec0_clk = {
3756 .cbcr_reg = VENUS0_VCODEC0_CBCR,
3757 .parent = &vcodec0_clk_src.c,
3758 .has_sibling = 0,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003759 .base = &virt_bases[MMSS_BASE],
3760 .c = {
3761 .dbg_name = "venus0_vcodec0_clk",
3762 .ops = &clk_ops_branch,
3763 CLK_INIT(venus0_vcodec0_clk.c),
3764 },
3765};
3766
3767static struct branch_clk oxili_gfx3d_clk = {
3768 .cbcr_reg = OXILI_GFX3D_CBCR,
3769 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003770 .base = &virt_bases[MMSS_BASE],
3771 .c = {
3772 .dbg_name = "oxili_gfx3d_clk",
3773 .ops = &clk_ops_branch,
3774 CLK_INIT(oxili_gfx3d_clk.c),
3775 },
3776};
3777
3778static struct branch_clk oxilicx_ahb_clk = {
3779 .cbcr_reg = OXILICX_AHB_CBCR,
3780 .parent = &ahb_clk_src.c,
3781 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003782 .base = &virt_bases[MMSS_BASE],
3783 .c = {
3784 .dbg_name = "oxilicx_ahb_clk",
3785 .ops = &clk_ops_branch,
3786 CLK_INIT(oxilicx_ahb_clk.c),
3787 },
3788};
3789
3790static struct branch_clk oxilicx_axi_clk = {
3791 .cbcr_reg = OXILICX_AXI_CBCR,
3792 .parent = &axi_clk_src.c,
3793 .has_sibling = 1,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07003794 .base = &virt_bases[MMSS_BASE],
3795 .c = {
3796 .dbg_name = "oxilicx_axi_clk",
3797 .ops = &clk_ops_branch,
3798 CLK_INIT(oxilicx_axi_clk.c),
3799 },
3800};
3801
3802static struct clk_freq_tbl ftbl_audio_core_slimbus_core_clock[] = {
3803 F_LPASS(28800000, lpapll0, 1, 15, 256),
3804 F_END
3805};
3806
3807static struct rcg_clk audio_core_slimbus_core_clk_src = {
3808 .cmd_rcgr_reg = SLIMBUS_CMD_RCGR,
3809 .set_rate = set_rate_mnd,
3810 .freq_tbl = ftbl_audio_core_slimbus_core_clock,
3811 .current_freq = &rcg_dummy_freq,
3812 .base = &virt_bases[LPASS_BASE],
3813 .c = {
3814 .dbg_name = "audio_core_slimbus_core_clk_src",
3815 .ops = &clk_ops_rcg_mnd,
3816 VDD_DIG_FMAX_MAP2(LOW, 70000000, NOMINAL, 140000000),
3817 CLK_INIT(audio_core_slimbus_core_clk_src.c),
3818 },
3819};
3820
3821static struct branch_clk audio_core_slimbus_core_clk = {
3822 .cbcr_reg = AUDIO_CORE_SLIMBUS_CORE_CBCR,
3823 .parent = &audio_core_slimbus_core_clk_src.c,
3824 .base = &virt_bases[LPASS_BASE],
3825 .c = {
3826 .dbg_name = "audio_core_slimbus_core_clk",
3827 .ops = &clk_ops_branch,
3828 CLK_INIT(audio_core_slimbus_core_clk.c),
3829 },
3830};
3831
3832static struct branch_clk audio_core_slimbus_lfabif_clk = {
3833 .cbcr_reg = AUDIO_CORE_SLIMBUS_LFABIF_CBCR,
3834 .has_sibling = 1,
3835 .base = &virt_bases[LPASS_BASE],
3836 .c = {
3837 .dbg_name = "audio_core_slimbus_lfabif_clk",
3838 .ops = &clk_ops_branch,
3839 CLK_INIT(audio_core_slimbus_lfabif_clk.c),
3840 },
3841};
3842
3843static struct clk_freq_tbl ftbl_audio_core_lpaif_clock[] = {
3844 F_LPASS( 512000, lpapll0, 16, 1, 60),
3845 F_LPASS( 768000, lpapll0, 16, 1, 40),
3846 F_LPASS( 1024000, lpapll0, 16, 1, 30),
3847 F_LPASS( 1536000, lpapll0, 16, 1, 10),
3848 F_LPASS( 2048000, lpapll0, 16, 1, 15),
3849 F_LPASS( 3072000, lpapll0, 16, 1, 10),
3850 F_LPASS( 4096000, lpapll0, 15, 1, 8),
3851 F_LPASS( 6144000, lpapll0, 10, 1, 8),
3852 F_LPASS( 8192000, lpapll0, 15, 1, 4),
3853 F_LPASS(12288000, lpapll0, 10, 1, 4),
3854 F_END
3855};
3856
3857static struct rcg_clk audio_core_lpaif_codec_spkr_clk_src = {
3858 .cmd_rcgr_reg = LPAIF_SPKR_CMD_RCGR,
3859 .set_rate = set_rate_mnd,
3860 .freq_tbl = ftbl_audio_core_lpaif_clock,
3861 .current_freq = &rcg_dummy_freq,
3862 .base = &virt_bases[LPASS_BASE],
3863 .c = {
3864 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
3865 .ops = &clk_ops_rcg_mnd,
3866 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3867 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
3868 },
3869};
3870
3871static struct rcg_clk audio_core_lpaif_pri_clk_src = {
3872 .cmd_rcgr_reg = LPAIF_PRI_CMD_RCGR,
3873 .set_rate = set_rate_mnd,
3874 .freq_tbl = ftbl_audio_core_lpaif_clock,
3875 .current_freq = &rcg_dummy_freq,
3876 .base = &virt_bases[LPASS_BASE],
3877 .c = {
3878 .dbg_name = "audio_core_lpaif_pri_clk_src",
3879 .ops = &clk_ops_rcg_mnd,
3880 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3881 CLK_INIT(audio_core_lpaif_pri_clk_src.c),
3882 },
3883};
3884
3885static struct rcg_clk audio_core_lpaif_sec_clk_src = {
3886 .cmd_rcgr_reg = LPAIF_SEC_CMD_RCGR,
3887 .set_rate = set_rate_mnd,
3888 .freq_tbl = ftbl_audio_core_lpaif_clock,
3889 .current_freq = &rcg_dummy_freq,
3890 .base = &virt_bases[LPASS_BASE],
3891 .c = {
3892 .dbg_name = "audio_core_lpaif_sec_clk_src",
3893 .ops = &clk_ops_rcg_mnd,
3894 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3895 CLK_INIT(audio_core_lpaif_sec_clk_src.c),
3896 },
3897};
3898
3899static struct rcg_clk audio_core_lpaif_ter_clk_src = {
3900 .cmd_rcgr_reg = LPAIF_TER_CMD_RCGR,
3901 .set_rate = set_rate_mnd,
3902 .freq_tbl = ftbl_audio_core_lpaif_clock,
3903 .current_freq = &rcg_dummy_freq,
3904 .base = &virt_bases[LPASS_BASE],
3905 .c = {
3906 .dbg_name = "audio_core_lpaif_ter_clk_src",
3907 .ops = &clk_ops_rcg_mnd,
3908 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3909 CLK_INIT(audio_core_lpaif_ter_clk_src.c),
3910 },
3911};
3912
3913static struct rcg_clk audio_core_lpaif_quad_clk_src = {
3914 .cmd_rcgr_reg = LPAIF_QUAD_CMD_RCGR,
3915 .set_rate = set_rate_mnd,
3916 .freq_tbl = ftbl_audio_core_lpaif_clock,
3917 .current_freq = &rcg_dummy_freq,
3918 .base = &virt_bases[LPASS_BASE],
3919 .c = {
3920 .dbg_name = "audio_core_lpaif_quad_clk_src",
3921 .ops = &clk_ops_rcg_mnd,
3922 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3923 CLK_INIT(audio_core_lpaif_quad_clk_src.c),
3924 },
3925};
3926
3927static struct rcg_clk audio_core_lpaif_pcm0_clk_src = {
3928 .cmd_rcgr_reg = LPAIF_PCM0_CMD_RCGR,
3929 .set_rate = set_rate_mnd,
3930 .freq_tbl = ftbl_audio_core_lpaif_clock,
3931 .current_freq = &rcg_dummy_freq,
3932 .base = &virt_bases[LPASS_BASE],
3933 .c = {
3934 .dbg_name = "audio_core_lpaif_pcm0_clk_src",
3935 .ops = &clk_ops_rcg_mnd,
3936 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3937 CLK_INIT(audio_core_lpaif_pcm0_clk_src.c),
3938 },
3939};
3940
3941static struct rcg_clk audio_core_lpaif_pcm1_clk_src = {
3942 .cmd_rcgr_reg = LPAIF_PCM1_CMD_RCGR,
3943 .set_rate = set_rate_mnd,
3944 .freq_tbl = ftbl_audio_core_lpaif_clock,
3945 .current_freq = &rcg_dummy_freq,
3946 .base = &virt_bases[LPASS_BASE],
3947 .c = {
3948 .dbg_name = "audio_core_lpaif_pcm1_clk_src",
3949 .ops = &clk_ops_rcg_mnd,
3950 VDD_DIG_FMAX_MAP2(LOW, 12000000, NOMINAL, 25000000),
3951 CLK_INIT(audio_core_lpaif_pcm1_clk_src.c),
3952 },
3953};
3954
3955static struct branch_clk audio_core_lpaif_codec_spkr_osr_clk = {
3956 .cbcr_reg = AUDIO_CORE_LPAIF_CODEC_SPKR_OSR_CBCR,
3957 .parent = &audio_core_lpaif_codec_spkr_clk_src.c,
3958 .has_sibling = 1,
3959 .base = &virt_bases[LPASS_BASE],
3960 .c = {
3961 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
3962 .ops = &clk_ops_branch,
3963 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
3964 },
3965};
3966
3967static struct branch_clk audio_core_lpaif_codec_spkr_ebit_clk = {
3968 .cbcr_reg = AUDIO_CORE_LPAIF_CODEC_SPKR_EBIT_CBCR,
3969 .parent = &audio_core_lpaif_codec_spkr_clk_src.c,
3970 .has_sibling = 1,
3971 .base = &virt_bases[LPASS_BASE],
3972 .c = {
3973 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
3974 .ops = &clk_ops_branch,
3975 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
3976 },
3977};
3978
3979static struct branch_clk audio_core_lpaif_codec_spkr_ibit_clk = {
3980 .cbcr_reg = AUDIO_CORE_LPAIF_CODEC_SPKR_IBIT_CBCR,
3981 .parent = &audio_core_lpaif_codec_spkr_clk_src.c,
3982 .has_sibling = 1,
3983 .max_div = 16,
3984 .base = &virt_bases[LPASS_BASE],
3985 .c = {
3986 .dbg_name = "audio_core_lpaif_codec_spkr_clk_src",
3987 .ops = &clk_ops_branch,
3988 CLK_INIT(audio_core_lpaif_codec_spkr_clk_src.c),
3989 },
3990};
3991
3992static struct branch_clk audio_core_lpaif_pri_osr_clk = {
3993 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_OSR_CBCR,
3994 .parent = &audio_core_lpaif_pri_clk_src.c,
3995 .has_sibling = 1,
3996 .base = &virt_bases[LPASS_BASE],
3997 .c = {
3998 .dbg_name = "audio_core_lpaif_pri_osr_clk",
3999 .ops = &clk_ops_branch,
4000 CLK_INIT(audio_core_lpaif_pri_osr_clk.c),
4001 },
4002};
4003
4004static struct branch_clk audio_core_lpaif_pri_ebit_clk = {
4005 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_EBIT_CBCR,
4006 .parent = &audio_core_lpaif_pri_clk_src.c,
4007 .has_sibling = 1,
4008 .base = &virt_bases[LPASS_BASE],
4009 .c = {
4010 .dbg_name = "audio_core_lpaif_pri_ebit_clk",
4011 .ops = &clk_ops_branch,
4012 CLK_INIT(audio_core_lpaif_pri_ebit_clk.c),
4013 },
4014};
4015
4016static struct branch_clk audio_core_lpaif_pri_ibit_clk = {
4017 .cbcr_reg = AUDIO_CORE_LPAIF_PRI_IBIT_CBCR,
4018 .parent = &audio_core_lpaif_pri_clk_src.c,
4019 .has_sibling = 1,
4020 .max_div = 16,
4021 .base = &virt_bases[LPASS_BASE],
4022 .c = {
4023 .dbg_name = "audio_core_lpaif_pri_ibit_clk",
4024 .ops = &clk_ops_branch,
4025 CLK_INIT(audio_core_lpaif_pri_ibit_clk.c),
4026 },
4027};
4028
4029static struct branch_clk audio_core_lpaif_sec_osr_clk = {
4030 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_OSR_CBCR,
4031 .parent = &audio_core_lpaif_sec_clk_src.c,
4032 .has_sibling = 1,
4033 .base = &virt_bases[LPASS_BASE],
4034 .c = {
4035 .dbg_name = "audio_core_lpaif_sec_osr_clk",
4036 .ops = &clk_ops_branch,
4037 CLK_INIT(audio_core_lpaif_sec_osr_clk.c),
4038 },
4039};
4040
4041static struct branch_clk audio_core_lpaif_sec_ebit_clk = {
4042 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_EBIT_CBCR,
4043 .parent = &audio_core_lpaif_sec_clk_src.c,
4044 .has_sibling = 1,
4045 .base = &virt_bases[LPASS_BASE],
4046 .c = {
4047 .dbg_name = "audio_core_lpaif_sec_ebit_clk",
4048 .ops = &clk_ops_branch,
4049 CLK_INIT(audio_core_lpaif_sec_ebit_clk.c),
4050 },
4051};
4052
4053static struct branch_clk audio_core_lpaif_sec_ibit_clk = {
4054 .cbcr_reg = AUDIO_CORE_LPAIF_SEC_IBIT_CBCR,
4055 .parent = &audio_core_lpaif_sec_clk_src.c,
4056 .has_sibling = 1,
4057 .max_div = 16,
4058 .base = &virt_bases[LPASS_BASE],
4059 .c = {
4060 .dbg_name = "audio_core_lpaif_sec_ibit_clk",
4061 .ops = &clk_ops_branch,
4062 CLK_INIT(audio_core_lpaif_sec_ibit_clk.c),
4063 },
4064};
4065
4066static struct branch_clk audio_core_lpaif_ter_osr_clk = {
4067 .cbcr_reg = AUDIO_CORE_LPAIF_TER_OSR_CBCR,
4068 .parent = &audio_core_lpaif_ter_clk_src.c,
4069 .has_sibling = 1,
4070 .base = &virt_bases[LPASS_BASE],
4071 .c = {
4072 .dbg_name = "audio_core_lpaif_ter_osr_clk",
4073 .ops = &clk_ops_branch,
4074 CLK_INIT(audio_core_lpaif_ter_osr_clk.c),
4075 },
4076};
4077
4078static struct branch_clk audio_core_lpaif_ter_ebit_clk = {
4079 .cbcr_reg = AUDIO_CORE_LPAIF_TER_EBIT_CBCR,
4080 .parent = &audio_core_lpaif_ter_clk_src.c,
4081 .has_sibling = 1,
4082 .base = &virt_bases[LPASS_BASE],
4083 .c = {
4084 .dbg_name = "audio_core_lpaif_ter_ebit_clk",
4085 .ops = &clk_ops_branch,
4086 CLK_INIT(audio_core_lpaif_ter_ebit_clk.c),
4087 },
4088};
4089
4090static struct branch_clk audio_core_lpaif_ter_ibit_clk = {
4091 .cbcr_reg = AUDIO_CORE_LPAIF_TER_IBIT_CBCR,
4092 .parent = &audio_core_lpaif_ter_clk_src.c,
4093 .has_sibling = 1,
4094 .max_div = 16,
4095 .base = &virt_bases[LPASS_BASE],
4096 .c = {
4097 .dbg_name = "audio_core_lpaif_ter_ibit_clk",
4098 .ops = &clk_ops_branch,
4099 CLK_INIT(audio_core_lpaif_ter_ibit_clk.c),
4100 },
4101};
4102
4103static struct branch_clk audio_core_lpaif_quad_osr_clk = {
4104 .cbcr_reg = AUDIO_CORE_LPAIF_QUAD_OSR_CBCR,
4105 .parent = &audio_core_lpaif_quad_clk_src.c,
4106 .has_sibling = 1,
4107 .base = &virt_bases[LPASS_BASE],
4108 .c = {
4109 .dbg_name = "audio_core_lpaif_quad_osr_clk",
4110 .ops = &clk_ops_branch,
4111 CLK_INIT(audio_core_lpaif_quad_osr_clk.c),
4112 },
4113};
4114
4115static struct branch_clk audio_core_lpaif_quad_ebit_clk = {
4116 .cbcr_reg = AUDIO_CORE_LPAIF_QUAD_EBIT_CBCR,
4117 .parent = &audio_core_lpaif_quad_clk_src.c,
4118 .has_sibling = 1,
4119 .base = &virt_bases[LPASS_BASE],
4120 .c = {
4121 .dbg_name = "audio_core_lpaif_quad_ebit_clk",
4122 .ops = &clk_ops_branch,
4123 CLK_INIT(audio_core_lpaif_quad_ebit_clk.c),
4124 },
4125};
4126
4127static struct branch_clk audio_core_lpaif_quad_ibit_clk = {
4128 .cbcr_reg = AUDIO_CORE_LPAIF_QUAD_IBIT_CBCR,
4129 .parent = &audio_core_lpaif_quad_clk_src.c,
4130 .has_sibling = 1,
4131 .max_div = 16,
4132 .base = &virt_bases[LPASS_BASE],
4133 .c = {
4134 .dbg_name = "audio_core_lpaif_quad_ibit_clk",
4135 .ops = &clk_ops_branch,
4136 CLK_INIT(audio_core_lpaif_quad_ibit_clk.c),
4137 },
4138};
4139
4140static struct branch_clk audio_core_lpaif_pcm0_ebit_clk = {
4141 .cbcr_reg = AUDIO_CORE_LPAIF_PCM0_EBIT_CBCR,
4142 .parent = &audio_core_lpaif_pcm0_clk_src.c,
4143 .has_sibling = 1,
4144 .base = &virt_bases[LPASS_BASE],
4145 .c = {
4146 .dbg_name = "audio_core_lpaif_pcm0_ebit_clk",
4147 .ops = &clk_ops_branch,
4148 CLK_INIT(audio_core_lpaif_pcm0_ebit_clk.c),
4149 },
4150};
4151
4152static struct branch_clk audio_core_lpaif_pcm0_ibit_clk = {
4153 .cbcr_reg = AUDIO_CORE_LPAIF_PCM0_IBIT_CBCR,
4154 .parent = &audio_core_lpaif_pcm0_clk_src.c,
4155 .has_sibling = 1,
4156 .max_div = 16,
4157 .base = &virt_bases[LPASS_BASE],
4158 .c = {
4159 .dbg_name = "audio_core_lpaif_pcm0_ibit_clk",
4160 .ops = &clk_ops_branch,
4161 CLK_INIT(audio_core_lpaif_pcm0_ibit_clk.c),
4162 },
4163};
4164
4165static struct branch_clk audio_core_lpaif_pcm1_ebit_clk = {
4166 .cbcr_reg = AUDIO_CORE_LPAIF_PCM1_EBIT_CBCR,
4167 .parent = &audio_core_lpaif_pcm1_clk_src.c,
4168 .has_sibling = 1,
4169 .base = &virt_bases[LPASS_BASE],
4170 .c = {
4171 .dbg_name = "audio_core_lpaif_pcm1_ebit_clk",
4172 .ops = &clk_ops_branch,
4173 CLK_INIT(audio_core_lpaif_pcm1_ebit_clk.c),
4174 },
4175};
4176
4177static struct branch_clk audio_core_lpaif_pcm1_ibit_clk = {
4178 .cbcr_reg = AUDIO_CORE_LPAIF_PCM1_IBIT_CBCR,
4179 .parent = &audio_core_lpaif_pcm1_clk_src.c,
4180 .has_sibling = 1,
4181 .max_div = 16,
4182 .base = &virt_bases[LPASS_BASE],
4183 .c = {
4184 .dbg_name = "audio_core_lpaif_pcm1_ibit_clk",
4185 .ops = &clk_ops_branch,
4186 CLK_INIT(audio_core_lpaif_pcm1_ibit_clk.c),
4187 },
4188};
4189
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004190static struct branch_clk q6ss_ahb_lfabif_clk = {
4191 .cbcr_reg = LPASS_Q6SS_AHB_LFABIF_CBCR,
4192 .has_sibling = 1,
4193 .base = &virt_bases[LPASS_BASE],
4194 .c = {
4195 .dbg_name = "q6ss_ahb_lfabif_clk",
4196 .ops = &clk_ops_branch,
4197 CLK_INIT(q6ss_ahb_lfabif_clk.c),
4198 },
4199};
4200
4201static struct branch_clk q6ss_xo_clk = {
4202 .cbcr_reg = LPASS_Q6SS_XO_CBCR,
4203 .bcr_reg = LPASS_Q6SS_BCR,
4204 .has_sibling = 1,
4205 .base = &virt_bases[LPASS_BASE],
4206 .c = {
4207 .dbg_name = "q6ss_xo_clk",
4208 .ops = &clk_ops_branch,
4209 CLK_INIT(q6ss_xo_clk.c),
4210 },
4211};
4212
4213static struct branch_clk mss_xo_q6_clk = {
4214 .cbcr_reg = MSS_XO_Q6_CBCR,
4215 .bcr_reg = MSS_Q6SS_BCR,
4216 .has_sibling = 1,
4217 .base = &virt_bases[MSS_BASE],
4218 .c = {
4219 .dbg_name = "mss_xo_q6_clk",
4220 .ops = &clk_ops_branch,
4221 CLK_INIT(mss_xo_q6_clk.c),
4222 .depends = &gcc_mss_cfg_ahb_clk.c,
4223 },
4224};
4225
4226static struct branch_clk mss_bus_q6_clk = {
4227 .cbcr_reg = MSS_BUS_Q6_CBCR,
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004228 .has_sibling = 1,
4229 .base = &virt_bases[MSS_BASE],
4230 .c = {
4231 .dbg_name = "mss_bus_q6_clk",
4232 .ops = &clk_ops_branch,
4233 CLK_INIT(mss_bus_q6_clk.c),
4234 .depends = &gcc_mss_cfg_ahb_clk.c,
4235 },
4236};
4237
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004238#ifdef CONFIG_DEBUG_FS
4239
4240struct measure_mux_entry {
4241 struct clk *c;
4242 int base;
4243 u32 debug_mux;
4244};
4245
4246struct measure_mux_entry measure_mux[] = {
4247 {&gcc_bam_dma_ahb_clk.c, GCC_BASE, 0x00e8},
4248 {&gcc_blsp1_ahb_clk.c, GCC_BASE, 0x0090},
4249 {&gcc_blsp1_qup1_i2c_apps_clk.c, GCC_BASE, 0x0093},
4250 {&gcc_blsp1_qup1_spi_apps_clk.c, GCC_BASE, 0x0092},
4251 {&gcc_blsp1_qup2_i2c_apps_clk.c, GCC_BASE, 0x0098},
4252 {&gcc_blsp1_qup2_spi_apps_clk.c, GCC_BASE, 0x0096},
4253 {&gcc_blsp1_qup3_i2c_apps_clk.c, GCC_BASE, 0x009c},
4254 {&gcc_blsp1_qup3_spi_apps_clk.c, GCC_BASE, 0x009b},
4255 {&gcc_blsp1_qup4_i2c_apps_clk.c, GCC_BASE, 0x00a1},
4256 {&gcc_blsp1_qup4_spi_apps_clk.c, GCC_BASE, 0x00a0},
4257 {&gcc_blsp1_qup5_i2c_apps_clk.c, GCC_BASE, 0x00a5},
4258 {&gcc_blsp1_qup5_spi_apps_clk.c, GCC_BASE, 0x00a4},
4259 {&gcc_blsp1_qup6_i2c_apps_clk.c, GCC_BASE, 0x00aa},
4260 {&gcc_blsp1_qup6_spi_apps_clk.c, GCC_BASE, 0x00a9},
4261 {&gcc_blsp1_uart1_apps_clk.c, GCC_BASE, 0x0094},
4262 {&gcc_blsp1_uart2_apps_clk.c, GCC_BASE, 0x0099},
4263 {&gcc_blsp1_uart3_apps_clk.c, GCC_BASE, 0x009d},
4264 {&gcc_blsp1_uart4_apps_clk.c, GCC_BASE, 0x00a2},
4265 {&gcc_blsp1_uart5_apps_clk.c, GCC_BASE, 0x00a6},
4266 {&gcc_blsp1_uart6_apps_clk.c, GCC_BASE, 0x00ab},
4267 {&gcc_blsp2_ahb_clk.c, GCC_BASE, 0x00b0},
4268 {&gcc_blsp2_qup1_i2c_apps_clk.c, GCC_BASE, 0x00b3},
4269 {&gcc_blsp2_qup1_spi_apps_clk.c, GCC_BASE, 0x00b2},
4270 {&gcc_blsp2_qup2_i2c_apps_clk.c, GCC_BASE, 0x00b8},
4271 {&gcc_blsp2_qup2_spi_apps_clk.c, GCC_BASE, 0x00b6},
4272 {&gcc_blsp2_qup3_i2c_apps_clk.c, GCC_BASE, 0x00bc},
4273 {&gcc_blsp2_qup3_spi_apps_clk.c, GCC_BASE, 0x00bb},
4274 {&gcc_blsp2_qup4_i2c_apps_clk.c, GCC_BASE, 0x00c1},
4275 {&gcc_blsp2_qup4_spi_apps_clk.c, GCC_BASE, 0x00c0},
4276 {&gcc_blsp2_qup5_i2c_apps_clk.c, GCC_BASE, 0x00c5},
4277 {&gcc_blsp2_qup5_spi_apps_clk.c, GCC_BASE, 0x00c4},
4278 {&gcc_blsp2_qup6_i2c_apps_clk.c, GCC_BASE, 0x00ca},
4279 {&gcc_blsp2_qup6_spi_apps_clk.c, GCC_BASE, 0x00c9},
4280 {&gcc_blsp2_uart1_apps_clk.c, GCC_BASE, 0x00b4},
4281 {&gcc_blsp2_uart2_apps_clk.c, GCC_BASE, 0x00b9},
4282 {&gcc_blsp2_uart3_apps_clk.c, GCC_BASE, 0x00bd},
4283 {&gcc_blsp2_uart4_apps_clk.c, GCC_BASE, 0x00c2},
4284 {&gcc_blsp2_uart5_apps_clk.c, GCC_BASE, 0x00c6},
4285 {&gcc_blsp2_uart6_apps_clk.c, GCC_BASE, 0x00cb},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004286 {&gcc_boot_rom_ahb_clk.c, GCC_BASE, 0x0100},
4287 {&gcc_mss_cfg_ahb_clk.c, GCC_BASE, 0x0030},
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004288 {&gcc_ce1_clk.c, GCC_BASE, 0x0140},
4289 {&gcc_ce2_clk.c, GCC_BASE, 0x0148},
4290 {&gcc_pdm2_clk.c, GCC_BASE, 0x00da},
4291 {&gcc_pdm_ahb_clk.c, GCC_BASE, 0x00d8},
4292 {&gcc_prng_ahb_clk.c, GCC_BASE, 0x00e0},
4293 {&gcc_sdcc1_ahb_clk.c, GCC_BASE, 0x0071},
4294 {&gcc_sdcc1_apps_clk.c, GCC_BASE, 0x0070},
4295 {&gcc_sdcc2_ahb_clk.c, GCC_BASE, 0x0079},
4296 {&gcc_sdcc2_apps_clk.c, GCC_BASE, 0x0078},
4297 {&gcc_sdcc3_ahb_clk.c, GCC_BASE, 0x0081},
4298 {&gcc_sdcc3_apps_clk.c, GCC_BASE, 0x0080},
4299 {&gcc_sdcc4_ahb_clk.c, GCC_BASE, 0x0089},
4300 {&gcc_sdcc4_apps_clk.c, GCC_BASE, 0x0088},
4301 {&gcc_tsif_ahb_clk.c, GCC_BASE, 0x00f0},
4302 {&gcc_tsif_ref_clk.c, GCC_BASE, 0x00f1},
4303 {&gcc_usb30_master_clk.c, GCC_BASE, 0x0050},
4304 {&gcc_usb30_mock_utmi_clk.c, GCC_BASE, 0x0052},
4305 {&gcc_usb_hs_ahb_clk.c, GCC_BASE, 0x0069},
4306 {&gcc_usb_hs_system_clk.c, GCC_BASE, 0x0068},
4307 {&gcc_usb_hsic_ahb_clk.c, GCC_BASE, 0x0060},
4308 {&gcc_usb_hsic_clk.c, GCC_BASE, 0x0062},
4309 {&gcc_usb_hsic_io_cal_clk.c, GCC_BASE, 0x0063},
4310 {&gcc_usb_hsic_system_clk.c, GCC_BASE, 0x0061},
4311 {&mmss_mmssnoc_ahb_clk.c, MMSS_BASE, 0x0001},
4312 {&mmss_mmssnoc_axi_clk.c, MMSS_BASE, 0x0004},
4313 {&camss_cci_cci_ahb_clk.c, MMSS_BASE, 0x002e},
4314 {&camss_cci_cci_clk.c, MMSS_BASE, 0x002d},
4315 {&camss_csi0_ahb_clk.c, MMSS_BASE, 0x0042},
4316 {&camss_csi0_clk.c, MMSS_BASE, 0x0041},
4317 {&camss_csi0phy_clk.c, MMSS_BASE, 0x0043},
4318 {&camss_csi0pix_clk.c, MMSS_BASE, 0x0045},
4319 {&camss_csi0rdi_clk.c, MMSS_BASE, 0x0044},
4320 {&camss_csi1_ahb_clk.c, MMSS_BASE, 0x0047},
4321 {&camss_csi1_clk.c, MMSS_BASE, 0x0046},
4322 {&camss_csi1phy_clk.c, MMSS_BASE, 0x0048},
4323 {&camss_csi1pix_clk.c, MMSS_BASE, 0x004a},
4324 {&camss_csi1rdi_clk.c, MMSS_BASE, 0x0049},
4325 {&camss_csi2_ahb_clk.c, MMSS_BASE, 0x004c},
4326 {&camss_csi2_clk.c, MMSS_BASE, 0x004b},
4327 {&camss_csi2phy_clk.c, MMSS_BASE, 0x004d},
4328 {&camss_csi2pix_clk.c, MMSS_BASE, 0x004f},
4329 {&camss_csi2rdi_clk.c, MMSS_BASE, 0x004e},
4330 {&camss_csi3_ahb_clk.c, MMSS_BASE, 0x0051},
4331 {&camss_csi3_clk.c, MMSS_BASE, 0x0050},
4332 {&camss_csi3phy_clk.c, MMSS_BASE, 0x0052},
4333 {&camss_csi3pix_clk.c, MMSS_BASE, 0x0054},
4334 {&camss_csi3rdi_clk.c, MMSS_BASE, 0x0053},
4335 {&camss_csi_vfe0_clk.c, MMSS_BASE, 0x003f},
4336 {&camss_csi_vfe1_clk.c, MMSS_BASE, 0x0040},
4337 {&camss_gp0_clk.c, MMSS_BASE, 0x0027},
4338 {&camss_gp1_clk.c, MMSS_BASE, 0x0028},
4339 {&camss_ispif_ahb_clk.c, MMSS_BASE, 0x0055},
4340 {&camss_jpeg_jpeg0_clk.c, MMSS_BASE, 0x0032},
4341 {&camss_jpeg_jpeg1_clk.c, MMSS_BASE, 0x0033},
4342 {&camss_jpeg_jpeg2_clk.c, MMSS_BASE, 0x0034},
4343 {&camss_jpeg_jpeg_ahb_clk.c, MMSS_BASE, 0x0035},
4344 {&camss_jpeg_jpeg_axi_clk.c, MMSS_BASE, 0x0036},
4345 {&camss_jpeg_jpeg_ocmemnoc_clk.c, MMSS_BASE, 0x0037},
4346 {&camss_mclk0_clk.c, MMSS_BASE, 0x0029},
4347 {&camss_mclk1_clk.c, MMSS_BASE, 0x002a},
4348 {&camss_mclk2_clk.c, MMSS_BASE, 0x002b},
4349 {&camss_mclk3_clk.c, MMSS_BASE, 0x002c},
4350 {&camss_micro_ahb_clk.c, MMSS_BASE, 0x0026},
4351 {&camss_phy0_csi0phytimer_clk.c, MMSS_BASE, 0x002f},
4352 {&camss_phy1_csi1phytimer_clk.c, MMSS_BASE, 0x0030},
4353 {&camss_phy2_csi2phytimer_clk.c, MMSS_BASE, 0x0031},
4354 {&camss_top_ahb_clk.c, MMSS_BASE, 0x0025},
4355 {&camss_vfe_cpp_ahb_clk.c, MMSS_BASE, 0x003b},
4356 {&camss_vfe_cpp_clk.c, MMSS_BASE, 0x003a},
4357 {&camss_vfe_vfe0_clk.c, MMSS_BASE, 0x0038},
4358 {&camss_vfe_vfe1_clk.c, MMSS_BASE, 0x0039},
4359 {&camss_vfe_vfe_ahb_clk.c, MMSS_BASE, 0x003c},
4360 {&camss_vfe_vfe_axi_clk.c, MMSS_BASE, 0x003d},
4361 {&camss_vfe_vfe_ocmemnoc_clk.c, MMSS_BASE, 0x003e},
4362 {&mdss_ahb_clk.c, MMSS_BASE, 0x0022},
4363 {&mdss_hdmi_clk.c, MMSS_BASE, 0x001d},
4364 {&mdss_mdp_clk.c, MMSS_BASE, 0x0014},
4365 {&mdss_mdp_lut_clk.c, MMSS_BASE, 0x0015},
4366 {&mdss_axi_clk.c, MMSS_BASE, 0x0024},
4367 {&mdss_vsync_clk.c, MMSS_BASE, 0x001c},
4368 {&mdss_esc0_clk.c, MMSS_BASE, 0x0020},
4369 {&mdss_esc1_clk.c, MMSS_BASE, 0x0021},
4370 {&mdss_edpaux_clk.c, MMSS_BASE, 0x001b},
4371 {&mdss_byte0_clk.c, MMSS_BASE, 0x001e},
4372 {&mdss_byte1_clk.c, MMSS_BASE, 0x001f},
4373 {&mdss_edplink_clk.c, MMSS_BASE, 0x001a},
4374 {&mdss_edppixel_clk.c, MMSS_BASE, 0x0019},
4375 {&mdss_extpclk_clk.c, MMSS_BASE, 0x0018},
4376 {&mdss_hdmi_ahb_clk.c, MMSS_BASE, 0x0023},
4377 {&mdss_pclk0_clk.c, MMSS_BASE, 0x0016},
4378 {&mdss_pclk1_clk.c, MMSS_BASE, 0x0017},
4379 {&audio_core_lpaif_pri_clk_src.c, LPASS_BASE, 0x0017},
4380 {&audio_core_lpaif_sec_clk_src.c, LPASS_BASE, 0x0016},
4381 {&audio_core_lpaif_ter_clk_src.c, LPASS_BASE, 0x0015},
4382 {&audio_core_lpaif_quad_clk_src.c, LPASS_BASE, 0x0014},
4383 {&audio_core_lpaif_pcm0_clk_src.c, LPASS_BASE, 0x0013},
4384 {&audio_core_lpaif_pcm1_clk_src.c, LPASS_BASE, 0x0012},
4385 {&audio_core_slimbus_core_clk.c, LPASS_BASE, 0x003d},
4386 {&audio_core_slimbus_lfabif_clk.c, LPASS_BASE, 0x003e},
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004387 {&q6ss_xo_clk.c, LPASS_BASE, 0x002b},
4388 {&q6ss_ahb_lfabif_clk.c, LPASS_BASE, 0x001e},
4389 {&mss_bus_q6_clk.c, MSS_BASE, 0x003c},
4390 {&mss_xo_q6_clk.c, MSS_BASE, 0x0007},
4391
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004392 {&dummy_clk, N_BASES, 0x0000},
4393};
4394
4395static int measure_clk_set_parent(struct clk *c, struct clk *parent)
4396{
4397 struct measure_clk *clk = to_measure_clk(c);
4398 unsigned long flags;
4399 u32 regval, clk_sel, i;
4400
4401 if (!parent)
4402 return -EINVAL;
4403
4404 for (i = 0; i < (ARRAY_SIZE(measure_mux) - 1); i++)
4405 if (measure_mux[i].c == parent)
4406 break;
4407
4408 if (measure_mux[i].c == &dummy_clk)
4409 return -EINVAL;
4410
4411 spin_lock_irqsave(&local_clock_reg_lock, flags);
4412 /*
4413 * Program the test vector, measurement period (sample_ticks)
4414 * and scaling multiplier.
4415 */
4416 clk->sample_ticks = 0x10000;
4417 clk->multiplier = 1;
4418
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004419 writel_relaxed(0, MSS_REG_BASE(MSS_DEBUG_CLK_CTL_REG));
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004420 writel_relaxed(0, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4421 writel_relaxed(0, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4422 writel_relaxed(0, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4423
4424 switch (measure_mux[i].base) {
4425
4426 case GCC_BASE:
4427 clk_sel = measure_mux[i].debug_mux;
4428 break;
4429
4430 case MMSS_BASE:
4431 clk_sel = 0x02C;
4432 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4433 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4434
4435 /* Activate debug clock output */
4436 regval |= BIT(16);
4437 writel_relaxed(regval, MMSS_REG_BASE(MMSS_DEBUG_CLK_CTL_REG));
4438 break;
4439
4440 case LPASS_BASE:
4441 clk_sel = 0x169;
4442 regval = BVAL(11, 0, measure_mux[i].debug_mux);
4443 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4444
4445 /* Activate debug clock output */
4446 regval |= BIT(16);
4447 writel_relaxed(regval, LPASS_REG_BASE(LPASS_DEBUG_CLK_CTL_REG));
4448 break;
4449
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004450 case MSS_BASE:
4451 clk_sel = 0x32;
4452 regval = BVAL(5, 0, measure_mux[i].debug_mux);
4453 writel_relaxed(regval, MSS_REG_BASE(MSS_DEBUG_CLK_CTL_REG));
4454 break;
4455
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004456 default:
4457 return -EINVAL;
4458 }
4459
4460 /* Set debug mux clock index */
4461 regval = BVAL(8, 0, clk_sel);
4462 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4463
4464 /* Activate debug clock output */
4465 regval |= BIT(16);
4466 writel_relaxed(regval, GCC_REG_BASE(GCC_DEBUG_CLK_CTL_REG));
4467
4468 /* Make sure test vector is set before starting measurements. */
4469 mb();
4470 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4471
4472 return 0;
4473}
4474
4475/* Sample clock for 'ticks' reference clock ticks. */
4476static u32 run_measurement(unsigned ticks)
4477{
4478 /* Stop counters and set the XO4 counter start value. */
4479 writel_relaxed(ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4480
4481 /* Wait for timer to become ready. */
4482 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4483 BIT(25)) != 0)
4484 cpu_relax();
4485
4486 /* Run measurement and wait for completion. */
4487 writel_relaxed(BIT(20)|ticks, GCC_REG_BASE(CLOCK_FRQ_MEASURE_CTL_REG));
4488 while ((readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4489 BIT(25)) == 0)
4490 cpu_relax();
4491
4492 /* Return measured ticks. */
4493 return readl_relaxed(GCC_REG_BASE(CLOCK_FRQ_MEASURE_STATUS_REG)) &
4494 BM(24, 0);
4495}
4496
4497/*
4498 * Perform a hardware rate measurement for a given clock.
4499 * FOR DEBUG USE ONLY: Measurements take ~15 ms!
4500 */
4501static unsigned long measure_clk_get_rate(struct clk *c)
4502{
4503 unsigned long flags;
4504 u32 gcc_xo4_reg_backup;
4505 u64 raw_count_short, raw_count_full;
4506 struct measure_clk *clk = to_measure_clk(c);
4507 unsigned ret;
4508
4509 ret = clk_prepare_enable(&cxo_clk_src.c);
4510 if (ret) {
4511 pr_warning("CXO clock failed to enable. Can't measure\n");
4512 return 0;
4513 }
4514
4515 spin_lock_irqsave(&local_clock_reg_lock, flags);
4516
4517 /* Enable CXO/4 and RINGOSC branch. */
4518 gcc_xo4_reg_backup = readl_relaxed(GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4519 writel_relaxed(0x1, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4520
4521 /*
4522 * The ring oscillator counter will not reset if the measured clock
4523 * is not running. To detect this, run a short measurement before
4524 * the full measurement. If the raw results of the two are the same
4525 * then the clock must be off.
4526 */
4527
4528 /* Run a short measurement. (~1 ms) */
4529 raw_count_short = run_measurement(0x1000);
4530 /* Run a full measurement. (~14 ms) */
4531 raw_count_full = run_measurement(clk->sample_ticks);
4532
4533 writel_relaxed(gcc_xo4_reg_backup, GCC_REG_BASE(GCC_XO_DIV4_CBCR_REG));
4534
4535 /* Return 0 if the clock is off. */
4536 if (raw_count_full == raw_count_short) {
4537 ret = 0;
4538 } else {
4539 /* Compute rate in Hz. */
4540 raw_count_full = ((raw_count_full * 10) + 15) * 4800000;
4541 do_div(raw_count_full, ((clk->sample_ticks * 10) + 35));
4542 ret = (raw_count_full * clk->multiplier);
4543 }
4544
4545 spin_unlock_irqrestore(&local_clock_reg_lock, flags);
4546
4547 clk_disable_unprepare(&cxo_clk_src.c);
4548
4549 return ret;
4550}
4551#else /* !CONFIG_DEBUG_FS */
4552static int measure_clk_set_parent(struct clk *clk, struct clk *parent)
4553{
4554 return -EINVAL;
4555}
4556
4557static unsigned long measure_clk_get_rate(struct clk *clk)
4558{
4559 return 0;
4560}
4561#endif /* CONFIG_DEBUG_FS */
4562
Matt Wagantallae053222012-05-14 19:42:07 -07004563static struct clk_ops clk_ops_measure = {
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004564 .set_parent = measure_clk_set_parent,
4565 .get_rate = measure_clk_get_rate,
4566};
4567
4568static struct measure_clk measure_clk = {
4569 .c = {
4570 .dbg_name = "measure_clk",
Matt Wagantallae053222012-05-14 19:42:07 -07004571 .ops = &clk_ops_measure,
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004572 CLK_INIT(measure_clk.c),
4573 },
4574 .multiplier = 1,
4575};
4576
4577static struct clk_lookup msm_clocks_copper[] = {
4578 CLK_LOOKUP("xo", cxo_clk_src.c, "msm_otg"),
4579 CLK_LOOKUP("xo", cxo_clk_src.c, "pil-q6v5-lpass"),
Tianyi Gou4307d6c2012-05-31 18:36:07 -07004580 CLK_LOOKUP("xo", cxo_clk_src.c, "pil_pronto"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004581 CLK_LOOKUP("measure", measure_clk.c, "debug"),
4582
4583 CLK_LOOKUP("dma_bam_pclk", gcc_bam_dma_ahb_clk.c, "msm_sps"),
4584 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "msm_serial_hsl.0"),
4585 CLK_LOOKUP("iface_clk", gcc_blsp1_ahb_clk.c, "spi_qsd.1"),
4586 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_i2c_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004587 CLK_LOOKUP("core_clk", gcc_blsp1_qup1_spi_apps_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004588 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_i2c_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004589 CLK_LOOKUP("core_clk", gcc_blsp1_qup2_spi_apps_clk.c, "spi_qsd.1"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004590 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_i2c_apps_clk.c, ""),
4591 CLK_LOOKUP("core_clk", gcc_blsp1_qup3_spi_apps_clk.c, ""),
4592 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_i2c_apps_clk.c, ""),
4593 CLK_LOOKUP("core_clk", gcc_blsp1_qup4_spi_apps_clk.c, ""),
4594 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_i2c_apps_clk.c, ""),
4595 CLK_LOOKUP("core_clk", gcc_blsp1_qup5_spi_apps_clk.c, ""),
4596 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_i2c_apps_clk.c, ""),
4597 CLK_LOOKUP("core_clk", gcc_blsp1_qup6_spi_apps_clk.c, ""),
4598 CLK_LOOKUP("core_clk", gcc_blsp1_uart1_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004599 CLK_LOOKUP("core_clk", gcc_blsp1_uart2_apps_clk.c, ""),
4600 CLK_LOOKUP("core_clk", gcc_blsp1_uart3_apps_clk.c, "msm_serial_hsl.0"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004601 CLK_LOOKUP("core_clk", gcc_blsp1_uart4_apps_clk.c, ""),
4602 CLK_LOOKUP("core_clk", gcc_blsp1_uart5_apps_clk.c, ""),
4603 CLK_LOOKUP("core_clk", gcc_blsp1_uart6_apps_clk.c, ""),
4604
4605 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f9966000.i2c"),
4606 CLK_LOOKUP("iface_clk", gcc_blsp2_ahb_clk.c, "f995e000.serial"),
4607 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_i2c_apps_clk.c, ""),
4608 CLK_LOOKUP("core_clk", gcc_blsp2_qup1_spi_apps_clk.c, ""),
4609 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_i2c_apps_clk.c, ""),
4610 CLK_LOOKUP("core_clk", gcc_blsp2_qup2_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004611 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_i2c_apps_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004612 CLK_LOOKUP("core_clk", gcc_blsp2_qup3_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004613 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_i2c_apps_clk.c, "f9966000.i2c"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004614 CLK_LOOKUP("core_clk", gcc_blsp2_qup4_spi_apps_clk.c, ""),
4615 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_i2c_apps_clk.c, ""),
4616 CLK_LOOKUP("core_clk", gcc_blsp2_qup5_spi_apps_clk.c, ""),
4617 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_i2c_apps_clk.c, ""),
4618 CLK_LOOKUP("core_clk", gcc_blsp2_qup6_spi_apps_clk.c, ""),
Vikram Mulukutla82da88d2012-05-04 11:24:03 -07004619 CLK_LOOKUP("core_clk", gcc_blsp2_uart1_apps_clk.c, ""),
4620 CLK_LOOKUP("core_clk", gcc_blsp2_uart2_apps_clk.c, "f995e000.serial"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004621 CLK_LOOKUP("core_clk", gcc_blsp2_uart3_apps_clk.c, ""),
4622 CLK_LOOKUP("core_clk", gcc_blsp2_uart4_apps_clk.c, ""),
4623 CLK_LOOKUP("core_clk", gcc_blsp2_uart5_apps_clk.c, ""),
4624 CLK_LOOKUP("core_clk", gcc_blsp2_uart6_apps_clk.c, ""),
4625
4626 CLK_LOOKUP("core_clk", gcc_ce1_clk.c, ""),
4627 CLK_LOOKUP("core_clk", gcc_ce2_clk.c, ""),
4628 CLK_LOOKUP("iface_clk", gcc_ce1_ahb_clk.c, ""),
4629 CLK_LOOKUP("iface_clk", gcc_ce2_ahb_clk.c, ""),
4630 CLK_LOOKUP("bus_clk", gcc_ce1_axi_clk.c, ""),
4631 CLK_LOOKUP("bus_clk", gcc_ce2_axi_clk.c, ""),
4632
4633 CLK_LOOKUP("core_clk", gcc_gp1_clk.c, ""),
4634 CLK_LOOKUP("core_clk", gcc_gp2_clk.c, ""),
4635 CLK_LOOKUP("core_clk", gcc_gp3_clk.c, ""),
4636
4637 CLK_LOOKUP("core_clk", gcc_pdm2_clk.c, ""),
4638 CLK_LOOKUP("iface_clk", gcc_pdm_ahb_clk.c, ""),
4639 CLK_LOOKUP("iface_clk", gcc_prng_ahb_clk.c, ""),
4640
4641 CLK_LOOKUP("iface_clk", gcc_sdcc1_ahb_clk.c, "msm_sdcc.1"),
4642 CLK_LOOKUP("core_clk", gcc_sdcc1_apps_clk.c, "msm_sdcc.1"),
4643 CLK_LOOKUP("iface_clk", gcc_sdcc2_ahb_clk.c, "msm_sdcc.2"),
4644 CLK_LOOKUP("core_clk", gcc_sdcc2_apps_clk.c, "msm_sdcc.2"),
4645 CLK_LOOKUP("iface_clk", gcc_sdcc3_ahb_clk.c, "msm_sdcc.3"),
4646 CLK_LOOKUP("core_clk", gcc_sdcc3_apps_clk.c, "msm_sdcc.3"),
4647 CLK_LOOKUP("iface_clk", gcc_sdcc4_ahb_clk.c, "msm_sdcc.4"),
4648 CLK_LOOKUP("core_clk", gcc_sdcc4_apps_clk.c, "msm_sdcc.4"),
4649
4650 CLK_LOOKUP("iface_clk", gcc_tsif_ahb_clk.c, ""),
4651 CLK_LOOKUP("ref_clk", gcc_tsif_ref_clk.c, ""),
4652
Manu Gautam51be9712012-06-06 14:54:52 +05304653 CLK_LOOKUP("core_clk", gcc_usb30_master_clk.c, "msm_dwc3"),
4654 CLK_LOOKUP("utmi_clk", gcc_usb30_mock_utmi_clk.c, "msm_dwc3"),
4655 CLK_LOOKUP("iface_clk", gcc_usb_hs_ahb_clk.c, "msm_otg"),
4656 CLK_LOOKUP("core_clk", gcc_usb_hs_system_clk.c, "msm_otg"),
4657 CLK_LOOKUP("iface_clk", gcc_usb_hsic_ahb_clk.c, "msm_hsic_host"),
4658 CLK_LOOKUP("phy_clk", gcc_usb_hsic_clk.c, "msm_hsic_host"),
4659 CLK_LOOKUP("cal_clk", gcc_usb_hsic_io_cal_clk.c, "msm_hsic_host"),
4660 CLK_LOOKUP("core_clk", gcc_usb_hsic_system_clk.c, "msm_hsic_host"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004661
4662 /* Multimedia clocks */
4663 CLK_LOOKUP("bus_clk_src", axi_clk_src.c, ""),
4664 CLK_LOOKUP("bus_clk_src", ahb_clk_src.c, ""),
4665 CLK_LOOKUP("bus_clk", mmss_mmssnoc_ahb_clk.c, ""),
4666 CLK_LOOKUP("bus_clk", mmss_mmssnoc_axi_clk.c, ""),
4667 CLK_LOOKUP("core_clk", mdss_edpaux_clk.c, ""),
4668 CLK_LOOKUP("core_clk", mdss_edppixel_clk.c, ""),
4669 CLK_LOOKUP("core_clk", mdss_esc0_clk.c, ""),
4670 CLK_LOOKUP("core_clk", mdss_esc1_clk.c, ""),
4671 CLK_LOOKUP("iface_clk", mdss_hdmi_ahb_clk.c, ""),
4672 CLK_LOOKUP("core_clk", mdss_hdmi_clk.c, ""),
4673 CLK_LOOKUP("core_clk", mdss_mdp_clk.c, ""),
4674 CLK_LOOKUP("core_clk", mdss_mdp_lut_clk.c, ""),
4675 CLK_LOOKUP("core_clk", mdp_clk_src.c, ""),
4676 CLK_LOOKUP("core_clk", mdss_vsync_clk.c, ""),
4677 CLK_LOOKUP("iface_clk", camss_cci_cci_ahb_clk.c, ""),
4678 CLK_LOOKUP("core_clk", camss_cci_cci_clk.c, ""),
4679 CLK_LOOKUP("iface_clk", camss_csi0_ahb_clk.c, ""),
4680 CLK_LOOKUP("camss_csi0_clk", camss_csi0_clk.c, ""),
4681 CLK_LOOKUP("camss_csi0phy_clk", camss_csi0phy_clk.c, ""),
4682 CLK_LOOKUP("camss_csi0pix_clk", camss_csi0pix_clk.c, ""),
4683 CLK_LOOKUP("camss_csi0rdi_clk", camss_csi0rdi_clk.c, ""),
4684 CLK_LOOKUP("iface_clk", camss_csi1_ahb_clk.c, ""),
4685 CLK_LOOKUP("camss_csi1_clk", camss_csi1_clk.c, ""),
4686 CLK_LOOKUP("camss_csi1phy_clk", camss_csi1phy_clk.c, ""),
4687 CLK_LOOKUP("camss_csi1pix_clk", camss_csi1pix_clk.c, ""),
4688 CLK_LOOKUP("camss_csi1rdi_clk", camss_csi1rdi_clk.c, ""),
4689 CLK_LOOKUP("iface_clk", camss_csi2_ahb_clk.c, ""),
4690 CLK_LOOKUP("camss_csi2_clk", camss_csi2_clk.c, ""),
4691 CLK_LOOKUP("camss_csi2phy_clk", camss_csi2phy_clk.c, ""),
4692 CLK_LOOKUP("camss_csi2pix_clk", camss_csi2pix_clk.c, ""),
4693 CLK_LOOKUP("camss_csi2rdi_clk", camss_csi2rdi_clk.c, ""),
4694 CLK_LOOKUP("iface_clk", camss_csi3_ahb_clk.c, ""),
4695 CLK_LOOKUP("camss_csi3_clk", camss_csi3_clk.c, ""),
4696 CLK_LOOKUP("camss_csi3phy_clk", camss_csi3phy_clk.c, ""),
4697 CLK_LOOKUP("camss_csi3pix_clk", camss_csi3pix_clk.c, ""),
4698 CLK_LOOKUP("camss_csi3rdi_clk", camss_csi3rdi_clk.c, ""),
4699 CLK_LOOKUP("camss_csi0_clk_src", csi0_clk_src.c, ""),
4700 CLK_LOOKUP("camss_csi1_clk_src", csi1_clk_src.c, ""),
4701 CLK_LOOKUP("camss_csi2_clk_src", csi2_clk_src.c, ""),
4702 CLK_LOOKUP("camss_csi3_clk_src", csi3_clk_src.c, ""),
4703 CLK_LOOKUP("camss_csi_vfe0_clk", camss_csi_vfe0_clk.c, ""),
4704 CLK_LOOKUP("camss_csi_vfe1_clk", camss_csi_vfe1_clk.c, ""),
4705 CLK_LOOKUP("core_clk", camss_gp0_clk.c, ""),
4706 CLK_LOOKUP("core_clk", camss_gp1_clk.c, ""),
4707 CLK_LOOKUP("iface_clk", camss_ispif_ahb_clk.c, ""),
4708 CLK_LOOKUP("core_clk", camss_jpeg_jpeg0_clk.c, ""),
4709 CLK_LOOKUP("core_clk", camss_jpeg_jpeg1_clk.c, ""),
4710 CLK_LOOKUP("core_clk", camss_jpeg_jpeg2_clk.c, ""),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08004711 CLK_LOOKUP("iface_clk", camss_jpeg_jpeg_ahb_clk.c,
4712 "fda64000.qcom,iommu"),
4713 CLK_LOOKUP("core_clk", camss_jpeg_jpeg_axi_clk.c,
4714 "fda64000.qcom,iommu"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004715 CLK_LOOKUP("bus_clk", camss_jpeg_jpeg_axi_clk.c, ""),
4716 CLK_LOOKUP("bus_clk", camss_jpeg_jpeg_ocmemnoc_clk.c, ""),
4717 CLK_LOOKUP("core_clk", camss_mclk0_clk.c, ""),
4718 CLK_LOOKUP("core_clk", camss_mclk1_clk.c, ""),
4719 CLK_LOOKUP("core_clk", camss_mclk2_clk.c, ""),
4720 CLK_LOOKUP("core_clk", camss_mclk3_clk.c, ""),
4721 CLK_LOOKUP("iface_clk", camss_micro_ahb_clk.c, ""),
4722 CLK_LOOKUP("core_clk", camss_phy0_csi0phytimer_clk.c, ""),
4723 CLK_LOOKUP("core_clk", camss_phy1_csi1phytimer_clk.c, ""),
4724 CLK_LOOKUP("core_clk", camss_phy2_csi2phytimer_clk.c, ""),
4725 CLK_LOOKUP("iface_clk", camss_top_ahb_clk.c, ""),
4726 CLK_LOOKUP("iface_clk", camss_vfe_cpp_ahb_clk.c, ""),
4727 CLK_LOOKUP("core_clk", camss_vfe_cpp_clk.c, ""),
4728 CLK_LOOKUP("camss_vfe_vfe0_clk", camss_vfe_vfe0_clk.c, ""),
4729 CLK_LOOKUP("camss_vfe_vfe1_clk", camss_vfe_vfe1_clk.c, ""),
4730 CLK_LOOKUP("vfe0_clk_src", vfe0_clk_src.c, ""),
4731 CLK_LOOKUP("vfe1_clk_src", vfe1_clk_src.c, ""),
4732 CLK_LOOKUP("iface_clk", camss_vfe_vfe_ahb_clk.c, ""),
4733 CLK_LOOKUP("bus_clk", camss_vfe_vfe_axi_clk.c, ""),
4734 CLK_LOOKUP("bus_clk", camss_vfe_vfe_ocmemnoc_clk.c, ""),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08004735 CLK_LOOKUP("iface_clk", mdss_ahb_clk.c, "fd928000.qcom,iommu"),
4736 CLK_LOOKUP("core_clk", mdss_axi_clk.c, "fd928000.qcom,iommu"),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004737 CLK_LOOKUP("bus_clk", mdss_axi_clk.c, ""),
4738 CLK_LOOKUP("core_clk", oxili_gfx3d_clk.c, ""),
4739 CLK_LOOKUP("iface_clk", oxilicx_ahb_clk.c, ""),
4740 CLK_LOOKUP("bus_clk", oxilicx_axi_clk.c, ""),
Sathish Ambleyd1b89ed2012-02-07 21:47:47 -08004741 CLK_LOOKUP("iface_clk", venus0_ahb_clk.c, "fdc84000.qcom,iommu"),
4742 CLK_LOOKUP("core_clk", venus0_axi_clk.c, "fdc84000.qcom,iommu"),
4743 CLK_LOOKUP("bus_clk", venus0_axi_clk.c, ""),
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004744
4745 /* LPASS clocks */
4746 CLK_LOOKUP("core_clk", audio_core_slimbus_core_clk.c, "fe12f000.slim"),
4747 CLK_LOOKUP("iface_clk", audio_core_slimbus_lfabif_clk.c,
4748 "fe12f000.slim"),
4749 CLK_LOOKUP("core_clk", audio_core_lpaif_codec_spkr_clk_src.c, ""),
4750 CLK_LOOKUP("osr_clk", audio_core_lpaif_codec_spkr_osr_clk.c, ""),
4751 CLK_LOOKUP("ebit_clk", audio_core_lpaif_codec_spkr_ebit_clk.c, ""),
4752 CLK_LOOKUP("ibit_clk", audio_core_lpaif_codec_spkr_ibit_clk.c, ""),
4753 CLK_LOOKUP("core_clk", audio_core_lpaif_pri_clk_src.c, ""),
4754 CLK_LOOKUP("osr_clk", audio_core_lpaif_pri_osr_clk.c, ""),
4755 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pri_ebit_clk.c, ""),
4756 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pri_ibit_clk.c, ""),
4757 CLK_LOOKUP("core_clk", audio_core_lpaif_sec_clk_src.c, ""),
4758 CLK_LOOKUP("osr_clk", audio_core_lpaif_sec_osr_clk.c, ""),
4759 CLK_LOOKUP("ebit_clk", audio_core_lpaif_sec_ebit_clk.c, ""),
4760 CLK_LOOKUP("ibit_clk", audio_core_lpaif_sec_ibit_clk.c, ""),
4761 CLK_LOOKUP("core_clk", audio_core_lpaif_ter_clk_src.c, ""),
4762 CLK_LOOKUP("osr_clk", audio_core_lpaif_ter_osr_clk.c, ""),
4763 CLK_LOOKUP("ebit_clk", audio_core_lpaif_ter_ebit_clk.c, ""),
4764 CLK_LOOKUP("ibit_clk", audio_core_lpaif_ter_ibit_clk.c, ""),
4765 CLK_LOOKUP("core_clk", audio_core_lpaif_quad_clk_src.c, ""),
4766 CLK_LOOKUP("osr_clk", audio_core_lpaif_quad_osr_clk.c, ""),
4767 CLK_LOOKUP("ebit_clk", audio_core_lpaif_quad_ebit_clk.c, ""),
4768 CLK_LOOKUP("ibit_clk", audio_core_lpaif_quad_ibit_clk.c, ""),
4769 CLK_LOOKUP("core_clk", audio_core_lpaif_pcm0_clk_src.c, ""),
4770 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pcm0_ebit_clk.c, ""),
4771 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pcm0_ibit_clk.c, ""),
4772 CLK_LOOKUP("core_clk", audio_core_lpaif_pcm1_clk_src.c, ""),
4773 CLK_LOOKUP("ebit_clk", audio_core_lpaif_pcm1_ebit_clk.c, ""),
4774 CLK_LOOKUP("ibit_clk", audio_core_lpaif_pcm1_ibit_clk.c, ""),
4775
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004776 CLK_LOOKUP("core_clk", mss_xo_q6_clk.c, ""),
4777 CLK_LOOKUP("bus_clk", mss_bus_q6_clk.c, ""),
Matt Wagantalld41ce772012-05-10 23:16:41 -07004778 CLK_LOOKUP("core_clk", q6ss_xo_clk.c, "pil-q6v5-lpass"),
4779 CLK_LOOKUP("bus_clk", q6ss_ahb_lfabif_clk.c, "pil-q6v5-lpass"),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004780 CLK_LOOKUP("mem_clk", gcc_boot_rom_ahb_clk.c, ""),
4781 CLK_LOOKUP("bus_clk", gcc_mss_cfg_ahb_clk.c, ""),
Hariprasad Dhalinarasimhade991f02012-05-31 13:15:51 -07004782 CLK_LOOKUP("core_clk", gcc_prng_ahb_clk.c, "msm_rng"),
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07004783
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004784 /* TODO: Remove dummy clocks as soon as they become unnecessary */
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07004785 CLK_DUMMY("dfab_clk", DFAB_CLK, "msm_sps", OFF),
4786 CLK_DUMMY("mem_clk", NULL, "msm_sps", OFF),
4787 CLK_DUMMY("bus_clk", NULL, "scm", OFF),
4788};
4789
4790static struct pll_config_regs gpll0_regs __initdata = {
4791 .l_reg = (void __iomem *)GPLL0_L_REG,
4792 .m_reg = (void __iomem *)GPLL0_M_REG,
4793 .n_reg = (void __iomem *)GPLL0_N_REG,
4794 .config_reg = (void __iomem *)GPLL0_USER_CTL_REG,
4795 .mode_reg = (void __iomem *)GPLL0_MODE_REG,
4796 .base = &virt_bases[GCC_BASE],
4797};
4798
4799/* GPLL0 at 600 MHz, main output enabled. */
4800static struct pll_config gpll0_config __initdata = {
4801 .l = 0x1f,
4802 .m = 0x1,
4803 .n = 0x4,
4804 .vco_val = 0x0,
4805 .vco_mask = BM(21, 20),
4806 .pre_div_val = 0x0,
4807 .pre_div_mask = BM(14, 12),
4808 .post_div_val = 0x0,
4809 .post_div_mask = BM(9, 8),
4810 .mn_ena_val = BIT(24),
4811 .mn_ena_mask = BIT(24),
4812 .main_output_val = BIT(0),
4813 .main_output_mask = BIT(0),
4814};
4815
4816static struct pll_config_regs gpll1_regs __initdata = {
4817 .l_reg = (void __iomem *)GPLL1_L_REG,
4818 .m_reg = (void __iomem *)GPLL1_M_REG,
4819 .n_reg = (void __iomem *)GPLL1_N_REG,
4820 .config_reg = (void __iomem *)GPLL1_USER_CTL_REG,
4821 .mode_reg = (void __iomem *)GPLL1_MODE_REG,
4822 .base = &virt_bases[GCC_BASE],
4823};
4824
4825/* GPLL1 at 480 MHz, main output enabled. */
4826static struct pll_config gpll1_config __initdata = {
4827 .l = 0x19,
4828 .m = 0x0,
4829 .n = 0x1,
4830 .vco_val = 0x0,
4831 .vco_mask = BM(21, 20),
4832 .pre_div_val = 0x0,
4833 .pre_div_mask = BM(14, 12),
4834 .post_div_val = 0x0,
4835 .post_div_mask = BM(9, 8),
4836 .main_output_val = BIT(0),
4837 .main_output_mask = BIT(0),
4838};
4839
4840static struct pll_config_regs mmpll0_regs __initdata = {
4841 .l_reg = (void __iomem *)MMPLL0_L_REG,
4842 .m_reg = (void __iomem *)MMPLL0_M_REG,
4843 .n_reg = (void __iomem *)MMPLL0_N_REG,
4844 .config_reg = (void __iomem *)MMPLL0_USER_CTL_REG,
4845 .mode_reg = (void __iomem *)MMPLL0_MODE_REG,
4846 .base = &virt_bases[MMSS_BASE],
4847};
4848
4849/* MMPLL0 at 800 MHz, main output enabled. */
4850static struct pll_config mmpll0_config __initdata = {
4851 .l = 0x29,
4852 .m = 0x2,
4853 .n = 0x3,
4854 .vco_val = 0x0,
4855 .vco_mask = BM(21, 20),
4856 .pre_div_val = 0x0,
4857 .pre_div_mask = BM(14, 12),
4858 .post_div_val = 0x0,
4859 .post_div_mask = BM(9, 8),
4860 .mn_ena_val = BIT(24),
4861 .mn_ena_mask = BIT(24),
4862 .main_output_val = BIT(0),
4863 .main_output_mask = BIT(0),
4864};
4865
4866static struct pll_config_regs mmpll1_regs __initdata = {
4867 .l_reg = (void __iomem *)MMPLL1_L_REG,
4868 .m_reg = (void __iomem *)MMPLL1_M_REG,
4869 .n_reg = (void __iomem *)MMPLL1_N_REG,
4870 .config_reg = (void __iomem *)MMPLL1_USER_CTL_REG,
4871 .mode_reg = (void __iomem *)MMPLL1_MODE_REG,
4872 .base = &virt_bases[MMSS_BASE],
4873};
4874
4875/* MMPLL1 at 1000 MHz, main output enabled. */
4876static struct pll_config mmpll1_config __initdata = {
4877 .l = 0x34,
4878 .m = 0x1,
4879 .n = 0xC,
4880 .vco_val = 0x0,
4881 .vco_mask = BM(21, 20),
4882 .pre_div_val = 0x0,
4883 .pre_div_mask = BM(14, 12),
4884 .post_div_val = 0x0,
4885 .post_div_mask = BM(9, 8),
4886 .mn_ena_val = BIT(24),
4887 .mn_ena_mask = BIT(24),
4888 .main_output_val = BIT(0),
4889 .main_output_mask = BIT(0),
4890};
4891
4892static struct pll_config_regs mmpll3_regs __initdata = {
4893 .l_reg = (void __iomem *)MMPLL3_L_REG,
4894 .m_reg = (void __iomem *)MMPLL3_M_REG,
4895 .n_reg = (void __iomem *)MMPLL3_N_REG,
4896 .config_reg = (void __iomem *)MMPLL3_USER_CTL_REG,
4897 .mode_reg = (void __iomem *)MMPLL3_MODE_REG,
4898 .base = &virt_bases[MMSS_BASE],
4899};
4900
4901/* MMPLL3 at 820 MHz, main output enabled. */
4902static struct pll_config mmpll3_config __initdata = {
4903 .l = 0x2A,
4904 .m = 0x11,
4905 .n = 0x18,
4906 .vco_val = 0x0,
4907 .vco_mask = BM(21, 20),
4908 .pre_div_val = 0x0,
4909 .pre_div_mask = BM(14, 12),
4910 .post_div_val = 0x0,
4911 .post_div_mask = BM(9, 8),
4912 .mn_ena_val = BIT(24),
4913 .mn_ena_mask = BIT(24),
4914 .main_output_val = BIT(0),
4915 .main_output_mask = BIT(0),
4916};
4917
4918static struct pll_config_regs lpapll0_regs __initdata = {
4919 .l_reg = (void __iomem *)LPAPLL_L_REG,
4920 .m_reg = (void __iomem *)LPAPLL_M_REG,
4921 .n_reg = (void __iomem *)LPAPLL_N_REG,
4922 .config_reg = (void __iomem *)LPAPLL_USER_CTL_REG,
4923 .mode_reg = (void __iomem *)LPAPLL_MODE_REG,
4924 .base = &virt_bases[LPASS_BASE],
4925};
4926
4927/* LPAPLL0 at 491.52 MHz, main output enabled. */
4928static struct pll_config lpapll0_config __initdata = {
4929 .l = 0x33,
4930 .m = 0x1,
4931 .n = 0x5,
4932 .vco_val = 0x0,
4933 .vco_mask = BM(21, 20),
4934 .pre_div_val = BVAL(14, 12, 0x1),
4935 .pre_div_mask = BM(14, 12),
4936 .post_div_val = 0x0,
4937 .post_div_mask = BM(9, 8),
4938 .mn_ena_val = BIT(24),
4939 .mn_ena_mask = BIT(24),
4940 .main_output_val = BIT(0),
4941 .main_output_mask = BIT(0),
4942};
4943
4944#define PLL_AUX_OUTPUT BIT(1)
4945
4946static void __init reg_init(void)
4947{
4948 u32 regval;
4949
4950 if (!(readl_relaxed(GCC_REG_BASE(GPLL0_STATUS_REG))
4951 & gpll0_clk_src.status_mask))
4952 configure_pll(&gpll0_config, &gpll0_regs, 1);
4953
4954 if (!(readl_relaxed(GCC_REG_BASE(GPLL1_STATUS_REG))
4955 & gpll1_clk_src.status_mask))
4956 configure_pll(&gpll1_config, &gpll1_regs, 1);
4957
4958 configure_pll(&mmpll0_config, &mmpll0_regs, 1);
4959 configure_pll(&mmpll1_config, &mmpll1_regs, 1);
4960 configure_pll(&mmpll3_config, &mmpll3_regs, 0);
4961 configure_pll(&lpapll0_config, &lpapll0_regs, 1);
4962
4963 /* Active GPLL0's aux output. This is needed by acpuclock. */
4964 regval = readl_relaxed(GCC_REG_BASE(GPLL0_USER_CTL_REG));
4965 regval |= BIT(PLL_AUX_OUTPUT);
4966 writel_relaxed(regval, GCC_REG_BASE(GPLL0_USER_CTL_REG));
4967
4968 /* Vote for GPLL0 to turn on. Needed by acpuclock. */
4969 regval = readl_relaxed(GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
4970 regval |= BIT(0);
4971 writel_relaxed(regval, GCC_REG_BASE(APCS_GPLL_ENA_VOTE_REG));
4972
4973 /*
4974 * TODO: Confirm that no clocks need to be voted on in this sleep vote
4975 * register.
4976 */
4977 writel_relaxed(0x0, GCC_REG_BASE(APCS_CLOCK_SLEEP_ENA_VOTE));
4978}
4979
4980static void __init msmcopper_clock_post_init(void)
4981{
4982 clk_set_rate(&ahb_clk_src.c, 80000000);
4983 clk_set_rate(&axi_clk_src.c, 333330000);
4984
4985 /* Set rates for single-rate clocks. */
4986 clk_set_rate(&usb30_master_clk_src.c,
4987 usb30_master_clk_src.freq_tbl[0].freq_hz);
4988 clk_set_rate(&tsif_ref_clk_src.c,
4989 tsif_ref_clk_src.freq_tbl[0].freq_hz);
4990 clk_set_rate(&usb_hs_system_clk_src.c,
4991 usb_hs_system_clk_src.freq_tbl[0].freq_hz);
4992 clk_set_rate(&usb_hsic_clk_src.c,
4993 usb_hsic_clk_src.freq_tbl[0].freq_hz);
4994 clk_set_rate(&usb_hsic_io_cal_clk_src.c,
4995 usb_hsic_io_cal_clk_src.freq_tbl[0].freq_hz);
4996 clk_set_rate(&usb_hsic_system_clk_src.c,
4997 usb_hsic_system_clk_src.freq_tbl[0].freq_hz);
4998 clk_set_rate(&usb30_mock_utmi_clk_src.c,
4999 usb30_mock_utmi_clk_src.freq_tbl[0].freq_hz);
5000 clk_set_rate(&pdm2_clk_src.c, pdm2_clk_src.freq_tbl[0].freq_hz);
5001 clk_set_rate(&cci_clk_src.c, cci_clk_src.freq_tbl[0].freq_hz);
5002 clk_set_rate(&mclk0_clk_src.c, mclk0_clk_src.freq_tbl[0].freq_hz);
5003 clk_set_rate(&mclk1_clk_src.c, mclk1_clk_src.freq_tbl[0].freq_hz);
5004 clk_set_rate(&mclk2_clk_src.c, mclk2_clk_src.freq_tbl[0].freq_hz);
5005 clk_set_rate(&edpaux_clk_src.c, edpaux_clk_src.freq_tbl[0].freq_hz);
5006 clk_set_rate(&esc0_clk_src.c, esc0_clk_src.freq_tbl[0].freq_hz);
5007 clk_set_rate(&esc1_clk_src.c, esc1_clk_src.freq_tbl[0].freq_hz);
5008 clk_set_rate(&hdmi_clk_src.c, hdmi_clk_src.freq_tbl[0].freq_hz);
5009 clk_set_rate(&vsync_clk_src.c, vsync_clk_src.freq_tbl[0].freq_hz);
5010 clk_set_rate(&audio_core_slimbus_core_clk_src.c,
5011 audio_core_slimbus_core_clk_src.freq_tbl[0].freq_hz);
5012}
5013
5014#define GCC_CC_PHYS 0xFC400000
5015#define GCC_CC_SIZE SZ_16K
5016
5017#define MMSS_CC_PHYS 0xFD8C0000
5018#define MMSS_CC_SIZE SZ_256K
5019
5020#define LPASS_CC_PHYS 0xFE000000
5021#define LPASS_CC_SIZE SZ_256K
5022
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005023#define MSS_CC_PHYS 0xFC980000
5024#define MSS_CC_SIZE SZ_16K
5025
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005026static void __init msmcopper_clock_pre_init(void)
5027{
5028 virt_bases[GCC_BASE] = ioremap(GCC_CC_PHYS, GCC_CC_SIZE);
5029 if (!virt_bases[GCC_BASE])
5030 panic("clock-copper: Unable to ioremap GCC memory!");
5031
5032 virt_bases[MMSS_BASE] = ioremap(MMSS_CC_PHYS, MMSS_CC_SIZE);
5033 if (!virt_bases[MMSS_BASE])
5034 panic("clock-copper: Unable to ioremap MMSS_CC memory!");
5035
5036 virt_bases[LPASS_BASE] = ioremap(LPASS_CC_PHYS, LPASS_CC_SIZE);
5037 if (!virt_bases[LPASS_BASE])
5038 panic("clock-copper: Unable to ioremap LPASS_CC memory!");
5039
Vikram Mulukutlaa967db42012-05-10 16:20:40 -07005040 virt_bases[MSS_BASE] = ioremap(MSS_CC_PHYS, MSS_CC_SIZE);
5041 if (!virt_bases[MSS_BASE])
5042 panic("clock-copper: Unable to ioremap MSS_CC memory!");
5043
Vikram Mulukutlaaa3e0112012-04-23 14:40:51 -07005044 clk_ops_local_pll.enable = copper_pll_clk_enable;
5045
5046 reg_init();
5047}
5048
5049struct clock_init_data msmcopper_clock_init_data __initdata = {
5050 .table = msm_clocks_copper,
5051 .size = ARRAY_SIZE(msm_clocks_copper),
5052 .pre_init = msmcopper_clock_pre_init,
5053 .post_init = msmcopper_clock_post_init,
5054};