root/drivers/clk/spear/spear1340_clock.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. spear1340_clk_init

   1 /*
   2  * arch/arm/mach-spear13xx/spear1340_clock.c
   3  *
   4  * SPEAr1340 machine clock framework source file
   5  *
   6  * Copyright (C) 2012 ST Microelectronics
   7  * Viresh Kumar <vireshk@kernel.org>
   8  *
   9  * This file is licensed under the terms of the GNU General Public
  10  * License version 2. This program is licensed "as is" without any
  11  * warranty of any kind, whether express or implied.
  12  */
  13 
  14 #include <linux/clkdev.h>
  15 #include <linux/err.h>
  16 #include <linux/io.h>
  17 #include <linux/of_platform.h>
  18 #include <linux/spinlock_types.h>
  19 #include "clk.h"
  20 
  21 /* Clock Configuration Registers */
  22 #define SPEAR1340_SYS_CLK_CTRL                  (misc_base + 0x200)
  23         #define SPEAR1340_HCLK_SRC_SEL_SHIFT    27
  24         #define SPEAR1340_HCLK_SRC_SEL_MASK     1
  25         #define SPEAR1340_SCLK_SRC_SEL_SHIFT    23
  26         #define SPEAR1340_SCLK_SRC_SEL_MASK     3
  27 
  28 /* PLL related registers and bit values */
  29 #define SPEAR1340_PLL_CFG                       (misc_base + 0x210)
  30         /* PLL_CFG bit values */
  31         #define SPEAR1340_CLCD_SYNT_CLK_MASK            1
  32         #define SPEAR1340_CLCD_SYNT_CLK_SHIFT           31
  33         #define SPEAR1340_GEN_SYNT2_3_CLK_SHIFT         29
  34         #define SPEAR1340_GEN_SYNT_CLK_MASK             2
  35         #define SPEAR1340_GEN_SYNT0_1_CLK_SHIFT         27
  36         #define SPEAR1340_PLL_CLK_MASK                  2
  37         #define SPEAR1340_PLL3_CLK_SHIFT                24
  38         #define SPEAR1340_PLL2_CLK_SHIFT                22
  39         #define SPEAR1340_PLL1_CLK_SHIFT                20
  40 
  41 #define SPEAR1340_PLL1_CTR                      (misc_base + 0x214)
  42 #define SPEAR1340_PLL1_FRQ                      (misc_base + 0x218)
  43 #define SPEAR1340_PLL2_CTR                      (misc_base + 0x220)
  44 #define SPEAR1340_PLL2_FRQ                      (misc_base + 0x224)
  45 #define SPEAR1340_PLL3_CTR                      (misc_base + 0x22C)
  46 #define SPEAR1340_PLL3_FRQ                      (misc_base + 0x230)
  47 #define SPEAR1340_PLL4_CTR                      (misc_base + 0x238)
  48 #define SPEAR1340_PLL4_FRQ                      (misc_base + 0x23C)
  49 #define SPEAR1340_PERIP_CLK_CFG                 (misc_base + 0x244)
  50         /* PERIP_CLK_CFG bit values */
  51         #define SPEAR1340_SPDIF_CLK_MASK                1
  52         #define SPEAR1340_SPDIF_OUT_CLK_SHIFT           15
  53         #define SPEAR1340_SPDIF_IN_CLK_SHIFT            14
  54         #define SPEAR1340_GPT3_CLK_SHIFT                13
  55         #define SPEAR1340_GPT2_CLK_SHIFT                12
  56         #define SPEAR1340_GPT_CLK_MASK                  1
  57         #define SPEAR1340_GPT1_CLK_SHIFT                9
  58         #define SPEAR1340_GPT0_CLK_SHIFT                8
  59         #define SPEAR1340_UART_CLK_MASK                 2
  60         #define SPEAR1340_UART1_CLK_SHIFT               6
  61         #define SPEAR1340_UART0_CLK_SHIFT               4
  62         #define SPEAR1340_CLCD_CLK_MASK                 2
  63         #define SPEAR1340_CLCD_CLK_SHIFT                2
  64         #define SPEAR1340_C3_CLK_MASK                   1
  65         #define SPEAR1340_C3_CLK_SHIFT                  1
  66 
  67 #define SPEAR1340_GMAC_CLK_CFG                  (misc_base + 0x248)
  68         #define SPEAR1340_GMAC_PHY_CLK_MASK             1
  69         #define SPEAR1340_GMAC_PHY_CLK_SHIFT            2
  70         #define SPEAR1340_GMAC_PHY_INPUT_CLK_MASK       2
  71         #define SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT      0
  72 
  73 #define SPEAR1340_I2S_CLK_CFG                   (misc_base + 0x24C)
  74         /* I2S_CLK_CFG register mask */
  75         #define SPEAR1340_I2S_SCLK_X_MASK               0x1F
  76         #define SPEAR1340_I2S_SCLK_X_SHIFT              27
  77         #define SPEAR1340_I2S_SCLK_Y_MASK               0x1F
  78         #define SPEAR1340_I2S_SCLK_Y_SHIFT              22
  79         #define SPEAR1340_I2S_SCLK_EQ_SEL_SHIFT         21
  80         #define SPEAR1340_I2S_SCLK_SYNTH_ENB            20
  81         #define SPEAR1340_I2S_PRS1_CLK_X_MASK           0xFF
  82         #define SPEAR1340_I2S_PRS1_CLK_X_SHIFT          12
  83         #define SPEAR1340_I2S_PRS1_CLK_Y_MASK           0xFF
  84         #define SPEAR1340_I2S_PRS1_CLK_Y_SHIFT          4
  85         #define SPEAR1340_I2S_PRS1_EQ_SEL_SHIFT         3
  86         #define SPEAR1340_I2S_REF_SEL_MASK              1
  87         #define SPEAR1340_I2S_REF_SHIFT                 2
  88         #define SPEAR1340_I2S_SRC_CLK_MASK              2
  89         #define SPEAR1340_I2S_SRC_CLK_SHIFT             0
  90 
  91 #define SPEAR1340_C3_CLK_SYNT                   (misc_base + 0x250)
  92 #define SPEAR1340_UART0_CLK_SYNT                (misc_base + 0x254)
  93 #define SPEAR1340_UART1_CLK_SYNT                (misc_base + 0x258)
  94 #define SPEAR1340_GMAC_CLK_SYNT                 (misc_base + 0x25C)
  95 #define SPEAR1340_SDHCI_CLK_SYNT                (misc_base + 0x260)
  96 #define SPEAR1340_CFXD_CLK_SYNT                 (misc_base + 0x264)
  97 #define SPEAR1340_ADC_CLK_SYNT                  (misc_base + 0x270)
  98 #define SPEAR1340_AMBA_CLK_SYNT                 (misc_base + 0x274)
  99 #define SPEAR1340_CLCD_CLK_SYNT                 (misc_base + 0x27C)
 100 #define SPEAR1340_SYS_CLK_SYNT                  (misc_base + 0x284)
 101 #define SPEAR1340_GEN_CLK_SYNT0                 (misc_base + 0x28C)
 102 #define SPEAR1340_GEN_CLK_SYNT1                 (misc_base + 0x294)
 103 #define SPEAR1340_GEN_CLK_SYNT2                 (misc_base + 0x29C)
 104 #define SPEAR1340_GEN_CLK_SYNT3                 (misc_base + 0x304)
 105 #define SPEAR1340_PERIP1_CLK_ENB                (misc_base + 0x30C)
 106         #define SPEAR1340_RTC_CLK_ENB                   31
 107         #define SPEAR1340_ADC_CLK_ENB                   30
 108         #define SPEAR1340_C3_CLK_ENB                    29
 109         #define SPEAR1340_CLCD_CLK_ENB                  27
 110         #define SPEAR1340_DMA_CLK_ENB                   25
 111         #define SPEAR1340_GPIO1_CLK_ENB                 24
 112         #define SPEAR1340_GPIO0_CLK_ENB                 23
 113         #define SPEAR1340_GPT1_CLK_ENB                  22
 114         #define SPEAR1340_GPT0_CLK_ENB                  21
 115         #define SPEAR1340_I2S_PLAY_CLK_ENB              20
 116         #define SPEAR1340_I2S_REC_CLK_ENB               19
 117         #define SPEAR1340_I2C0_CLK_ENB                  18
 118         #define SPEAR1340_SSP_CLK_ENB                   17
 119         #define SPEAR1340_UART0_CLK_ENB                 15
 120         #define SPEAR1340_PCIE_SATA_CLK_ENB             12
 121         #define SPEAR1340_UOC_CLK_ENB                   11
 122         #define SPEAR1340_UHC1_CLK_ENB                  10
 123         #define SPEAR1340_UHC0_CLK_ENB                  9
 124         #define SPEAR1340_GMAC_CLK_ENB                  8
 125         #define SPEAR1340_CFXD_CLK_ENB                  7
 126         #define SPEAR1340_SDHCI_CLK_ENB                 6
 127         #define SPEAR1340_SMI_CLK_ENB                   5
 128         #define SPEAR1340_FSMC_CLK_ENB                  4
 129         #define SPEAR1340_SYSRAM0_CLK_ENB               3
 130         #define SPEAR1340_SYSRAM1_CLK_ENB               2
 131         #define SPEAR1340_SYSROM_CLK_ENB                1
 132         #define SPEAR1340_BUS_CLK_ENB                   0
 133 
 134 #define SPEAR1340_PERIP2_CLK_ENB                (misc_base + 0x310)
 135         #define SPEAR1340_THSENS_CLK_ENB                8
 136         #define SPEAR1340_I2S_REF_PAD_CLK_ENB           7
 137         #define SPEAR1340_ACP_CLK_ENB                   6
 138         #define SPEAR1340_GPT3_CLK_ENB                  5
 139         #define SPEAR1340_GPT2_CLK_ENB                  4
 140         #define SPEAR1340_KBD_CLK_ENB                   3
 141         #define SPEAR1340_CPU_DBG_CLK_ENB               2
 142         #define SPEAR1340_DDR_CORE_CLK_ENB              1
 143         #define SPEAR1340_DDR_CTRL_CLK_ENB              0
 144 
 145 #define SPEAR1340_PERIP3_CLK_ENB                (misc_base + 0x314)
 146         #define SPEAR1340_PLGPIO_CLK_ENB                18
 147         #define SPEAR1340_VIDEO_DEC_CLK_ENB             16
 148         #define SPEAR1340_VIDEO_ENC_CLK_ENB             15
 149         #define SPEAR1340_SPDIF_OUT_CLK_ENB             13
 150         #define SPEAR1340_SPDIF_IN_CLK_ENB              12
 151         #define SPEAR1340_VIDEO_IN_CLK_ENB              11
 152         #define SPEAR1340_CAM0_CLK_ENB                  10
 153         #define SPEAR1340_CAM1_CLK_ENB                  9
 154         #define SPEAR1340_CAM2_CLK_ENB                  8
 155         #define SPEAR1340_CAM3_CLK_ENB                  7
 156         #define SPEAR1340_MALI_CLK_ENB                  6
 157         #define SPEAR1340_CEC0_CLK_ENB                  5
 158         #define SPEAR1340_CEC1_CLK_ENB                  4
 159         #define SPEAR1340_PWM_CLK_ENB                   3
 160         #define SPEAR1340_I2C1_CLK_ENB                  2
 161         #define SPEAR1340_UART1_CLK_ENB                 1
 162 
 163 static DEFINE_SPINLOCK(_lock);
 164 
 165 /* pll rate configuration table, in ascending order of rates */
 166 static struct pll_rate_tbl pll_rtbl[] = {
 167         /* PCLK 24MHz */
 168         {.mode = 0, .m = 0x83, .n = 0x04, .p = 0x5}, /* vco 1572, pll 49.125 MHz */
 169         {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x3}, /* vco 1000, pll 125 MHz */
 170         {.mode = 0, .m = 0x64, .n = 0x06, .p = 0x1}, /* vco 800, pll 400 MHz */
 171         {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x1}, /* vco 1000, pll 500 MHz */
 172         {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x1}, /* vco 1328, pll 664 MHz */
 173         {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x1}, /* vco 1600, pll 800 MHz */
 174         {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */
 175         {.mode = 0, .m = 0x96, .n = 0x06, .p = 0x0}, /* vco 1200, pll 1200 MHz */
 176 };
 177 
 178 /* vco-pll4 rate configuration table, in ascending order of rates */
 179 static struct pll_rate_tbl pll4_rtbl[] = {
 180         {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x2}, /* vco 1000, pll 250 MHz */
 181         {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x2}, /* vco 1328, pll 332 MHz */
 182         {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x2}, /* vco 1600, pll 400 MHz */
 183         {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */
 184 };
 185 
 186 /*
 187  * All below entries generate 166 MHz for
 188  * different values of vco1div2
 189  */
 190 static struct frac_rate_tbl amba_synth_rtbl[] = {
 191         {.div = 0x073A8}, /* for vco1div2 = 600 MHz */
 192         {.div = 0x06062}, /* for vco1div2 = 500 MHz */
 193         {.div = 0x04D1B}, /* for vco1div2 = 400 MHz */
 194         {.div = 0x04000}, /* for vco1div2 = 332 MHz */
 195         {.div = 0x03031}, /* for vco1div2 = 250 MHz */
 196         {.div = 0x0268D}, /* for vco1div2 = 200 MHz */
 197 };
 198 
 199 /*
 200  * Synthesizer Clock derived from vcodiv2. This clock is one of the
 201  * possible clocks to feed cpu directly.
 202  * We can program this synthesizer to make cpu run on different clock
 203  * frequencies.
 204  * Following table provides configuration values to let cpu run on 200,
 205  * 250, 332, 400 or 500 MHz considering different possibilites of input
 206  * (vco1div2) clock.
 207  *
 208  * --------------------------------------------------------------------
 209  * vco1div2(Mhz)        fout(Mhz)       cpuclk = fout/2         div
 210  * --------------------------------------------------------------------
 211  * 400                  200             100                     0x04000
 212  * 400                  250             125                     0x03333
 213  * 400                  332             166                     0x0268D
 214  * 400                  400             200                     0x02000
 215  * --------------------------------------------------------------------
 216  * 500                  200             100                     0x05000
 217  * 500                  250             125                     0x04000
 218  * 500                  332             166                     0x03031
 219  * 500                  400             200                     0x02800
 220  * 500                  500             250                     0x02000
 221  * --------------------------------------------------------------------
 222  * 600                  200             100                     0x06000
 223  * 600                  250             125                     0x04CCE
 224  * 600                  332             166                     0x039D5
 225  * 600                  400             200                     0x03000
 226  * 600                  500             250                     0x02666
 227  * --------------------------------------------------------------------
 228  * 664                  200             100                     0x06a38
 229  * 664                  250             125                     0x054FD
 230  * 664                  332             166                     0x04000
 231  * 664                  400             200                     0x0351E
 232  * 664                  500             250                     0x02A7E
 233  * --------------------------------------------------------------------
 234  * 800                  200             100                     0x08000
 235  * 800                  250             125                     0x06666
 236  * 800                  332             166                     0x04D18
 237  * 800                  400             200                     0x04000
 238  * 800                  500             250                     0x03333
 239  * --------------------------------------------------------------------
 240  * sys rate configuration table is in descending order of divisor.
 241  */
 242 static struct frac_rate_tbl sys_synth_rtbl[] = {
 243         {.div = 0x08000},
 244         {.div = 0x06a38},
 245         {.div = 0x06666},
 246         {.div = 0x06000},
 247         {.div = 0x054FD},
 248         {.div = 0x05000},
 249         {.div = 0x04D18},
 250         {.div = 0x04CCE},
 251         {.div = 0x04000},
 252         {.div = 0x039D5},
 253         {.div = 0x0351E},
 254         {.div = 0x03333},
 255         {.div = 0x03031},
 256         {.div = 0x03000},
 257         {.div = 0x02A7E},
 258         {.div = 0x02800},
 259         {.div = 0x0268D},
 260         {.div = 0x02666},
 261         {.div = 0x02000},
 262 };
 263 
 264 /* aux rate configuration table, in ascending order of rates */
 265 static struct aux_rate_tbl aux_rtbl[] = {
 266         /* 12.29MHz for vic1div2=600MHz and 10.24MHz for VCO1div2=500MHz */
 267         {.xscale = 5, .yscale = 122, .eq = 0},
 268         /* 14.70MHz for vic1div2=600MHz and 12.29MHz for VCO1div2=500MHz */
 269         {.xscale = 10, .yscale = 204, .eq = 0},
 270         /* 48MHz for vic1div2=600MHz and 40 MHz for VCO1div2=500MHz */
 271         {.xscale = 4, .yscale = 25, .eq = 0},
 272         /* 57.14MHz for vic1div2=600MHz and 48 MHz for VCO1div2=500MHz */
 273         {.xscale = 4, .yscale = 21, .eq = 0},
 274         /* 83.33MHz for vic1div2=600MHz and 69.44MHz for VCO1div2=500MHz */
 275         {.xscale = 5, .yscale = 18, .eq = 0},
 276         /* 100MHz for vic1div2=600MHz and 83.33 MHz for VCO1div2=500MHz */
 277         {.xscale = 2, .yscale = 6, .eq = 0},
 278         /* 125MHz for vic1div2=600MHz and 104.1MHz for VCO1div2=500MHz */
 279         {.xscale = 5, .yscale = 12, .eq = 0},
 280         /* 150MHz for vic1div2=600MHz and 125MHz for VCO1div2=500MHz */
 281         {.xscale = 2, .yscale = 4, .eq = 0},
 282         /* 166MHz for vic1div2=600MHz and 138.88MHz for VCO1div2=500MHz */
 283         {.xscale = 5, .yscale = 18, .eq = 1},
 284         /* 200MHz for vic1div2=600MHz and 166MHz for VCO1div2=500MHz */
 285         {.xscale = 1, .yscale = 3, .eq = 1},
 286         /* 250MHz for vic1div2=600MHz and 208.33MHz for VCO1div2=500MHz */
 287         {.xscale = 5, .yscale = 12, .eq = 1},
 288         /* 300MHz for vic1div2=600MHz and 250MHz for VCO1div2=500MHz */
 289         {.xscale = 1, .yscale = 2, .eq = 1},
 290 };
 291 
 292 /* gmac rate configuration table, in ascending order of rates */
 293 static struct aux_rate_tbl gmac_rtbl[] = {
 294         /* For gmac phy input clk */
 295         {.xscale = 2, .yscale = 6, .eq = 0}, /* divided by 6 */
 296         {.xscale = 2, .yscale = 4, .eq = 0}, /* divided by 4 */
 297         {.xscale = 1, .yscale = 3, .eq = 1}, /* divided by 3 */
 298         {.xscale = 1, .yscale = 2, .eq = 1}, /* divided by 2 */
 299 };
 300 
 301 /* clcd rate configuration table, in ascending order of rates */
 302 static struct frac_rate_tbl clcd_rtbl[] = {
 303         {.div = 0x18000}, /* 25 Mhz , for vc01div4 = 300 MHz*/
 304         {.div = 0x1638E}, /* 27 Mhz , for vc01div4 = 300 MHz*/
 305         {.div = 0x14000}, /* 25 Mhz , for vc01div4 = 250 MHz*/
 306         {.div = 0x1284B}, /* 27 Mhz , for vc01div4 = 250 MHz*/
 307         {.div = 0x0D8D3}, /* 58 Mhz , for vco1div4 = 393 MHz */
 308         {.div = 0x0B72C}, /* 58 Mhz , for vco1div4 = 332 MHz */
 309         {.div = 0x0A584}, /* 58 Mhz , for vco1div4 = 300 MHz */
 310         {.div = 0x093B1}, /* 65 Mhz , for vc01div4 = 300 MHz*/
 311         {.div = 0x089EE}, /* 58 Mhz , for vc01div4 = 250 MHz*/
 312         {.div = 0x081BA}, /* 74 Mhz , for vc01div4 = 300 MHz*/
 313         {.div = 0x07BA0}, /* 65 Mhz , for vc01div4 = 250 MHz*/
 314         {.div = 0x06f1C}, /* 72 Mhz , for vc01div4 = 250 MHz*/
 315         {.div = 0x06E58}, /* 58 Mhz , for vco1div4 = 200 MHz */
 316         {.div = 0x06c1B}, /* 74 Mhz , for vc01div4 = 250 MHz*/
 317         {.div = 0x058E3}, /* 108 Mhz , for vc01div4 = 300 MHz*/
 318         {.div = 0x04A12}, /* 108 Mhz , for vc01div4 = 250 MHz*/
 319         {.div = 0x040A5}, /* 148.5 Mhz , for vc01div4 = 300 MHz*/
 320         {.div = 0x0378E}, /* 144 Mhz , for vc01div4 = 250 MHz*/
 321         {.div = 0x0360D}, /* 148 Mhz , for vc01div4 = 250 MHz*/
 322         {.div = 0x035E0}, /* 148.5 MHz, for vc01div4 = 250 MHz*/
 323 };
 324 
 325 /* i2s prescaler1 masks */
 326 static const struct aux_clk_masks i2s_prs1_masks = {
 327         .eq_sel_mask = AUX_EQ_SEL_MASK,
 328         .eq_sel_shift = SPEAR1340_I2S_PRS1_EQ_SEL_SHIFT,
 329         .eq1_mask = AUX_EQ1_SEL,
 330         .eq2_mask = AUX_EQ2_SEL,
 331         .xscale_sel_mask = SPEAR1340_I2S_PRS1_CLK_X_MASK,
 332         .xscale_sel_shift = SPEAR1340_I2S_PRS1_CLK_X_SHIFT,
 333         .yscale_sel_mask = SPEAR1340_I2S_PRS1_CLK_Y_MASK,
 334         .yscale_sel_shift = SPEAR1340_I2S_PRS1_CLK_Y_SHIFT,
 335 };
 336 
 337 /* i2s sclk (bit clock) syynthesizers masks */
 338 static const struct aux_clk_masks i2s_sclk_masks = {
 339         .eq_sel_mask = AUX_EQ_SEL_MASK,
 340         .eq_sel_shift = SPEAR1340_I2S_SCLK_EQ_SEL_SHIFT,
 341         .eq1_mask = AUX_EQ1_SEL,
 342         .eq2_mask = AUX_EQ2_SEL,
 343         .xscale_sel_mask = SPEAR1340_I2S_SCLK_X_MASK,
 344         .xscale_sel_shift = SPEAR1340_I2S_SCLK_X_SHIFT,
 345         .yscale_sel_mask = SPEAR1340_I2S_SCLK_Y_MASK,
 346         .yscale_sel_shift = SPEAR1340_I2S_SCLK_Y_SHIFT,
 347         .enable_bit = SPEAR1340_I2S_SCLK_SYNTH_ENB,
 348 };
 349 
 350 /* i2s prs1 aux rate configuration table, in ascending order of rates */
 351 static struct aux_rate_tbl i2s_prs1_rtbl[] = {
 352         /* For parent clk = 49.152 MHz */
 353         {.xscale = 1, .yscale = 12, .eq = 0}, /* 2.048 MHz, smp freq = 8Khz */
 354         {.xscale = 11, .yscale = 96, .eq = 0}, /* 2.816 MHz, smp freq = 11Khz */
 355         {.xscale = 1, .yscale = 6, .eq = 0}, /* 4.096 MHz, smp freq = 16Khz */
 356         {.xscale = 11, .yscale = 48, .eq = 0}, /* 5.632 MHz, smp freq = 22Khz */
 357 
 358         /*
 359          * with parent clk = 49.152, freq gen is 8.192 MHz, smp freq = 32Khz
 360          * with parent clk = 12.288, freq gen is 2.048 MHz, smp freq = 8Khz
 361          */
 362         {.xscale = 1, .yscale = 3, .eq = 0},
 363 
 364         /* For parent clk = 49.152 MHz */
 365         {.xscale = 17, .yscale = 37, .eq = 0}, /* 11.289 MHz, smp freq = 44Khz*/
 366         {.xscale = 1, .yscale = 2, .eq = 0}, /* 12.288 MHz, smp freq = 48Khz*/
 367 };
 368 
 369 /* i2s sclk aux rate configuration table, in ascending order of rates */
 370 static struct aux_rate_tbl i2s_sclk_rtbl[] = {
 371         /* For sclk = ref_clk * x/2/y */
 372         {.xscale = 1, .yscale = 4, .eq = 0},
 373         {.xscale = 1, .yscale = 2, .eq = 0},
 374 };
 375 
 376 /* adc rate configuration table, in ascending order of rates */
 377 /* possible adc range is 2.5 MHz to 20 MHz. */
 378 static struct aux_rate_tbl adc_rtbl[] = {
 379         /* For ahb = 166.67 MHz */
 380         {.xscale = 1, .yscale = 31, .eq = 0}, /* 2.68 MHz */
 381         {.xscale = 2, .yscale = 21, .eq = 0}, /* 7.94 MHz */
 382         {.xscale = 4, .yscale = 21, .eq = 0}, /* 15.87 MHz */
 383         {.xscale = 10, .yscale = 42, .eq = 0}, /* 19.84 MHz */
 384 };
 385 
 386 /* General synth rate configuration table, in ascending order of rates */
 387 static struct frac_rate_tbl gen_rtbl[] = {
 388         {.div = 0x1A92B}, /* 22.5792 MHz for vco1div4=300 MHz*/
 389         {.div = 0x186A0}, /* 24.576 MHz for vco1div4=300 MHz*/
 390         {.div = 0x18000}, /* 25 MHz for vco1div4=300 MHz*/
 391         {.div = 0x1624E}, /* 22.5792 MHz for vco1div4=250 MHz*/
 392         {.div = 0x14585}, /* 24.576 MHz for vco1div4=250 MHz*/
 393         {.div = 0x14000}, /* 25 MHz for vco1div4=250 MHz*/
 394         {.div = 0x0D495}, /* 45.1584 MHz for vco1div4=300 MHz*/
 395         {.div = 0x0C000}, /* 50 MHz for vco1div4=300 MHz*/
 396         {.div = 0x0B127}, /* 45.1584 MHz for vco1div4=250 MHz*/
 397         {.div = 0x0A000}, /* 50 MHz for vco1div4=250 MHz*/
 398         {.div = 0x07530}, /* 81.92 MHz for vco1div4=300 MHz*/
 399         {.div = 0x061A8}, /* 81.92 MHz for vco1div4=250 MHz*/
 400         {.div = 0x06000}, /* 100 MHz for vco1div4=300 MHz*/
 401         {.div = 0x05000}, /* 100 MHz for vco1div4=250 MHz*/
 402         {.div = 0x03000}, /* 200 MHz for vco1div4=300 MHz*/
 403         {.div = 0x02DB6}, /* 210 MHz for vco1div4=300 MHz*/
 404         {.div = 0x02BA2}, /* 220 MHz for vco1div4=300 MHz*/
 405         {.div = 0x029BD}, /* 230 MHz for vco1div4=300 MHz*/
 406         {.div = 0x02800}, /* 200 MHz for vco1div4=250 MHz*/
 407         {.div = 0x02666}, /* 250 MHz for vco1div4=300 MHz*/
 408         {.div = 0x02620}, /* 210 MHz for vco1div4=250 MHz*/
 409         {.div = 0x02460}, /* 220 MHz for vco1div4=250 MHz*/
 410         {.div = 0x022C0}, /* 230 MHz for vco1div4=250 MHz*/
 411         {.div = 0x02160}, /* 240 MHz for vco1div4=250 MHz*/
 412         {.div = 0x02000}, /* 250 MHz for vco1div4=250 MHz*/
 413 };
 414 
 415 /* clock parents */
 416 static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
 417 static const char *sys_parents[] = { "pll1_clk", "pll1_clk", "pll1_clk",
 418         "pll1_clk", "sys_syn_clk", "sys_syn_clk", "pll2_clk", "pll3_clk", };
 419 static const char *ahb_parents[] = { "cpu_div3_clk", "amba_syn_clk", };
 420 static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
 421 static const char *uart0_parents[] = { "pll5_clk", "osc_24m_clk",
 422         "uart0_syn_gclk", };
 423 static const char *uart1_parents[] = { "pll5_clk", "osc_24m_clk",
 424         "uart1_syn_gclk", };
 425 static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
 426 static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
 427         "osc_25m_clk", };
 428 static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
 429 static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
 430 static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
 431 static const char *i2s_src_parents[] = { "vco1div2_clk", "pll2_clk", "pll3_clk",
 432         "i2s_src_pad_clk", };
 433 static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
 434 static const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_syn2_clk", };
 435 static const char *spdif_in_parents[] = { "pll2_clk", "gen_syn3_clk", };
 436 
 437 static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
 438         "pll3_clk", };
 439 static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco2div2_clk",
 440         "pll2_clk", };
 441 
 442 void __init spear1340_clk_init(void __iomem *misc_base)
 443 {
 444         struct clk *clk, *clk1;
 445 
 446         clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, 0, 32000);
 447         clk_register_clkdev(clk, "osc_32k_clk", NULL);
 448 
 449         clk = clk_register_fixed_rate(NULL, "osc_24m_clk", NULL, 0, 24000000);
 450         clk_register_clkdev(clk, "osc_24m_clk", NULL);
 451 
 452         clk = clk_register_fixed_rate(NULL, "osc_25m_clk", NULL, 0, 25000000);
 453         clk_register_clkdev(clk, "osc_25m_clk", NULL);
 454 
 455         clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, 0, 125000000);
 456         clk_register_clkdev(clk, "gmii_pad_clk", NULL);
 457 
 458         clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 0,
 459                                       12288000);
 460         clk_register_clkdev(clk, "i2s_src_pad_clk", NULL);
 461 
 462         /* clock derived from 32 KHz osc clk */
 463         clk = clk_register_gate(NULL, "rtc-spear", "osc_32k_clk", 0,
 464                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_RTC_CLK_ENB, 0,
 465                         &_lock);
 466         clk_register_clkdev(clk, NULL, "e0580000.rtc");
 467 
 468         /* clock derived from 24 or 25 MHz osc clk */
 469         /* vco-pll */
 470         clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
 471                         ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
 472                         SPEAR1340_PLL_CFG, SPEAR1340_PLL1_CLK_SHIFT,
 473                         SPEAR1340_PLL_CLK_MASK, 0, &_lock);
 474         clk_register_clkdev(clk, "vco1_mclk", NULL);
 475         clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk", 0,
 476                         SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl,
 477                         ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
 478         clk_register_clkdev(clk, "vco1_clk", NULL);
 479         clk_register_clkdev(clk1, "pll1_clk", NULL);
 480 
 481         clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
 482                         ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
 483                         SPEAR1340_PLL_CFG, SPEAR1340_PLL2_CLK_SHIFT,
 484                         SPEAR1340_PLL_CLK_MASK, 0, &_lock);
 485         clk_register_clkdev(clk, "vco2_mclk", NULL);
 486         clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk", 0,
 487                         SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl,
 488                         ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
 489         clk_register_clkdev(clk, "vco2_clk", NULL);
 490         clk_register_clkdev(clk1, "pll2_clk", NULL);
 491 
 492         clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
 493                         ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT,
 494                         SPEAR1340_PLL_CFG, SPEAR1340_PLL3_CLK_SHIFT,
 495                         SPEAR1340_PLL_CLK_MASK, 0, &_lock);
 496         clk_register_clkdev(clk, "vco3_mclk", NULL);
 497         clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk", 0,
 498                         SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl,
 499                         ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
 500         clk_register_clkdev(clk, "vco3_clk", NULL);
 501         clk_register_clkdev(clk1, "pll3_clk", NULL);
 502 
 503         clk = clk_register_vco_pll("vco4_clk", "pll4_clk", NULL, "osc_24m_clk",
 504                         0, SPEAR1340_PLL4_CTR, SPEAR1340_PLL4_FRQ, pll4_rtbl,
 505                         ARRAY_SIZE(pll4_rtbl), &_lock, &clk1, NULL);
 506         clk_register_clkdev(clk, "vco4_clk", NULL);
 507         clk_register_clkdev(clk1, "pll4_clk", NULL);
 508 
 509         clk = clk_register_fixed_rate(NULL, "pll5_clk", "osc_24m_clk", 0,
 510                         48000000);
 511         clk_register_clkdev(clk, "pll5_clk", NULL);
 512 
 513         clk = clk_register_fixed_rate(NULL, "pll6_clk", "osc_25m_clk", 0,
 514                         25000000);
 515         clk_register_clkdev(clk, "pll6_clk", NULL);
 516 
 517         /* vco div n clocks */
 518         clk = clk_register_fixed_factor(NULL, "vco1div2_clk", "vco1_clk", 0, 1,
 519                         2);
 520         clk_register_clkdev(clk, "vco1div2_clk", NULL);
 521 
 522         clk = clk_register_fixed_factor(NULL, "vco1div4_clk", "vco1_clk", 0, 1,
 523                         4);
 524         clk_register_clkdev(clk, "vco1div4_clk", NULL);
 525 
 526         clk = clk_register_fixed_factor(NULL, "vco2div2_clk", "vco2_clk", 0, 1,
 527                         2);
 528         clk_register_clkdev(clk, "vco2div2_clk", NULL);
 529 
 530         clk = clk_register_fixed_factor(NULL, "vco3div2_clk", "vco3_clk", 0, 1,
 531                         2);
 532         clk_register_clkdev(clk, "vco3div2_clk", NULL);
 533 
 534         /* peripherals */
 535         clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
 536                         128);
 537         clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
 538                         SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_THSENS_CLK_ENB, 0,
 539                         &_lock);
 540         clk_register_clkdev(clk, NULL, "e07008c4.thermal");
 541 
 542         /* clock derived from pll4 clk */
 543         clk = clk_register_fixed_factor(NULL, "ddr_clk", "pll4_clk", 0, 1,
 544                         1);
 545         clk_register_clkdev(clk, "ddr_clk", NULL);
 546 
 547         /* clock derived from pll1 clk */
 548         clk = clk_register_frac("sys_syn_clk", "vco1div2_clk", 0,
 549                         SPEAR1340_SYS_CLK_SYNT, sys_synth_rtbl,
 550                         ARRAY_SIZE(sys_synth_rtbl), &_lock);
 551         clk_register_clkdev(clk, "sys_syn_clk", NULL);
 552 
 553         clk = clk_register_frac("amba_syn_clk", "vco1div2_clk", 0,
 554                         SPEAR1340_AMBA_CLK_SYNT, amba_synth_rtbl,
 555                         ARRAY_SIZE(amba_synth_rtbl), &_lock);
 556         clk_register_clkdev(clk, "amba_syn_clk", NULL);
 557 
 558         clk = clk_register_mux(NULL, "sys_mclk", sys_parents,
 559                         ARRAY_SIZE(sys_parents), CLK_SET_RATE_NO_REPARENT,
 560                         SPEAR1340_SYS_CLK_CTRL, SPEAR1340_SCLK_SRC_SEL_SHIFT,
 561                         SPEAR1340_SCLK_SRC_SEL_MASK, 0, &_lock);
 562         clk_register_clkdev(clk, "sys_mclk", NULL);
 563 
 564         clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mclk", 0, 1,
 565                         2);
 566         clk_register_clkdev(clk, "cpu_clk", NULL);
 567 
 568         clk = clk_register_fixed_factor(NULL, "cpu_div3_clk", "cpu_clk", 0, 1,
 569                         3);
 570         clk_register_clkdev(clk, "cpu_div3_clk", NULL);
 571 
 572         clk = clk_register_fixed_factor(NULL, "wdt_clk", "cpu_clk", 0, 1,
 573                         2);
 574         clk_register_clkdev(clk, NULL, "ec800620.wdt");
 575 
 576         clk = clk_register_fixed_factor(NULL, "smp_twd_clk", "cpu_clk", 0, 1,
 577                         2);
 578         clk_register_clkdev(clk, NULL, "smp_twd");
 579 
 580         clk = clk_register_mux(NULL, "ahb_clk", ahb_parents,
 581                         ARRAY_SIZE(ahb_parents), CLK_SET_RATE_NO_REPARENT,
 582                         SPEAR1340_SYS_CLK_CTRL, SPEAR1340_HCLK_SRC_SEL_SHIFT,
 583                         SPEAR1340_HCLK_SRC_SEL_MASK, 0, &_lock);
 584         clk_register_clkdev(clk, "ahb_clk", NULL);
 585 
 586         clk = clk_register_fixed_factor(NULL, "apb_clk", "ahb_clk", 0, 1,
 587                         2);
 588         clk_register_clkdev(clk, "apb_clk", NULL);
 589 
 590         /* gpt clocks */
 591         clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
 592                         ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
 593                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT0_CLK_SHIFT,
 594                         SPEAR1340_GPT_CLK_MASK, 0, &_lock);
 595         clk_register_clkdev(clk, "gpt0_mclk", NULL);
 596         clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
 597                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT0_CLK_ENB, 0,
 598                         &_lock);
 599         clk_register_clkdev(clk, NULL, "gpt0");
 600 
 601         clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
 602                         ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
 603                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT1_CLK_SHIFT,
 604                         SPEAR1340_GPT_CLK_MASK, 0, &_lock);
 605         clk_register_clkdev(clk, "gpt1_mclk", NULL);
 606         clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
 607                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT1_CLK_ENB, 0,
 608                         &_lock);
 609         clk_register_clkdev(clk, NULL, "gpt1");
 610 
 611         clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
 612                         ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
 613                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT2_CLK_SHIFT,
 614                         SPEAR1340_GPT_CLK_MASK, 0, &_lock);
 615         clk_register_clkdev(clk, "gpt2_mclk", NULL);
 616         clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
 617                         SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT2_CLK_ENB, 0,
 618                         &_lock);
 619         clk_register_clkdev(clk, NULL, "gpt2");
 620 
 621         clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
 622                         ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT,
 623                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GPT3_CLK_SHIFT,
 624                         SPEAR1340_GPT_CLK_MASK, 0, &_lock);
 625         clk_register_clkdev(clk, "gpt3_mclk", NULL);
 626         clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
 627                         SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT3_CLK_ENB, 0,
 628                         &_lock);
 629         clk_register_clkdev(clk, NULL, "gpt3");
 630 
 631         /* others */
 632         clk = clk_register_aux("uart0_syn_clk", "uart0_syn_gclk",
 633                         "vco1div2_clk", 0, SPEAR1340_UART0_CLK_SYNT, NULL,
 634                         aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
 635         clk_register_clkdev(clk, "uart0_syn_clk", NULL);
 636         clk_register_clkdev(clk1, "uart0_syn_gclk", NULL);
 637 
 638         clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
 639                         ARRAY_SIZE(uart0_parents),
 640                         CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
 641                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_UART0_CLK_SHIFT,
 642                         SPEAR1340_UART_CLK_MASK, 0, &_lock);
 643         clk_register_clkdev(clk, "uart0_mclk", NULL);
 644 
 645         clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk",
 646                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
 647                         SPEAR1340_UART0_CLK_ENB, 0, &_lock);
 648         clk_register_clkdev(clk, NULL, "e0000000.serial");
 649 
 650         clk = clk_register_aux("uart1_syn_clk", "uart1_syn_gclk",
 651                         "vco1div2_clk", 0, SPEAR1340_UART1_CLK_SYNT, NULL,
 652                         aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
 653         clk_register_clkdev(clk, "uart1_syn_clk", NULL);
 654         clk_register_clkdev(clk1, "uart1_syn_gclk", NULL);
 655 
 656         clk = clk_register_mux(NULL, "uart1_mclk", uart1_parents,
 657                         ARRAY_SIZE(uart1_parents), CLK_SET_RATE_NO_REPARENT,
 658                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_UART1_CLK_SHIFT,
 659                         SPEAR1340_UART_CLK_MASK, 0, &_lock);
 660         clk_register_clkdev(clk, "uart1_mclk", NULL);
 661 
 662         clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
 663                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0,
 664                         &_lock);
 665         clk_register_clkdev(clk, NULL, "b4100000.serial");
 666 
 667         clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
 668                         "vco1div2_clk", 0, SPEAR1340_SDHCI_CLK_SYNT, NULL,
 669                         aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
 670         clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
 671         clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
 672 
 673         clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk",
 674                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
 675                         SPEAR1340_SDHCI_CLK_ENB, 0, &_lock);
 676         clk_register_clkdev(clk, NULL, "b3000000.sdhci");
 677 
 678         clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
 679                         0, SPEAR1340_CFXD_CLK_SYNT, NULL, aux_rtbl,
 680                         ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
 681         clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
 682         clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
 683 
 684         clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk",
 685                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
 686                         SPEAR1340_CFXD_CLK_ENB, 0, &_lock);
 687         clk_register_clkdev(clk, NULL, "b2800000.cf");
 688         clk_register_clkdev(clk, NULL, "arasan_xd");
 689 
 690         clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk", 0,
 691                         SPEAR1340_C3_CLK_SYNT, NULL, aux_rtbl,
 692                         ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
 693         clk_register_clkdev(clk, "c3_syn_clk", NULL);
 694         clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
 695 
 696         clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
 697                         ARRAY_SIZE(c3_parents),
 698                         CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
 699                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_C3_CLK_SHIFT,
 700                         SPEAR1340_C3_CLK_MASK, 0, &_lock);
 701         clk_register_clkdev(clk, "c3_mclk", NULL);
 702 
 703         clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", CLK_SET_RATE_PARENT,
 704                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_C3_CLK_ENB, 0,
 705                         &_lock);
 706         clk_register_clkdev(clk, NULL, "e1800000.c3");
 707 
 708         /* gmac */
 709         clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
 710                         ARRAY_SIZE(gmac_phy_input_parents),
 711                         CLK_SET_RATE_NO_REPARENT, SPEAR1340_GMAC_CLK_CFG,
 712                         SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT,
 713                         SPEAR1340_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
 714         clk_register_clkdev(clk, "phy_input_mclk", NULL);
 715 
 716         clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
 717                         0, SPEAR1340_GMAC_CLK_SYNT, NULL, gmac_rtbl,
 718                         ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
 719         clk_register_clkdev(clk, "phy_syn_clk", NULL);
 720         clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
 721 
 722         clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
 723                         ARRAY_SIZE(gmac_phy_parents), CLK_SET_RATE_NO_REPARENT,
 724                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GMAC_PHY_CLK_SHIFT,
 725                         SPEAR1340_GMAC_PHY_CLK_MASK, 0, &_lock);
 726         clk_register_clkdev(clk, "stmmacphy.0", NULL);
 727 
 728         /* clcd */
 729         clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
 730                         ARRAY_SIZE(clcd_synth_parents),
 731                         CLK_SET_RATE_NO_REPARENT, SPEAR1340_CLCD_CLK_SYNT,
 732                         SPEAR1340_CLCD_SYNT_CLK_SHIFT,
 733                         SPEAR1340_CLCD_SYNT_CLK_MASK, 0, &_lock);
 734         clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
 735 
 736         clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
 737                         SPEAR1340_CLCD_CLK_SYNT, clcd_rtbl,
 738                         ARRAY_SIZE(clcd_rtbl), &_lock);
 739         clk_register_clkdev(clk, "clcd_syn_clk", NULL);
 740 
 741         clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
 742                         ARRAY_SIZE(clcd_pixel_parents),
 743                         CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
 744                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_CLCD_CLK_SHIFT,
 745                         SPEAR1340_CLCD_CLK_MASK, 0, &_lock);
 746         clk_register_clkdev(clk, "clcd_pixel_mclk", NULL);
 747 
 748         clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
 749                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CLCD_CLK_ENB, 0,
 750                         &_lock);
 751         clk_register_clkdev(clk, NULL, "e1000000.clcd");
 752 
 753         /* i2s */
 754         clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
 755                         ARRAY_SIZE(i2s_src_parents), CLK_SET_RATE_NO_REPARENT,
 756                         SPEAR1340_I2S_CLK_CFG, SPEAR1340_I2S_SRC_CLK_SHIFT,
 757                         SPEAR1340_I2S_SRC_CLK_MASK, 0, &_lock);
 758         clk_register_clkdev(clk, "i2s_src_mclk", NULL);
 759 
 760         clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk",
 761                         CLK_SET_RATE_PARENT, SPEAR1340_I2S_CLK_CFG,
 762                         &i2s_prs1_masks, i2s_prs1_rtbl,
 763                         ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
 764         clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
 765 
 766         clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
 767                         ARRAY_SIZE(i2s_ref_parents),
 768                         CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
 769                         SPEAR1340_I2S_CLK_CFG, SPEAR1340_I2S_REF_SHIFT,
 770                         SPEAR1340_I2S_REF_SEL_MASK, 0, &_lock);
 771         clk_register_clkdev(clk, "i2s_ref_mclk", NULL);
 772 
 773         clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
 774                         SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_I2S_REF_PAD_CLK_ENB,
 775                         0, &_lock);
 776         clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
 777 
 778         clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk", "i2s_ref_mclk",
 779                         0, SPEAR1340_I2S_CLK_CFG, &i2s_sclk_masks,
 780                         i2s_sclk_rtbl, ARRAY_SIZE(i2s_sclk_rtbl), &_lock,
 781                         &clk1);
 782         clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
 783         clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
 784 
 785         /* clock derived from ahb clk */
 786         clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
 787                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2C0_CLK_ENB, 0,
 788                         &_lock);
 789         clk_register_clkdev(clk, NULL, "e0280000.i2c");
 790 
 791         clk = clk_register_gate(NULL, "i2c1_clk", "ahb_clk", 0,
 792                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0,
 793                         &_lock);
 794         clk_register_clkdev(clk, NULL, "b4000000.i2c");
 795 
 796         clk = clk_register_gate(NULL, "dma_clk", "ahb_clk", 0,
 797                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_DMA_CLK_ENB, 0,
 798                         &_lock);
 799         clk_register_clkdev(clk, NULL, "ea800000.dma");
 800         clk_register_clkdev(clk, NULL, "eb000000.dma");
 801 
 802         clk = clk_register_gate(NULL, "gmac_clk", "ahb_clk", 0,
 803                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GMAC_CLK_ENB, 0,
 804                         &_lock);
 805         clk_register_clkdev(clk, NULL, "e2000000.eth");
 806 
 807         clk = clk_register_gate(NULL, "fsmc_clk", "ahb_clk", 0,
 808                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_FSMC_CLK_ENB, 0,
 809                         &_lock);
 810         clk_register_clkdev(clk, NULL, "b0000000.flash");
 811 
 812         clk = clk_register_gate(NULL, "smi_clk", "ahb_clk", 0,
 813                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SMI_CLK_ENB, 0,
 814                         &_lock);
 815         clk_register_clkdev(clk, NULL, "ea000000.flash");
 816 
 817         clk = clk_register_gate(NULL, "usbh0_clk", "ahb_clk", 0,
 818                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UHC0_CLK_ENB, 0,
 819                         &_lock);
 820         clk_register_clkdev(clk, NULL, "e4000000.ohci");
 821         clk_register_clkdev(clk, NULL, "e4800000.ehci");
 822 
 823         clk = clk_register_gate(NULL, "usbh1_clk", "ahb_clk", 0,
 824                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UHC1_CLK_ENB, 0,
 825                         &_lock);
 826         clk_register_clkdev(clk, NULL, "e5000000.ohci");
 827         clk_register_clkdev(clk, NULL, "e5800000.ehci");
 828 
 829         clk = clk_register_gate(NULL, "uoc_clk", "ahb_clk", 0,
 830                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UOC_CLK_ENB, 0,
 831                         &_lock);
 832         clk_register_clkdev(clk, NULL, "e3800000.otg");
 833 
 834         clk = clk_register_gate(NULL, "pcie_sata_clk", "ahb_clk", 0,
 835                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_PCIE_SATA_CLK_ENB,
 836                         0, &_lock);
 837         clk_register_clkdev(clk, NULL, "b1000000.pcie");
 838         clk_register_clkdev(clk, NULL, "b1000000.ahci");
 839 
 840         clk = clk_register_gate(NULL, "sysram0_clk", "ahb_clk", 0,
 841                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SYSRAM0_CLK_ENB, 0,
 842                         &_lock);
 843         clk_register_clkdev(clk, "sysram0_clk", NULL);
 844 
 845         clk = clk_register_gate(NULL, "sysram1_clk", "ahb_clk", 0,
 846                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SYSRAM1_CLK_ENB, 0,
 847                         &_lock);
 848         clk_register_clkdev(clk, "sysram1_clk", NULL);
 849 
 850         clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
 851                         0, SPEAR1340_ADC_CLK_SYNT, NULL, adc_rtbl,
 852                         ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
 853         clk_register_clkdev(clk, "adc_syn_clk", NULL);
 854         clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
 855 
 856         clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk",
 857                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP1_CLK_ENB,
 858                         SPEAR1340_ADC_CLK_ENB, 0, &_lock);
 859         clk_register_clkdev(clk, NULL, "e0080000.adc");
 860 
 861         /* clock derived from apb clk */
 862         clk = clk_register_gate(NULL, "ssp_clk", "apb_clk", 0,
 863                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SSP_CLK_ENB, 0,
 864                         &_lock);
 865         clk_register_clkdev(clk, NULL, "e0100000.spi");
 866 
 867         clk = clk_register_gate(NULL, "gpio0_clk", "apb_clk", 0,
 868                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPIO0_CLK_ENB, 0,
 869                         &_lock);
 870         clk_register_clkdev(clk, NULL, "e0600000.gpio");
 871 
 872         clk = clk_register_gate(NULL, "gpio1_clk", "apb_clk", 0,
 873                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPIO1_CLK_ENB, 0,
 874                         &_lock);
 875         clk_register_clkdev(clk, NULL, "e0680000.gpio");
 876 
 877         clk = clk_register_gate(NULL, "i2s_play_clk", "apb_clk", 0,
 878                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2S_PLAY_CLK_ENB, 0,
 879                         &_lock);
 880         clk_register_clkdev(clk, NULL, "b2400000.i2s-play");
 881 
 882         clk = clk_register_gate(NULL, "i2s_rec_clk", "apb_clk", 0,
 883                         SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2S_REC_CLK_ENB, 0,
 884                         &_lock);
 885         clk_register_clkdev(clk, NULL, "b2000000.i2s-rec");
 886 
 887         clk = clk_register_gate(NULL, "kbd_clk", "apb_clk", 0,
 888                         SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_KBD_CLK_ENB, 0,
 889                         &_lock);
 890         clk_register_clkdev(clk, NULL, "e0300000.kbd");
 891 
 892         /* RAS clks */
 893         clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
 894                         ARRAY_SIZE(gen_synth0_1_parents),
 895                         CLK_SET_RATE_NO_REPARENT, SPEAR1340_PLL_CFG,
 896                         SPEAR1340_GEN_SYNT0_1_CLK_SHIFT,
 897                         SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
 898         clk_register_clkdev(clk, "gen_syn0_1_mclk", NULL);
 899 
 900         clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
 901                         ARRAY_SIZE(gen_synth2_3_parents),
 902                         CLK_SET_RATE_NO_REPARENT, SPEAR1340_PLL_CFG,
 903                         SPEAR1340_GEN_SYNT2_3_CLK_SHIFT,
 904                         SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
 905         clk_register_clkdev(clk, "gen_syn2_3_mclk", NULL);
 906 
 907         clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_mclk", 0,
 908                         SPEAR1340_GEN_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
 909                         &_lock);
 910         clk_register_clkdev(clk, "gen_syn0_clk", NULL);
 911 
 912         clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_mclk", 0,
 913                         SPEAR1340_GEN_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
 914                         &_lock);
 915         clk_register_clkdev(clk, "gen_syn1_clk", NULL);
 916 
 917         clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_mclk", 0,
 918                         SPEAR1340_GEN_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
 919                         &_lock);
 920         clk_register_clkdev(clk, "gen_syn2_clk", NULL);
 921 
 922         clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_mclk", 0,
 923                         SPEAR1340_GEN_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
 924                         &_lock);
 925         clk_register_clkdev(clk, "gen_syn3_clk", NULL);
 926 
 927         clk = clk_register_gate(NULL, "mali_clk", "gen_syn3_clk",
 928                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
 929                         SPEAR1340_MALI_CLK_ENB, 0, &_lock);
 930         clk_register_clkdev(clk, NULL, "mali");
 931 
 932         clk = clk_register_gate(NULL, "cec0_clk", "ahb_clk", 0,
 933                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CEC0_CLK_ENB, 0,
 934                         &_lock);
 935         clk_register_clkdev(clk, NULL, "spear_cec.0");
 936 
 937         clk = clk_register_gate(NULL, "cec1_clk", "ahb_clk", 0,
 938                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CEC1_CLK_ENB, 0,
 939                         &_lock);
 940         clk_register_clkdev(clk, NULL, "spear_cec.1");
 941 
 942         clk = clk_register_mux(NULL, "spdif_out_mclk", spdif_out_parents,
 943                         ARRAY_SIZE(spdif_out_parents),
 944                         CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
 945                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_OUT_CLK_SHIFT,
 946                         SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
 947         clk_register_clkdev(clk, "spdif_out_mclk", NULL);
 948 
 949         clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mclk",
 950                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
 951                         SPEAR1340_SPDIF_OUT_CLK_ENB, 0, &_lock);
 952         clk_register_clkdev(clk, NULL, "d0000000.spdif-out");
 953 
 954         clk = clk_register_mux(NULL, "spdif_in_mclk", spdif_in_parents,
 955                         ARRAY_SIZE(spdif_in_parents),
 956                         CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT,
 957                         SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_IN_CLK_SHIFT,
 958                         SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
 959         clk_register_clkdev(clk, "spdif_in_mclk", NULL);
 960 
 961         clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mclk",
 962                         CLK_SET_RATE_PARENT, SPEAR1340_PERIP3_CLK_ENB,
 963                         SPEAR1340_SPDIF_IN_CLK_ENB, 0, &_lock);
 964         clk_register_clkdev(clk, NULL, "d0100000.spdif-in");
 965 
 966         clk = clk_register_gate(NULL, "acp_clk", "ahb_clk", 0,
 967                         SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_ACP_CLK_ENB, 0,
 968                         &_lock);
 969         clk_register_clkdev(clk, NULL, "acp_clk");
 970 
 971         clk = clk_register_gate(NULL, "plgpio_clk", "ahb_clk", 0,
 972                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PLGPIO_CLK_ENB, 0,
 973                         &_lock);
 974         clk_register_clkdev(clk, NULL, "e2800000.gpio");
 975 
 976         clk = clk_register_gate(NULL, "video_dec_clk", "ahb_clk", 0,
 977                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_DEC_CLK_ENB,
 978                         0, &_lock);
 979         clk_register_clkdev(clk, NULL, "video_dec");
 980 
 981         clk = clk_register_gate(NULL, "video_enc_clk", "ahb_clk", 0,
 982                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_ENC_CLK_ENB,
 983                         0, &_lock);
 984         clk_register_clkdev(clk, NULL, "video_enc");
 985 
 986         clk = clk_register_gate(NULL, "video_in_clk", "ahb_clk", 0,
 987                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_IN_CLK_ENB, 0,
 988                         &_lock);
 989         clk_register_clkdev(clk, NULL, "spear_vip");
 990 
 991         clk = clk_register_gate(NULL, "cam0_clk", "ahb_clk", 0,
 992                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM0_CLK_ENB, 0,
 993                         &_lock);
 994         clk_register_clkdev(clk, NULL, "d0200000.cam0");
 995 
 996         clk = clk_register_gate(NULL, "cam1_clk", "ahb_clk", 0,
 997                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM1_CLK_ENB, 0,
 998                         &_lock);
 999         clk_register_clkdev(clk, NULL, "d0300000.cam1");
1000 
1001         clk = clk_register_gate(NULL, "cam2_clk", "ahb_clk", 0,
1002                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM2_CLK_ENB, 0,
1003                         &_lock);
1004         clk_register_clkdev(clk, NULL, "d0400000.cam2");
1005 
1006         clk = clk_register_gate(NULL, "cam3_clk", "ahb_clk", 0,
1007                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM3_CLK_ENB, 0,
1008                         &_lock);
1009         clk_register_clkdev(clk, NULL, "d0500000.cam3");
1010 
1011         clk = clk_register_gate(NULL, "pwm_clk", "ahb_clk", 0,
1012                         SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PWM_CLK_ENB, 0,
1013                         &_lock);
1014         clk_register_clkdev(clk, NULL, "e0180000.pwm");
1015 }

/* [<][>][^][v][top][bottom][index][help] */