[9610] clk: samsung: Added exynos9610 clk driver.
authorJeonghoon Jang <jnghn.jang@samsung.com>
Fri, 8 Sep 2017 01:06:02 +0000 (10:06 +0900)
committerJaehyoung Choi <jkkkkk.choi@samsung.com>
Thu, 3 May 2018 11:35:42 +0000 (20:35 +0900)
Change-Id: I883a7fb07ad763dc593d15fa605786e06c7feea0
Signed-off-by: Jeonghoon Jang <jnghn.jang@samsung.com>
drivers/clk/samsung/Makefile
drivers/clk/samsung/clk-exynos9610.c [new file with mode: 0644]
include/dt-bindings/clock/exynos9610.h [new file with mode: 0644]

index 23835001e8bdb5007efc9b1e66cd8c9557fd6de1..a0180cd5d7bb8996725c2520d698957531527a01 100644 (file)
@@ -10,11 +10,17 @@ obj-$(CONFIG_SOC_EXYNOS5250)        += clk-exynos5250.o
 obj-$(CONFIG_SOC_EXYNOS5260)   += clk-exynos5260.o
 obj-$(CONFIG_SOC_EXYNOS5410)   += clk-exynos5410.o
 obj-$(CONFIG_SOC_EXYNOS5420)   += clk-exynos5420.o
-obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos5433.o
 obj-$(CONFIG_SOC_EXYNOS5440)   += clk-exynos5440.o
 obj-$(CONFIG_EXYNOS_AUDSS_CLK_CON) += clk-exynos-audss.o
-obj-$(CONFIG_ARCH_EXYNOS)      += clk-exynos-clkout.o
+ifeq ($(CONFIG_COMPOSITE_CLK_SAMSUNG), y)
+       obj-y                           += composite.o
+       obj-$(CONFIG_SOC_EXYNOS9610)    += clk-exynos9610.o
+else
+       obj-$(CONFIG_COMMON_CLK)        += clk.o clk-pll.o clk-cpu.o
+obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos5433.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos7.o
+endif
+obj-$(CONFIG_ARCH_EXYNOS)      += clk-exynos-clkout.o
 obj-$(CONFIG_S3C2410_COMMON_CLK)+= clk-s3c2410.o
 obj-$(CONFIG_S3C2410_COMMON_DCLK)+= clk-s3c2410-dclk.o
 obj-$(CONFIG_S3C2412_COMMON_CLK)+= clk-s3c2412.o
