162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * arch/arm/mach-spear13xx/spear1310_clock.c 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * SPEAr1310 machine clock framework source file 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Copyright (C) 2012 ST Microelectronics 862306a36Sopenharmony_ci * Viresh Kumar <vireshk@kernel.org> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/clkdev.h> 1262306a36Sopenharmony_ci#include <linux/clk/spear.h> 1362306a36Sopenharmony_ci#include <linux/err.h> 1462306a36Sopenharmony_ci#include <linux/io.h> 1562306a36Sopenharmony_ci#include <linux/spinlock_types.h> 1662306a36Sopenharmony_ci#include "clk.h" 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci/* PLL related registers and bit values */ 1962306a36Sopenharmony_ci#define SPEAR1310_PLL_CFG (misc_base + 0x210) 2062306a36Sopenharmony_ci /* PLL_CFG bit values */ 2162306a36Sopenharmony_ci #define SPEAR1310_CLCD_SYNT_CLK_MASK 1 2262306a36Sopenharmony_ci #define SPEAR1310_CLCD_SYNT_CLK_SHIFT 31 2362306a36Sopenharmony_ci #define SPEAR1310_RAS_SYNT2_3_CLK_MASK 2 2462306a36Sopenharmony_ci #define SPEAR1310_RAS_SYNT2_3_CLK_SHIFT 29 2562306a36Sopenharmony_ci #define SPEAR1310_RAS_SYNT_CLK_MASK 2 2662306a36Sopenharmony_ci #define SPEAR1310_RAS_SYNT0_1_CLK_SHIFT 27 2762306a36Sopenharmony_ci #define SPEAR1310_PLL_CLK_MASK 2 2862306a36Sopenharmony_ci #define SPEAR1310_PLL3_CLK_SHIFT 24 2962306a36Sopenharmony_ci #define SPEAR1310_PLL2_CLK_SHIFT 22 3062306a36Sopenharmony_ci #define SPEAR1310_PLL1_CLK_SHIFT 20 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci#define SPEAR1310_PLL1_CTR (misc_base + 0x214) 3362306a36Sopenharmony_ci#define SPEAR1310_PLL1_FRQ (misc_base + 0x218) 3462306a36Sopenharmony_ci#define SPEAR1310_PLL2_CTR (misc_base + 0x220) 3562306a36Sopenharmony_ci#define SPEAR1310_PLL2_FRQ (misc_base + 0x224) 3662306a36Sopenharmony_ci#define SPEAR1310_PLL3_CTR (misc_base + 0x22C) 3762306a36Sopenharmony_ci#define SPEAR1310_PLL3_FRQ (misc_base + 0x230) 3862306a36Sopenharmony_ci#define SPEAR1310_PLL4_CTR (misc_base + 0x238) 3962306a36Sopenharmony_ci#define SPEAR1310_PLL4_FRQ (misc_base + 0x23C) 4062306a36Sopenharmony_ci#define SPEAR1310_PERIP_CLK_CFG (misc_base + 0x244) 4162306a36Sopenharmony_ci /* PERIP_CLK_CFG bit values */ 4262306a36Sopenharmony_ci #define SPEAR1310_GPT_OSC24_VAL 0 4362306a36Sopenharmony_ci #define SPEAR1310_GPT_APB_VAL 1 4462306a36Sopenharmony_ci #define SPEAR1310_GPT_CLK_MASK 1 4562306a36Sopenharmony_ci #define SPEAR1310_GPT3_CLK_SHIFT 11 4662306a36Sopenharmony_ci #define SPEAR1310_GPT2_CLK_SHIFT 10 4762306a36Sopenharmony_ci #define SPEAR1310_GPT1_CLK_SHIFT 9 4862306a36Sopenharmony_ci #define SPEAR1310_GPT0_CLK_SHIFT 8 4962306a36Sopenharmony_ci #define SPEAR1310_UART_CLK_PLL5_VAL 0 5062306a36Sopenharmony_ci #define SPEAR1310_UART_CLK_OSC24_VAL 1 5162306a36Sopenharmony_ci #define SPEAR1310_UART_CLK_SYNT_VAL 2 5262306a36Sopenharmony_ci #define SPEAR1310_UART_CLK_MASK 2 5362306a36Sopenharmony_ci #define SPEAR1310_UART_CLK_SHIFT 4 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci #define SPEAR1310_AUX_CLK_PLL5_VAL 0 5662306a36Sopenharmony_ci #define SPEAR1310_AUX_CLK_SYNT_VAL 1 5762306a36Sopenharmony_ci #define SPEAR1310_CLCD_CLK_MASK 2 5862306a36Sopenharmony_ci #define SPEAR1310_CLCD_CLK_SHIFT 2 5962306a36Sopenharmony_ci #define SPEAR1310_C3_CLK_MASK 1 6062306a36Sopenharmony_ci #define SPEAR1310_C3_CLK_SHIFT 1 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define SPEAR1310_GMAC_CLK_CFG (misc_base + 0x248) 6362306a36Sopenharmony_ci #define SPEAR1310_GMAC_PHY_IF_SEL_MASK 3 6462306a36Sopenharmony_ci #define SPEAR1310_GMAC_PHY_IF_SEL_SHIFT 4 6562306a36Sopenharmony_ci #define SPEAR1310_GMAC_PHY_CLK_MASK 1 6662306a36Sopenharmony_ci #define SPEAR1310_GMAC_PHY_CLK_SHIFT 3 6762306a36Sopenharmony_ci #define SPEAR1310_GMAC_PHY_INPUT_CLK_MASK 2 6862306a36Sopenharmony_ci #define SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT 1 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci#define SPEAR1310_I2S_CLK_CFG (misc_base + 0x24C) 7162306a36Sopenharmony_ci /* I2S_CLK_CFG register mask */ 7262306a36Sopenharmony_ci #define SPEAR1310_I2S_SCLK_X_MASK 0x1F 7362306a36Sopenharmony_ci #define SPEAR1310_I2S_SCLK_X_SHIFT 27 7462306a36Sopenharmony_ci #define SPEAR1310_I2S_SCLK_Y_MASK 0x1F 7562306a36Sopenharmony_ci #define SPEAR1310_I2S_SCLK_Y_SHIFT 22 7662306a36Sopenharmony_ci #define SPEAR1310_I2S_SCLK_EQ_SEL_SHIFT 21 7762306a36Sopenharmony_ci #define SPEAR1310_I2S_SCLK_SYNTH_ENB 20 7862306a36Sopenharmony_ci #define SPEAR1310_I2S_PRS1_CLK_X_MASK 0xFF 7962306a36Sopenharmony_ci #define SPEAR1310_I2S_PRS1_CLK_X_SHIFT 12 8062306a36Sopenharmony_ci #define SPEAR1310_I2S_PRS1_CLK_Y_MASK 0xFF 8162306a36Sopenharmony_ci #define SPEAR1310_I2S_PRS1_CLK_Y_SHIFT 4 8262306a36Sopenharmony_ci #define SPEAR1310_I2S_PRS1_EQ_SEL_SHIFT 3 8362306a36Sopenharmony_ci #define SPEAR1310_I2S_REF_SEL_MASK 1 8462306a36Sopenharmony_ci #define SPEAR1310_I2S_REF_SHIFT 2 8562306a36Sopenharmony_ci #define SPEAR1310_I2S_SRC_CLK_MASK 2 8662306a36Sopenharmony_ci #define SPEAR1310_I2S_SRC_CLK_SHIFT 0 8762306a36Sopenharmony_ci 8862306a36Sopenharmony_ci#define SPEAR1310_C3_CLK_SYNT (misc_base + 0x250) 8962306a36Sopenharmony_ci#define SPEAR1310_UART_CLK_SYNT (misc_base + 0x254) 9062306a36Sopenharmony_ci#define SPEAR1310_GMAC_CLK_SYNT (misc_base + 0x258) 9162306a36Sopenharmony_ci#define SPEAR1310_SDHCI_CLK_SYNT (misc_base + 0x25C) 9262306a36Sopenharmony_ci#define SPEAR1310_CFXD_CLK_SYNT (misc_base + 0x260) 9362306a36Sopenharmony_ci#define SPEAR1310_ADC_CLK_SYNT (misc_base + 0x264) 9462306a36Sopenharmony_ci#define SPEAR1310_AMBA_CLK_SYNT (misc_base + 0x268) 9562306a36Sopenharmony_ci#define SPEAR1310_CLCD_CLK_SYNT (misc_base + 0x270) 9662306a36Sopenharmony_ci#define SPEAR1310_RAS_CLK_SYNT0 (misc_base + 0x280) 9762306a36Sopenharmony_ci#define SPEAR1310_RAS_CLK_SYNT1 (misc_base + 0x288) 9862306a36Sopenharmony_ci#define SPEAR1310_RAS_CLK_SYNT2 (misc_base + 0x290) 9962306a36Sopenharmony_ci#define SPEAR1310_RAS_CLK_SYNT3 (misc_base + 0x298) 10062306a36Sopenharmony_ci /* Check Fractional synthesizer reg masks */ 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci#define SPEAR1310_PERIP1_CLK_ENB (misc_base + 0x300) 10362306a36Sopenharmony_ci /* PERIP1_CLK_ENB register masks */ 10462306a36Sopenharmony_ci #define SPEAR1310_RTC_CLK_ENB 31 10562306a36Sopenharmony_ci #define SPEAR1310_ADC_CLK_ENB 30 10662306a36Sopenharmony_ci #define SPEAR1310_C3_CLK_ENB 29 10762306a36Sopenharmony_ci #define SPEAR1310_JPEG_CLK_ENB 28 10862306a36Sopenharmony_ci #define SPEAR1310_CLCD_CLK_ENB 27 10962306a36Sopenharmony_ci #define SPEAR1310_DMA_CLK_ENB 25 11062306a36Sopenharmony_ci #define SPEAR1310_GPIO1_CLK_ENB 24 11162306a36Sopenharmony_ci #define SPEAR1310_GPIO0_CLK_ENB 23 11262306a36Sopenharmony_ci #define SPEAR1310_GPT1_CLK_ENB 22 11362306a36Sopenharmony_ci #define SPEAR1310_GPT0_CLK_ENB 21 11462306a36Sopenharmony_ci #define SPEAR1310_I2S0_CLK_ENB 20 11562306a36Sopenharmony_ci #define SPEAR1310_I2S1_CLK_ENB 19 11662306a36Sopenharmony_ci #define SPEAR1310_I2C0_CLK_ENB 18 11762306a36Sopenharmony_ci #define SPEAR1310_SSP_CLK_ENB 17 11862306a36Sopenharmony_ci #define SPEAR1310_UART_CLK_ENB 15 11962306a36Sopenharmony_ci #define SPEAR1310_PCIE_SATA_2_CLK_ENB 14 12062306a36Sopenharmony_ci #define SPEAR1310_PCIE_SATA_1_CLK_ENB 13 12162306a36Sopenharmony_ci #define SPEAR1310_PCIE_SATA_0_CLK_ENB 12 12262306a36Sopenharmony_ci #define SPEAR1310_UOC_CLK_ENB 11 12362306a36Sopenharmony_ci #define SPEAR1310_UHC1_CLK_ENB 10 12462306a36Sopenharmony_ci #define SPEAR1310_UHC0_CLK_ENB 9 12562306a36Sopenharmony_ci #define SPEAR1310_GMAC_CLK_ENB 8 12662306a36Sopenharmony_ci #define SPEAR1310_CFXD_CLK_ENB 7 12762306a36Sopenharmony_ci #define SPEAR1310_SDHCI_CLK_ENB 6 12862306a36Sopenharmony_ci #define SPEAR1310_SMI_CLK_ENB 5 12962306a36Sopenharmony_ci #define SPEAR1310_FSMC_CLK_ENB 4 13062306a36Sopenharmony_ci #define SPEAR1310_SYSRAM0_CLK_ENB 3 13162306a36Sopenharmony_ci #define SPEAR1310_SYSRAM1_CLK_ENB 2 13262306a36Sopenharmony_ci #define SPEAR1310_SYSROM_CLK_ENB 1 13362306a36Sopenharmony_ci #define SPEAR1310_BUS_CLK_ENB 0 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci#define SPEAR1310_PERIP2_CLK_ENB (misc_base + 0x304) 13662306a36Sopenharmony_ci /* PERIP2_CLK_ENB register masks */ 13762306a36Sopenharmony_ci #define SPEAR1310_THSENS_CLK_ENB 8 13862306a36Sopenharmony_ci #define SPEAR1310_I2S_REF_PAD_CLK_ENB 7 13962306a36Sopenharmony_ci #define SPEAR1310_ACP_CLK_ENB 6 14062306a36Sopenharmony_ci #define SPEAR1310_GPT3_CLK_ENB 5 14162306a36Sopenharmony_ci #define SPEAR1310_GPT2_CLK_ENB 4 14262306a36Sopenharmony_ci #define SPEAR1310_KBD_CLK_ENB 3 14362306a36Sopenharmony_ci #define SPEAR1310_CPU_DBG_CLK_ENB 2 14462306a36Sopenharmony_ci #define SPEAR1310_DDR_CORE_CLK_ENB 1 14562306a36Sopenharmony_ci #define SPEAR1310_DDR_CTRL_CLK_ENB 0 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_ci#define SPEAR1310_RAS_CLK_ENB (misc_base + 0x310) 14862306a36Sopenharmony_ci /* RAS_CLK_ENB register masks */ 14962306a36Sopenharmony_ci #define SPEAR1310_SYNT3_CLK_ENB 17 15062306a36Sopenharmony_ci #define SPEAR1310_SYNT2_CLK_ENB 16 15162306a36Sopenharmony_ci #define SPEAR1310_SYNT1_CLK_ENB 15 15262306a36Sopenharmony_ci #define SPEAR1310_SYNT0_CLK_ENB 14 15362306a36Sopenharmony_ci #define SPEAR1310_PCLK3_CLK_ENB 13 15462306a36Sopenharmony_ci #define SPEAR1310_PCLK2_CLK_ENB 12 15562306a36Sopenharmony_ci #define SPEAR1310_PCLK1_CLK_ENB 11 15662306a36Sopenharmony_ci #define SPEAR1310_PCLK0_CLK_ENB 10 15762306a36Sopenharmony_ci #define SPEAR1310_PLL3_CLK_ENB 9 15862306a36Sopenharmony_ci #define SPEAR1310_PLL2_CLK_ENB 8 15962306a36Sopenharmony_ci #define SPEAR1310_C125M_PAD_CLK_ENB 7 16062306a36Sopenharmony_ci #define SPEAR1310_C30M_CLK_ENB 6 16162306a36Sopenharmony_ci #define SPEAR1310_C48M_CLK_ENB 5 16262306a36Sopenharmony_ci #define SPEAR1310_OSC_25M_CLK_ENB 4 16362306a36Sopenharmony_ci #define SPEAR1310_OSC_32K_CLK_ENB 3 16462306a36Sopenharmony_ci #define SPEAR1310_OSC_24M_CLK_ENB 2 16562306a36Sopenharmony_ci #define SPEAR1310_PCLK_CLK_ENB 1 16662306a36Sopenharmony_ci #define SPEAR1310_ACLK_CLK_ENB 0 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci/* RAS Area Control Register */ 16962306a36Sopenharmony_ci#define SPEAR1310_RAS_CTRL_REG0 (ras_base + 0x000) 17062306a36Sopenharmony_ci #define SPEAR1310_SSP1_CLK_MASK 3 17162306a36Sopenharmony_ci #define SPEAR1310_SSP1_CLK_SHIFT 26 17262306a36Sopenharmony_ci #define SPEAR1310_TDM_CLK_MASK 1 17362306a36Sopenharmony_ci #define SPEAR1310_TDM2_CLK_SHIFT 24 17462306a36Sopenharmony_ci #define SPEAR1310_TDM1_CLK_SHIFT 23 17562306a36Sopenharmony_ci #define SPEAR1310_I2C_CLK_MASK 1 17662306a36Sopenharmony_ci #define SPEAR1310_I2C7_CLK_SHIFT 22 17762306a36Sopenharmony_ci #define SPEAR1310_I2C6_CLK_SHIFT 21 17862306a36Sopenharmony_ci #define SPEAR1310_I2C5_CLK_SHIFT 20 17962306a36Sopenharmony_ci #define SPEAR1310_I2C4_CLK_SHIFT 19 18062306a36Sopenharmony_ci #define SPEAR1310_I2C3_CLK_SHIFT 18 18162306a36Sopenharmony_ci #define SPEAR1310_I2C2_CLK_SHIFT 17 18262306a36Sopenharmony_ci #define SPEAR1310_I2C1_CLK_SHIFT 16 18362306a36Sopenharmony_ci #define SPEAR1310_GPT64_CLK_MASK 1 18462306a36Sopenharmony_ci #define SPEAR1310_GPT64_CLK_SHIFT 15 18562306a36Sopenharmony_ci #define SPEAR1310_RAS_UART_CLK_MASK 1 18662306a36Sopenharmony_ci #define SPEAR1310_UART5_CLK_SHIFT 14 18762306a36Sopenharmony_ci #define SPEAR1310_UART4_CLK_SHIFT 13 18862306a36Sopenharmony_ci #define SPEAR1310_UART3_CLK_SHIFT 12 18962306a36Sopenharmony_ci #define SPEAR1310_UART2_CLK_SHIFT 11 19062306a36Sopenharmony_ci #define SPEAR1310_UART1_CLK_SHIFT 10 19162306a36Sopenharmony_ci #define SPEAR1310_PCI_CLK_MASK 1 19262306a36Sopenharmony_ci #define SPEAR1310_PCI_CLK_SHIFT 0 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci#define SPEAR1310_RAS_CTRL_REG1 (ras_base + 0x004) 19562306a36Sopenharmony_ci #define SPEAR1310_PHY_CLK_MASK 0x3 19662306a36Sopenharmony_ci #define SPEAR1310_RMII_PHY_CLK_SHIFT 0 19762306a36Sopenharmony_ci #define SPEAR1310_SMII_RGMII_PHY_CLK_SHIFT 2 19862306a36Sopenharmony_ci 19962306a36Sopenharmony_ci#define SPEAR1310_RAS_SW_CLK_CTRL (ras_base + 0x0148) 20062306a36Sopenharmony_ci #define SPEAR1310_CAN1_CLK_ENB 25 20162306a36Sopenharmony_ci #define SPEAR1310_CAN0_CLK_ENB 24 20262306a36Sopenharmony_ci #define SPEAR1310_GPT64_CLK_ENB 23 20362306a36Sopenharmony_ci #define SPEAR1310_SSP1_CLK_ENB 22 20462306a36Sopenharmony_ci #define SPEAR1310_I2C7_CLK_ENB 21 20562306a36Sopenharmony_ci #define SPEAR1310_I2C6_CLK_ENB 20 20662306a36Sopenharmony_ci #define SPEAR1310_I2C5_CLK_ENB 19 20762306a36Sopenharmony_ci #define SPEAR1310_I2C4_CLK_ENB 18 20862306a36Sopenharmony_ci #define SPEAR1310_I2C3_CLK_ENB 17 20962306a36Sopenharmony_ci #define SPEAR1310_I2C2_CLK_ENB 16 21062306a36Sopenharmony_ci #define SPEAR1310_I2C1_CLK_ENB 15 21162306a36Sopenharmony_ci #define SPEAR1310_UART5_CLK_ENB 14 21262306a36Sopenharmony_ci #define SPEAR1310_UART4_CLK_ENB 13 21362306a36Sopenharmony_ci #define SPEAR1310_UART3_CLK_ENB 12 21462306a36Sopenharmony_ci #define SPEAR1310_UART2_CLK_ENB 11 21562306a36Sopenharmony_ci #define SPEAR1310_UART1_CLK_ENB 10 21662306a36Sopenharmony_ci #define SPEAR1310_RS485_1_CLK_ENB 9 21762306a36Sopenharmony_ci #define SPEAR1310_RS485_0_CLK_ENB 8 21862306a36Sopenharmony_ci #define SPEAR1310_TDM2_CLK_ENB 7 21962306a36Sopenharmony_ci #define SPEAR1310_TDM1_CLK_ENB 6 22062306a36Sopenharmony_ci #define SPEAR1310_PCI_CLK_ENB 5 22162306a36Sopenharmony_ci #define SPEAR1310_GMII_CLK_ENB 4 22262306a36Sopenharmony_ci #define SPEAR1310_MII2_CLK_ENB 3 22362306a36Sopenharmony_ci #define SPEAR1310_MII1_CLK_ENB 2 22462306a36Sopenharmony_ci #define SPEAR1310_MII0_CLK_ENB 1 22562306a36Sopenharmony_ci #define SPEAR1310_ESRAM_CLK_ENB 0 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_cistatic DEFINE_SPINLOCK(_lock); 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_ci/* pll rate configuration table, in ascending order of rates */ 23062306a36Sopenharmony_cistatic struct pll_rate_tbl pll_rtbl[] = { 23162306a36Sopenharmony_ci /* PCLK 24MHz */ 23262306a36Sopenharmony_ci {.mode = 0, .m = 0x83, .n = 0x04, .p = 0x5}, /* vco 1572, pll 49.125 MHz */ 23362306a36Sopenharmony_ci {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x3}, /* vco 1000, pll 125 MHz */ 23462306a36Sopenharmony_ci {.mode = 0, .m = 0x64, .n = 0x06, .p = 0x1}, /* vco 800, pll 400 MHz */ 23562306a36Sopenharmony_ci {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x1}, /* vco 1000, pll 500 MHz */ 23662306a36Sopenharmony_ci {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x1}, /* vco 1328, pll 664 MHz */ 23762306a36Sopenharmony_ci {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x1}, /* vco 1600, pll 800 MHz */ 23862306a36Sopenharmony_ci {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */ 23962306a36Sopenharmony_ci}; 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci/* vco-pll4 rate configuration table, in ascending order of rates */ 24262306a36Sopenharmony_cistatic struct pll_rate_tbl pll4_rtbl[] = { 24362306a36Sopenharmony_ci {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x2}, /* vco 1000, pll 250 MHz */ 24462306a36Sopenharmony_ci {.mode = 0, .m = 0xA6, .n = 0x06, .p = 0x2}, /* vco 1328, pll 332 MHz */ 24562306a36Sopenharmony_ci {.mode = 0, .m = 0xC8, .n = 0x06, .p = 0x2}, /* vco 1600, pll 400 MHz */ 24662306a36Sopenharmony_ci {.mode = 0, .m = 0x7D, .n = 0x06, .p = 0x0}, /* vco 1, pll 1 GHz */ 24762306a36Sopenharmony_ci}; 24862306a36Sopenharmony_ci 24962306a36Sopenharmony_ci/* aux rate configuration table, in ascending order of rates */ 25062306a36Sopenharmony_cistatic struct aux_rate_tbl aux_rtbl[] = { 25162306a36Sopenharmony_ci /* For VCO1div2 = 500 MHz */ 25262306a36Sopenharmony_ci {.xscale = 10, .yscale = 204, .eq = 0}, /* 12.29 MHz */ 25362306a36Sopenharmony_ci {.xscale = 4, .yscale = 21, .eq = 0}, /* 48 MHz */ 25462306a36Sopenharmony_ci {.xscale = 2, .yscale = 6, .eq = 0}, /* 83 MHz */ 25562306a36Sopenharmony_ci {.xscale = 2, .yscale = 4, .eq = 0}, /* 125 MHz */ 25662306a36Sopenharmony_ci {.xscale = 1, .yscale = 3, .eq = 1}, /* 166 MHz */ 25762306a36Sopenharmony_ci {.xscale = 1, .yscale = 2, .eq = 1}, /* 250 MHz */ 25862306a36Sopenharmony_ci}; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_ci/* gmac rate configuration table, in ascending order of rates */ 26162306a36Sopenharmony_cistatic struct aux_rate_tbl gmac_rtbl[] = { 26262306a36Sopenharmony_ci /* For gmac phy input clk */ 26362306a36Sopenharmony_ci {.xscale = 2, .yscale = 6, .eq = 0}, /* divided by 6 */ 26462306a36Sopenharmony_ci {.xscale = 2, .yscale = 4, .eq = 0}, /* divided by 4 */ 26562306a36Sopenharmony_ci {.xscale = 1, .yscale = 3, .eq = 1}, /* divided by 3 */ 26662306a36Sopenharmony_ci {.xscale = 1, .yscale = 2, .eq = 1}, /* divided by 2 */ 26762306a36Sopenharmony_ci}; 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci/* clcd rate configuration table, in ascending order of rates */ 27062306a36Sopenharmony_cistatic struct frac_rate_tbl clcd_rtbl[] = { 27162306a36Sopenharmony_ci {.div = 0x14000}, /* 25 Mhz , for vc01div4 = 250 MHz*/ 27262306a36Sopenharmony_ci {.div = 0x1284B}, /* 27 Mhz , for vc01div4 = 250 MHz*/ 27362306a36Sopenharmony_ci {.div = 0x0D8D3}, /* 58 Mhz , for vco1div4 = 393 MHz */ 27462306a36Sopenharmony_ci {.div = 0x0B72C}, /* 58 Mhz , for vco1div4 = 332 MHz */ 27562306a36Sopenharmony_ci {.div = 0x089EE}, /* 58 Mhz , for vc01div4 = 250 MHz*/ 27662306a36Sopenharmony_ci {.div = 0x06f1C}, /* 72 Mhz , for vc01div4 = 250 MHz*/ 27762306a36Sopenharmony_ci {.div = 0x06E58}, /* 58 Mhz , for vco1div4 = 200 MHz */ 27862306a36Sopenharmony_ci {.div = 0x06c1B}, /* 74 Mhz , for vc01div4 = 250 MHz*/ 27962306a36Sopenharmony_ci {.div = 0x04A12}, /* 108 Mhz , for vc01div4 = 250 MHz*/ 28062306a36Sopenharmony_ci {.div = 0x0378E}, /* 144 Mhz , for vc01div4 = 250 MHz*/ 28162306a36Sopenharmony_ci}; 28262306a36Sopenharmony_ci 28362306a36Sopenharmony_ci/* i2s prescaler1 masks */ 28462306a36Sopenharmony_cistatic const struct aux_clk_masks i2s_prs1_masks = { 28562306a36Sopenharmony_ci .eq_sel_mask = AUX_EQ_SEL_MASK, 28662306a36Sopenharmony_ci .eq_sel_shift = SPEAR1310_I2S_PRS1_EQ_SEL_SHIFT, 28762306a36Sopenharmony_ci .eq1_mask = AUX_EQ1_SEL, 28862306a36Sopenharmony_ci .eq2_mask = AUX_EQ2_SEL, 28962306a36Sopenharmony_ci .xscale_sel_mask = SPEAR1310_I2S_PRS1_CLK_X_MASK, 29062306a36Sopenharmony_ci .xscale_sel_shift = SPEAR1310_I2S_PRS1_CLK_X_SHIFT, 29162306a36Sopenharmony_ci .yscale_sel_mask = SPEAR1310_I2S_PRS1_CLK_Y_MASK, 29262306a36Sopenharmony_ci .yscale_sel_shift = SPEAR1310_I2S_PRS1_CLK_Y_SHIFT, 29362306a36Sopenharmony_ci}; 29462306a36Sopenharmony_ci 29562306a36Sopenharmony_ci/* i2s sclk (bit clock) syynthesizers masks */ 29662306a36Sopenharmony_cistatic struct aux_clk_masks i2s_sclk_masks = { 29762306a36Sopenharmony_ci .eq_sel_mask = AUX_EQ_SEL_MASK, 29862306a36Sopenharmony_ci .eq_sel_shift = SPEAR1310_I2S_SCLK_EQ_SEL_SHIFT, 29962306a36Sopenharmony_ci .eq1_mask = AUX_EQ1_SEL, 30062306a36Sopenharmony_ci .eq2_mask = AUX_EQ2_SEL, 30162306a36Sopenharmony_ci .xscale_sel_mask = SPEAR1310_I2S_SCLK_X_MASK, 30262306a36Sopenharmony_ci .xscale_sel_shift = SPEAR1310_I2S_SCLK_X_SHIFT, 30362306a36Sopenharmony_ci .yscale_sel_mask = SPEAR1310_I2S_SCLK_Y_MASK, 30462306a36Sopenharmony_ci .yscale_sel_shift = SPEAR1310_I2S_SCLK_Y_SHIFT, 30562306a36Sopenharmony_ci .enable_bit = SPEAR1310_I2S_SCLK_SYNTH_ENB, 30662306a36Sopenharmony_ci}; 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci/* i2s prs1 aux rate configuration table, in ascending order of rates */ 30962306a36Sopenharmony_cistatic struct aux_rate_tbl i2s_prs1_rtbl[] = { 31062306a36Sopenharmony_ci /* For parent clk = 49.152 MHz */ 31162306a36Sopenharmony_ci {.xscale = 1, .yscale = 12, .eq = 0}, /* 2.048 MHz, smp freq = 8Khz */ 31262306a36Sopenharmony_ci {.xscale = 11, .yscale = 96, .eq = 0}, /* 2.816 MHz, smp freq = 11Khz */ 31362306a36Sopenharmony_ci {.xscale = 1, .yscale = 6, .eq = 0}, /* 4.096 MHz, smp freq = 16Khz */ 31462306a36Sopenharmony_ci {.xscale = 11, .yscale = 48, .eq = 0}, /* 5.632 MHz, smp freq = 22Khz */ 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci /* 31762306a36Sopenharmony_ci * with parent clk = 49.152, freq gen is 8.192 MHz, smp freq = 32Khz 31862306a36Sopenharmony_ci * with parent clk = 12.288, freq gen is 2.048 MHz, smp freq = 8Khz 31962306a36Sopenharmony_ci */ 32062306a36Sopenharmony_ci {.xscale = 1, .yscale = 3, .eq = 0}, 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci /* For parent clk = 49.152 MHz */ 32362306a36Sopenharmony_ci {.xscale = 17, .yscale = 37, .eq = 0}, /* 11.289 MHz, smp freq = 44Khz*/ 32462306a36Sopenharmony_ci 32562306a36Sopenharmony_ci {.xscale = 1, .yscale = 2, .eq = 0}, /* 12.288 MHz */ 32662306a36Sopenharmony_ci}; 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci/* i2s sclk aux rate configuration table, in ascending order of rates */ 32962306a36Sopenharmony_cistatic struct aux_rate_tbl i2s_sclk_rtbl[] = { 33062306a36Sopenharmony_ci /* For i2s_ref_clk = 12.288MHz */ 33162306a36Sopenharmony_ci {.xscale = 1, .yscale = 4, .eq = 0}, /* 1.53 MHz */ 33262306a36Sopenharmony_ci {.xscale = 1, .yscale = 2, .eq = 0}, /* 3.07 Mhz */ 33362306a36Sopenharmony_ci}; 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_ci/* adc rate configuration table, in ascending order of rates */ 33662306a36Sopenharmony_ci/* possible adc range is 2.5 MHz to 20 MHz. */ 33762306a36Sopenharmony_cistatic struct aux_rate_tbl adc_rtbl[] = { 33862306a36Sopenharmony_ci /* For ahb = 166.67 MHz */ 33962306a36Sopenharmony_ci {.xscale = 1, .yscale = 31, .eq = 0}, /* 2.68 MHz */ 34062306a36Sopenharmony_ci {.xscale = 2, .yscale = 21, .eq = 0}, /* 7.94 MHz */ 34162306a36Sopenharmony_ci {.xscale = 4, .yscale = 21, .eq = 0}, /* 15.87 MHz */ 34262306a36Sopenharmony_ci {.xscale = 10, .yscale = 42, .eq = 0}, /* 19.84 MHz */ 34362306a36Sopenharmony_ci}; 34462306a36Sopenharmony_ci 34562306a36Sopenharmony_ci/* General synth rate configuration table, in ascending order of rates */ 34662306a36Sopenharmony_cistatic struct frac_rate_tbl gen_rtbl[] = { 34762306a36Sopenharmony_ci /* For vco1div4 = 250 MHz */ 34862306a36Sopenharmony_ci {.div = 0x14000}, /* 25 MHz */ 34962306a36Sopenharmony_ci {.div = 0x0A000}, /* 50 MHz */ 35062306a36Sopenharmony_ci {.div = 0x05000}, /* 100 MHz */ 35162306a36Sopenharmony_ci {.div = 0x02000}, /* 250 MHz */ 35262306a36Sopenharmony_ci}; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_ci/* clock parents */ 35562306a36Sopenharmony_cistatic const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", }; 35662306a36Sopenharmony_cistatic const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", }; 35762306a36Sopenharmony_cistatic const char *uart0_parents[] = { "pll5_clk", "uart_syn_gclk", }; 35862306a36Sopenharmony_cistatic const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", }; 35962306a36Sopenharmony_cistatic const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk", 36062306a36Sopenharmony_ci "osc_25m_clk", }; 36162306a36Sopenharmony_cistatic const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", }; 36262306a36Sopenharmony_cistatic const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", }; 36362306a36Sopenharmony_cistatic const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", }; 36462306a36Sopenharmony_cistatic const char *i2s_src_parents[] = { "vco1div2_clk", "none", "pll3_clk", 36562306a36Sopenharmony_ci "i2s_src_pad_clk", }; 36662306a36Sopenharmony_cistatic const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", }; 36762306a36Sopenharmony_cistatic const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk", 36862306a36Sopenharmony_ci "pll3_clk", }; 36962306a36Sopenharmony_cistatic const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco3div2_clk", 37062306a36Sopenharmony_ci "pll2_clk", }; 37162306a36Sopenharmony_cistatic const char *rmii_phy_parents[] = { "ras_tx50_clk", "none", 37262306a36Sopenharmony_ci "ras_pll2_clk", "ras_syn0_clk", }; 37362306a36Sopenharmony_cistatic const char *smii_rgmii_phy_parents[] = { "none", "ras_tx125_clk", 37462306a36Sopenharmony_ci "ras_pll2_clk", "ras_syn0_clk", }; 37562306a36Sopenharmony_cistatic const char *uart_parents[] = { "ras_apb_clk", "gen_syn3_clk", }; 37662306a36Sopenharmony_cistatic const char *i2c_parents[] = { "ras_apb_clk", "gen_syn1_clk", }; 37762306a36Sopenharmony_cistatic const char *ssp1_parents[] = { "ras_apb_clk", "gen_syn1_clk", 37862306a36Sopenharmony_ci "ras_plclk0_clk", }; 37962306a36Sopenharmony_cistatic const char *pci_parents[] = { "ras_pll3_clk", "gen_syn2_clk", }; 38062306a36Sopenharmony_cistatic const char *tdm_parents[] = { "ras_pll3_clk", "gen_syn1_clk", }; 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_civoid __init spear1310_clk_init(void __iomem *misc_base, void __iomem *ras_base) 38362306a36Sopenharmony_ci{ 38462306a36Sopenharmony_ci struct clk *clk, *clk1; 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "osc_32k_clk", NULL, 0, 32000); 38762306a36Sopenharmony_ci clk_register_clkdev(clk, "osc_32k_clk", NULL); 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "osc_24m_clk", NULL, 0, 24000000); 39062306a36Sopenharmony_ci clk_register_clkdev(clk, "osc_24m_clk", NULL); 39162306a36Sopenharmony_ci 39262306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "osc_25m_clk", NULL, 0, 25000000); 39362306a36Sopenharmony_ci clk_register_clkdev(clk, "osc_25m_clk", NULL); 39462306a36Sopenharmony_ci 39562306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, 0, 125000000); 39662306a36Sopenharmony_ci clk_register_clkdev(clk, "gmii_pad_clk", NULL); 39762306a36Sopenharmony_ci 39862306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL, 0, 39962306a36Sopenharmony_ci 12288000); 40062306a36Sopenharmony_ci clk_register_clkdev(clk, "i2s_src_pad_clk", NULL); 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_ci /* clock derived from 32 KHz osc clk */ 40362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "rtc-spear", "osc_32k_clk", 0, 40462306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_RTC_CLK_ENB, 0, 40562306a36Sopenharmony_ci &_lock); 40662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0580000.rtc"); 40762306a36Sopenharmony_ci 40862306a36Sopenharmony_ci /* clock derived from 24 or 25 MHz osc clk */ 40962306a36Sopenharmony_ci /* vco-pll */ 41062306a36Sopenharmony_ci clk = clk_register_mux(NULL, "vco1_mclk", vco_parents, 41162306a36Sopenharmony_ci ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT, 41262306a36Sopenharmony_ci SPEAR1310_PLL_CFG, SPEAR1310_PLL1_CLK_SHIFT, 41362306a36Sopenharmony_ci SPEAR1310_PLL_CLK_MASK, 0, &_lock); 41462306a36Sopenharmony_ci clk_register_clkdev(clk, "vco1_mclk", NULL); 41562306a36Sopenharmony_ci clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk", 41662306a36Sopenharmony_ci 0, SPEAR1310_PLL1_CTR, SPEAR1310_PLL1_FRQ, pll_rtbl, 41762306a36Sopenharmony_ci ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 41862306a36Sopenharmony_ci clk_register_clkdev(clk, "vco1_clk", NULL); 41962306a36Sopenharmony_ci clk_register_clkdev(clk1, "pll1_clk", NULL); 42062306a36Sopenharmony_ci 42162306a36Sopenharmony_ci clk = clk_register_mux(NULL, "vco2_mclk", vco_parents, 42262306a36Sopenharmony_ci ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT, 42362306a36Sopenharmony_ci SPEAR1310_PLL_CFG, SPEAR1310_PLL2_CLK_SHIFT, 42462306a36Sopenharmony_ci SPEAR1310_PLL_CLK_MASK, 0, &_lock); 42562306a36Sopenharmony_ci clk_register_clkdev(clk, "vco2_mclk", NULL); 42662306a36Sopenharmony_ci clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk", 42762306a36Sopenharmony_ci 0, SPEAR1310_PLL2_CTR, SPEAR1310_PLL2_FRQ, pll_rtbl, 42862306a36Sopenharmony_ci ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 42962306a36Sopenharmony_ci clk_register_clkdev(clk, "vco2_clk", NULL); 43062306a36Sopenharmony_ci clk_register_clkdev(clk1, "pll2_clk", NULL); 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_ci clk = clk_register_mux(NULL, "vco3_mclk", vco_parents, 43362306a36Sopenharmony_ci ARRAY_SIZE(vco_parents), CLK_SET_RATE_NO_REPARENT, 43462306a36Sopenharmony_ci SPEAR1310_PLL_CFG, SPEAR1310_PLL3_CLK_SHIFT, 43562306a36Sopenharmony_ci SPEAR1310_PLL_CLK_MASK, 0, &_lock); 43662306a36Sopenharmony_ci clk_register_clkdev(clk, "vco3_mclk", NULL); 43762306a36Sopenharmony_ci clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk", 43862306a36Sopenharmony_ci 0, SPEAR1310_PLL3_CTR, SPEAR1310_PLL3_FRQ, pll_rtbl, 43962306a36Sopenharmony_ci ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL); 44062306a36Sopenharmony_ci clk_register_clkdev(clk, "vco3_clk", NULL); 44162306a36Sopenharmony_ci clk_register_clkdev(clk1, "pll3_clk", NULL); 44262306a36Sopenharmony_ci 44362306a36Sopenharmony_ci clk = clk_register_vco_pll("vco4_clk", "pll4_clk", NULL, "osc_24m_clk", 44462306a36Sopenharmony_ci 0, SPEAR1310_PLL4_CTR, SPEAR1310_PLL4_FRQ, pll4_rtbl, 44562306a36Sopenharmony_ci ARRAY_SIZE(pll4_rtbl), &_lock, &clk1, NULL); 44662306a36Sopenharmony_ci clk_register_clkdev(clk, "vco4_clk", NULL); 44762306a36Sopenharmony_ci clk_register_clkdev(clk1, "pll4_clk", NULL); 44862306a36Sopenharmony_ci 44962306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "pll5_clk", "osc_24m_clk", 0, 45062306a36Sopenharmony_ci 48000000); 45162306a36Sopenharmony_ci clk_register_clkdev(clk, "pll5_clk", NULL); 45262306a36Sopenharmony_ci 45362306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "pll6_clk", "osc_25m_clk", 0, 45462306a36Sopenharmony_ci 25000000); 45562306a36Sopenharmony_ci clk_register_clkdev(clk, "pll6_clk", NULL); 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_ci /* vco div n clocks */ 45862306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "vco1div2_clk", "vco1_clk", 0, 1, 45962306a36Sopenharmony_ci 2); 46062306a36Sopenharmony_ci clk_register_clkdev(clk, "vco1div2_clk", NULL); 46162306a36Sopenharmony_ci 46262306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "vco1div4_clk", "vco1_clk", 0, 1, 46362306a36Sopenharmony_ci 4); 46462306a36Sopenharmony_ci clk_register_clkdev(clk, "vco1div4_clk", NULL); 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "vco2div2_clk", "vco2_clk", 0, 1, 46762306a36Sopenharmony_ci 2); 46862306a36Sopenharmony_ci clk_register_clkdev(clk, "vco2div2_clk", NULL); 46962306a36Sopenharmony_ci 47062306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "vco3div2_clk", "vco3_clk", 0, 1, 47162306a36Sopenharmony_ci 2); 47262306a36Sopenharmony_ci clk_register_clkdev(clk, "vco3div2_clk", NULL); 47362306a36Sopenharmony_ci 47462306a36Sopenharmony_ci /* peripherals */ 47562306a36Sopenharmony_ci clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1, 47662306a36Sopenharmony_ci 128); 47762306a36Sopenharmony_ci clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0, 47862306a36Sopenharmony_ci SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_THSENS_CLK_ENB, 0, 47962306a36Sopenharmony_ci &_lock); 48062306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "spear_thermal"); 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci /* clock derived from pll4 clk */ 48362306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "ddr_clk", "pll4_clk", 0, 1, 48462306a36Sopenharmony_ci 1); 48562306a36Sopenharmony_ci clk_register_clkdev(clk, "ddr_clk", NULL); 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ci /* clock derived from pll1 clk */ 48862306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "cpu_clk", "pll1_clk", 48962306a36Sopenharmony_ci CLK_SET_RATE_PARENT, 1, 2); 49062306a36Sopenharmony_ci clk_register_clkdev(clk, "cpu_clk", NULL); 49162306a36Sopenharmony_ci 49262306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "wdt_clk", "cpu_clk", 0, 1, 49362306a36Sopenharmony_ci 2); 49462306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "ec800620.wdt"); 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "smp_twd_clk", "cpu_clk", 0, 1, 49762306a36Sopenharmony_ci 2); 49862306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "smp_twd"); 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "ahb_clk", "pll1_clk", 0, 1, 50162306a36Sopenharmony_ci 6); 50262306a36Sopenharmony_ci clk_register_clkdev(clk, "ahb_clk", NULL); 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_ci clk = clk_register_fixed_factor(NULL, "apb_clk", "pll1_clk", 0, 1, 50562306a36Sopenharmony_ci 12); 50662306a36Sopenharmony_ci clk_register_clkdev(clk, "apb_clk", NULL); 50762306a36Sopenharmony_ci 50862306a36Sopenharmony_ci /* gpt clocks */ 50962306a36Sopenharmony_ci clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents, 51062306a36Sopenharmony_ci ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT, 51162306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT0_CLK_SHIFT, 51262306a36Sopenharmony_ci SPEAR1310_GPT_CLK_MASK, 0, &_lock); 51362306a36Sopenharmony_ci clk_register_clkdev(clk, "gpt0_mclk", NULL); 51462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0, 51562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT0_CLK_ENB, 0, 51662306a36Sopenharmony_ci &_lock); 51762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "gpt0"); 51862306a36Sopenharmony_ci 51962306a36Sopenharmony_ci clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents, 52062306a36Sopenharmony_ci ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT, 52162306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT1_CLK_SHIFT, 52262306a36Sopenharmony_ci SPEAR1310_GPT_CLK_MASK, 0, &_lock); 52362306a36Sopenharmony_ci clk_register_clkdev(clk, "gpt1_mclk", NULL); 52462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0, 52562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT1_CLK_ENB, 0, 52662306a36Sopenharmony_ci &_lock); 52762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "gpt1"); 52862306a36Sopenharmony_ci 52962306a36Sopenharmony_ci clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents, 53062306a36Sopenharmony_ci ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT, 53162306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT2_CLK_SHIFT, 53262306a36Sopenharmony_ci SPEAR1310_GPT_CLK_MASK, 0, &_lock); 53362306a36Sopenharmony_ci clk_register_clkdev(clk, "gpt2_mclk", NULL); 53462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0, 53562306a36Sopenharmony_ci SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT2_CLK_ENB, 0, 53662306a36Sopenharmony_ci &_lock); 53762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "gpt2"); 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents, 54062306a36Sopenharmony_ci ARRAY_SIZE(gpt_parents), CLK_SET_RATE_NO_REPARENT, 54162306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GPT3_CLK_SHIFT, 54262306a36Sopenharmony_ci SPEAR1310_GPT_CLK_MASK, 0, &_lock); 54362306a36Sopenharmony_ci clk_register_clkdev(clk, "gpt3_mclk", NULL); 54462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0, 54562306a36Sopenharmony_ci SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT3_CLK_ENB, 0, 54662306a36Sopenharmony_ci &_lock); 54762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "gpt3"); 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_ci /* others */ 55062306a36Sopenharmony_ci clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "vco1div2_clk", 55162306a36Sopenharmony_ci 0, SPEAR1310_UART_CLK_SYNT, NULL, aux_rtbl, 55262306a36Sopenharmony_ci ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 55362306a36Sopenharmony_ci clk_register_clkdev(clk, "uart_syn_clk", NULL); 55462306a36Sopenharmony_ci clk_register_clkdev(clk1, "uart_syn_gclk", NULL); 55562306a36Sopenharmony_ci 55662306a36Sopenharmony_ci clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents, 55762306a36Sopenharmony_ci ARRAY_SIZE(uart0_parents), 55862306a36Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 55962306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_UART_CLK_SHIFT, 56062306a36Sopenharmony_ci SPEAR1310_UART_CLK_MASK, 0, &_lock); 56162306a36Sopenharmony_ci clk_register_clkdev(clk, "uart0_mclk", NULL); 56262306a36Sopenharmony_ci 56362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk", 56462306a36Sopenharmony_ci CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB, 56562306a36Sopenharmony_ci SPEAR1310_UART_CLK_ENB, 0, &_lock); 56662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0000000.serial"); 56762306a36Sopenharmony_ci 56862306a36Sopenharmony_ci clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk", 56962306a36Sopenharmony_ci "vco1div2_clk", 0, SPEAR1310_SDHCI_CLK_SYNT, NULL, 57062306a36Sopenharmony_ci aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 57162306a36Sopenharmony_ci clk_register_clkdev(clk, "sdhci_syn_clk", NULL); 57262306a36Sopenharmony_ci clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL); 57362306a36Sopenharmony_ci 57462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk", 57562306a36Sopenharmony_ci CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB, 57662306a36Sopenharmony_ci SPEAR1310_SDHCI_CLK_ENB, 0, &_lock); 57762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b3000000.sdhci"); 57862306a36Sopenharmony_ci 57962306a36Sopenharmony_ci clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk", 58062306a36Sopenharmony_ci 0, SPEAR1310_CFXD_CLK_SYNT, NULL, aux_rtbl, 58162306a36Sopenharmony_ci ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 58262306a36Sopenharmony_ci clk_register_clkdev(clk, "cfxd_syn_clk", NULL); 58362306a36Sopenharmony_ci clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL); 58462306a36Sopenharmony_ci 58562306a36Sopenharmony_ci clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk", 58662306a36Sopenharmony_ci CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB, 58762306a36Sopenharmony_ci SPEAR1310_CFXD_CLK_ENB, 0, &_lock); 58862306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b2800000.cf"); 58962306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "arasan_xd"); 59062306a36Sopenharmony_ci 59162306a36Sopenharmony_ci clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk", 59262306a36Sopenharmony_ci 0, SPEAR1310_C3_CLK_SYNT, NULL, aux_rtbl, 59362306a36Sopenharmony_ci ARRAY_SIZE(aux_rtbl), &_lock, &clk1); 59462306a36Sopenharmony_ci clk_register_clkdev(clk, "c3_syn_clk", NULL); 59562306a36Sopenharmony_ci clk_register_clkdev(clk1, "c3_syn_gclk", NULL); 59662306a36Sopenharmony_ci 59762306a36Sopenharmony_ci clk = clk_register_mux(NULL, "c3_mclk", c3_parents, 59862306a36Sopenharmony_ci ARRAY_SIZE(c3_parents), 59962306a36Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 60062306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_C3_CLK_SHIFT, 60162306a36Sopenharmony_ci SPEAR1310_C3_CLK_MASK, 0, &_lock); 60262306a36Sopenharmony_ci clk_register_clkdev(clk, "c3_mclk", NULL); 60362306a36Sopenharmony_ci 60462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", 0, 60562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_C3_CLK_ENB, 0, 60662306a36Sopenharmony_ci &_lock); 60762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "c3"); 60862306a36Sopenharmony_ci 60962306a36Sopenharmony_ci /* gmac */ 61062306a36Sopenharmony_ci clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents, 61162306a36Sopenharmony_ci ARRAY_SIZE(gmac_phy_input_parents), 61262306a36Sopenharmony_ci CLK_SET_RATE_NO_REPARENT, SPEAR1310_GMAC_CLK_CFG, 61362306a36Sopenharmony_ci SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT, 61462306a36Sopenharmony_ci SPEAR1310_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock); 61562306a36Sopenharmony_ci clk_register_clkdev(clk, "phy_input_mclk", NULL); 61662306a36Sopenharmony_ci 61762306a36Sopenharmony_ci clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk", 61862306a36Sopenharmony_ci 0, SPEAR1310_GMAC_CLK_SYNT, NULL, gmac_rtbl, 61962306a36Sopenharmony_ci ARRAY_SIZE(gmac_rtbl), &_lock, &clk1); 62062306a36Sopenharmony_ci clk_register_clkdev(clk, "phy_syn_clk", NULL); 62162306a36Sopenharmony_ci clk_register_clkdev(clk1, "phy_syn_gclk", NULL); 62262306a36Sopenharmony_ci 62362306a36Sopenharmony_ci clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents, 62462306a36Sopenharmony_ci ARRAY_SIZE(gmac_phy_parents), CLK_SET_RATE_NO_REPARENT, 62562306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GMAC_PHY_CLK_SHIFT, 62662306a36Sopenharmony_ci SPEAR1310_GMAC_PHY_CLK_MASK, 0, &_lock); 62762306a36Sopenharmony_ci clk_register_clkdev(clk, "stmmacphy.0", NULL); 62862306a36Sopenharmony_ci 62962306a36Sopenharmony_ci /* clcd */ 63062306a36Sopenharmony_ci clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents, 63162306a36Sopenharmony_ci ARRAY_SIZE(clcd_synth_parents), 63262306a36Sopenharmony_ci CLK_SET_RATE_NO_REPARENT, SPEAR1310_CLCD_CLK_SYNT, 63362306a36Sopenharmony_ci SPEAR1310_CLCD_SYNT_CLK_SHIFT, 63462306a36Sopenharmony_ci SPEAR1310_CLCD_SYNT_CLK_MASK, 0, &_lock); 63562306a36Sopenharmony_ci clk_register_clkdev(clk, "clcd_syn_mclk", NULL); 63662306a36Sopenharmony_ci 63762306a36Sopenharmony_ci clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0, 63862306a36Sopenharmony_ci SPEAR1310_CLCD_CLK_SYNT, clcd_rtbl, 63962306a36Sopenharmony_ci ARRAY_SIZE(clcd_rtbl), &_lock); 64062306a36Sopenharmony_ci clk_register_clkdev(clk, "clcd_syn_clk", NULL); 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents, 64362306a36Sopenharmony_ci ARRAY_SIZE(clcd_pixel_parents), 64462306a36Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 64562306a36Sopenharmony_ci SPEAR1310_PERIP_CLK_CFG, SPEAR1310_CLCD_CLK_SHIFT, 64662306a36Sopenharmony_ci SPEAR1310_CLCD_CLK_MASK, 0, &_lock); 64762306a36Sopenharmony_ci clk_register_clkdev(clk, "clcd_pixel_mclk", NULL); 64862306a36Sopenharmony_ci 64962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0, 65062306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CLCD_CLK_ENB, 0, 65162306a36Sopenharmony_ci &_lock); 65262306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e1000000.clcd"); 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_ci /* i2s */ 65562306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents, 65662306a36Sopenharmony_ci ARRAY_SIZE(i2s_src_parents), CLK_SET_RATE_NO_REPARENT, 65762306a36Sopenharmony_ci SPEAR1310_I2S_CLK_CFG, SPEAR1310_I2S_SRC_CLK_SHIFT, 65862306a36Sopenharmony_ci SPEAR1310_I2S_SRC_CLK_MASK, 0, &_lock); 65962306a36Sopenharmony_ci clk_register_clkdev(clk, "i2s_src_mclk", NULL); 66062306a36Sopenharmony_ci 66162306a36Sopenharmony_ci clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk", 0, 66262306a36Sopenharmony_ci SPEAR1310_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl, 66362306a36Sopenharmony_ci ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL); 66462306a36Sopenharmony_ci clk_register_clkdev(clk, "i2s_prs1_clk", NULL); 66562306a36Sopenharmony_ci 66662306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents, 66762306a36Sopenharmony_ci ARRAY_SIZE(i2s_ref_parents), 66862306a36Sopenharmony_ci CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT, 66962306a36Sopenharmony_ci SPEAR1310_I2S_CLK_CFG, SPEAR1310_I2S_REF_SHIFT, 67062306a36Sopenharmony_ci SPEAR1310_I2S_REF_SEL_MASK, 0, &_lock); 67162306a36Sopenharmony_ci clk_register_clkdev(clk, "i2s_ref_mclk", NULL); 67262306a36Sopenharmony_ci 67362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0, 67462306a36Sopenharmony_ci SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_I2S_REF_PAD_CLK_ENB, 67562306a36Sopenharmony_ci 0, &_lock); 67662306a36Sopenharmony_ci clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL); 67762306a36Sopenharmony_ci 67862306a36Sopenharmony_ci clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk", 67962306a36Sopenharmony_ci "i2s_ref_mclk", 0, SPEAR1310_I2S_CLK_CFG, 68062306a36Sopenharmony_ci &i2s_sclk_masks, i2s_sclk_rtbl, 68162306a36Sopenharmony_ci ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1); 68262306a36Sopenharmony_ci clk_register_clkdev(clk, "i2s_sclk_clk", NULL); 68362306a36Sopenharmony_ci clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL); 68462306a36Sopenharmony_ci 68562306a36Sopenharmony_ci /* clock derived from ahb clk */ 68662306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0, 68762306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_I2C0_CLK_ENB, 0, 68862306a36Sopenharmony_ci &_lock); 68962306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0280000.i2c"); 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_ci clk = clk_register_gate(NULL, "dma_clk", "ahb_clk", 0, 69262306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_DMA_CLK_ENB, 0, 69362306a36Sopenharmony_ci &_lock); 69462306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "ea800000.dma"); 69562306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "eb000000.dma"); 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_ci clk = clk_register_gate(NULL, "jpeg_clk", "ahb_clk", 0, 69862306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_JPEG_CLK_ENB, 0, 69962306a36Sopenharmony_ci &_lock); 70062306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b2000000.jpeg"); 70162306a36Sopenharmony_ci 70262306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gmac_clk", "ahb_clk", 0, 70362306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GMAC_CLK_ENB, 0, 70462306a36Sopenharmony_ci &_lock); 70562306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e2000000.eth"); 70662306a36Sopenharmony_ci 70762306a36Sopenharmony_ci clk = clk_register_gate(NULL, "fsmc_clk", "ahb_clk", 0, 70862306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_FSMC_CLK_ENB, 0, 70962306a36Sopenharmony_ci &_lock); 71062306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b0000000.flash"); 71162306a36Sopenharmony_ci 71262306a36Sopenharmony_ci clk = clk_register_gate(NULL, "smi_clk", "ahb_clk", 0, 71362306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SMI_CLK_ENB, 0, 71462306a36Sopenharmony_ci &_lock); 71562306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "ea000000.flash"); 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci clk = clk_register_gate(NULL, "usbh0_clk", "ahb_clk", 0, 71862306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UHC0_CLK_ENB, 0, 71962306a36Sopenharmony_ci &_lock); 72062306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e4000000.ohci"); 72162306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e4800000.ehci"); 72262306a36Sopenharmony_ci 72362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "usbh1_clk", "ahb_clk", 0, 72462306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UHC1_CLK_ENB, 0, 72562306a36Sopenharmony_ci &_lock); 72662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e5000000.ohci"); 72762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e5800000.ehci"); 72862306a36Sopenharmony_ci 72962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uoc_clk", "ahb_clk", 0, 73062306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UOC_CLK_ENB, 0, 73162306a36Sopenharmony_ci &_lock); 73262306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e3800000.otg"); 73362306a36Sopenharmony_ci 73462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "pcie_sata_0_clk", "ahb_clk", 0, 73562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_PCIE_SATA_0_CLK_ENB, 73662306a36Sopenharmony_ci 0, &_lock); 73762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b1000000.pcie"); 73862306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b1000000.ahci"); 73962306a36Sopenharmony_ci 74062306a36Sopenharmony_ci clk = clk_register_gate(NULL, "pcie_sata_1_clk", "ahb_clk", 0, 74162306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_PCIE_SATA_1_CLK_ENB, 74262306a36Sopenharmony_ci 0, &_lock); 74362306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b1800000.pcie"); 74462306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b1800000.ahci"); 74562306a36Sopenharmony_ci 74662306a36Sopenharmony_ci clk = clk_register_gate(NULL, "pcie_sata_2_clk", "ahb_clk", 0, 74762306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_PCIE_SATA_2_CLK_ENB, 74862306a36Sopenharmony_ci 0, &_lock); 74962306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b4000000.pcie"); 75062306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "b4000000.ahci"); 75162306a36Sopenharmony_ci 75262306a36Sopenharmony_ci clk = clk_register_gate(NULL, "sysram0_clk", "ahb_clk", 0, 75362306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SYSRAM0_CLK_ENB, 0, 75462306a36Sopenharmony_ci &_lock); 75562306a36Sopenharmony_ci clk_register_clkdev(clk, "sysram0_clk", NULL); 75662306a36Sopenharmony_ci 75762306a36Sopenharmony_ci clk = clk_register_gate(NULL, "sysram1_clk", "ahb_clk", 0, 75862306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SYSRAM1_CLK_ENB, 0, 75962306a36Sopenharmony_ci &_lock); 76062306a36Sopenharmony_ci clk_register_clkdev(clk, "sysram1_clk", NULL); 76162306a36Sopenharmony_ci 76262306a36Sopenharmony_ci clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk", 76362306a36Sopenharmony_ci 0, SPEAR1310_ADC_CLK_SYNT, NULL, adc_rtbl, 76462306a36Sopenharmony_ci ARRAY_SIZE(adc_rtbl), &_lock, &clk1); 76562306a36Sopenharmony_ci clk_register_clkdev(clk, "adc_syn_clk", NULL); 76662306a36Sopenharmony_ci clk_register_clkdev(clk1, "adc_syn_gclk", NULL); 76762306a36Sopenharmony_ci 76862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk", 76962306a36Sopenharmony_ci CLK_SET_RATE_PARENT, SPEAR1310_PERIP1_CLK_ENB, 77062306a36Sopenharmony_ci SPEAR1310_ADC_CLK_ENB, 0, &_lock); 77162306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0080000.adc"); 77262306a36Sopenharmony_ci 77362306a36Sopenharmony_ci /* clock derived from apb clk */ 77462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ssp0_clk", "apb_clk", 0, 77562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SSP_CLK_ENB, 0, 77662306a36Sopenharmony_ci &_lock); 77762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0100000.spi"); 77862306a36Sopenharmony_ci 77962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gpio0_clk", "apb_clk", 0, 78062306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPIO0_CLK_ENB, 0, 78162306a36Sopenharmony_ci &_lock); 78262306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0600000.gpio"); 78362306a36Sopenharmony_ci 78462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "gpio1_clk", "apb_clk", 0, 78562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPIO1_CLK_ENB, 0, 78662306a36Sopenharmony_ci &_lock); 78762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0680000.gpio"); 78862306a36Sopenharmony_ci 78962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2s0_clk", "apb_clk", 0, 79062306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_I2S0_CLK_ENB, 0, 79162306a36Sopenharmony_ci &_lock); 79262306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0180000.i2s"); 79362306a36Sopenharmony_ci 79462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2s1_clk", "apb_clk", 0, 79562306a36Sopenharmony_ci SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_I2S1_CLK_ENB, 0, 79662306a36Sopenharmony_ci &_lock); 79762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0200000.i2s"); 79862306a36Sopenharmony_ci 79962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "kbd_clk", "apb_clk", 0, 80062306a36Sopenharmony_ci SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_KBD_CLK_ENB, 0, 80162306a36Sopenharmony_ci &_lock); 80262306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "e0300000.kbd"); 80362306a36Sopenharmony_ci 80462306a36Sopenharmony_ci /* RAS clks */ 80562306a36Sopenharmony_ci clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents, 80662306a36Sopenharmony_ci ARRAY_SIZE(gen_synth0_1_parents), 80762306a36Sopenharmony_ci CLK_SET_RATE_NO_REPARENT, SPEAR1310_PLL_CFG, 80862306a36Sopenharmony_ci SPEAR1310_RAS_SYNT0_1_CLK_SHIFT, 80962306a36Sopenharmony_ci SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock); 81062306a36Sopenharmony_ci clk_register_clkdev(clk, "gen_syn0_1_clk", NULL); 81162306a36Sopenharmony_ci 81262306a36Sopenharmony_ci clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents, 81362306a36Sopenharmony_ci ARRAY_SIZE(gen_synth2_3_parents), 81462306a36Sopenharmony_ci CLK_SET_RATE_NO_REPARENT, SPEAR1310_PLL_CFG, 81562306a36Sopenharmony_ci SPEAR1310_RAS_SYNT2_3_CLK_SHIFT, 81662306a36Sopenharmony_ci SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock); 81762306a36Sopenharmony_ci clk_register_clkdev(clk, "gen_syn2_3_clk", NULL); 81862306a36Sopenharmony_ci 81962306a36Sopenharmony_ci clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_clk", 0, 82062306a36Sopenharmony_ci SPEAR1310_RAS_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl), 82162306a36Sopenharmony_ci &_lock); 82262306a36Sopenharmony_ci clk_register_clkdev(clk, "gen_syn0_clk", NULL); 82362306a36Sopenharmony_ci 82462306a36Sopenharmony_ci clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_clk", 0, 82562306a36Sopenharmony_ci SPEAR1310_RAS_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl), 82662306a36Sopenharmony_ci &_lock); 82762306a36Sopenharmony_ci clk_register_clkdev(clk, "gen_syn1_clk", NULL); 82862306a36Sopenharmony_ci 82962306a36Sopenharmony_ci clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_clk", 0, 83062306a36Sopenharmony_ci SPEAR1310_RAS_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl), 83162306a36Sopenharmony_ci &_lock); 83262306a36Sopenharmony_ci clk_register_clkdev(clk, "gen_syn2_clk", NULL); 83362306a36Sopenharmony_ci 83462306a36Sopenharmony_ci clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_clk", 0, 83562306a36Sopenharmony_ci SPEAR1310_RAS_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl), 83662306a36Sopenharmony_ci &_lock); 83762306a36Sopenharmony_ci clk_register_clkdev(clk, "gen_syn3_clk", NULL); 83862306a36Sopenharmony_ci 83962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_osc_24m_clk", "osc_24m_clk", 0, 84062306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_24M_CLK_ENB, 0, 84162306a36Sopenharmony_ci &_lock); 84262306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_osc_24m_clk", NULL); 84362306a36Sopenharmony_ci 84462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_osc_25m_clk", "osc_25m_clk", 0, 84562306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_25M_CLK_ENB, 0, 84662306a36Sopenharmony_ci &_lock); 84762306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_osc_25m_clk", NULL); 84862306a36Sopenharmony_ci 84962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_osc_32k_clk", "osc_32k_clk", 0, 85062306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_32K_CLK_ENB, 0, 85162306a36Sopenharmony_ci &_lock); 85262306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_osc_32k_clk", NULL); 85362306a36Sopenharmony_ci 85462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_pll2_clk", "pll2_clk", 0, 85562306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_PLL2_CLK_ENB, 0, 85662306a36Sopenharmony_ci &_lock); 85762306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_pll2_clk", NULL); 85862306a36Sopenharmony_ci 85962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_pll3_clk", "pll3_clk", 0, 86062306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_PLL3_CLK_ENB, 0, 86162306a36Sopenharmony_ci &_lock); 86262306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_pll3_clk", NULL); 86362306a36Sopenharmony_ci 86462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_tx125_clk", "gmii_pad_clk", 0, 86562306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_C125M_PAD_CLK_ENB, 0, 86662306a36Sopenharmony_ci &_lock); 86762306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_tx125_clk", NULL); 86862306a36Sopenharmony_ci 86962306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "ras_30m_fixed_clk", "pll5_clk", 0, 87062306a36Sopenharmony_ci 30000000); 87162306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_30m_clk", "ras_30m_fixed_clk", 0, 87262306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_C30M_CLK_ENB, 0, 87362306a36Sopenharmony_ci &_lock); 87462306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_30m_clk", NULL); 87562306a36Sopenharmony_ci 87662306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "ras_48m_fixed_clk", "pll5_clk", 0, 87762306a36Sopenharmony_ci 48000000); 87862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_48m_clk", "ras_48m_fixed_clk", 0, 87962306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_C48M_CLK_ENB, 0, 88062306a36Sopenharmony_ci &_lock); 88162306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_48m_clk", NULL); 88262306a36Sopenharmony_ci 88362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_ahb_clk", "ahb_clk", 0, 88462306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_ACLK_CLK_ENB, 0, 88562306a36Sopenharmony_ci &_lock); 88662306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_ahb_clk", NULL); 88762306a36Sopenharmony_ci 88862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_apb_clk", "apb_clk", 0, 88962306a36Sopenharmony_ci SPEAR1310_RAS_CLK_ENB, SPEAR1310_PCLK_CLK_ENB, 0, 89062306a36Sopenharmony_ci &_lock); 89162306a36Sopenharmony_ci clk_register_clkdev(clk, "ras_apb_clk", NULL); 89262306a36Sopenharmony_ci 89362306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "ras_plclk0_clk", NULL, 0, 89462306a36Sopenharmony_ci 50000000); 89562306a36Sopenharmony_ci 89662306a36Sopenharmony_ci clk = clk_register_fixed_rate(NULL, "ras_tx50_clk", NULL, 0, 50000000); 89762306a36Sopenharmony_ci 89862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "can0_clk", "apb_clk", 0, 89962306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_CAN0_CLK_ENB, 0, 90062306a36Sopenharmony_ci &_lock); 90162306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "c_can_platform.0"); 90262306a36Sopenharmony_ci 90362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "can1_clk", "apb_clk", 0, 90462306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_CAN1_CLK_ENB, 0, 90562306a36Sopenharmony_ci &_lock); 90662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "c_can_platform.1"); 90762306a36Sopenharmony_ci 90862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_smii0_clk", "ras_ahb_clk", 0, 90962306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_MII0_CLK_ENB, 0, 91062306a36Sopenharmony_ci &_lock); 91162306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5c400000.eth"); 91262306a36Sopenharmony_ci 91362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_smii1_clk", "ras_ahb_clk", 0, 91462306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_MII1_CLK_ENB, 0, 91562306a36Sopenharmony_ci &_lock); 91662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5c500000.eth"); 91762306a36Sopenharmony_ci 91862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_smii2_clk", "ras_ahb_clk", 0, 91962306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_MII2_CLK_ENB, 0, 92062306a36Sopenharmony_ci &_lock); 92162306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5c600000.eth"); 92262306a36Sopenharmony_ci 92362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ras_rgmii_clk", "ras_ahb_clk", 0, 92462306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_GMII_CLK_ENB, 0, 92562306a36Sopenharmony_ci &_lock); 92662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5c700000.eth"); 92762306a36Sopenharmony_ci 92862306a36Sopenharmony_ci clk = clk_register_mux(NULL, "smii_rgmii_phy_mclk", 92962306a36Sopenharmony_ci smii_rgmii_phy_parents, 93062306a36Sopenharmony_ci ARRAY_SIZE(smii_rgmii_phy_parents), 93162306a36Sopenharmony_ci CLK_SET_RATE_NO_REPARENT, SPEAR1310_RAS_CTRL_REG1, 93262306a36Sopenharmony_ci SPEAR1310_SMII_RGMII_PHY_CLK_SHIFT, 93362306a36Sopenharmony_ci SPEAR1310_PHY_CLK_MASK, 0, &_lock); 93462306a36Sopenharmony_ci clk_register_clkdev(clk, "stmmacphy.1", NULL); 93562306a36Sopenharmony_ci clk_register_clkdev(clk, "stmmacphy.2", NULL); 93662306a36Sopenharmony_ci clk_register_clkdev(clk, "stmmacphy.4", NULL); 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_ci clk = clk_register_mux(NULL, "rmii_phy_mclk", rmii_phy_parents, 93962306a36Sopenharmony_ci ARRAY_SIZE(rmii_phy_parents), CLK_SET_RATE_NO_REPARENT, 94062306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG1, SPEAR1310_RMII_PHY_CLK_SHIFT, 94162306a36Sopenharmony_ci SPEAR1310_PHY_CLK_MASK, 0, &_lock); 94262306a36Sopenharmony_ci clk_register_clkdev(clk, "stmmacphy.3", NULL); 94362306a36Sopenharmony_ci 94462306a36Sopenharmony_ci clk = clk_register_mux(NULL, "uart1_mclk", uart_parents, 94562306a36Sopenharmony_ci ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT, 94662306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART1_CLK_SHIFT, 94762306a36Sopenharmony_ci SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock); 94862306a36Sopenharmony_ci clk_register_clkdev(clk, "uart1_mclk", NULL); 94962306a36Sopenharmony_ci 95062306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0, 95162306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART1_CLK_ENB, 0, 95262306a36Sopenharmony_ci &_lock); 95362306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5c800000.serial"); 95462306a36Sopenharmony_ci 95562306a36Sopenharmony_ci clk = clk_register_mux(NULL, "uart2_mclk", uart_parents, 95662306a36Sopenharmony_ci ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT, 95762306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART2_CLK_SHIFT, 95862306a36Sopenharmony_ci SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock); 95962306a36Sopenharmony_ci clk_register_clkdev(clk, "uart2_mclk", NULL); 96062306a36Sopenharmony_ci 96162306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uart2_clk", "uart2_mclk", 0, 96262306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART2_CLK_ENB, 0, 96362306a36Sopenharmony_ci &_lock); 96462306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5c900000.serial"); 96562306a36Sopenharmony_ci 96662306a36Sopenharmony_ci clk = clk_register_mux(NULL, "uart3_mclk", uart_parents, 96762306a36Sopenharmony_ci ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT, 96862306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART3_CLK_SHIFT, 96962306a36Sopenharmony_ci SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock); 97062306a36Sopenharmony_ci clk_register_clkdev(clk, "uart3_mclk", NULL); 97162306a36Sopenharmony_ci 97262306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uart3_clk", "uart3_mclk", 0, 97362306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART3_CLK_ENB, 0, 97462306a36Sopenharmony_ci &_lock); 97562306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5ca00000.serial"); 97662306a36Sopenharmony_ci 97762306a36Sopenharmony_ci clk = clk_register_mux(NULL, "uart4_mclk", uart_parents, 97862306a36Sopenharmony_ci ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT, 97962306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART4_CLK_SHIFT, 98062306a36Sopenharmony_ci SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock); 98162306a36Sopenharmony_ci clk_register_clkdev(clk, "uart4_mclk", NULL); 98262306a36Sopenharmony_ci 98362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uart4_clk", "uart4_mclk", 0, 98462306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART4_CLK_ENB, 0, 98562306a36Sopenharmony_ci &_lock); 98662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5cb00000.serial"); 98762306a36Sopenharmony_ci 98862306a36Sopenharmony_ci clk = clk_register_mux(NULL, "uart5_mclk", uart_parents, 98962306a36Sopenharmony_ci ARRAY_SIZE(uart_parents), CLK_SET_RATE_NO_REPARENT, 99062306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_UART5_CLK_SHIFT, 99162306a36Sopenharmony_ci SPEAR1310_RAS_UART_CLK_MASK, 0, &_lock); 99262306a36Sopenharmony_ci clk_register_clkdev(clk, "uart5_mclk", NULL); 99362306a36Sopenharmony_ci 99462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "uart5_clk", "uart5_mclk", 0, 99562306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART5_CLK_ENB, 0, 99662306a36Sopenharmony_ci &_lock); 99762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5cc00000.serial"); 99862306a36Sopenharmony_ci 99962306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c1_mclk", i2c_parents, 100062306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 100162306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C1_CLK_SHIFT, 100262306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 100362306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c1_mclk", NULL); 100462306a36Sopenharmony_ci 100562306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c1_clk", "i2c1_mclk", 0, 100662306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C1_CLK_ENB, 0, 100762306a36Sopenharmony_ci &_lock); 100862306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5cd00000.i2c"); 100962306a36Sopenharmony_ci 101062306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c2_mclk", i2c_parents, 101162306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 101262306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C2_CLK_SHIFT, 101362306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 101462306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c2_mclk", NULL); 101562306a36Sopenharmony_ci 101662306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c2_clk", "i2c2_mclk", 0, 101762306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C2_CLK_ENB, 0, 101862306a36Sopenharmony_ci &_lock); 101962306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5ce00000.i2c"); 102062306a36Sopenharmony_ci 102162306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c3_mclk", i2c_parents, 102262306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 102362306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C3_CLK_SHIFT, 102462306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 102562306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c3_mclk", NULL); 102662306a36Sopenharmony_ci 102762306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c3_clk", "i2c3_mclk", 0, 102862306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C3_CLK_ENB, 0, 102962306a36Sopenharmony_ci &_lock); 103062306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5cf00000.i2c"); 103162306a36Sopenharmony_ci 103262306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c4_mclk", i2c_parents, 103362306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 103462306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C4_CLK_SHIFT, 103562306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 103662306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c4_mclk", NULL); 103762306a36Sopenharmony_ci 103862306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c4_clk", "i2c4_mclk", 0, 103962306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C4_CLK_ENB, 0, 104062306a36Sopenharmony_ci &_lock); 104162306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5d000000.i2c"); 104262306a36Sopenharmony_ci 104362306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c5_mclk", i2c_parents, 104462306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 104562306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C5_CLK_SHIFT, 104662306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 104762306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c5_mclk", NULL); 104862306a36Sopenharmony_ci 104962306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c5_clk", "i2c5_mclk", 0, 105062306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C5_CLK_ENB, 0, 105162306a36Sopenharmony_ci &_lock); 105262306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5d100000.i2c"); 105362306a36Sopenharmony_ci 105462306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c6_mclk", i2c_parents, 105562306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 105662306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C6_CLK_SHIFT, 105762306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 105862306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c6_mclk", NULL); 105962306a36Sopenharmony_ci 106062306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c6_clk", "i2c6_mclk", 0, 106162306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C6_CLK_ENB, 0, 106262306a36Sopenharmony_ci &_lock); 106362306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5d200000.i2c"); 106462306a36Sopenharmony_ci 106562306a36Sopenharmony_ci clk = clk_register_mux(NULL, "i2c7_mclk", i2c_parents, 106662306a36Sopenharmony_ci ARRAY_SIZE(i2c_parents), CLK_SET_RATE_NO_REPARENT, 106762306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_I2C7_CLK_SHIFT, 106862306a36Sopenharmony_ci SPEAR1310_I2C_CLK_MASK, 0, &_lock); 106962306a36Sopenharmony_ci clk_register_clkdev(clk, "i2c7_mclk", NULL); 107062306a36Sopenharmony_ci 107162306a36Sopenharmony_ci clk = clk_register_gate(NULL, "i2c7_clk", "i2c7_mclk", 0, 107262306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C7_CLK_ENB, 0, 107362306a36Sopenharmony_ci &_lock); 107462306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5d300000.i2c"); 107562306a36Sopenharmony_ci 107662306a36Sopenharmony_ci clk = clk_register_mux(NULL, "ssp1_mclk", ssp1_parents, 107762306a36Sopenharmony_ci ARRAY_SIZE(ssp1_parents), CLK_SET_RATE_NO_REPARENT, 107862306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_SSP1_CLK_SHIFT, 107962306a36Sopenharmony_ci SPEAR1310_SSP1_CLK_MASK, 0, &_lock); 108062306a36Sopenharmony_ci clk_register_clkdev(clk, "ssp1_mclk", NULL); 108162306a36Sopenharmony_ci 108262306a36Sopenharmony_ci clk = clk_register_gate(NULL, "ssp1_clk", "ssp1_mclk", 0, 108362306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_SSP1_CLK_ENB, 0, 108462306a36Sopenharmony_ci &_lock); 108562306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "5d400000.spi"); 108662306a36Sopenharmony_ci 108762306a36Sopenharmony_ci clk = clk_register_mux(NULL, "pci_mclk", pci_parents, 108862306a36Sopenharmony_ci ARRAY_SIZE(pci_parents), CLK_SET_RATE_NO_REPARENT, 108962306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_PCI_CLK_SHIFT, 109062306a36Sopenharmony_ci SPEAR1310_PCI_CLK_MASK, 0, &_lock); 109162306a36Sopenharmony_ci clk_register_clkdev(clk, "pci_mclk", NULL); 109262306a36Sopenharmony_ci 109362306a36Sopenharmony_ci clk = clk_register_gate(NULL, "pci_clk", "pci_mclk", 0, 109462306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_PCI_CLK_ENB, 0, 109562306a36Sopenharmony_ci &_lock); 109662306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "pci"); 109762306a36Sopenharmony_ci 109862306a36Sopenharmony_ci clk = clk_register_mux(NULL, "tdm1_mclk", tdm_parents, 109962306a36Sopenharmony_ci ARRAY_SIZE(tdm_parents), CLK_SET_RATE_NO_REPARENT, 110062306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_TDM1_CLK_SHIFT, 110162306a36Sopenharmony_ci SPEAR1310_TDM_CLK_MASK, 0, &_lock); 110262306a36Sopenharmony_ci clk_register_clkdev(clk, "tdm1_mclk", NULL); 110362306a36Sopenharmony_ci 110462306a36Sopenharmony_ci clk = clk_register_gate(NULL, "tdm1_clk", "tdm1_mclk", 0, 110562306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM1_CLK_ENB, 0, 110662306a36Sopenharmony_ci &_lock); 110762306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "tdm_hdlc.0"); 110862306a36Sopenharmony_ci 110962306a36Sopenharmony_ci clk = clk_register_mux(NULL, "tdm2_mclk", tdm_parents, 111062306a36Sopenharmony_ci ARRAY_SIZE(tdm_parents), CLK_SET_RATE_NO_REPARENT, 111162306a36Sopenharmony_ci SPEAR1310_RAS_CTRL_REG0, SPEAR1310_TDM2_CLK_SHIFT, 111262306a36Sopenharmony_ci SPEAR1310_TDM_CLK_MASK, 0, &_lock); 111362306a36Sopenharmony_ci clk_register_clkdev(clk, "tdm2_mclk", NULL); 111462306a36Sopenharmony_ci 111562306a36Sopenharmony_ci clk = clk_register_gate(NULL, "tdm2_clk", "tdm2_mclk", 0, 111662306a36Sopenharmony_ci SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM2_CLK_ENB, 0, 111762306a36Sopenharmony_ci &_lock); 111862306a36Sopenharmony_ci clk_register_clkdev(clk, NULL, "tdm_hdlc.1"); 111962306a36Sopenharmony_ci} 1120