diff --git a/drivers/clk/samsung/clk-exynos9610.c b/drivers/clk/samsung/clk-exynos9610.c
new file mode 100644 (file)
index 0000000..05b45d1
--- /dev/null
@@ -0,0 +1,376 @@
+/*
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Common Clock Framework support for Exynos9610 SoC.
+ */
+
+#include <linux/clk.h>
+#include <linux/clkdev.h>
+#include <linux/clk-provider.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <soc/samsung/cal-if.h>
+#include <dt-bindings/clock/exynos9610.h>
+
+#include "../../soc/samsung/cal-if/exynos9610/cmucal-vclk.h"
+#include "../../soc/samsung/cal-if/exynos9610/cmucal-node.h"
+#include "../../soc/samsung/cal-if/exynos9610/cmucal-qch.h"
+#include "../../soc/samsung/cal-if/exynos9610/clkout_exynos9610.h"
+#include "composite.h"
+
+static struct samsung_clk_provider *exynos9610_clk_provider;
+/*
+ * list of controller registers to be saved and restored during a
+ * suspend/resume cycle.
+ */
+/* fixed rate clocks generated outside the soc */
+struct samsung_fixed_rate exynos9610_fixed_rate_ext_clks[] __initdata = {
+       FRATE(OSCCLK, "fin_pll", NULL, 0, 26000000),
+};
+
+/* HWACG VCLK */
+struct init_vclk exynos9610_apm_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_APM_BUS, MUX_CLKCMU_APM_BUS_USER, "UMUX_CLKCMU_APM_BUS", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_GREBEINTEGRATION_QCH_GREBE, GREBEINTEGRATION_QCH_GREBE, "GATE_GREBEINTEGRATION_QCH_GREBE", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_GREBEINTEGRATION_QCH_DBG, GREBEINTEGRATION_QCH_DBG, "GATE_GREBEINTEGRATION_QCH_DBG", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_INTMEM_QCH, INTMEM_QCH, "GATE_INTMEM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_AP2CP_QCH, MAILBOX_AP2CP_QCH, "GATE_MAILBOX_AP2CP_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_AP2CP_S_QCH, MAILBOX_AP2CP_S_QCH, "GATE_MAILBOX_AP2CP_S_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_AP2GNSS_QCH, MAILBOX_AP2GNSS_QCH, "GATE_MAILBOX_AP2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_AP2SHUB_QCH, MAILBOX_AP2SHUB_QCH, "GATE_MAILBOX_AP2SHUB_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_AP2WLBT_QCH, MAILBOX_AP2WLBT_QCH, "GATE_MAILBOX_AP2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_APM2AP_QCH, MAILBOX_APM2AP_QCH, "GATE_MAILBOX_APM2AP_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_APM2CP_QCH, MAILBOX_APM2CP_QCH, "GATE_MAILBOX_APM2CP_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_APM2GNSS_QCH, MAILBOX_APM2GNSS_QCH, "GATE_MAILBOX_APM2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_APM2SHUB_QCH, MAILBOX_APM2SHUB_QCH, "GATE_MAILBOX_APM2SHUB_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_APM2WLBT_QCH, MAILBOX_APM2WLBT_QCH, "GATE_MAILBOX_APM2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_CP2GNSS_QCH, MAILBOX_CP2GNSS_QCH, "GATE_MAILBOX_CP2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_CP2SHUB_QCH, MAILBOX_CP2SHUB_QCH, "GATE_MAILBOX_CP2SHUB_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_CP2WLBT_QCH, MAILBOX_CP2WLBT_QCH, "GATE_MAILBOX_CP2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_SHUB2GNSS_QCH, MAILBOX_SHUB2GNSS_QCH, "GATE_MAILBOX_SHUB2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_SHUB2WLBT_QCH, MAILBOX_SHUB2WLBT_QCH, "GATE_MAILBOX_SHUB2WLBT_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_WLBT2ABOX_QCH, MAILBOX_WLBT2ABOX_QCH, "GATE_MAILBOX_WLBT2ABOX_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MAILBOX_WLBT2GNSS_QCH, MAILBOX_WLBT2GNSS_QCH, "GATE_MAILBOX_WLBT2GNSS_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PEM_QCH, PEM_QCH, "GATE_PEM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SPEEDY_APM_QCH, SPEEDY_APM_QCH, "GATE_SPEEDY_APM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SYSREG_APM_QCH, SYSREG_APM_QCH, "GATE_SYSREG_APM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_WDT_APM_QCH, WDT_APM_QCH, "GATE_WDT_APM_QCH", "UMUX_CLKCMU_APM_BUS", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_cam_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_CAM_BUS, MUX_CLKCMU_CAM_BUS_USER, "UMUX_CLKCMU_CAM_BUS", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS0, IS6P10P0_CAM_QCH_S_CAM_CSIS0, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS0", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS1, IS6P10P0_CAM_QCH_S_CAM_CSIS1, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS1", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS2, IS6P10P0_CAM_QCH_S_CAM_CSIS2, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS2", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS3, IS6P10P0_CAM_QCH_S_CAM_CSIS3, "GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS3", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_3AA, IS6P10P0_CAM_QCH_S_CAM_3AA, "GATE_IS6P10P0_CAM_QCH_S_CAM_3AA", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_SMMU, IS6P10P0_CAM_QCH_S_CAM_SMMU, "GATE_IS6P10P0_CAM_QCH_S_CAM_SMMU", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_CORE, IS6P10P0_CAM_QCH_S_CAM_PDP_CORE, "GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_CORE", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_DMA, IS6P10P0_CAM_QCH_S_CAM_PDP_DMA, "GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_DMA", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_CAM_QCH_S_CAM_RDMA, IS6P10P0_CAM_QCH_S_CAM_RDMA, "GATE_IS6P10P0_CAM_QCH_S_CAM_RDMA", "UMUX_CLKCMU_CAM_BUS", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_cmgp_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(MUX_CMGP_ADC, MUX_CLK_CMGP_ADC, "MUX_CMGP_ADC", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_CMGP_I2C, MUX_CLK_CMGP_I2C, "MUX_CMGP_I2C", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_CMGP_USI00, MUX_CLK_CMGP_USI00, "MUX_CMGP_USI00", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_CMGP_USI01, MUX_CLK_CMGP_USI01, "MUX_CMGP_USI01", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_CMGP_USI02, MUX_CLK_CMGP_USI02, "MUX_CMGP_USI02", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_CMGP_USI03, MUX_CLK_CMGP_USI03, "MUX_CMGP_USI03", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_CMGP_USI04, MUX_CLK_CMGP_USI04, "MUX_CMGP_USI04", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ADC_CMGP_QCH_S0, ADC_CMGP_QCH_S0, "GATE_ADC_CMGP_QCH_S0", "MUX_CMGP_ADC", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ADC_CMGP_QCH_S1, ADC_CMGP_QCH_S1, "GATE_ADC_CMGP_QCH_S1", "MUX_CMGP_ADC", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ADC_CMGP_QCH_ADC, ADC_CMGP_QCH_ADC, "GATE_ADC_CMGP_QCH_ADC", "MUX_CMGP_ADC", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_CMGP00_QCH, I2C_CMGP00_QCH, "GATE_I2C_CMGP00_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_CMGP01_QCH, I2C_CMGP01_QCH, "GATE_I2C_CMGP01_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_CMGP02_QCH, I2C_CMGP02_QCH, "GATE_I2C_CMGP02_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_CMGP03_QCH, I2C_CMGP03_QCH, "GATE_I2C_CMGP03_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_CMGP04_QCH, I2C_CMGP04_QCH, "GATE_I2C_CMGP04_QCH", "MUX_CMGP_I2C", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI_CMGP00_QCH, USI_CMGP00_QCH, "GATE_USI_CMGP00_QCH", "MUX_CMGP_USI00", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI_CMGP01_QCH, USI_CMGP01_QCH, "GATE_USI_CMGP01_QCH", "MUX_CMGP_USI01", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI_CMGP02_QCH, USI_CMGP02_QCH, "GATE_USI_CMGP02_QCH", "MUX_CMGP_USI02", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI_CMGP03_QCH, USI_CMGP03_QCH, "GATE_USI_CMGP03_QCH", "MUX_CMGP_USI03", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI_CMGP04_QCH, USI_CMGP04_QCH, "GATE_USI_CMGP04_QCH", "MUX_CMGP_USI04", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_top_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS0, DFTMUX_TOP_QCH_CLK_CSIS0, "GATE_DFTMUX_TOP_QCH_CLK_CSIS0", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS1, DFTMUX_TOP_QCH_CLK_CSIS1, "GATE_DFTMUX_TOP_QCH_CLK_CSIS1", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS2, DFTMUX_TOP_QCH_CLK_CSIS2, "GATE_DFTMUX_TOP_QCH_CLK_CSIS2", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DFTMUX_TOP_QCH_CLK_CSIS3, DFTMUX_TOP_QCH_CLK_CSIS3, "GATE_DFTMUX_TOP_QCH_CLK_CSIS3", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_OTP_QCH, OTP_QCH, "GATE_OTP_QCH", NULL, 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_core_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(MUX_CORE_GIC, MUX_CLK_CORE_GIC, "MUX_CORE_GIC", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_GIC400_AIHWACG_QCH, GIC400_AIHWACG_QCH, "GATE_GIC400_AIHWACG_QCH", "MUX_CORE_GIC", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PDMA_CORE_QCH, PDMA_CORE_QCH, "GATE_PDMA_CORE_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PPFW_CORE_MEM0_QCH, PPFW_CORE_MEM0_QCH, "GATE_PPFW_CORE_MEM0_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PPFW_CORE_MEM1_QCH, PPFW_CORE_MEM1_QCH, "GATE_PPFW_CORE_MEM1_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PPFW_CORE_PERI_QCH, PPFW_CORE_PERI_QCH, "GATE_PPFW_CORE_PERI_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SIREX_QCH, SIREX_QCH, "GATE_SIREX_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SPDMA_CORE_QCH, SPDMA_CORE_QCH, "GATE_SPDMA_CORE_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_TREX_D_CORE_QCH, TREX_D_CORE_QCH, "GATE_TREX_D_CORE_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_TREX_D_NRT_QCH, TREX_D_NRT_QCH, "GATE_TREX_D_NRT_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_TREX_P_CORE_QCH, TREX_P_CORE_QCH, "GATE_TREX_P_CORE_QCH", NULL, 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_dispaud_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(MUX_AUD_FM, MUX_CLK_AUD_FM, "MUX_AUD_FM", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_DISPAUD_BUS, MUX_CLKCMU_DISPAUD_DISP, "MUX_CLKCMU_DISPAUD_DISP", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_CPU, ABOX_QCH_CPU, "GATE_ABOX_QCH_CPU", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_S_ACLK, ABOX_QCH_S_ACLK, "GATE_ABOX_QCH_S_ACLK", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_S_BCLK0, ABOX_QCH_S_BCLK0, "GATE_ABOX_QCH_S_BCLK0", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_S_BCLK2, ABOX_QCH_S_BCLK2, "GATE_ABOX_QCH_S_BCLK2", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_S_BCLK1, ABOX_QCH_S_BCLK1, "GATE_ABOX_QCH_S_BCLK1", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_FM, ABOX_QCH_FM, "GATE_ABOX_QCH_FM", "MUX_AUD_FM", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_ABOX_QCH_S_BCLK_DSIF, ABOX_QCH_S_BCLK_DSIF, "GATE_ABOX_QCH_S_BCLK_DSIF", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DPU_QCH_S_DPP, DPU_QCH_S_DPP, "GATE_DPU_QCH_S_DPP", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DPU_QCH_S_DMA, DPU_QCH_S_DMA, "GATE_DPU_QCH_S_DMA", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DPU_QCH_S_DECON, DPU_QCH_S_DECON, "GATE_DPU_QCH_S_DECON", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SMMU_ABOX_QCH, SMMU_ABOX_QCH, "GATE_SMMU_ABOX_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SMMU_DPU_QCH, SMMU_DPU_QCH, "GATE_SMMU_DPU_QCH", "MUX_CLKCMU_DISPAUD_DISP", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_WDT_AUD_QCH, WDT_AUD_QCH, "GATE_WDT_AUD_QCH", NULL, 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_fsys_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_FSYS_BUS, MUX_CLKCMU_FSYS_BUS_USER, "MUX_CLKCMU_FSYS_BUS_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_FSYS_MMC_EMBD, MUX_CLKCMU_FSYS_MMC_EMBD_USER, "MUX_CLKCMU_FSYS_MMC_EMBD_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_FSYS_MMC_CARD, MUX_CLKCMU_FSYS_MMC_CARD_USER, "MUX_CLKCMU_FSYS_MMC_CARD_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_FSYS_UFS_EMBD, MUX_CLKCMU_FSYS_UFS_EMBD_USER, "MUX_CLKCMU_FSYS_UFS_EMBD_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_MMC_CARD_QCH, MMC_CARD_QCH, "GATE_MMC_CARD_QCH", "MUX_CLKCMU_FSYS_MMC_CARD_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MMC_EMBD_QCH, MMC_EMBD_QCH, "GATE_MMC_EMBD_QCH", "MUX_CLKCMU_FSYS_MMC_EMBD_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_RTIC_QCH, RTIC_QCH, "GATE_RTIC_QCH", "MUX_CLKCMU_FSYS_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SSS_QCH, SSS_QCH, "GATE_SSS_QCH", "MUX_CLKCMU_FSYS_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_UFS_EMBD_QCH_UFS, UFS_EMBD_QCH_UFS, "GATE_UFS_EMBD_QCH_UFS", "MUX_CLKCMU_FSYS_UFS_EMBD_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_UFS_EMBD_QCH_FMP, UFS_EMBD_QCH_FMP, "GATE_UFS_EMBD_QCH_FMP", "MUX_CLKCMU_FSYS_UFS_EMBD_USER", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_g2d_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_G2D_G2D, MUX_CLKCMU_G2D_G2D_USER, "MUX_CLKCMU_G2D_G2D_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_G2D_MSCL, MUX_CLKCMU_G2D_MSCL_USER, "MUX_CLKCMU_G2D_MSCL_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_G2D_QCH, G2D_QCH, "GATE_G2D_QCH", "MUX_CLKCMU_G2D_G2D_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_JPEG_QCH, JPEG_QCH, "GATE_JPEG_QCH", "MUX_CLKCMU_G2D_MSCL_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MSCL_QCH, MSCL_QCH, "GATE_MSCL_QCH", "MUX_CLKCMU_G2D_MSCL_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SYSMMU_G2D_QCH, SYSMMU_G2D_QCH, "GATE_SYSMMU_G2D_QCH", "MUX_CLKCMU_G2D_G2D_USER", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_g3d_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(GATE_G3D_QCH, G3D_QCH, "GATE_G3D_QCH", NULL, 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_isp_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_ISP_BUS, MUX_CLKCMU_ISP_BUS_USER, "MUX_CLKCMU_ISP_BUS_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_ISP_GDC, MUX_CLKCMU_ISP_GDC_USER, "MUX_CLKCMU_ISP_GDC_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_ISP_VRA, MUX_CLKCMU_ISP_VRA_USER, "MUX_CLKCMU_ISP_VRA_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_ISP, IS6P10P0_ISP_QCH_S_ISP_ISP, "GATE_IS6P10P0_ISP_QCH_S_ISP_ISP", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_MCSC, IS6P10P0_ISP_QCH_S_ISP_MCSC, "GATE_IS6P10P0_ISP_QCH_S_ISP_MCSC", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_VRA, IS6P10P0_ISP_QCH_S_ISP_VRA, "GATE_IS6P10P0_ISP_QCH_S_ISP_VRA", "MUX_CLKCMU_ISP_VRA_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_GDC, IS6P10P0_ISP_QCH_S_ISP_GDC, "GATE_IS6P10P0_ISP_QCH_S_ISP_GDC", "MUX_CLKCMU_ISP_GDC_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0, IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0, "GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1, IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1, "GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1", "MUX_CLKCMU_ISP_BUS_USER", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_mfc_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_MFC_MFC, MUX_CLKCMU_MFC_MFC_USER, "MUX_CLKCMU_MFC_MFC_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_MFC_WFD, MUX_CLKCMU_MFC_WFD_USER, "MUX_CLKCMU_MFC_WFD_USER", "MUX_CLKCMU_MFC_MFC_USER", 0, 0, NULL),
+       HWACG_VCLK(GATE_MFC_QCH, MFC_QCH, "GATE_MFC_QCH", "MUX_CLKCMU_MFC_MFC_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SYSMMU_MFCD0_QCH, SYSMMU_MFCD0_QCH, "GATE_SYSMMU_MFCD0_QCH", "MUX_CLKCMU_MFC_MFC_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SYSMMU_MFCD1_QCH, SYSMMU_MFCD1_QCH, "GATE_SYSMMU_MFCD1_QCH", "MUX_CLKCMU_MFC_MFC_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_WFD_QCH, WFD_QCH, "GATE_WFD_QCH", "MUX_CLKCMU_MFC_WFD_USER", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_peri_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_PERI_UART, MUX_CLKCMU_PERI_UART_USER, "UMUX_CLKCMU_PERI_UART", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_CAMI2C_0_QCH, CAMI2C_0_QCH, "GATE_CAMI2C_0_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_CAMI2C_1_QCH, CAMI2C_1_QCH, "GATE_CAMI2C_1_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_CAMI2C_2_QCH, CAMI2C_2_QCH, "GATE_CAMI2C_2_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_CAMI2C_3_QCH, CAMI2C_3_QCH, "GATE_CAMI2C_3_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_0_QCH, I2C_0_QCH, "GATE_I2C_0_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_1_QCH, I2C_1_QCH, "GATE_I2C_1_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_2_QCH, I2C_2_QCH, "GATE_I2C_2_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_3_QCH, I2C_3_QCH, "GATE_I2C_3_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_4_QCH, I2C_4_QCH, "GATE_I2C_4_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_5_QCH, I2C_5_QCH, "GATE_I2C_5_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_6_QCH, I2C_6_QCH, "GATE_I2C_6_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_MCT_QCH, MCT_QCH, "GATE_MCT_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_OTP_CON_TOP_QCH, OTP_CON_TOP_QCH, "GATE_OTP_CON_TOP_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PWM_MOTOR_QCH, PWM_MOTOR_QCH, "GATE_PWM_MOTOR_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SPI_0_QCH, SPI_0_QCH, "GATE_SPI_0_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SPI_1_QCH, SPI_1_QCH, "GATE_SPI_1_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_SPI_2_QCH, SPI_2_QCH, "GATE_SPI_2_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_UART_QCH, UART_QCH, "GATE_UART_QCH", "UMUX_CLKCMU_PERI_UART", 0, 0, "console-pclk0"),
+       HWACG_VCLK(GATE_USI00_I2C_QCH, USI00_I2C_QCH, "GATE_USI00_I2C_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI00_USI_QCH, USI00_USI_QCH, "GATE_USI00_USI_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_WDT_CLUSTER0_QCH, WDT_CLUSTER0_QCH, "GATE_WDT_CLUSTER0_QCH", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_WDT_CLUSTER1_QCH, WDT_CLUSTER1_QCH, "GATE_WDT_CLUSTER1_QCH", NULL, 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_shub_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_SHUB_BUS, MUX_CLKCMU_SHUB_BUS_USER, "MUX_CLKCMU_SHUB_BUS_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(MUX_SHUB_I2C, MUX_CLK_SHUB_I2C, "MUX_SHUB_I2C", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_SHUB_USI00, MUX_CLK_SHUB_USI00, "MUX_SHUB_USI00", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(MUX_SHUB_USI01, MUX_CLK_SHUB_USI01, "MUX_SHUB_USI01", NULL, 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_CM4_SHUB_QCH, CM4_SHUB_QCH, "GATE_CM4_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_I2C_SHUB00_QCH, I2C_SHUB00_QCH, "GATE_I2C_SHUB00_QCH", "MUX_SHUB_I2C", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PDMA_SHUB_QCH, PDMA_SHUB_QCH, "GATE_PDMA_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_PWM_SHUB_QCH, PWM_SHUB_QCH, "GATE_PWM_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_TIMER_SHUB_QCH, TIMER_SHUB_QCH, "GATE_TIMER_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USI_SHUB00_QCH, USI_SHUB00_QCH, "GATE_USI_SHUB00_QCH", "MUX_SHUB_USI00", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_WDT_SHUB_QCH, WDT_SHUB_QCH, "GATE_WDT_SHUB_QCH", "MUX_CLKCMU_SHUB_BUS_USER", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_usb_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_USB_USBDRD30, MUX_CLKCMU_USB_USB30DRD, "MUX_CLKCMU_USB_USB30DRD", NULL, 0, 0, NULL),
+       HWACG_VCLK(UMUX_CLKCMU_USB_DPGTC, MUX_CLKCMU_USB_DPGTC, "MUX_CLKCMU_USB_DPGTC", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_DP_LINK_QCH_DP, DP_LINK_QCH_DP, "GATE_DP_LINK_QCH_DP", "MUX_CLKCMU_USB_DPGTC", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_DP_LINK_QCH_GTC, DP_LINK_QCH_GTC, "GATE_DP_LINK_QCH_GTC", "MUX_CLKCMU_USB_DPGTC", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USB30DRD_QCH_USB30, USB30DRD_QCH_USB30, "GATE_USB30DRD_QCH_USB30", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USB30DRD_QCH_USBPHY_30CTRL_0, USB30DRD_QCH_USBPHY_30CTRL_0, "GATE_USB30DRD_QCH_USBPHY_30CTRL_0", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USB30DRD_QCH_USBPHY_30CTRL_1, USB30DRD_QCH_USBPHY_30CTRL_1, "GATE_USB30DRD_QCH_USBPHY_30CTRL_1", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_USB30DRD_QCH_USBPHY_20CTRL, USB30DRD_QCH_USBPHY_20CTRL, "GATE_USB30DRD_QCH_USBPHY_20CTRL", "MUX_CLKCMU_USB_USB30DRD", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_vipx1_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_VIPX1_BUS, MUX_CLKCMU_VIPX1_BUS_USER, "MUX_CLKCMU_VIPX1_BUS_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_SMMU_D_VIPX1_QCH, SMMU_D_VIPX1_QCH, "GATE_SMMU_D_VIPX1_QCH", "MUX_CLKCMU_VIPX1_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_VIPX1_QCH, VIPX1_QCH, "GATE_VIPX1_QCH", "MUX_CLKCMU_VIPX1_BUS_USER", 0, VCLK_GATE, NULL),
+};
+
+struct init_vclk exynos9610_vipx2_hwacg_vclks[] __initdata = {
+       HWACG_VCLK(UMUX_CLKCMU_VIPX2_BUS, MUX_CLKCMU_VIPX2_BUS_USER, "MUX_CLKCMU_VIPX2_BUS_USER", NULL, 0, 0, NULL),
+       HWACG_VCLK(GATE_SMMU_D_VIPX2_QCH, SMMU_D_VIPX2_QCH, "GATE_SMMU_D_VIPX2_QCH", "MUX_CLKCMU_VIPX2_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_VIPX2_QCH, VIPX2_QCH, "GATE_VIPX2_QCH", "MUX_CLKCMU_VIPX2_BUS_USER", 0, VCLK_GATE, NULL),
+       HWACG_VCLK(GATE_VIPX2_QCH_LOCAL, VIPX2_QCH_LOCAL, "GATE_VIPX2_QCH_LOCAL", "MUX_CLKCMU_VIPX2_BUS_USER", 0, VCLK_GATE, NULL),
+};
+
+/* Special VCLK */
+struct init_vclk exynos9610_dispaud_vclks[] __initdata = {
+       VCLK(DOUT_CLK_AUD_ACLK, DIV_CLK_AUD_BUS, "DOUT_CLK_AUD_ACLK", 0, 0, NULL),
+       VCLK(DOUT_CLK_AUD_AUDIF, DIV_CLK_AUD_AUDIF, "DOUT_CLK_AUD_AUDIF", 0, 0, NULL),
+       VCLK(DOUT_CLK_AUD_DSIF, DIV_CLK_AUD_DSIF, "DOUT_CLK_AUD_DSIF", 0, 0, NULL),
+       VCLK(DOUT_CLK_AUD_UAIF0, DIV_CLK_AUD_UAIF0, "DOUT_CLK_AUD_UAIF0", 0, 0, NULL),
+       VCLK(DOUT_CLK_AUD_UAIF1, DIV_CLK_AUD_UAIF1, "DOUT_CLK_AUD_UAIF1", 0, 0, NULL),
+       VCLK(DOUT_CLK_AUD_UAIF2, DIV_CLK_AUD_UAIF2, "DOUT_CLK_AUD_UAIF2", 0, 0, NULL),
+       VCLK(PLL_OUT_AUD, PLL_AUD, "PLL_OUT_AUD", 0, 0, NULL),
+};
+
+struct init_vclk exynos9610_cmgp_vclks[] __initdata = {
+       VCLK(CMGP00_USI, DIV_CLK_CMGP_USI00, "CMGP00_USI", 0, 0, NULL),
+       VCLK(CMGP01_USI, DIV_CLK_CMGP_USI01, "CMGP01_USI", 0, 0, NULL),
+       VCLK(CMGP02_USI, DIV_CLK_CMGP_USI02, "CMGP02_USI", 0, 0, NULL),
+       VCLK(CMGP03_USI, DIV_CLK_CMGP_USI03, "CMGP03_USI", 0, 0, NULL),
+       VCLK(CMGP04_USI, DIV_CLK_CMGP_USI04, "CMGP04_USI", 0, 0, NULL),
+       VCLK(CMGP_I2C, DIV_CLK_CMGP_I2C, "CMGP_I2C", 0, 0, NULL),
+       VCLK(CMGP_ADC, DIV_CLK_CMGP_ADC, "CMGP_ADC", 0, 0, NULL),
+};
+
+struct init_vclk exynos9610_fsys_vclks[] __initdata = {
+       VCLK(MMC_EMBD, CLKCMU_FSYS_MMC_EMBD, "MMC_EMBD", 0, 0, NULL),
+       VCLK(MMC_CARD, CLKCMU_FSYS_MMC_CARD, "MMC_CARD", 0, 0, NULL),
+       VCLK(UFS_EMBD, CLKCMU_FSYS_UFS_EMBD, "UFS_EMBD", 0, 0, NULL),
+};
+
+struct init_vclk exynos9610_usb_vclks[] __initdata = {
+       VCLK(USB30DRD, VCLK_CLKCMU_USB_USB30DRD, "USB30DRD", 0, 0, NULL),
+       VCLK(DP_LINK, VCLK_CLKCMU_USB_DPGTC, "DP_LINK", 0, 0, NULL),
+};
+
+struct init_vclk exynos9610_peri_vclks[] __initdata = {
+       VCLK(UART, CLKCMU_PERI_UART, "UART", 0, 0, "console-sclk0"),
+       VCLK(I2C, DIV_CLK_PERI_I2C, "I2C", 0, 0, NULL),
+       VCLK(SPI0, DIV_CLK_PERI_SPI0, "SPI0", 0, 0, NULL),
+       VCLK(SPI1, DIV_CLK_PERI_SPI1, "SPI1", 0, 0, NULL),
+       VCLK(SPI2, DIV_CLK_PERI_SPI2, "SPI2", 0, 0, NULL),
+       VCLK(USI_I2C, DIV_CLK_PERI_USI_I2C, "USI_I2C", 0, 0, NULL),
+       VCLK(USI_USI, DIV_CLK_PERI_USI_USI, "USI_USI", 0, 0, NULL),
+};
+
+struct init_vclk exynos9610_top_vclks[] __initdata = {
+       VCLK(CIS_CLK0, CLKCMU_CIS_CLK0, "CIS_CLK0", 0, 0, NULL),
+       VCLK(CIS_CLK1, CLKCMU_CIS_CLK1, "CIS_CLK1", 0, 0, NULL),
+       VCLK(CIS_CLK2, CLKCMU_CIS_CLK2, "CIS_CLK2", 0, 0, NULL),
+       VCLK(CIS_CLK3, CLKCMU_CIS_CLK3, "CIS_CLK3", 0, 0, NULL),
+};
+
+static struct init_vclk exynos9610_clkout_vclks[] __initdata = {
+       VCLK(OSC_NFC, VCLK_CLKOUT1, "OSC_NFC", 0, 0, NULL),
+       VCLK(OSC_AUD, VCLK_CLKOUT0, "OSC_AUD", 0, 0, NULL),
+};
+
+static __initdata struct of_device_id ext_clk_match[] = {
+       {.compatible = "samsung,exynos9610-oscclk", .data = (void *)0},
+       {},
+};
+
+void exynos9610_vclk_init(void)
+{
+       /* Common clock init */
+}
+
+/* register exynos9610 clocks */
+void __init exynos9610_clk_init(struct device_node *np)
+{
+       void __iomem *reg_base;
+       int ret;
+
+       if (np) {
+               reg_base = of_iomap(np, 0);
+               if (!reg_base)
+                       panic("%s: failed to map registers\n", __func__);
+       } else {
+               panic("%s: unable to determine soc\n", __func__);
+       }
+
+       ret = cal_if_init(np);
+       if (ret)
+               panic("%s: unable to initialize cal-if\n", __func__);
+
+       exynos9610_clk_provider = samsung_clk_init(np, reg_base, CLK_NR_CLKS);
+       if (!exynos9610_clk_provider)
+               panic("%s: unable to allocate context.\n", __func__);
+
+       samsung_register_of_fixed_ext(exynos9610_clk_provider, exynos9610_fixed_rate_ext_clks,
+                                         ARRAY_SIZE(exynos9610_fixed_rate_ext_clks),
+                                         ext_clk_match);
+       /* register HWACG vclk */
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_apm_hwacg_vclks, ARRAY_SIZE(exynos9610_apm_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_cam_hwacg_vclks, ARRAY_SIZE(exynos9610_cam_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_cmgp_hwacg_vclks, ARRAY_SIZE(exynos9610_cmgp_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_top_hwacg_vclks, ARRAY_SIZE(exynos9610_top_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_core_hwacg_vclks, ARRAY_SIZE(exynos9610_core_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_dispaud_hwacg_vclks, ARRAY_SIZE(exynos9610_dispaud_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_fsys_hwacg_vclks, ARRAY_SIZE(exynos9610_fsys_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_g2d_hwacg_vclks, ARRAY_SIZE(exynos9610_g2d_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_g3d_hwacg_vclks, ARRAY_SIZE(exynos9610_g3d_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_isp_hwacg_vclks, ARRAY_SIZE(exynos9610_isp_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_mfc_hwacg_vclks, ARRAY_SIZE(exynos9610_mfc_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_peri_hwacg_vclks, ARRAY_SIZE(exynos9610_peri_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_shub_hwacg_vclks, ARRAY_SIZE(exynos9610_shub_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_usb_hwacg_vclks, ARRAY_SIZE(exynos9610_usb_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_vipx1_hwacg_vclks, ARRAY_SIZE(exynos9610_vipx1_hwacg_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_vipx2_hwacg_vclks, ARRAY_SIZE(exynos9610_vipx2_hwacg_vclks));
+
+       /* register special vclk */
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_dispaud_vclks, ARRAY_SIZE(exynos9610_dispaud_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_cmgp_vclks, ARRAY_SIZE(exynos9610_cmgp_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_fsys_vclks, ARRAY_SIZE(exynos9610_fsys_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_usb_vclks, ARRAY_SIZE(exynos9610_usb_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_peri_vclks, ARRAY_SIZE(exynos9610_peri_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_top_vclks, ARRAY_SIZE(exynos9610_top_vclks));
+       samsung_register_vclk(exynos9610_clk_provider, exynos9610_clkout_vclks, ARRAY_SIZE(exynos9610_clkout_vclks));
+
+       clk_register_fixed_factor(NULL, "pwm-clock", "fin_pll", CLK_SET_RATE_PARENT, 1, 1);
+
+       samsung_clk_of_add_provider(np, exynos9610_clk_provider);
+
+       late_time_init = exynos9610_vclk_init;
+
+       pr_info("EXYNOS9610: Clock setup completed\n");
+}
+
+CLK_OF_DECLARE(exynos9610_clk, "samsung,exynos9610-clock", exynos9610_clk_init);
diff --git a/include/dt-bindings/clock/exynos9610.h b/include/dt-bindings/clock/exynos9610.h
new file mode 100644 (file)
index 0000000..4d67082
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * Device Tree binding constants for Exynos9610 clock controller.
+*/
+
+#ifndef _DT_BINDINGS_CLOCK_EXYNOS_9610_H
+#define _DT_BINDINGS_CLOCK_EXYNOS_9610_H
+
+#define NONE                                    (0 + 0)
+#define OSCCLK                                  (0 + 1)
+
+/* NUMBER FOR APM DRIVER STARTS FROM 10 */
+#define CLK_APM_BASE                           (10)
+#define        UMUX_CLKCMU_APM_BUS                     (CLK_APM_BASE + 0)
+#define        GATE_GREBEINTEGRATION_QCH_GREBE         (CLK_APM_BASE + 1)
+#define        GATE_GREBEINTEGRATION_QCH_DBG           (CLK_APM_BASE + 2)
+#define        GATE_INTMEM_QCH                         (CLK_APM_BASE + 3)
+#define        GATE_MAILBOX_AP2CP_QCH                  (CLK_APM_BASE + 4)
+#define        GATE_MAILBOX_AP2CP_S_QCH                (CLK_APM_BASE + 5)
+#define        GATE_MAILBOX_AP2GNSS_QCH                (CLK_APM_BASE + 6)
+#define        GATE_MAILBOX_AP2SHUB_QCH                (CLK_APM_BASE + 7)
+#define        GATE_MAILBOX_AP2WLBT_QCH                (CLK_APM_BASE + 8)
+#define        GATE_MAILBOX_APM2AP_QCH                 (CLK_APM_BASE + 9)
+#define        GATE_MAILBOX_APM2CP_QCH                 (CLK_APM_BASE + 10)
+#define        GATE_MAILBOX_APM2GNSS_QCH               (CLK_APM_BASE + 11)
+#define        GATE_MAILBOX_APM2SHUB_QCH               (CLK_APM_BASE + 12)
+#define        GATE_MAILBOX_APM2WLBT_QCH               (CLK_APM_BASE + 13)
+#define        GATE_MAILBOX_CP2GNSS_QCH                (CLK_APM_BASE + 14)
+#define        GATE_MAILBOX_CP2SHUB_QCH                (CLK_APM_BASE + 15)
+#define        GATE_MAILBOX_CP2WLBT_QCH                (CLK_APM_BASE + 16)
+#define        GATE_MAILBOX_SHUB2GNSS_QCH              (CLK_APM_BASE + 17)
+#define        GATE_MAILBOX_SHUB2WLBT_QCH              (CLK_APM_BASE + 18)
+#define        GATE_MAILBOX_WLBT2ABOX_QCH              (CLK_APM_BASE + 19)
+#define        GATE_MAILBOX_WLBT2GNSS_QCH              (CLK_APM_BASE + 20)
+#define        GATE_PEM_QCH                            (CLK_APM_BASE + 21)
+#define        GATE_SPEEDY_APM_QCH                     (CLK_APM_BASE + 22)
+#define        GATE_SYSREG_APM_QCH                     (CLK_APM_BASE + 23)
+#define        GATE_WDT_APM_QCH                        (CLK_APM_BASE + 24)
+
+/* NUMBER FOR CAM DRIVER STARTS FROM 40 */
+#define CLK_CAM_BASE                           (40)
+#define        UMUX_CLKCMU_CAM_BUS                     (CLK_CAM_BASE + 0)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS0       (CLK_CAM_BASE + 1)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS1       (CLK_CAM_BASE + 2)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS2       (CLK_CAM_BASE + 3)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_CSIS3       (CLK_CAM_BASE + 4)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_3AA         (CLK_CAM_BASE + 5)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_SMMU        (CLK_CAM_BASE + 6)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_CORE    (CLK_CAM_BASE + 7)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_PDP_DMA     (CLK_CAM_BASE + 8)
+#define        GATE_IS6P10P0_CAM_QCH_S_CAM_RDMA        (CLK_CAM_BASE + 9)
+
+/* NUMBER FOR CMGP DRIVER STARTS FROM 100 */
+#define CLK_CMGP_BASE                          (100)
+#define        MUX_CMGP_ADC                    (CLK_CMGP_BASE + 0)
+#define        MUX_CMGP_I2C                    (CLK_CMGP_BASE + 1)
+#define        MUX_CMGP_USI00                  (CLK_CMGP_BASE + 2)
+#define        MUX_CMGP_USI01                  (CLK_CMGP_BASE + 3)
+#define        MUX_CMGP_USI02                  (CLK_CMGP_BASE + 4)
+#define        MUX_CMGP_USI03                  (CLK_CMGP_BASE + 5)
+#define        MUX_CMGP_USI04                  (CLK_CMGP_BASE + 6)
+#define        GATE_ADC_CMGP_QCH_S0                    (CLK_CMGP_BASE + 7)
+#define        GATE_ADC_CMGP_QCH_S1                    (CLK_CMGP_BASE + 8)
+#define        GATE_ADC_CMGP_QCH_ADC                   (CLK_CMGP_BASE + 9)
+#define        GATE_I2C_CMGP00_QCH                     (CLK_CMGP_BASE + 10)
+#define        GATE_I2C_CMGP01_QCH                     (CLK_CMGP_BASE + 11)
+#define        GATE_I2C_CMGP02_QCH                     (CLK_CMGP_BASE + 12)
+#define        GATE_I2C_CMGP03_QCH                     (CLK_CMGP_BASE + 13)
+#define        GATE_I2C_CMGP04_QCH                     (CLK_CMGP_BASE + 14)
+#define        GATE_USI_CMGP00_QCH                     (CLK_CMGP_BASE + 15)
+#define        GATE_USI_CMGP01_QCH                     (CLK_CMGP_BASE + 16)
+#define        GATE_USI_CMGP02_QCH                     (CLK_CMGP_BASE + 17)
+#define        GATE_USI_CMGP03_QCH                     (CLK_CMGP_BASE + 18)
+#define        GATE_USI_CMGP04_QCH                     (CLK_CMGP_BASE + 19)
+#define        CMGP00_USI                              (CLK_CMGP_BASE + 20)
+#define        CMGP01_USI                              (CLK_CMGP_BASE + 21)
+#define        CMGP02_USI                              (CLK_CMGP_BASE + 22)
+#define        CMGP03_USI                              (CLK_CMGP_BASE + 23)
+#define        CMGP04_USI                              (CLK_CMGP_BASE + 24)
+#define        CMGP_I2C                                (CLK_CMGP_BASE + 25)
+#define        CMGP_ADC                                (CLK_CMGP_BASE + 26)
+
+/* NUMBER FOR TOP DRIVER STARTS FROM 150 */
+#define CLK_TOP_BASE                           (150)
+#define        GATE_DFTMUX_TOP_QCH_CLK_CSIS0           (CLK_TOP_BASE + 0)
+#define        GATE_DFTMUX_TOP_QCH_CLK_CSIS1           (CLK_TOP_BASE + 1)
+#define        GATE_DFTMUX_TOP_QCH_CLK_CSIS2           (CLK_TOP_BASE + 2)
+#define        GATE_DFTMUX_TOP_QCH_CLK_CSIS3           (CLK_TOP_BASE + 3)
+#define        GATE_OTP_QCH                            (CLK_TOP_BASE + 4)
+#define        CIS_CLK0                                (CLK_TOP_BASE + 5)
+#define        CIS_CLK1                                (CLK_TOP_BASE + 6)
+#define        CIS_CLK2                                (CLK_TOP_BASE + 7)
+#define        CIS_CLK3                                (CLK_TOP_BASE + 8)
+
+/* NUMBER FOR CORE DRIVER STARTS FROM 200 */
+#define CLK_CORE_BASE                          (200)
+#define        MUX_CORE_GIC                    (CLK_CORE_BASE + 0)
+#define        GATE_GIC400_AIHWACG_QCH                 (CLK_CORE_BASE + 1)
+#define        GATE_PDMA_CORE_QCH                      (CLK_CORE_BASE + 2)
+#define        GATE_PPFW_CORE_MEM0_QCH                 (CLK_CORE_BASE + 3)
+#define        GATE_PPFW_CORE_MEM1_QCH                 (CLK_CORE_BASE + 4)
+#define        GATE_PPFW_CORE_PERI_QCH                 (CLK_CORE_BASE + 5)
+#define        GATE_SIREX_QCH                          (CLK_CORE_BASE + 6)
+#define        GATE_SPDMA_CORE_QCH                     (CLK_CORE_BASE + 7)
+#define        GATE_TREX_D_CORE_QCH                    (CLK_CORE_BASE + 8)
+#define        GATE_TREX_D_NRT_QCH                     (CLK_CORE_BASE + 9)
+#define        GATE_TREX_P_CORE_QCH                    (CLK_CORE_BASE + 10)
+
+/* NUMBER FOR DISPAUD DRIVER STARTS FROM 250 */
+#define CLK_DISPAUD_BASE                       (250)
+#define        MUX_AUD_FM                              (CLK_DISPAUD_BASE + 0)
+#define        UMUX_CLKCMU_DISPAUD_BUS                 (CLK_DISPAUD_BASE + 1)
+#define        GATE_ABOX_QCH_CPU                       (CLK_DISPAUD_BASE + 2)
+#define        GATE_ABOX_QCH_S_ACLK                    (CLK_DISPAUD_BASE + 3)
+#define        GATE_ABOX_QCH_S_BCLK0                   (CLK_DISPAUD_BASE + 4)
+#define        GATE_ABOX_QCH_S_BCLK2                   (CLK_DISPAUD_BASE + 5)
+#define        GATE_ABOX_QCH_S_BCLK1                   (CLK_DISPAUD_BASE + 6)
+#define        GATE_ABOX_QCH_FM                        (CLK_DISPAUD_BASE + 7)
+#define        GATE_ABOX_QCH_S_BCLK_DSIF               (CLK_DISPAUD_BASE + 8)
+#define        GATE_DPU_QCH_S_DPP                      (CLK_DISPAUD_BASE + 9)
+#define        GATE_DPU_QCH_S_DMA                      (CLK_DISPAUD_BASE + 10)
+#define        GATE_DPU_QCH_S_DECON                    (CLK_DISPAUD_BASE + 11)
+#define        GATE_SMMU_ABOX_QCH                      (CLK_DISPAUD_BASE + 12)
+#define        GATE_SMMU_DPU_QCH                       (CLK_DISPAUD_BASE + 13)
+#define        GATE_WDT_AUD_QCH                        (CLK_DISPAUD_BASE + 14)
+#define        DOUT_CLK_AUD_ACLK                       (CLK_DISPAUD_BASE + 15)
+#define        DOUT_CLK_AUD_AUDIF                      (CLK_DISPAUD_BASE + 16)
+#define        DOUT_CLK_AUD_DSIF                       (CLK_DISPAUD_BASE + 17)
+#define        DOUT_CLK_AUD_UAIF0                      (CLK_DISPAUD_BASE + 18)
+#define        DOUT_CLK_AUD_UAIF1                      (CLK_DISPAUD_BASE + 19)
+#define        DOUT_CLK_AUD_UAIF2                      (CLK_DISPAUD_BASE + 20)
+#define        PLL_OUT_AUD                             (CLK_DISPAUD_BASE + 21)
+
+/* NUMBER FOR FSYS DRIVER STARTS FROM 300 */
+#define CLK_FSYS_BASE                          (300)
+#define        UMUX_CLKCMU_FSYS_BUS                    (CLK_FSYS_BASE + 0)
+#define        UMUX_CLKCMU_FSYS_MMC_EMBD               (CLK_FSYS_BASE + 1)
+#define        UMUX_CLKCMU_FSYS_MMC_CARD               (CLK_FSYS_BASE + 2)
+#define        UMUX_CLKCMU_FSYS_UFS_EMBD               (CLK_FSYS_BASE + 3)
+#define        GATE_MMC_CARD_QCH                       (CLK_FSYS_BASE + 4)
+#define        GATE_MMC_EMBD_QCH                       (CLK_FSYS_BASE + 5)
+#define        GATE_RTIC_QCH                           (CLK_FSYS_BASE + 6)
+#define        GATE_SSS_QCH                            (CLK_FSYS_BASE + 7)
+#define        GATE_UFS_EMBD_QCH_UFS                   (CLK_FSYS_BASE + 8)
+#define        GATE_UFS_EMBD_QCH_FMP                   (CLK_FSYS_BASE + 9)
+#define        MMC_EMBD                                (CLK_FSYS_BASE + 10)
+#define        MMC_CARD                                (CLK_FSYS_BASE + 11)
+#define        UFS_EMBD                                (CLK_FSYS_BASE + 12)
+
+/* NUMBER FOR G2D DRIVER STARTS FROM 350 */
+#define CLK_G2D_BASE                           (350)
+#define        UMUX_CLKCMU_G2D_G2D                     (CLK_G2D_BASE + 0)
+#define        UMUX_CLKCMU_G2D_MSCL                    (CLK_G2D_BASE + 1)
+#define        GATE_G2D_QCH                            (CLK_G2D_BASE + 2)
+#define        GATE_JPEG_QCH                           (CLK_G2D_BASE + 3)
+#define        GATE_MSCL_QCH                           (CLK_G2D_BASE + 4)
+#define        GATE_SYSMMU_G2D_QCH                     (CLK_G2D_BASE + 5)
+
+/* NUMBER FOR G3D DRIVER STARTS FROM 400 */
+#define CLK_G3D_BASE                           (400)
+#define        GATE_G3D_QCH                            (CLK_G3D_BASE + 0)
+
+/* NUMBER FOR ISP DRIVER STARTS FROM 450 */
+#define CLK_ISP_BASE                           (450)
+#define        UMUX_CLKCMU_ISP_BUS                     (CLK_ISP_BASE + 0)
+#define        UMUX_CLKCMU_ISP_GDC                     (CLK_ISP_BASE + 1)
+#define        UMUX_CLKCMU_ISP_VRA                     (CLK_ISP_BASE + 2)
+#define        GATE_IS6P10P0_ISP_QCH_S_ISP_ISP         (CLK_ISP_BASE + 3)
+#define        GATE_IS6P10P0_ISP_QCH_S_ISP_MCSC        (CLK_ISP_BASE + 4)
+#define        GATE_IS6P10P0_ISP_QCH_S_ISP_VRA         (CLK_ISP_BASE + 5)
+#define        GATE_IS6P10P0_ISP_QCH_S_ISP_GDC         (CLK_ISP_BASE + 6)
+#define        GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP0   (CLK_ISP_BASE + 7)
+#define        GATE_IS6P10P0_ISP_QCH_S_ISP_SMMU_ISP1   (CLK_ISP_BASE + 8)
+
+/* NUMBER FOR MFC DRIVER STARTS FROM 500 */
+#define CLK_MFC_BASE                           (500)
+#define        UMUX_CLKCMU_MFC_MFC                     (CLK_MFC_BASE + 0)
+#define        UMUX_CLKCMU_MFC_WFD                     (CLK_MFC_BASE + 1)
+#define        GATE_MFC_QCH                            (CLK_MFC_BASE + 2)
+#define        GATE_SYSMMU_MFCD0_QCH                   (CLK_MFC_BASE + 3)
+#define        GATE_SYSMMU_MFCD1_QCH                   (CLK_MFC_BASE + 4)
+#define        GATE_WFD_QCH                            (CLK_MFC_BASE + 5)
+
+/* NUMBER FOR PERI DRIVER STARTS FROM 550 */
+#define CLK_PERI_BASE                          (550)
+#define        UMUX_CLKCMU_PERI_UART                   (CLK_PERI_BASE + 0)
+#define        GATE_CAMI2C_0_QCH                       (CLK_PERI_BASE + 1)
+#define        GATE_CAMI2C_1_QCH                       (CLK_PERI_BASE + 2)
+#define        GATE_CAMI2C_2_QCH                       (CLK_PERI_BASE + 3)
+#define        GATE_CAMI2C_3_QCH                       (CLK_PERI_BASE + 4)
+#define        GATE_I2C_0_QCH                          (CLK_PERI_BASE + 5)
+#define        GATE_I2C_1_QCH                          (CLK_PERI_BASE + 6)
+#define        GATE_I2C_2_QCH                          (CLK_PERI_BASE + 7)
+#define        GATE_I2C_3_QCH                          (CLK_PERI_BASE + 8)
+#define        GATE_I2C_4_QCH                          (CLK_PERI_BASE + 9)
+#define        GATE_I2C_5_QCH                          (CLK_PERI_BASE + 10)
+#define        GATE_I2C_6_QCH                          (CLK_PERI_BASE + 11)
+#define        GATE_MCT_QCH                            (CLK_PERI_BASE + 12)
+#define        GATE_OTP_CON_TOP_QCH                    (CLK_PERI_BASE + 13)
+#define        GATE_PWM_MOTOR_QCH                      (CLK_PERI_BASE + 14)
+#define        GATE_SPI_0_QCH                          (CLK_PERI_BASE + 15)
+#define        GATE_SPI_1_QCH                          (CLK_PERI_BASE + 16)
+#define        GATE_SPI_2_QCH                          (CLK_PERI_BASE + 17)
+#define        GATE_UART_QCH                           (CLK_PERI_BASE + 18)
+#define        GATE_USI00_I2C_QCH                      (CLK_PERI_BASE + 19)
+#define        GATE_USI00_USI_QCH                      (CLK_PERI_BASE + 20)
+#define        GATE_WDT_CLUSTER0_QCH                   (CLK_PERI_BASE + 21)
+#define        GATE_WDT_CLUSTER1_QCH                   (CLK_PERI_BASE + 22)
+#define UART                                   (CLK_PERI_BASE + 23)
+#define        I2C                                     (CLK_PERI_BASE + 24)
+#define        SPI0                                    (CLK_PERI_BASE + 25)
+#define        SPI1                                    (CLK_PERI_BASE + 26)
+#define        SPI2                                    (CLK_PERI_BASE + 27)
+#define        USI_I2C                                 (CLK_PERI_BASE + 28)
+#define        USI_USI                                 (CLK_PERI_BASE + 29)
+
+/* NUMBER FOR SHUB DRIVER STARTS FROM 600 */
+#define CLK_SHUB_BASE                          (600)
+#define        UMUX_CLKCMU_SHUB_BUS                    (CLK_SHUB_BASE + 0)
+#define        MUX_SHUB_I2C                    (CLK_SHUB_BASE + 1)
+#define        MUX_SHUB_USI00                  (CLK_SHUB_BASE + 2)
+#define        MUX_SHUB_USI01                  (CLK_SHUB_BASE + 3)
+#define        GATE_CM4_SHUB_QCH                       (CLK_SHUB_BASE + 4)
+#define        GATE_I2C_SHUB00_QCH                     (CLK_SHUB_BASE + 5)
+#define        GATE_PDMA_SHUB_QCH                      (CLK_SHUB_BASE + 6)
+#define        GATE_PWM_SHUB_QCH                       (CLK_SHUB_BASE + 7)
+#define        GATE_TIMER_SHUB_QCH                     (CLK_SHUB_BASE + 8)
+#define        GATE_USI_SHUB00_QCH                     (CLK_SHUB_BASE + 9)
+#define        GATE_WDT_SHUB_QCH                       (CLK_SHUB_BASE + 10)
+
+/* NUMBER FOR USB DRIVER STARTS FROM 650 */
+#define CLK_USB_BASE                           (650)
+#define        UMUX_CLKCMU_USB_USBDRD30                (CLK_USB_BASE + 0)
+#define        UMUX_CLKCMU_USB_DPGTC                   (CLK_USB_BASE + 1)
+#define        GATE_DP_LINK_QCH_DP                     (CLK_USB_BASE + 2)
+#define        GATE_DP_LINK_QCH_GTC                    (CLK_USB_BASE + 3)
+#define        GATE_USB30DRD_QCH_USB30                 (CLK_USB_BASE + 4)
+#define        GATE_USB30DRD_QCH_USBPHY_30CTRL_0       (CLK_USB_BASE + 5)
+#define        GATE_USB30DRD_QCH_USBPHY_30CTRL_1       (CLK_USB_BASE + 6)
+#define        GATE_USB30DRD_QCH_USBPHY_20CTRL         (CLK_USB_BASE + 7)
+#define        USB30DRD                                (CLK_USB_BASE + 8)
+#define        DP_LINK                                 (CLK_USB_BASE + 9)
+
+/* NUMBER FOR VIPX1 DRIVER STARTS FROM 700 */
+#define CLK_VIPX1_BASE                         (700)
+#define        UMUX_CLKCMU_VIPX1_BUS                   (CLK_VIPX1_BASE + 0)
+#define        GATE_SMMU_D_VIPX1_QCH                   (CLK_VIPX1_BASE + 1)
+#define        GATE_VIPX1_QCH                          (CLK_VIPX1_BASE + 2)
+
+/* NUMBER FOR VIPX2 DRIVER STARTS FROM 750 */
+#define CLK_VIPX2_BASE                         (750)
+#define        UMUX_CLKCMU_VIPX2_BUS                   (CLK_VIPX2_BASE + 0)
+#define        GATE_SMMU_D_VIPX2_QCH                   (CLK_VIPX2_BASE + 1)
+#define        GATE_VIPX2_QCH                          (CLK_VIPX2_BASE + 2)
+#define        GATE_VIPX2_QCH_LOCAL                    (CLK_VIPX2_BASE + 3)
+
+/* NUMBER FOR CLKOUT DRIVER STARTS FROM 800 */
+#define CLK_CLKOUT_BASE                                (800)
+#define        OSC_NFC                                 (CLK_CLKOUT_BASE + 0)
+#define        OSC_AUD                                 (CLK_CLKOUT_BASE + 1)
+
+/* must be greater than maximal clock id */
+#define CLK_NR_CLKS                             (820 + 1)
+
+#define ACPM_DVFS_MIF                          (0x0B040000)
+#define ACPM_DVFS_INT                          (0x0B040001)
+#define ACPM_DVFS_CPUCL0                       (0x0B040002)
+#define ACPM_DVFS_CPUCL1                       (0x0B040003)
+#define ACPM_DVFS_G3D                          (0x0B040004)
+#define ACPM_DVFS_INTCAM                       (0x0B040005)
+#define ACPM_DVFS_CAM                          (0x0B040006)
+#define ACPM_DVFS_DISP                         (0x0B040007)
+#define ACPM_DVFS_AUD                          (0x0B040008)
+#define ACPM_DVFS_CP                           (0x0B040009)
+
+#endif /* _DT_BINDINGS_CLOCK_EXYNOS_9610_H */