]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
clk: samsung: add initial exynos7870 clock driver
authorKaustabh Chakraborty <kauschluss@disroot.org>
Sat, 1 Mar 2025 03:57:13 +0000 (09:27 +0530)
committerKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Sat, 1 Mar 2025 14:11:11 +0000 (15:11 +0100)
This is a basic implementation of the clock driver required by
Samsung's Exynos7870 SoC. It implements CMU_MIF, CMU_DISPAUD, CMU_FSYS,
CMU_G3D, CMU_ISP, CMU_MFCMSCL, and CMU_PERI. all other CMUs depend on
CMU_MIF.

Signed-off-by: Kaustabh Chakraborty <kauschluss@disroot.org>
Link: https://lore.kernel.org/r/20250301-exynos7870-pmu-clocks-v5-2-715b646d5206@disroot.org
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
drivers/clk/samsung/Makefile
drivers/clk/samsung/clk-exynos7870.c [new file with mode: 0644]

index d4b5b8e7a0fd225ed1eafef84bb46471a5e36bf0..b77fe288e4bb484c68d1ff497acc0b83d132ea03 100644 (file)
@@ -19,6 +19,7 @@ obj-$(CONFIG_EXYNOS_CLKOUT)   += clk-exynos-clkout.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos-arm64.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos2200.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos7.o
+obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos7870.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos7885.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos850.o
 obj-$(CONFIG_EXYNOS_ARM64_COMMON_CLK)  += clk-exynos8895.o
diff --git a/drivers/clk/samsung/clk-exynos7870.c b/drivers/clk/samsung/clk-exynos7870.c
new file mode 100644 (file)
index 0000000..2ec4a4e
--- /dev/null
@@ -0,0 +1,1830 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd.
+ * Author: Kaustabh Chakraborty <kauschluss@disroot.org>
+ *
+ * Common Clock Framework support for Exynos7870.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+
+#include <dt-bindings/clock/samsung,exynos7870-cmu.h>
+
+#include "clk.h"
+#include "clk-exynos-arm64.h"
+
+/*
+ * Register offsets for CMU_MIF (0x10460000)
+ */
+#define PLL_LOCKTIME_MIF_MEM_PLL                       0x0000
+#define PLL_LOCKTIME_MIF_MEDIA_PLL                     0x0020
+#define PLL_LOCKTIME_MIF_BUS_PLL                       0x0040
+#define PLL_CON0_MIF_MEM_PLL                           0x0100
+#define PLL_CON0_MIF_MEDIA_PLL                         0x0120
+#define PLL_CON0_MIF_BUS_PLL                           0x0140
+#define CLK_CON_GAT_MIF_MUX_MEM_PLL                    0x0200
+#define CLK_CON_GAT_MIF_MUX_MEM_PLL_CON                        0x0200
+#define CLK_CON_GAT_MIF_MUX_MEDIA_PLL                  0x0204
+#define CLK_CON_GAT_MIF_MUX_MEDIA_PLL_CON              0x0204
+#define CLK_CON_GAT_MIF_MUX_BUS_PLL                    0x0208
+#define CLK_CON_GAT_MIF_MUX_BUS_PLL_CON                        0x0208
+#define CLK_CON_GAT_MIF_MUX_BUSD                       0x0220
+#define CLK_CON_MUX_MIF_BUSD                           0x0220
+#define CLK_CON_GAT_MIF_MUX_CMU_ISP_VRA                        0x0264
+#define CLK_CON_MUX_MIF_CMU_ISP_VRA                    0x0264
+#define CLK_CON_GAT_MIF_MUX_CMU_ISP_CAM                        0x0268
+#define CLK_CON_MUX_MIF_CMU_ISP_CAM                    0x0268
+#define CLK_CON_GAT_MIF_MUX_CMU_ISP_ISP                        0x026c
+#define CLK_CON_MUX_MIF_CMU_ISP_ISP                    0x026c
+#define CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_BUS            0x0270
+#define CLK_CON_MUX_MIF_CMU_DISPAUD_BUS                        0x0270
+#define CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_DECON_VCLK     0x0274
+#define CLK_CON_MUX_MIF_CMU_DISPAUD_DECON_VCLK         0x0274
+#define CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_DECON_ECLK     0x0278
+#define CLK_CON_MUX_MIF_CMU_DISPAUD_DECON_ECLK         0x0278
+#define CLK_CON_GAT_MIF_MUX_CMU_MFCMSCL_MSCL           0x027c
+#define CLK_CON_MUX_MIF_CMU_MFCMSCL_MSCL               0x027c
+#define CLK_CON_GAT_MIF_MUX_CMU_MFCMSCL_MFC            0x0280
+#define CLK_CON_MUX_MIF_CMU_MFCMSCL_MFC                        0x0280
+#define CLK_CON_GAT_MIF_MUX_CMU_FSYS_BUS               0x0284
+#define CLK_CON_MUX_MIF_CMU_FSYS_BUS                   0x0284
+#define CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC0              0x0288
+#define CLK_CON_MUX_MIF_CMU_FSYS_MMC0                  0x0288
+#define CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC1              0x028c
+#define CLK_CON_MUX_MIF_CMU_FSYS_MMC1                  0x028c
+#define CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC2              0x0290
+#define CLK_CON_MUX_MIF_CMU_FSYS_MMC2                  0x0290
+#define CLK_CON_GAT_MIF_MUX_CMU_FSYS_USB20DRD_REFCLK   0x029c
+#define CLK_CON_MUX_MIF_CMU_FSYS_USB20DRD_REFCLK       0x029c
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_BUS               0x02a0
+#define CLK_CON_MUX_MIF_CMU_PERI_BUS                   0x02a0
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_UART1             0x02a4
+#define CLK_CON_MUX_MIF_CMU_PERI_UART1                 0x02a4
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_UART2             0x02a8
+#define CLK_CON_MUX_MIF_CMU_PERI_UART2                 0x02a8
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_UART0             0x02ac
+#define CLK_CON_MUX_MIF_CMU_PERI_UART0                 0x02ac
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI2              0x02b0
+#define CLK_CON_MUX_MIF_CMU_PERI_SPI2                  0x02b0
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI1              0x02b4
+#define CLK_CON_MUX_MIF_CMU_PERI_SPI1                  0x02b4
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI0              0x02b8
+#define CLK_CON_MUX_MIF_CMU_PERI_SPI0                  0x02b8
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI3              0x02bc
+#define CLK_CON_MUX_MIF_CMU_PERI_SPI3                  0x02bc
+#define CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI4              0x02c0
+#define CLK_CON_MUX_MIF_CMU_PERI_SPI4                  0x02c0
+#define CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR0            0x02c4
+#define CLK_CON_MUX_MIF_CMU_ISP_SENSOR0                        0x02c4
+#define CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR1            0x02c8
+#define CLK_CON_MUX_MIF_CMU_ISP_SENSOR1                        0x02c8
+#define CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR2            0x02cc
+#define CLK_CON_MUX_MIF_CMU_ISP_SENSOR2                        0x02cc
+#define CLK_CON_DIV_MIF_BUSD                           0x0420
+#define CLK_CON_DIV_MIF_APB                            0x0424
+#define CLK_CON_DIV_MIF_HSI2C                          0x0430
+#define CLK_CON_DIV_MIF_CMU_G3D_SWITCH                 0x0460
+#define CLK_CON_DIV_MIF_CMU_ISP_VRA                    0x0464
+#define CLK_CON_DIV_MIF_CMU_ISP_CAM                    0x0468
+#define CLK_CON_DIV_MIF_CMU_ISP_ISP                    0x046c
+#define CLK_CON_DIV_MIF_CMU_DISPAUD_BUS                        0x0470
+#define CLK_CON_DIV_MIF_CMU_DISPAUD_DECON_VCLK         0x0474
+#define CLK_CON_DIV_MIF_CMU_DISPAUD_DECON_ECLK         0x0478
+#define CLK_CON_DIV_MIF_CMU_MFCMSCL_MSCL               0x047c
+#define CLK_CON_DIV_MIF_CMU_MFCMSCL_MFC                        0x0480
+#define CLK_CON_DIV_MIF_CMU_FSYS_BUS                   0x0484
+#define CLK_CON_DIV_MIF_CMU_FSYS_MMC0                  0x0488
+#define CLK_CON_DIV_MIF_CMU_FSYS_MMC1                  0x048c
+#define CLK_CON_DIV_MIF_CMU_FSYS_MMC2                  0x0490
+#define CLK_CON_DIV_MIF_CMU_FSYS_USB20DRD_REFCLK       0x049c
+#define CLK_CON_DIV_MIF_CMU_PERI_BUS                   0x04a0
+#define CLK_CON_DIV_MIF_CMU_PERI_UART1                 0x04a4
+#define CLK_CON_DIV_MIF_CMU_PERI_UART2                 0x04a8
+#define CLK_CON_DIV_MIF_CMU_PERI_UART0                 0x04ac
+#define CLK_CON_DIV_MIF_CMU_PERI_SPI2                  0x04b0
+#define CLK_CON_DIV_MIF_CMU_PERI_SPI1                  0x04b4
+#define CLK_CON_DIV_MIF_CMU_PERI_SPI0                  0x04b8
+#define CLK_CON_DIV_MIF_CMU_PERI_SPI3                  0x04bc
+#define CLK_CON_DIV_MIF_CMU_PERI_SPI4                  0x04c0
+#define CLK_CON_DIV_MIF_CMU_ISP_SENSOR0                        0x04c4
+#define CLK_CON_DIV_MIF_CMU_ISP_SENSOR1                        0x04c8
+#define CLK_CON_DIV_MIF_CMU_ISP_SENSOR2                        0x04cc
+#define CLK_CON_GAT_MIF_WRAP_ADC_IF_OSC_SYS            0x080c
+#define CLK_CON_GAT_MIF_HSI2C_AP_PCLKS                 0x0828
+#define CLK_CON_GAT_MIF_HSI2C_CP_PCLKS                 0x0828
+#define CLK_CON_GAT_MIF_WRAP_ADC_IF_PCLK_S0            0x0828
+#define CLK_CON_GAT_MIF_WRAP_ADC_IF_PCLK_S1            0x0828
+#define CLK_CON_GAT_MIF_HSI2C_AP_PCLKM                 0x0840
+#define CLK_CON_GAT_MIF_HSI2C_CP_PCLKM                 0x0840
+#define CLK_CON_GAT_MIF_HSI2C_IPCLK                    0x0840
+#define CLK_CON_GAT_MIF_HSI2C_ITCLK                    0x0840
+#define CLK_CON_GAT_MIF_CP_PCLK_HSI2C                  0x0840
+#define CLK_CON_GAT_MIF_CP_PCLK_HSI2C_BAT_0            0x0840
+#define CLK_CON_GAT_MIF_CP_PCLK_HSI2C_BAT_1            0x0840
+#define CLK_CON_GAT_MIF_CMU_G3D_SWITCH                 0x0860
+#define CLK_CON_GAT_MIF_CMU_ISP_VRA                    0x0864
+#define CLK_CON_GAT_MIF_CMU_ISP_CAM                    0x0868
+#define CLK_CON_GAT_MIF_CMU_ISP_ISP                    0x086c
+#define CLK_CON_GAT_MIF_CMU_DISPAUD_BUS                        0x0870
+#define CLK_CON_GAT_MIF_CMU_DISPAUD_DECON_VCLK         0x0874
+#define CLK_CON_GAT_MIF_CMU_DISPAUD_DECON_ECLK         0x0878
+#define CLK_CON_GAT_MIF_CMU_MFCMSCL_MSCL               0x087c
+#define CLK_CON_GAT_MIF_CMU_MFCMSCL_MFC                        0x0880
+#define CLK_CON_GAT_MIF_CMU_FSYS_BUS                   0x0884
+#define CLK_CON_GAT_MIF_CMU_FSYS_MMC0                  0x0888
+#define CLK_CON_GAT_MIF_CMU_FSYS_MMC1                  0x088c
+#define CLK_CON_GAT_MIF_CMU_FSYS_MMC2                  0x0890
+#define CLK_CON_GAT_MIF_CMU_FSYS_USB20DRD_REFCLK       0x089c
+#define CLK_CON_GAT_MIF_CMU_PERI_BUS                   0x08a0
+#define CLK_CON_GAT_MIF_CMU_PERI_UART1                 0x08a4
+#define CLK_CON_GAT_MIF_CMU_PERI_UART2                 0x08a8
+#define CLK_CON_GAT_MIF_CMU_PERI_UART0                 0x08ac
+#define CLK_CON_GAT_MIF_CMU_PERI_SPI2                  0x08b0
+#define CLK_CON_GAT_MIF_CMU_PERI_SPI1                  0x08b4
+#define CLK_CON_GAT_MIF_CMU_PERI_SPI0                  0x08b8
+#define CLK_CON_GAT_MIF_CMU_PERI_SPI3                  0x08bc
+#define CLK_CON_GAT_MIF_CMU_PERI_SPI4                  0x08c0
+#define CLK_CON_GAT_MIF_CMU_ISP_SENSOR0                        0x08c4
+#define CLK_CON_GAT_MIF_CMU_ISP_SENSOR1                        0x08c8
+#define CLK_CON_GAT_MIF_CMU_ISP_SENSOR2                        0x08cc
+
+static const unsigned long mif_clk_regs[] __initconst = {
+       PLL_LOCKTIME_MIF_MEM_PLL,
+       PLL_LOCKTIME_MIF_MEDIA_PLL,
+       PLL_LOCKTIME_MIF_BUS_PLL,
+       PLL_CON0_MIF_MEM_PLL,
+       PLL_CON0_MIF_MEDIA_PLL,
+       PLL_CON0_MIF_BUS_PLL,
+       CLK_CON_GAT_MIF_MUX_MEM_PLL,
+       CLK_CON_GAT_MIF_MUX_MEM_PLL_CON,
+       CLK_CON_GAT_MIF_MUX_MEDIA_PLL,
+       CLK_CON_GAT_MIF_MUX_MEDIA_PLL_CON,
+       CLK_CON_GAT_MIF_MUX_BUS_PLL,
+       CLK_CON_GAT_MIF_MUX_BUS_PLL_CON,
+       CLK_CON_GAT_MIF_MUX_BUSD,
+       CLK_CON_MUX_MIF_BUSD,
+       CLK_CON_GAT_MIF_MUX_CMU_ISP_VRA,
+       CLK_CON_MUX_MIF_CMU_ISP_VRA,
+       CLK_CON_GAT_MIF_MUX_CMU_ISP_CAM,
+       CLK_CON_MUX_MIF_CMU_ISP_CAM,
+       CLK_CON_GAT_MIF_MUX_CMU_ISP_ISP,
+       CLK_CON_MUX_MIF_CMU_ISP_ISP,
+       CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_BUS,
+       CLK_CON_MUX_MIF_CMU_DISPAUD_BUS,
+       CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_DECON_VCLK,
+       CLK_CON_MUX_MIF_CMU_DISPAUD_DECON_VCLK,
+       CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_DECON_ECLK,
+       CLK_CON_MUX_MIF_CMU_DISPAUD_DECON_ECLK,
+       CLK_CON_GAT_MIF_MUX_CMU_MFCMSCL_MSCL,
+       CLK_CON_MUX_MIF_CMU_MFCMSCL_MSCL,
+       CLK_CON_GAT_MIF_MUX_CMU_MFCMSCL_MFC,
+       CLK_CON_MUX_MIF_CMU_MFCMSCL_MFC,
+       CLK_CON_GAT_MIF_MUX_CMU_FSYS_BUS,
+       CLK_CON_MUX_MIF_CMU_FSYS_BUS,
+       CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC0,
+       CLK_CON_MUX_MIF_CMU_FSYS_MMC0,
+       CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC1,
+       CLK_CON_MUX_MIF_CMU_FSYS_MMC1,
+       CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC2,
+       CLK_CON_MUX_MIF_CMU_FSYS_MMC2,
+       CLK_CON_GAT_MIF_MUX_CMU_FSYS_USB20DRD_REFCLK,
+       CLK_CON_MUX_MIF_CMU_FSYS_USB20DRD_REFCLK,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_BUS,
+       CLK_CON_MUX_MIF_CMU_PERI_BUS,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_UART1,
+       CLK_CON_MUX_MIF_CMU_PERI_UART1,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_UART2,
+       CLK_CON_MUX_MIF_CMU_PERI_UART2,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_UART0,
+       CLK_CON_MUX_MIF_CMU_PERI_UART0,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI2,
+       CLK_CON_MUX_MIF_CMU_PERI_SPI2,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI1,
+       CLK_CON_MUX_MIF_CMU_PERI_SPI1,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI0,
+       CLK_CON_MUX_MIF_CMU_PERI_SPI0,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI3,
+       CLK_CON_MUX_MIF_CMU_PERI_SPI3,
+       CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI4,
+       CLK_CON_MUX_MIF_CMU_PERI_SPI4,
+       CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR0,
+       CLK_CON_MUX_MIF_CMU_ISP_SENSOR0,
+       CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR1,
+       CLK_CON_MUX_MIF_CMU_ISP_SENSOR1,
+       CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR2,
+       CLK_CON_MUX_MIF_CMU_ISP_SENSOR2,
+       CLK_CON_DIV_MIF_BUSD,
+       CLK_CON_DIV_MIF_APB,
+       CLK_CON_DIV_MIF_HSI2C,
+       CLK_CON_DIV_MIF_CMU_G3D_SWITCH,
+       CLK_CON_DIV_MIF_CMU_ISP_VRA,
+       CLK_CON_DIV_MIF_CMU_ISP_CAM,
+       CLK_CON_DIV_MIF_CMU_ISP_ISP,
+       CLK_CON_DIV_MIF_CMU_DISPAUD_BUS,
+       CLK_CON_DIV_MIF_CMU_DISPAUD_DECON_VCLK,
+       CLK_CON_DIV_MIF_CMU_DISPAUD_DECON_ECLK,
+       CLK_CON_DIV_MIF_CMU_MFCMSCL_MSCL,
+       CLK_CON_DIV_MIF_CMU_MFCMSCL_MFC,
+       CLK_CON_DIV_MIF_CMU_FSYS_BUS,
+       CLK_CON_DIV_MIF_CMU_FSYS_MMC0,
+       CLK_CON_DIV_MIF_CMU_FSYS_MMC1,
+       CLK_CON_DIV_MIF_CMU_FSYS_MMC2,
+       CLK_CON_DIV_MIF_CMU_FSYS_USB20DRD_REFCLK,
+       CLK_CON_DIV_MIF_CMU_PERI_BUS,
+       CLK_CON_DIV_MIF_CMU_PERI_UART1,
+       CLK_CON_DIV_MIF_CMU_PERI_UART2,
+       CLK_CON_DIV_MIF_CMU_PERI_UART0,
+       CLK_CON_DIV_MIF_CMU_PERI_SPI2,
+       CLK_CON_DIV_MIF_CMU_PERI_SPI1,
+       CLK_CON_DIV_MIF_CMU_PERI_SPI0,
+       CLK_CON_DIV_MIF_CMU_PERI_SPI3,
+       CLK_CON_DIV_MIF_CMU_PERI_SPI4,
+       CLK_CON_DIV_MIF_CMU_ISP_SENSOR0,
+       CLK_CON_DIV_MIF_CMU_ISP_SENSOR1,
+       CLK_CON_DIV_MIF_CMU_ISP_SENSOR2,
+       CLK_CON_GAT_MIF_WRAP_ADC_IF_OSC_SYS,
+       CLK_CON_GAT_MIF_HSI2C_AP_PCLKS,
+       CLK_CON_GAT_MIF_HSI2C_CP_PCLKS,
+       CLK_CON_GAT_MIF_WRAP_ADC_IF_PCLK_S0,
+       CLK_CON_GAT_MIF_WRAP_ADC_IF_PCLK_S1,
+       CLK_CON_GAT_MIF_HSI2C_AP_PCLKM,
+       CLK_CON_GAT_MIF_HSI2C_CP_PCLKM,
+       CLK_CON_GAT_MIF_HSI2C_IPCLK,
+       CLK_CON_GAT_MIF_HSI2C_ITCLK,
+       CLK_CON_GAT_MIF_CP_PCLK_HSI2C,
+       CLK_CON_GAT_MIF_CP_PCLK_HSI2C_BAT_0,
+       CLK_CON_GAT_MIF_CP_PCLK_HSI2C_BAT_1,
+       CLK_CON_GAT_MIF_CMU_G3D_SWITCH,
+       CLK_CON_GAT_MIF_CMU_ISP_VRA,
+       CLK_CON_GAT_MIF_CMU_ISP_CAM,
+       CLK_CON_GAT_MIF_CMU_ISP_ISP,
+       CLK_CON_GAT_MIF_CMU_DISPAUD_BUS,
+       CLK_CON_GAT_MIF_CMU_DISPAUD_DECON_VCLK,
+       CLK_CON_GAT_MIF_CMU_DISPAUD_DECON_ECLK,
+       CLK_CON_GAT_MIF_CMU_MFCMSCL_MSCL,
+       CLK_CON_GAT_MIF_CMU_MFCMSCL_MFC,
+       CLK_CON_GAT_MIF_CMU_FSYS_BUS,
+       CLK_CON_GAT_MIF_CMU_FSYS_MMC0,
+       CLK_CON_GAT_MIF_CMU_FSYS_MMC1,
+       CLK_CON_GAT_MIF_CMU_FSYS_MMC2,
+       CLK_CON_GAT_MIF_CMU_FSYS_USB20DRD_REFCLK,
+       CLK_CON_GAT_MIF_CMU_PERI_BUS,
+       CLK_CON_GAT_MIF_CMU_PERI_UART1,
+       CLK_CON_GAT_MIF_CMU_PERI_UART2,
+       CLK_CON_GAT_MIF_CMU_PERI_UART0,
+       CLK_CON_GAT_MIF_CMU_PERI_SPI2,
+       CLK_CON_GAT_MIF_CMU_PERI_SPI1,
+       CLK_CON_GAT_MIF_CMU_PERI_SPI0,
+       CLK_CON_GAT_MIF_CMU_PERI_SPI3,
+       CLK_CON_GAT_MIF_CMU_PERI_SPI4,
+       CLK_CON_GAT_MIF_CMU_ISP_SENSOR0,
+       CLK_CON_GAT_MIF_CMU_ISP_SENSOR1,
+       CLK_CON_GAT_MIF_CMU_ISP_SENSOR2,
+};
+
+static const struct samsung_fixed_factor_clock mif_fixed_factor_clks[] __initconst = {
+       FFACTOR(0, "ffac_mif_mux_bus_pll_div2", "gout_mif_mux_bus_pll_con", 1, 2,
+               0),
+       FFACTOR(0, "ffac_mif_mux_media_pll_div2", "gout_mif_mux_media_pll_con",
+               1, 2, 0),
+       FFACTOR(0, "ffac_mif_mux_mem_pll_div2", "gout_mif_mux_mem_pll_con", 1, 2,
+               0),
+};
+
+static const struct samsung_pll_clock mif_pll_clks[] __initconst = {
+       PLL(pll_1417x, CLK_FOUT_MIF_BUS_PLL, "fout_mif_bus_pll", "oscclk",
+           PLL_LOCKTIME_MIF_BUS_PLL, PLL_CON0_MIF_BUS_PLL, NULL),
+       PLL(pll_1417x, CLK_FOUT_MIF_MEDIA_PLL, "fout_mif_media_pll", "oscclk",
+           PLL_LOCKTIME_MIF_MEDIA_PLL, PLL_CON0_MIF_MEDIA_PLL, NULL),
+       PLL(pll_1417x, CLK_FOUT_MIF_MEM_PLL, "fout_mif_mem_pll", "oscclk",
+           PLL_LOCKTIME_MIF_MEM_PLL, PLL_CON0_MIF_MEM_PLL, NULL),
+};
+
+/* List of parent clocks for muxes in CMU_MIF */
+PNAME(mout_mif_cmu_dispaud_bus_p)              = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_dispaud_decon_eclk_p)       = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_dispaud_decon_vclk_p)       = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_fsys_bus_p)                 = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_fsys_mmc0_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_fsys_mmc1_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_fsys_mmc2_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_fsys_usb20drd_refclk_p)     = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_isp_cam_p)                  = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_isp_isp_p)                  = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_isp_sensor0_p)              = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_isp_sensor1_p)              = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_isp_sensor2_p)              = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_isp_vra_p)                  = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2",
+                                                   "gout_mif_mux_bus_pll_con" };
+PNAME(mout_mif_cmu_mfcmscl_mfc_p)              = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2",
+                                                   "gout_mif_mux_bus_pll_con" };
+PNAME(mout_mif_cmu_mfcmscl_mscl_p)             = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2",
+                                                   "gout_mif_mux_bus_pll_con" };
+PNAME(mout_mif_cmu_peri_bus_p)                 = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_peri_spi0_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_peri_spi2_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_peri_spi1_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_peri_spi4_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_peri_spi3_p)                        = { "ffac_mif_mux_bus_pll_div2",
+                                                   "oscclk" };
+PNAME(mout_mif_cmu_peri_uart1_p)               = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_peri_uart2_p)               = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_cmu_peri_uart0_p)               = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2" };
+PNAME(mout_mif_busd_p)                         = { "ffac_mif_mux_bus_pll_div2",
+                                                   "ffac_mif_mux_media_pll_div2",
+                                                   "ffac_mif_mux_mem_pll_div2" };
+
+static const struct samsung_mux_clock mif_mux_clks[] __initconst = {
+       MUX(CLK_MOUT_MIF_CMU_DISPAUD_BUS, "mout_mif_cmu_dispaud_bus",
+           mout_mif_cmu_dispaud_bus_p, CLK_CON_MUX_MIF_CMU_DISPAUD_BUS, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_DISPAUD_DECON_ECLK,
+           "mout_mif_cmu_dispaud_decon_eclk",
+           mout_mif_cmu_dispaud_decon_eclk_p,
+           CLK_CON_MUX_MIF_CMU_DISPAUD_DECON_ECLK, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_DISPAUD_DECON_VCLK,
+           "mout_mif_cmu_dispaud_decon_vclk",
+           mout_mif_cmu_dispaud_decon_vclk_p,
+           CLK_CON_MUX_MIF_CMU_DISPAUD_DECON_VCLK, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_FSYS_BUS, "mout_mif_cmu_fsys_bus",
+           mout_mif_cmu_fsys_bus_p, CLK_CON_MUX_MIF_CMU_FSYS_BUS, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_FSYS_MMC0, "mout_mif_cmu_fsys_mmc0",
+           mout_mif_cmu_fsys_mmc0_p, CLK_CON_MUX_MIF_CMU_FSYS_MMC0, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_FSYS_MMC1, "mout_mif_cmu_fsys_mmc1",
+           mout_mif_cmu_fsys_mmc1_p, CLK_CON_MUX_MIF_CMU_FSYS_MMC1, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_FSYS_MMC2, "mout_mif_cmu_fsys_mmc2",
+           mout_mif_cmu_fsys_mmc2_p, CLK_CON_MUX_MIF_CMU_FSYS_MMC2, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_FSYS_USB20DRD_REFCLK,
+           "mout_mif_cmu_fsys_usb20drd_refclk",
+           mout_mif_cmu_fsys_usb20drd_refclk_p,
+           CLK_CON_MUX_MIF_CMU_FSYS_USB20DRD_REFCLK, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_ISP_CAM, "mout_mif_cmu_isp_cam",
+           mout_mif_cmu_isp_cam_p, CLK_CON_MUX_MIF_CMU_ISP_CAM, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_ISP_ISP, "mout_mif_cmu_isp_isp",
+           mout_mif_cmu_isp_isp_p, CLK_CON_MUX_MIF_CMU_ISP_ISP, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_ISP_SENSOR0, "mout_mif_cmu_isp_sensor0",
+           mout_mif_cmu_isp_sensor0_p, CLK_CON_MUX_MIF_CMU_ISP_SENSOR0, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_ISP_SENSOR1, "mout_mif_cmu_isp_sensor1",
+           mout_mif_cmu_isp_sensor1_p, CLK_CON_MUX_MIF_CMU_ISP_SENSOR1, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_ISP_SENSOR2, "mout_mif_cmu_isp_sensor2",
+           mout_mif_cmu_isp_sensor2_p, CLK_CON_MUX_MIF_CMU_ISP_SENSOR2, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_ISP_VRA, "mout_mif_cmu_isp_vra",
+           mout_mif_cmu_isp_vra_p, CLK_CON_MUX_MIF_CMU_ISP_VRA, 12, 2),
+       MUX(CLK_MOUT_MIF_CMU_MFCMSCL_MFC, "mout_mif_cmu_mfcmscl_mfc",
+           mout_mif_cmu_mfcmscl_mfc_p, CLK_CON_MUX_MIF_CMU_MFCMSCL_MFC, 12, 2),
+       MUX(CLK_MOUT_MIF_CMU_MFCMSCL_MSCL, "mout_mif_cmu_mfcmscl_mscl",
+           mout_mif_cmu_mfcmscl_mscl_p, CLK_CON_MUX_MIF_CMU_MFCMSCL_MSCL, 12,
+           2),
+       MUX(CLK_MOUT_MIF_CMU_PERI_BUS, "mout_mif_cmu_peri_bus",
+           mout_mif_cmu_peri_bus_p, CLK_CON_MUX_MIF_CMU_PERI_BUS, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_SPI0, "mout_mif_cmu_peri_spi0",
+           mout_mif_cmu_peri_spi0_p, CLK_CON_MUX_MIF_CMU_PERI_SPI0, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_SPI2, "mout_mif_cmu_peri_spi2",
+           mout_mif_cmu_peri_spi2_p, CLK_CON_MUX_MIF_CMU_PERI_SPI2, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_SPI1, "mout_mif_cmu_peri_spi1",
+           mout_mif_cmu_peri_spi1_p, CLK_CON_MUX_MIF_CMU_PERI_SPI1, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_SPI4, "mout_mif_cmu_peri_spi4",
+           mout_mif_cmu_peri_spi4_p, CLK_CON_MUX_MIF_CMU_PERI_SPI4, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_SPI3, "mout_mif_cmu_peri_spi3",
+           mout_mif_cmu_peri_spi3_p, CLK_CON_MUX_MIF_CMU_PERI_SPI3, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_UART1, "mout_mif_cmu_peri_uart1",
+           mout_mif_cmu_peri_uart1_p, CLK_CON_MUX_MIF_CMU_PERI_UART1, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_UART2, "mout_mif_cmu_peri_uart2",
+           mout_mif_cmu_peri_uart2_p, CLK_CON_MUX_MIF_CMU_PERI_UART2, 12, 1),
+       MUX(CLK_MOUT_MIF_CMU_PERI_UART0, "mout_mif_cmu_peri_uart0",
+           mout_mif_cmu_peri_uart0_p, CLK_CON_MUX_MIF_CMU_PERI_UART0, 12, 1),
+       MUX(CLK_MOUT_MIF_BUSD, "mout_mif_busd", mout_mif_busd_p,
+           CLK_CON_MUX_MIF_BUSD, 12, 2),
+};
+
+static const struct samsung_div_clock mif_div_clks[] __initconst = {
+       DIV(CLK_DOUT_MIF_CMU_DISPAUD_BUS, "dout_mif_cmu_dispaud_bus",
+           "gout_mif_mux_cmu_dispaud_bus", CLK_CON_DIV_MIF_CMU_DISPAUD_BUS, 0,
+           4),
+       DIV(CLK_DOUT_MIF_CMU_DISPAUD_DECON_ECLK,
+           "dout_mif_cmu_dispaud_decon_eclk",
+           "gout_mif_mux_cmu_dispaud_decon_eclk",
+           CLK_CON_DIV_MIF_CMU_DISPAUD_DECON_ECLK, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_DISPAUD_DECON_VCLK,
+           "dout_mif_cmu_dispaud_decon_vclk",
+           "gout_mif_mux_cmu_dispaud_decon_vclk",
+           CLK_CON_DIV_MIF_CMU_DISPAUD_DECON_VCLK, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_FSYS_BUS, "dout_mif_cmu_fsys_bus",
+           "gout_mif_mux_cmu_fsys_bus", CLK_CON_DIV_MIF_CMU_FSYS_BUS, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_FSYS_MMC0, "dout_mif_cmu_fsys_mmc0",
+           "gout_mif_mux_cmu_fsys_mmc0", CLK_CON_DIV_MIF_CMU_FSYS_MMC0, 0, 10),
+       DIV(CLK_DOUT_MIF_CMU_FSYS_MMC1, "dout_mif_cmu_fsys_mmc1",
+           "gout_mif_mux_cmu_fsys_mmc1", CLK_CON_DIV_MIF_CMU_FSYS_MMC1, 0, 10),
+       DIV(CLK_DOUT_MIF_CMU_FSYS_MMC2, "dout_mif_cmu_fsys_mmc2",
+           "gout_mif_mux_cmu_fsys_mmc2", CLK_CON_DIV_MIF_CMU_FSYS_MMC2, 0, 10),
+       DIV(CLK_DOUT_MIF_CMU_FSYS_USB20DRD_REFCLK,
+           "dout_mif_cmu_fsys_usb20drd_refclk",
+           "gout_mif_mux_cmu_fsys_usb20drd_refclk",
+           CLK_CON_DIV_MIF_CMU_FSYS_USB20DRD_REFCLK, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_G3D_SWITCH, "dout_mif_cmu_g3d_switch",
+           "ffac_mif_mux_bus_pll_div2", CLK_CON_DIV_MIF_CMU_G3D_SWITCH, 0, 2),
+       DIV(CLK_DOUT_MIF_CMU_ISP_CAM, "dout_mif_cmu_isp_cam",
+           "gout_mif_mux_cmu_isp_cam", CLK_CON_DIV_MIF_CMU_ISP_CAM, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_ISP_ISP, "dout_mif_cmu_isp_isp",
+           "gout_mif_mux_cmu_isp_isp", CLK_CON_DIV_MIF_CMU_ISP_ISP, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_ISP_SENSOR0, "dout_mif_cmu_isp_sensor0",
+           "gout_mif_mux_cmu_isp_sensor0", CLK_CON_DIV_MIF_CMU_ISP_SENSOR0, 0,
+           6),
+       DIV(CLK_DOUT_MIF_CMU_ISP_SENSOR1, "dout_mif_cmu_isp_sensor1",
+           "gout_mif_mux_cmu_isp_sensor1", CLK_CON_DIV_MIF_CMU_ISP_SENSOR1, 0,
+           6),
+       DIV(CLK_DOUT_MIF_CMU_ISP_SENSOR2, "dout_mif_cmu_isp_sensor2",
+           "gout_mif_mux_cmu_isp_sensor2", CLK_CON_DIV_MIF_CMU_ISP_SENSOR2, 0,
+           6),
+       DIV(CLK_DOUT_MIF_CMU_ISP_VRA, "dout_mif_cmu_isp_vra",
+           "gout_mif_mux_cmu_isp_vra", CLK_CON_DIV_MIF_CMU_ISP_VRA, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_MFCMSCL_MFC, "dout_mif_cmu_mfcmscl_mfc",
+           "gout_mif_mux_cmu_mfcmscl_mfc", CLK_CON_DIV_MIF_CMU_MFCMSCL_MFC, 0,
+           4),
+       DIV(CLK_DOUT_MIF_CMU_MFCMSCL_MSCL, "dout_mif_cmu_mfcmscl_mscl",
+           "gout_mif_mux_cmu_mfcmscl_mscl", CLK_CON_DIV_MIF_CMU_MFCMSCL_MSCL,
+           0, 4),
+       DIV(CLK_DOUT_MIF_CMU_PERI_BUS, "dout_mif_cmu_peri_bus",
+           "gout_mif_mux_cmu_peri_bus", CLK_CON_DIV_MIF_CMU_PERI_BUS, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_PERI_SPI0, "dout_mif_cmu_peri_spi0",
+           "gout_mif_mux_cmu_peri_spi0", CLK_CON_DIV_MIF_CMU_PERI_SPI0, 0, 6),
+       DIV(CLK_DOUT_MIF_CMU_PERI_SPI2, "dout_mif_cmu_peri_spi2",
+           "gout_mif_mux_cmu_peri_spi2", CLK_CON_DIV_MIF_CMU_PERI_SPI2, 0, 6),
+       DIV(CLK_DOUT_MIF_CMU_PERI_SPI1, "dout_mif_cmu_peri_spi1",
+           "gout_mif_mux_cmu_peri_spi1", CLK_CON_DIV_MIF_CMU_PERI_SPI1, 0, 6),
+       DIV(CLK_DOUT_MIF_CMU_PERI_SPI4, "dout_mif_cmu_peri_spi4",
+           "gout_mif_mux_cmu_peri_spi4", CLK_CON_DIV_MIF_CMU_PERI_SPI4, 0, 6),
+       DIV(CLK_DOUT_MIF_CMU_PERI_SPI3, "dout_mif_cmu_peri_spi3",
+           "gout_mif_mux_cmu_peri_spi3", CLK_CON_DIV_MIF_CMU_PERI_SPI3, 0, 6),
+       DIV(CLK_DOUT_MIF_CMU_PERI_UART1, "dout_mif_cmu_peri_uart1",
+           "gout_mif_mux_cmu_peri_uart1", CLK_CON_DIV_MIF_CMU_PERI_UART1, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_PERI_UART2, "dout_mif_cmu_peri_uart2",
+           "gout_mif_mux_cmu_peri_uart2", CLK_CON_DIV_MIF_CMU_PERI_UART2, 0, 4),
+       DIV(CLK_DOUT_MIF_CMU_PERI_UART0, "dout_mif_cmu_peri_uart0",
+           "gout_mif_mux_cmu_peri_uart0", CLK_CON_DIV_MIF_CMU_PERI_UART0, 0, 4),
+       DIV(CLK_DOUT_MIF_APB, "dout_mif_apb", "dout_mif_busd",
+           CLK_CON_DIV_MIF_APB, 0, 2),
+       DIV(CLK_DOUT_MIF_BUSD, "dout_mif_busd", "gout_mif_mux_busd",
+           CLK_CON_DIV_MIF_BUSD, 0, 4),
+       DIV(CLK_DOUT_MIF_HSI2C, "dout_mif_hsi2c", "ffac_mif_mux_media_pll_div2",
+           CLK_CON_DIV_MIF_HSI2C, 0, 4),
+};
+
+static const struct samsung_gate_clock mif_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_MIF_CMU_DISPAUD_BUS, "gout_mif_cmu_dispaud_bus",
+            "dout_mif_cmu_dispaud_bus", CLK_CON_GAT_MIF_CMU_DISPAUD_BUS, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_DISPAUD_DECON_ECLK,
+            "gout_mif_cmu_dispaud_decon_eclk",
+            "dout_mif_cmu_dispaud_decon_eclk",
+            CLK_CON_GAT_MIF_CMU_DISPAUD_DECON_ECLK, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_DISPAUD_DECON_VCLK,
+            "gout_mif_cmu_dispaud_decon_vclk",
+            "dout_mif_cmu_dispaud_decon_vclk",
+            CLK_CON_GAT_MIF_CMU_DISPAUD_DECON_VCLK, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_FSYS_BUS, "gout_mif_cmu_fsys_bus",
+            "dout_mif_cmu_fsys_bus", CLK_CON_GAT_MIF_CMU_FSYS_BUS, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_FSYS_MMC0, "gout_mif_cmu_fsys_mmc0",
+            "dout_mif_cmu_fsys_mmc0", CLK_CON_GAT_MIF_CMU_FSYS_MMC0, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_FSYS_MMC1, "gout_mif_cmu_fsys_mmc1",
+            "dout_mif_cmu_fsys_mmc1", CLK_CON_GAT_MIF_CMU_FSYS_MMC1, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_FSYS_MMC2, "gout_mif_cmu_fsys_mmc2",
+            "dout_mif_cmu_fsys_mmc2", CLK_CON_GAT_MIF_CMU_FSYS_MMC2, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_FSYS_USB20DRD_REFCLK,
+            "gout_mif_cmu_fsys_usb20drd_refclk",
+            "dout_mif_cmu_fsys_usb20drd_refclk",
+            CLK_CON_GAT_MIF_CMU_FSYS_USB20DRD_REFCLK, 0, CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_MIF_CMU_G3D_SWITCH, "gout_mif_cmu_g3d_switch",
+            "dout_mif_cmu_g3d_switch", CLK_CON_GAT_MIF_CMU_G3D_SWITCH, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_ISP_CAM, "gout_mif_cmu_isp_cam",
+            "dout_mif_cmu_isp_cam", CLK_CON_GAT_MIF_CMU_ISP_CAM, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_ISP_ISP, "gout_mif_cmu_isp_isp",
+            "dout_mif_cmu_isp_isp", CLK_CON_GAT_MIF_CMU_ISP_ISP, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_ISP_SENSOR0, "gout_mif_cmu_isp_sensor0",
+            "dout_mif_cmu_isp_sensor0", CLK_CON_GAT_MIF_CMU_ISP_SENSOR0, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_ISP_SENSOR1, "gout_mif_cmu_isp_sensor1",
+            "dout_mif_cmu_isp_sensor1", CLK_CON_GAT_MIF_CMU_ISP_SENSOR1, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_ISP_SENSOR2, "gout_mif_cmu_isp_sensor2",
+            "dout_mif_cmu_isp_sensor2", CLK_CON_GAT_MIF_CMU_ISP_SENSOR2, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_ISP_VRA, "gout_mif_cmu_isp_vra",
+            "dout_mif_cmu_isp_vra", CLK_CON_GAT_MIF_CMU_ISP_VRA, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_MFCMSCL_MFC, "gout_mif_cmu_mfcmscl_mfc",
+            "dout_mif_cmu_mfcmscl_mfc", CLK_CON_GAT_MIF_CMU_MFCMSCL_MFC, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_MFCMSCL_MSCL, "gout_mif_cmu_mfcmscl_mscl",
+            "dout_mif_cmu_mfcmscl_mscl", CLK_CON_GAT_MIF_CMU_MFCMSCL_MSCL, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_BUS, "gout_mif_cmu_peri_bus",
+            "dout_mif_cmu_peri_bus", CLK_CON_GAT_MIF_CMU_PERI_BUS, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_SPI0, "gout_mif_cmu_peri_spi0",
+            "dout_mif_cmu_peri_spi0", CLK_CON_GAT_MIF_CMU_PERI_SPI0, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_SPI2, "gout_mif_cmu_peri_spi2",
+            "dout_mif_cmu_peri_spi2", CLK_CON_GAT_MIF_CMU_PERI_SPI2, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_SPI1, "gout_mif_cmu_peri_spi1",
+            "dout_mif_cmu_peri_spi1", CLK_CON_GAT_MIF_CMU_PERI_SPI1, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_SPI4, "gout_mif_cmu_peri_spi4",
+            "dout_mif_cmu_peri_spi4", CLK_CON_GAT_MIF_CMU_PERI_SPI4, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_SPI3, "gout_mif_cmu_peri_spi3",
+            "dout_mif_cmu_peri_spi3", CLK_CON_GAT_MIF_CMU_PERI_SPI3, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_UART1, "gout_mif_cmu_peri_uart1",
+            "dout_mif_cmu_peri_uart1", CLK_CON_GAT_MIF_CMU_PERI_UART1, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_UART2, "gout_mif_cmu_peri_uart2",
+            "dout_mif_cmu_peri_uart2", CLK_CON_GAT_MIF_CMU_PERI_UART2, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CMU_PERI_UART0, "gout_mif_cmu_peri_uart0",
+            "dout_mif_cmu_peri_uart0", CLK_CON_GAT_MIF_CMU_PERI_UART0, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_HSI2C_AP_PCLKM, "gout_mif_hsi2c_ap_pclkm",
+            "dout_mif_hsi2c", CLK_CON_GAT_MIF_HSI2C_AP_PCLKM, 0,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_HSI2C_AP_PCLKS, "gout_mif_hsi2c_ap_pclks",
+            "dout_mif_apb", CLK_CON_GAT_MIF_HSI2C_AP_PCLKS, 14, CLK_IS_CRITICAL
+            | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_HSI2C_CP_PCLKM, "gout_mif_hsi2c_cp_pclkm",
+            "dout_mif_hsi2c", CLK_CON_GAT_MIF_HSI2C_CP_PCLKM, 1,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_HSI2C_CP_PCLKS, "gout_mif_hsi2c_cp_pclks",
+            "dout_mif_apb", CLK_CON_GAT_MIF_HSI2C_CP_PCLKS, 15, CLK_IS_CRITICAL
+            | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_HSI2C_IPCLK, "gout_mif_hsi2c_ipclk", "dout_mif_hsi2c",
+            CLK_CON_GAT_MIF_HSI2C_IPCLK, 2, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_HSI2C_ITCLK, "gout_mif_hsi2c_itclk", "dout_mif_hsi2c",
+            CLK_CON_GAT_MIF_HSI2C_ITCLK, 3, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CP_PCLK_HSI2C, "gout_mif_cp_pclk_hsi2c",
+            "dout_mif_hsi2c", CLK_CON_GAT_MIF_CP_PCLK_HSI2C, 6, CLK_IS_CRITICAL
+            | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CP_PCLK_HSI2C_BAT_0, "gout_mif_cp_pclk_hsi2c_bat_0",
+            "dout_mif_hsi2c", CLK_CON_GAT_MIF_CP_PCLK_HSI2C_BAT_0, 4,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_CP_PCLK_HSI2C_BAT_1, "gout_mif_cp_pclk_hsi2c_bat_1",
+            "dout_mif_hsi2c", CLK_CON_GAT_MIF_CP_PCLK_HSI2C_BAT_1, 5,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_WRAP_ADC_IF_OSC_SYS, "gout_mif_wrap_adc_if_osc_sys",
+            "oscclk", CLK_CON_GAT_MIF_WRAP_ADC_IF_OSC_SYS, 3,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_WRAP_ADC_IF_PCLK_S0, "gout_mif_wrap_adc_if_pclk_s0",
+            "dout_mif_apb", CLK_CON_GAT_MIF_WRAP_ADC_IF_PCLK_S0, 20,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_WRAP_ADC_IF_PCLK_S1, "gout_mif_wrap_adc_if_pclk_s1",
+            "dout_mif_apb", CLK_CON_GAT_MIF_WRAP_ADC_IF_PCLK_S1, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_BUS_PLL, "gout_mif_mux_bus_pll",
+            "gout_mif_mux_bus_pll_con", CLK_CON_GAT_MIF_MUX_BUS_PLL, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_BUS_PLL_CON, "gout_mif_mux_bus_pll_con",
+            "fout_mif_bus_pll", CLK_CON_GAT_MIF_MUX_BUS_PLL_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_DISPAUD_BUS, "gout_mif_mux_cmu_dispaud_bus",
+            "mout_mif_cmu_dispaud_bus", CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_BUS,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_DISPAUD_DECON_ECLK,
+            "gout_mif_mux_cmu_dispaud_decon_eclk",
+            "mout_mif_cmu_dispaud_decon_eclk",
+            CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_DECON_ECLK, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_DISPAUD_DECON_VCLK,
+            "gout_mif_mux_cmu_dispaud_decon_vclk",
+            "mout_mif_cmu_dispaud_decon_vclk",
+            CLK_CON_GAT_MIF_MUX_CMU_DISPAUD_DECON_VCLK, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_FSYS_BUS, "gout_mif_mux_cmu_fsys_bus",
+            "mout_mif_cmu_fsys_bus", CLK_CON_GAT_MIF_MUX_CMU_FSYS_BUS, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_FSYS_MMC0, "gout_mif_mux_cmu_fsys_mmc0",
+            "mout_mif_cmu_fsys_mmc0", CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC0, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_FSYS_MMC1, "gout_mif_mux_cmu_fsys_mmc1",
+            "mout_mif_cmu_fsys_mmc1", CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC1, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_FSYS_MMC2, "gout_mif_mux_cmu_fsys_mmc2",
+            "mout_mif_cmu_fsys_mmc2", CLK_CON_GAT_MIF_MUX_CMU_FSYS_MMC2, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_FSYS_USB20DRD_REFCLK,
+            "gout_mif_mux_cmu_fsys_usb20drd_refclk",
+            "mout_mif_cmu_fsys_usb20drd_refclk",
+            CLK_CON_GAT_MIF_MUX_CMU_FSYS_USB20DRD_REFCLK, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_ISP_CAM, "gout_mif_mux_cmu_isp_cam",
+            "mout_mif_cmu_isp_cam", CLK_CON_GAT_MIF_MUX_CMU_ISP_CAM, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_ISP_ISP, "gout_mif_mux_cmu_isp_isp",
+            "mout_mif_cmu_isp_isp", CLK_CON_GAT_MIF_MUX_CMU_ISP_ISP, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_ISP_SENSOR0, "gout_mif_mux_cmu_isp_sensor0",
+            "mout_mif_cmu_isp_sensor0", CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR0,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_ISP_SENSOR1, "gout_mif_mux_cmu_isp_sensor1",
+            "mout_mif_cmu_isp_sensor1", CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR1,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_ISP_SENSOR2, "gout_mif_mux_cmu_isp_sensor2",
+            "mout_mif_cmu_isp_sensor2", CLK_CON_GAT_MIF_MUX_CMU_ISP_SENSOR2,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_ISP_VRA, "gout_mif_mux_cmu_isp_vra",
+            "mout_mif_cmu_isp_vra", CLK_CON_GAT_MIF_MUX_CMU_ISP_VRA, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_MFCMSCL_MFC, "gout_mif_mux_cmu_mfcmscl_mfc",
+            "mout_mif_cmu_mfcmscl_mfc", CLK_CON_GAT_MIF_MUX_CMU_MFCMSCL_MFC,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_MFCMSCL_MSCL, "gout_mif_mux_cmu_mfcmscl_mscl",
+            "mout_mif_cmu_mfcmscl_mscl", CLK_CON_GAT_MIF_MUX_CMU_MFCMSCL_MSCL,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_BUS, "gout_mif_mux_cmu_peri_bus",
+            "mout_mif_cmu_peri_bus", CLK_CON_GAT_MIF_MUX_CMU_PERI_BUS, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_SPI0, "gout_mif_mux_cmu_peri_spi0",
+            "mout_mif_cmu_peri_spi0", CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI0, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_SPI2, "gout_mif_mux_cmu_peri_spi2",
+            "mout_mif_cmu_peri_spi2", CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI2, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_SPI1, "gout_mif_mux_cmu_peri_spi1",
+            "mout_mif_cmu_peri_spi1", CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI1, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_SPI4, "gout_mif_mux_cmu_peri_spi4",
+            "mout_mif_cmu_peri_spi4", CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI4, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_SPI3, "gout_mif_mux_cmu_peri_spi3",
+            "mout_mif_cmu_peri_spi3", CLK_CON_GAT_MIF_MUX_CMU_PERI_SPI3, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_UART1, "gout_mif_mux_cmu_peri_uart1",
+            "mout_mif_cmu_peri_uart1", CLK_CON_GAT_MIF_MUX_CMU_PERI_UART1, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_UART2, "gout_mif_mux_cmu_peri_uart2",
+            "mout_mif_cmu_peri_uart2", CLK_CON_GAT_MIF_MUX_CMU_PERI_UART2, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_CMU_PERI_UART0, "gout_mif_mux_cmu_peri_uart0",
+            "mout_mif_cmu_peri_uart0", CLK_CON_GAT_MIF_MUX_CMU_PERI_UART0, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_BUSD, "gout_mif_mux_busd", "mout_mif_busd",
+            CLK_CON_GAT_MIF_MUX_BUSD, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_MEDIA_PLL, "gout_mif_mux_media_pll",
+            "gout_mif_mux_media_pll_con", CLK_CON_GAT_MIF_MUX_MEDIA_PLL, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_MEDIA_PLL_CON, "gout_mif_mux_media_pll_con",
+            "fout_mif_media_pll", CLK_CON_GAT_MIF_MUX_MEDIA_PLL_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_MEM_PLL, "gout_mif_mux_mem_pll",
+            "gout_mif_mux_mem_pll_con", CLK_CON_GAT_MIF_MUX_MEM_PLL, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MIF_MUX_MEM_PLL_CON, "gout_mif_mux_mem_pll_con",
+            "fout_mif_mem_pll", CLK_CON_GAT_MIF_MUX_MEM_PLL_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info mif_cmu_info __initconst = {
+       .fixed_factor_clks      = mif_fixed_factor_clks,
+       .nr_fixed_factor_clks   = ARRAY_SIZE(mif_fixed_factor_clks),
+       .pll_clks               = mif_pll_clks,
+       .nr_pll_clks            = ARRAY_SIZE(mif_pll_clks),
+       .mux_clks               = mif_mux_clks,
+       .nr_mux_clks            = ARRAY_SIZE(mif_mux_clks),
+       .div_clks               = mif_div_clks,
+       .nr_div_clks            = ARRAY_SIZE(mif_div_clks),
+       .gate_clks              = mif_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(mif_gate_clks),
+       .clk_regs               = mif_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(mif_clk_regs),
+       .nr_clk_ids             = MIF_NR_CLK,
+};
+
+/*
+ * Register offsets for CMU_DISPAUD (0x148d0000)
+ */
+#define PLL_LOCKTIME_DISPAUD_PLL                               0x0000
+#define PLL_LOCKTIME_DISPAUD_AUD_PLL                           0x00c0
+#define PLL_CON0_DISPAUD_PLL                                   0x0100
+#define PLL_CON0_DISPAUD_AUD_PLL                               0x01c0
+#define CLK_CON_GAT_DISPAUD_MUX_PLL                            0x0200
+#define CLK_CON_GAT_DISPAUD_MUX_PLL_CON                                0x0200
+#define CLK_CON_GAT_DISPAUD_MUX_AUD_PLL                                0x0204
+#define CLK_CON_GAT_DISPAUD_MUX_AUD_PLL_CON                    0x0204
+#define CLK_CON_GAT_DISPAUD_MUX_BUS_USER                       0x0210
+#define CLK_CON_MUX_DISPAUD_BUS_USER                           0x0210
+#define CLK_CON_GAT_DISPAUD_MUX_DECON_VCLK_USER                        0x0214
+#define CLK_CON_MUX_DISPAUD_DECON_VCLK_USER                    0x0214
+#define CLK_CON_GAT_DISPAUD_MUX_DECON_ECLK_USER                        0x0218
+#define CLK_CON_MUX_DISPAUD_DECON_ECLK_USER                    0x0218
+#define CLK_CON_GAT_DISPAUD_MUX_DECON_VCLK                     0x021c
+#define CLK_CON_MUX_DISPAUD_DECON_VCLK                         0x021c
+#define CLK_CON_GAT_DISPAUD_MUX_DECON_ECLK                     0x0220
+#define CLK_CON_MUX_DISPAUD_DECON_ECLK                         0x0220
+#define CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER       0x0224
+#define CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER_CON   0x0224
+#define CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER         0x0228
+#define CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER_CON     0x0228
+#define CLK_CON_GAT_DISPAUD_MUX_MI2S                           0x022c
+#define CLK_CON_MUX_DISPAUD_MI2S                               0x022c
+#define CLK_CON_DIV_DISPAUD_APB                                        0x0400
+#define CLK_CON_DIV_DISPAUD_DECON_VCLK                         0x0404
+#define CLK_CON_DIV_DISPAUD_DECON_ECLK                         0x0408
+#define CLK_CON_DIV_DISPAUD_MI2S                               0x040c
+#define CLK_CON_DIV_DISPAUD_MIXER                              0x0410
+#define CLK_CON_GAT_DISPAUD_BUS                                        0x0810
+#define CLK_CON_GAT_DISPAUD_BUS_DISP                           0x0810
+#define CLK_CON_GAT_DISPAUD_BUS_PPMU                           0x0810
+#define CLK_CON_GAT_DISPAUD_APB_AUD                            0x0814
+#define CLK_CON_GAT_DISPAUD_APB_AUD_AMP                                0x0814
+#define CLK_CON_GAT_DISPAUD_APB_DISP                           0x0814
+#define CLK_CON_GAT_DISPAUD_DECON_VCLK                         0x081c
+#define CLK_CON_GAT_DISPAUD_DECON_ECLK                         0x0820
+#define CLK_CON_GAT_DISPAUD_MI2S_AMP_I2SCODCLKI                        0x082c
+#define CLK_CON_GAT_DISPAUD_MI2S_AUD_I2SCODCLKI                        0x082c
+#define CLK_CON_GAT_DISPAUD_MIXER_AUD_SYSCLK                   0x0830
+#define CLK_CON_GAT_DISPAUD_CON_EXT2AUD_BCK_GPIO_I2S           0x0834
+#define CLK_CON_GAT_DISPAUD_CON_AUD_I2S_BCLK_BT_IN             0x0838
+#define CLK_CON_GAT_DISPAUD_CON_CP2AUD_BCK                     0x083c
+#define CLK_CON_GAT_DISPAUD_CON_AUD_I2S_BCLK_FM_IN             0x0840
+
+static const unsigned long dispaud_clk_regs[] __initconst = {
+       PLL_LOCKTIME_DISPAUD_PLL,
+       PLL_LOCKTIME_DISPAUD_AUD_PLL,
+       PLL_CON0_DISPAUD_PLL,
+       PLL_CON0_DISPAUD_AUD_PLL,
+       CLK_CON_GAT_DISPAUD_MUX_PLL,
+       CLK_CON_GAT_DISPAUD_MUX_PLL_CON,
+       CLK_CON_GAT_DISPAUD_MUX_AUD_PLL,
+       CLK_CON_GAT_DISPAUD_MUX_AUD_PLL_CON,
+       CLK_CON_GAT_DISPAUD_MUX_BUS_USER,
+       CLK_CON_MUX_DISPAUD_BUS_USER,
+       CLK_CON_GAT_DISPAUD_MUX_DECON_VCLK_USER,
+       CLK_CON_MUX_DISPAUD_DECON_VCLK_USER,
+       CLK_CON_GAT_DISPAUD_MUX_DECON_ECLK_USER,
+       CLK_CON_MUX_DISPAUD_DECON_ECLK_USER,
+       CLK_CON_GAT_DISPAUD_MUX_DECON_VCLK,
+       CLK_CON_MUX_DISPAUD_DECON_VCLK,
+       CLK_CON_GAT_DISPAUD_MUX_DECON_ECLK,
+       CLK_CON_MUX_DISPAUD_DECON_ECLK,
+       CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER,
+       CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER_CON,
+       CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER,
+       CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER_CON,
+       CLK_CON_GAT_DISPAUD_MUX_MI2S,
+       CLK_CON_MUX_DISPAUD_MI2S,
+       CLK_CON_DIV_DISPAUD_APB,
+       CLK_CON_DIV_DISPAUD_DECON_VCLK,
+       CLK_CON_DIV_DISPAUD_DECON_ECLK,
+       CLK_CON_DIV_DISPAUD_MI2S,
+       CLK_CON_DIV_DISPAUD_MIXER,
+       CLK_CON_GAT_DISPAUD_BUS,
+       CLK_CON_GAT_DISPAUD_BUS_DISP,
+       CLK_CON_GAT_DISPAUD_BUS_PPMU,
+       CLK_CON_GAT_DISPAUD_APB_AUD,
+       CLK_CON_GAT_DISPAUD_APB_AUD_AMP,
+       CLK_CON_GAT_DISPAUD_APB_DISP,
+       CLK_CON_GAT_DISPAUD_DECON_VCLK,
+       CLK_CON_GAT_DISPAUD_DECON_ECLK,
+       CLK_CON_GAT_DISPAUD_MI2S_AMP_I2SCODCLKI,
+       CLK_CON_GAT_DISPAUD_MI2S_AUD_I2SCODCLKI,
+       CLK_CON_GAT_DISPAUD_MIXER_AUD_SYSCLK,
+       CLK_CON_GAT_DISPAUD_CON_EXT2AUD_BCK_GPIO_I2S,
+       CLK_CON_GAT_DISPAUD_CON_AUD_I2S_BCLK_BT_IN,
+       CLK_CON_GAT_DISPAUD_CON_CP2AUD_BCK,
+       CLK_CON_GAT_DISPAUD_CON_AUD_I2S_BCLK_FM_IN,
+};
+
+static const struct samsung_fixed_rate_clock dispaud_fixed_clks[] __initconst = {
+       FRATE(0, "frat_dispaud_audiocdclk0", NULL, 0, 100000000),
+       FRATE(0, "frat_dispaud_mixer_bclk_bt", NULL, 0, 12500000),
+       FRATE(0, "frat_dispaud_mixer_bclk_cp", NULL, 0, 12500000),
+       FRATE(0, "frat_dispaud_mixer_bclk_fm", NULL, 0, 12500000),
+       FRATE(0, "frat_dispaud_mixer_sclk_ap", NULL, 0, 12500000),
+       FRATE(0, "frat_dispaud_mipiphy_rxclkesc0", NULL, 0, 188000000),
+       FRATE(0, "frat_dispaud_mipiphy_txbyteclkhs", NULL, 0, 188000000),
+};
+
+static const struct samsung_pll_clock dispaud_pll_clks[] __initconst = {
+       PLL(pll_1417x, CLK_FOUT_DISPAUD_AUD_PLL, "fout_dispaud_aud_pll",
+           "oscclk", PLL_LOCKTIME_DISPAUD_AUD_PLL, PLL_CON0_DISPAUD_AUD_PLL,
+           NULL),
+       PLL(pll_1417x, CLK_FOUT_DISPAUD_PLL, "fout_dispaud_pll", "oscclk",
+           PLL_LOCKTIME_DISPAUD_PLL, PLL_CON0_DISPAUD_PLL, NULL),
+};
+
+/* List of parent clocks for muxes in CMU_DISPAUD */
+PNAME(mout_dispaud_bus_user_p)         = { "oscclk", "gout_mif_cmu_dispaud_bus" };
+PNAME(mout_dispaud_decon_eclk_user_p)  = { "oscclk",
+                                           "gout_mif_cmu_dispaud_decon_eclk" };
+PNAME(mout_dispaud_decon_vclk_user_p)  = { "oscclk",
+                                           "gout_mif_cmu_dispaud_decon_vclk" };
+PNAME(mout_dispaud_decon_eclk_p)       = { "gout_dispaud_mux_decon_eclk_user",
+                                           "gout_dispaud_mux_pll_con" };
+PNAME(mout_dispaud_decon_vclk_p)       = { "gout_dispaud_mux_decon_vclk_user",
+                                           "gout_dispaud_mux_pll_con" };
+PNAME(mout_dispaud_mi2s_p)             = { "gout_dispaud_mux_aud_pll_con",
+                                           "frat_dispaud_audiocdclk0" };
+
+static const struct samsung_mux_clock dispaud_mux_clks[] __initconst = {
+       MUX(CLK_MOUT_DISPAUD_BUS_USER, "mout_dispaud_bus_user",
+           mout_dispaud_bus_user_p, CLK_CON_MUX_DISPAUD_BUS_USER, 12, 1),
+       MUX(CLK_MOUT_DISPAUD_DECON_ECLK_USER, "mout_dispaud_decon_eclk_user",
+           mout_dispaud_decon_eclk_user_p, CLK_CON_MUX_DISPAUD_DECON_ECLK_USER,
+           12, 1),
+       MUX(CLK_MOUT_DISPAUD_DECON_VCLK_USER, "mout_dispaud_decon_vclk_user",
+           mout_dispaud_decon_vclk_user_p, CLK_CON_MUX_DISPAUD_DECON_VCLK_USER,
+           12, 1),
+       MUX(CLK_MOUT_DISPAUD_DECON_ECLK, "mout_dispaud_decon_eclk",
+           mout_dispaud_decon_eclk_p, CLK_CON_MUX_DISPAUD_DECON_ECLK, 12, 1),
+       MUX(CLK_MOUT_DISPAUD_DECON_VCLK, "mout_dispaud_decon_vclk",
+           mout_dispaud_decon_vclk_p, CLK_CON_MUX_DISPAUD_DECON_VCLK, 12, 1),
+       MUX(CLK_MOUT_DISPAUD_MI2S, "mout_dispaud_mi2s", mout_dispaud_mi2s_p,
+           CLK_CON_MUX_DISPAUD_MI2S, 12, 1),
+};
+
+static const struct samsung_div_clock dispaud_div_clks[] __initconst = {
+       DIV(CLK_DOUT_DISPAUD_APB, "dout_dispaud_apb",
+           "gout_dispaud_mux_bus_user", CLK_CON_DIV_DISPAUD_APB, 0, 2),
+       DIV(CLK_DOUT_DISPAUD_DECON_ECLK, "dout_dispaud_decon_eclk",
+           "gout_dispaud_mux_decon_eclk", CLK_CON_DIV_DISPAUD_DECON_ECLK, 0, 3),
+       DIV(CLK_DOUT_DISPAUD_DECON_VCLK, "dout_dispaud_decon_vclk",
+           "gout_dispaud_mux_decon_vclk", CLK_CON_DIV_DISPAUD_DECON_VCLK, 0, 3),
+       DIV(CLK_DOUT_DISPAUD_MI2S, "dout_dispaud_mi2s", "gout_dispaud_mux_mi2s",
+           CLK_CON_DIV_DISPAUD_MI2S, 0, 4),
+       DIV(CLK_DOUT_DISPAUD_MIXER, "dout_dispaud_mixer",
+           "gout_dispaud_mux_aud_pll_con", CLK_CON_DIV_DISPAUD_MIXER, 0, 4),
+};
+
+static const struct samsung_gate_clock dispaud_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_DISPAUD_BUS, "gout_dispaud_bus",
+            "gout_dispaud_mux_bus_user", CLK_CON_GAT_DISPAUD_BUS, 0,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_BUS_DISP, "gout_dispaud_bus_disp",
+            "gout_dispaud_mux_bus_user", CLK_CON_GAT_DISPAUD_BUS_DISP, 2,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_BUS_PPMU, "gout_dispaud_bus_ppmu",
+            "gout_dispaud_mux_bus_user", CLK_CON_GAT_DISPAUD_BUS_PPMU, 3,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_APB_AUD, "gout_dispaud_apb_aud",
+            "dout_dispaud_apb", CLK_CON_GAT_DISPAUD_APB_AUD, 2,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_APB_AUD_AMP, "gout_dispaud_apb_aud_amp",
+            "dout_dispaud_apb", CLK_CON_GAT_DISPAUD_APB_AUD_AMP, 3,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_APB_DISP, "gout_dispaud_apb_disp",
+            "dout_dispaud_apb", CLK_CON_GAT_DISPAUD_APB_DISP, 1,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_CON_AUD_I2S_BCLK_BT_IN,
+            "gout_dispaud_con_aud_i2s_bclk_bt_in",
+            "frat_dispaud_mixer_bclk_bt",
+            CLK_CON_GAT_DISPAUD_CON_AUD_I2S_BCLK_BT_IN, 0, CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_DISPAUD_CON_AUD_I2S_BCLK_FM_IN,
+            "gout_dispaud_con_aud_i2s_bclk_fm_in",
+            "frat_dispaud_mixer_bclk_fm",
+            CLK_CON_GAT_DISPAUD_CON_AUD_I2S_BCLK_FM_IN, 0, CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_DISPAUD_CON_CP2AUD_BCK, "gout_dispaud_con_cp2aud_bck",
+            "frat_dispaud_mixer_bclk_cp", CLK_CON_GAT_DISPAUD_CON_CP2AUD_BCK,
+            0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_CON_EXT2AUD_BCK_GPIO_I2S,
+            "gout_dispaud_con_ext2aud_bck_gpio_i2s",
+            "frat_dispaud_mixer_sclk_ap",
+            CLK_CON_GAT_DISPAUD_CON_EXT2AUD_BCK_GPIO_I2S, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_DECON_ECLK, "gout_dispaud_decon_eclk",
+            "dout_dispaud_decon_eclk", CLK_CON_GAT_DISPAUD_DECON_ECLK, 0,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_DECON_VCLK, "gout_dispaud_decon_vclk",
+            "dout_dispaud_decon_vclk", CLK_CON_GAT_DISPAUD_DECON_VCLK, 0,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MI2S_AMP_I2SCODCLKI,
+            "gout_dispaud_mi2s_amp_i2scodclki", "dout_dispaud_mi2s",
+            CLK_CON_GAT_DISPAUD_MI2S_AMP_I2SCODCLKI, 1, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MI2S_AUD_I2SCODCLKI,
+            "gout_dispaud_mi2s_aud_i2scodclki", "dout_dispaud_mi2s",
+            CLK_CON_GAT_DISPAUD_MI2S_AUD_I2SCODCLKI, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MIXER_AUD_SYSCLK, "gout_dispaud_mixer_aud_sysclk",
+            "dout_dispaud_mixer", CLK_CON_GAT_DISPAUD_MIXER_AUD_SYSCLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_AUD_PLL, "gout_dispaud_mux_aud_pll",
+            "gout_dispaud_mux_aud_pll_con", CLK_CON_GAT_DISPAUD_MUX_AUD_PLL,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_AUD_PLL_CON, "gout_dispaud_mux_aud_pll_con",
+            "fout_dispaud_aud_pll", CLK_CON_GAT_DISPAUD_MUX_AUD_PLL_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_BUS_USER, "gout_dispaud_mux_bus_user",
+            "mout_dispaud_bus_user", CLK_CON_GAT_DISPAUD_MUX_BUS_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_DECON_ECLK_USER,
+            "gout_dispaud_mux_decon_eclk_user", "mout_dispaud_decon_eclk_user",
+            CLK_CON_GAT_DISPAUD_MUX_DECON_ECLK_USER, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_DECON_VCLK_USER,
+            "gout_dispaud_mux_decon_vclk_user", "mout_dispaud_decon_vclk_user",
+            CLK_CON_GAT_DISPAUD_MUX_DECON_VCLK_USER, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER,
+            "gout_dispaud_mux_mipiphy_rxclkesc0_user",
+            "gout_dispaud_mux_mipiphy_rxclkesc0_user_con",
+            CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER, 21, CLK_IS_CRITICAL
+            | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER_CON,
+            "gout_dispaud_mux_mipiphy_rxclkesc0_user_con",
+            "frat_dispaud_mipiphy_rxclkesc0",
+            CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_RXCLKESC0_USER_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER,
+            "gout_dispaud_mux_mipiphy_txbyteclkhs_user",
+            "gout_dispaud_mux_mipiphy_txbyteclkhs_user_con",
+            CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER_CON,
+            "gout_dispaud_mux_mipiphy_txbyteclkhs_user_con",
+            "frat_dispaud_mipiphy_txbyteclkhs",
+            CLK_CON_GAT_DISPAUD_MUX_MIPIPHY_TXBYTECLKHS_USER_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_DECON_ECLK, "gout_dispaud_mux_decon_eclk",
+            "mout_dispaud_decon_eclk", CLK_CON_GAT_DISPAUD_MUX_DECON_ECLK, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_DECON_VCLK, "gout_dispaud_mux_decon_vclk",
+            "mout_dispaud_decon_vclk", CLK_CON_GAT_DISPAUD_MUX_DECON_VCLK, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_MI2S, "gout_dispaud_mux_mi2s",
+            "mout_dispaud_mi2s", CLK_CON_GAT_DISPAUD_MUX_MI2S, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_PLL, "gout_dispaud_mux_pll",
+            "gout_dispaud_mux_pll_con", CLK_CON_GAT_DISPAUD_MUX_PLL, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_DISPAUD_MUX_PLL_CON, "gout_dispaud_mux_pll_con",
+            "fout_dispaud_pll", CLK_CON_GAT_DISPAUD_MUX_PLL_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info dispaud_cmu_info __initconst = {
+       .fixed_clks     = dispaud_fixed_clks,
+       .nr_fixed_clks  = ARRAY_SIZE(dispaud_fixed_clks),
+       .pll_clks               = dispaud_pll_clks,
+       .nr_pll_clks            = ARRAY_SIZE(dispaud_pll_clks),
+       .mux_clks               = dispaud_mux_clks,
+       .nr_mux_clks            = ARRAY_SIZE(dispaud_mux_clks),
+       .div_clks               = dispaud_div_clks,
+       .nr_div_clks            = ARRAY_SIZE(dispaud_div_clks),
+       .gate_clks              = dispaud_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(dispaud_gate_clks),
+       .clk_regs               = dispaud_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(dispaud_clk_regs),
+       .nr_clk_ids             = DISPAUD_NR_CLK,
+};
+
+/*
+ * Register offsets for CMU_FSYS (0x13730000)
+ */
+#define PLL_LOCKTIME_FSYS_USB_PLL                      0x0000
+#define PLL_CON0_FSYS_USB_PLL                          0x0100
+#define CLK_CON_GAT_FSYS_MUX_USB_PLL                   0x0200
+#define CLK_CON_GAT_FSYS_MUX_USB_PLL_CON               0x0200
+#define CLK_CON_GAT_FSYS_MUX_USB20DRD_PHYCLOCK_USER    0x0230
+#define CLK_CON_GAT_FSYS_MUX_USB20DRD_PHYCLOCK_USER_CON        0x0230
+#define CLK_CON_GAT_FSYS_BUSP3_HCLK                    0x0804
+#define CLK_CON_GAT_FSYS_MMC0_ACLK                     0x0804
+#define CLK_CON_GAT_FSYS_MMC1_ACLK                     0x0804
+#define CLK_CON_GAT_FSYS_MMC2_ACLK                     0x0804
+#define CLK_CON_GAT_FSYS_PDMA0_ACLK_PDMA0              0x0804
+#define CLK_CON_GAT_FSYS_PPMU_ACLK                     0x0804
+#define CLK_CON_GAT_FSYS_PPMU_PCLK                     0x0804
+#define CLK_CON_GAT_FSYS_SROMC_HCLK                    0x0804
+#define CLK_CON_GAT_FSYS_UPSIZER_BUS1_ACLK             0x0804
+#define CLK_CON_GAT_FSYS_USB20DRD_ACLK_HSDRD           0x0804
+#define CLK_CON_GAT_FSYS_USB20DRD_HCLK_USB20_CTRL      0x0804
+#define CLK_CON_GAT_FSYS_USB20DRD_HSDRD_REF_CLK                0x0828
+
+static const unsigned long fsys_clk_regs[] __initconst = {
+       PLL_LOCKTIME_FSYS_USB_PLL,
+       PLL_CON0_FSYS_USB_PLL,
+       CLK_CON_GAT_FSYS_MUX_USB_PLL,
+       CLK_CON_GAT_FSYS_MUX_USB_PLL_CON,
+       CLK_CON_GAT_FSYS_MUX_USB20DRD_PHYCLOCK_USER,
+       CLK_CON_GAT_FSYS_MUX_USB20DRD_PHYCLOCK_USER_CON,
+       CLK_CON_GAT_FSYS_BUSP3_HCLK,
+       CLK_CON_GAT_FSYS_MMC0_ACLK,
+       CLK_CON_GAT_FSYS_MMC1_ACLK,
+       CLK_CON_GAT_FSYS_MMC2_ACLK,
+       CLK_CON_GAT_FSYS_PDMA0_ACLK_PDMA0,
+       CLK_CON_GAT_FSYS_PPMU_ACLK,
+       CLK_CON_GAT_FSYS_PPMU_PCLK,
+       CLK_CON_GAT_FSYS_SROMC_HCLK,
+       CLK_CON_GAT_FSYS_UPSIZER_BUS1_ACLK,
+       CLK_CON_GAT_FSYS_USB20DRD_ACLK_HSDRD,
+       CLK_CON_GAT_FSYS_USB20DRD_HCLK_USB20_CTRL,
+       CLK_CON_GAT_FSYS_USB20DRD_HSDRD_REF_CLK,
+};
+
+static const struct samsung_fixed_rate_clock fsys_fixed_clks[] __initconst = {
+       FRATE(0, "frat_fsys_usb20drd_phyclock", NULL, 0, 60000000),
+};
+
+static const struct samsung_pll_clock fsys_pll_clks[] __initconst = {
+       PLL(pll_1417x, CLK_FOUT_FSYS_USB_PLL, "fout_fsys_usb_pll", "oscclk",
+           PLL_LOCKTIME_FSYS_USB_PLL, PLL_CON0_FSYS_USB_PLL, NULL),
+};
+
+static const struct samsung_gate_clock fsys_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_FSYS_BUSP3_HCLK, "gout_fsys_busp3_hclk",
+            "gout_mif_cmu_fsys_bus", CLK_CON_GAT_FSYS_BUSP3_HCLK, 2,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MMC0_ACLK, "gout_fsys_mmc0_aclk",
+            "gout_fsys_busp3_hclk", CLK_CON_GAT_FSYS_MMC0_ACLK, 8,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MMC1_ACLK, "gout_fsys_mmc1_aclk",
+            "gout_fsys_busp3_hclk", CLK_CON_GAT_FSYS_MMC1_ACLK, 9,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MMC2_ACLK, "gout_fsys_mmc2_aclk",
+            "gout_fsys_busp3_hclk", CLK_CON_GAT_FSYS_MMC2_ACLK, 10,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_PDMA0_ACLK_PDMA0, "gout_fsys_pdma0_aclk_pdma0",
+            "gout_fsys_upsizer_bus1_aclk", CLK_CON_GAT_FSYS_PDMA0_ACLK_PDMA0,
+            7, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_PPMU_ACLK, "gout_fsys_ppmu_aclk",
+            "gout_mif_cmu_fsys_bus", CLK_CON_GAT_FSYS_PPMU_ACLK, 17,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_PPMU_PCLK, "gout_fsys_ppmu_pclk",
+            "gout_mif_cmu_fsys_bus", CLK_CON_GAT_FSYS_PPMU_PCLK, 18,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_SROMC_HCLK, "gout_fsys_sromc_hclk",
+            "gout_fsys_busp3_hclk", CLK_CON_GAT_FSYS_SROMC_HCLK, 6,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_UPSIZER_BUS1_ACLK, "gout_fsys_upsizer_bus1_aclk",
+            "gout_mif_cmu_fsys_bus", CLK_CON_GAT_FSYS_UPSIZER_BUS1_ACLK, 12,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_USB20DRD_ACLK_HSDRD, "gout_fsys_usb20drd_aclk_hsdrd",
+            "gout_fsys_busp3_hclk", CLK_CON_GAT_FSYS_USB20DRD_ACLK_HSDRD, 20,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_USB20DRD_HCLK_USB20_CTRL,
+            "gout_fsys_usb20drd_hclk_usb20_ctrl", "gout_fsys_busp3_hclk",
+            CLK_CON_GAT_FSYS_USB20DRD_HCLK_USB20_CTRL, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_USB20DRD_HSDRD_REF_CLK,
+            "gout_fsys_usb20drd_hsdrd_ref_clk",
+            "gout_mif_cmu_fsys_usb20drd_refclk",
+            CLK_CON_GAT_FSYS_USB20DRD_HSDRD_REF_CLK, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MUX_USB20DRD_PHYCLOCK_USER,
+            "gout_fsys_mux_usb20drd_phyclock_user",
+            "gout_fsys_mux_usb20drd_phyclock_user_con",
+            CLK_CON_GAT_FSYS_MUX_USB20DRD_PHYCLOCK_USER, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MUX_USB20DRD_PHYCLOCK_USER_CON,
+            "gout_fsys_mux_usb20drd_phyclock_user_con",
+            "frat_fsys_usb20drd_phyclock",
+            CLK_CON_GAT_FSYS_MUX_USB20DRD_PHYCLOCK_USER_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MUX_USB_PLL, "gout_fsys_mux_usb_pll",
+            "gout_fsys_mux_usb_pll_con", CLK_CON_GAT_FSYS_MUX_USB_PLL, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_FSYS_MUX_USB_PLL_CON, "gout_fsys_mux_usb_pll_con",
+            "fout_fsys_usb_pll", CLK_CON_GAT_FSYS_MUX_USB_PLL_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info fsys_cmu_info __initconst = {
+       .fixed_clks     = fsys_fixed_clks,
+       .nr_fixed_clks  = ARRAY_SIZE(fsys_fixed_clks),
+       .pll_clks               = fsys_pll_clks,
+       .nr_pll_clks            = ARRAY_SIZE(fsys_pll_clks),
+       .gate_clks              = fsys_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(fsys_gate_clks),
+       .clk_regs               = fsys_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(fsys_clk_regs),
+       .nr_clk_ids             = FSYS_NR_CLK,
+};
+
+/*
+ * Register offsets for CMU_G3D (0x11460000)
+ */
+#define PLL_LOCKTIME_G3D_PLL           0x0000
+#define PLL_CON0_G3D_PLL               0x0100
+#define CLK_CON_GAT_G3D_MUX_PLL                0x0200
+#define CLK_CON_GAT_G3D_MUX_PLL_CON    0x0200
+#define CLK_CON_GAT_G3D_MUX_SWITCH_USER        0x0204
+#define CLK_CON_MUX_G3D_SWITCH_USER    0x0204
+#define CLK_CON_GAT_G3D_MUX            0x0208
+#define CLK_CON_MUX_G3D                        0x0208
+#define CLK_CON_DIV_G3D_BUS            0x0400
+#define CLK_CON_DIV_G3D_APB            0x0404
+#define CLK_CON_GAT_G3D_ASYNCS_D0_CLK  0x0804
+#define CLK_CON_GAT_G3D_ASYNC_PCLKM    0x0804
+#define CLK_CON_GAT_G3D_CLK            0x0804
+#define CLK_CON_GAT_G3D_PPMU_ACLK      0x0804
+#define CLK_CON_GAT_G3D_QE_ACLK                0x0804
+#define CLK_CON_GAT_G3D_PPMU_PCLK      0x0808
+#define CLK_CON_GAT_G3D_QE_PCLK                0x0808
+#define CLK_CON_GAT_G3D_SYSREG_PCLK    0x0808
+
+static const unsigned long g3d_clk_regs[] __initconst = {
+       PLL_LOCKTIME_G3D_PLL,
+       PLL_CON0_G3D_PLL,
+       CLK_CON_GAT_G3D_MUX_PLL,
+       CLK_CON_GAT_G3D_MUX_PLL_CON,
+       CLK_CON_GAT_G3D_MUX_SWITCH_USER,
+       CLK_CON_MUX_G3D_SWITCH_USER,
+       CLK_CON_GAT_G3D_MUX,
+       CLK_CON_MUX_G3D,
+       CLK_CON_DIV_G3D_BUS,
+       CLK_CON_DIV_G3D_APB,
+       CLK_CON_GAT_G3D_ASYNCS_D0_CLK,
+       CLK_CON_GAT_G3D_ASYNC_PCLKM,
+       CLK_CON_GAT_G3D_CLK,
+       CLK_CON_GAT_G3D_PPMU_ACLK,
+       CLK_CON_GAT_G3D_QE_ACLK,
+       CLK_CON_GAT_G3D_PPMU_PCLK,
+       CLK_CON_GAT_G3D_QE_PCLK,
+       CLK_CON_GAT_G3D_SYSREG_PCLK,
+};
+
+static const struct samsung_pll_clock g3d_pll_clks[] __initconst = {
+       PLL(pll_1417x, CLK_FOUT_G3D_PLL, "fout_g3d_pll", "oscclk",
+           PLL_LOCKTIME_G3D_PLL, PLL_CON0_G3D_PLL, NULL),
+};
+
+/* List of parent clocks for muxes in CMU_G3D */
+PNAME(mout_g3d_switch_user_p)  = { "oscclk", "gout_mif_cmu_g3d_switch" };
+PNAME(mout_g3d_p)              = { "gout_g3d_mux_pll_con",
+                                   "gout_g3d_mux_switch_user" };
+
+static const struct samsung_mux_clock g3d_mux_clks[] __initconst = {
+       MUX(CLK_MOUT_G3D_SWITCH_USER, "mout_g3d_switch_user",
+           mout_g3d_switch_user_p, CLK_CON_MUX_G3D_SWITCH_USER, 12, 1),
+       MUX(CLK_MOUT_G3D, "mout_g3d", mout_g3d_p, CLK_CON_MUX_G3D, 12, 1),
+};
+
+static const struct samsung_div_clock g3d_div_clks[] __initconst = {
+       DIV(CLK_DOUT_G3D_APB, "dout_g3d_apb", "dout_g3d_bus",
+           CLK_CON_DIV_G3D_APB, 0, 3),
+       DIV(CLK_DOUT_G3D_BUS, "dout_g3d_bus", "gout_g3d_mux",
+           CLK_CON_DIV_G3D_BUS, 0, 3),
+};
+
+static const struct samsung_gate_clock g3d_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_G3D_ASYNCS_D0_CLK, "gout_g3d_asyncs_d0_clk",
+            "dout_g3d_bus", CLK_CON_GAT_G3D_ASYNCS_D0_CLK, 1, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_ASYNC_PCLKM, "gout_g3d_async_pclkm", "dout_g3d_bus",
+            CLK_CON_GAT_G3D_ASYNC_PCLKM, 0, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_CLK, "gout_g3d_clk", "dout_g3d_bus",
+            CLK_CON_GAT_G3D_CLK, 6, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_PPMU_ACLK, "gout_g3d_ppmu_aclk", "dout_g3d_bus",
+            CLK_CON_GAT_G3D_PPMU_ACLK, 7, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_PPMU_PCLK, "gout_g3d_ppmu_pclk", "dout_g3d_apb",
+            CLK_CON_GAT_G3D_PPMU_PCLK, 4, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_QE_ACLK, "gout_g3d_qe_aclk", "dout_g3d_bus",
+            CLK_CON_GAT_G3D_QE_ACLK, 8, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_G3D_QE_PCLK, "gout_g3d_qe_pclk", "dout_g3d_apb",
+            CLK_CON_GAT_G3D_QE_PCLK, 5, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_G3D_SYSREG_PCLK, "gout_g3d_sysreg_pclk", "dout_g3d_apb",
+            CLK_CON_GAT_G3D_SYSREG_PCLK, 6, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_MUX_SWITCH_USER, "gout_g3d_mux_switch_user",
+            "mout_g3d_switch_user", CLK_CON_GAT_G3D_MUX_SWITCH_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_MUX, "gout_g3d_mux", "mout_g3d", CLK_CON_GAT_G3D_MUX,
+            21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_G3D_MUX_PLL, "gout_g3d_mux_pll", "gout_g3d_mux_pll_con",
+            CLK_CON_GAT_G3D_MUX_PLL, 21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_G3D_MUX_PLL_CON, "gout_g3d_mux_pll_con", "fout_g3d_pll",
+            CLK_CON_GAT_G3D_MUX_PLL_CON, 12, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info g3d_cmu_info __initconst = {
+       .pll_clks               = g3d_pll_clks,
+       .nr_pll_clks            = ARRAY_SIZE(g3d_pll_clks),
+       .mux_clks               = g3d_mux_clks,
+       .nr_mux_clks            = ARRAY_SIZE(g3d_mux_clks),
+       .div_clks               = g3d_div_clks,
+       .nr_div_clks            = ARRAY_SIZE(g3d_div_clks),
+       .gate_clks              = g3d_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(g3d_gate_clks),
+       .clk_regs               = g3d_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(g3d_clk_regs),
+       .nr_clk_ids             = G3D_NR_CLK,
+};
+
+/*
+ * Register offsets for CMU_ISP (0x144d0000)
+ */
+#define PLL_LOCKTIME_ISP_PLL                                   0x0000
+#define PLL_CON0_ISP_PLL                                       0x0100
+#define CLK_CON_GAT_ISP_MUX_PLL                                        0x0200
+#define CLK_CON_GAT_ISP_MUX_PLL_CON                            0x0200
+#define CLK_CON_GAT_ISP_MUX_VRA_USER                           0x0210
+#define CLK_CON_MUX_ISP_VRA_USER                               0x0210
+#define CLK_CON_GAT_ISP_MUX_CAM_USER                           0x0214
+#define CLK_CON_MUX_ISP_CAM_USER                               0x0214
+#define CLK_CON_GAT_ISP_MUX_USER                               0x0218
+#define CLK_CON_MUX_ISP_USER                                   0x0218
+#define CLK_CON_GAT_ISP_MUX_VRA                                        0x0220
+#define CLK_CON_MUX_ISP_VRA                                    0x0220
+#define CLK_CON_GAT_ISP_MUX_CAM                                        0x0224
+#define CLK_CON_MUX_ISP_CAM                                    0x0224
+#define CLK_CON_GAT_ISP_MUX_ISP                                        0x0228
+#define CLK_CON_MUX_ISP_ISP                                    0x0228
+#define CLK_CON_GAT_ISP_MUX_ISPD                               0x022c
+#define CLK_CON_MUX_ISP_ISPD                                   0x022c
+#define CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER          0x0230
+#define CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER_CON      0x0230
+#define CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER          0x0234
+#define CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER_CON      0x0234
+#define CLK_CON_DIV_ISP_APB                                    0x0400
+#define CLK_CON_DIV_ISP_CAM_HALF                               0x0404
+#define CLK_CON_GAT_ISP_VRA                                    0x0810
+#define CLK_CON_GAT_ISP_ISPD                                   0x0818
+#define CLK_CON_GAT_ISP_ISPD_PPMU                              0x0818
+#define CLK_CON_GAT_ISP_CAM                                    0x081c
+#define CLK_CON_GAT_ISP_CAM_HALF                               0x0820
+
+static const unsigned long isp_clk_regs[] __initconst = {
+       PLL_LOCKTIME_ISP_PLL,
+       PLL_CON0_ISP_PLL,
+       CLK_CON_GAT_ISP_MUX_PLL,
+       CLK_CON_GAT_ISP_MUX_PLL_CON,
+       CLK_CON_GAT_ISP_MUX_VRA_USER,
+       CLK_CON_MUX_ISP_VRA_USER,
+       CLK_CON_GAT_ISP_MUX_CAM_USER,
+       CLK_CON_MUX_ISP_CAM_USER,
+       CLK_CON_GAT_ISP_MUX_USER,
+       CLK_CON_MUX_ISP_USER,
+       CLK_CON_GAT_ISP_MUX_VRA,
+       CLK_CON_MUX_ISP_VRA,
+       CLK_CON_GAT_ISP_MUX_CAM,
+       CLK_CON_MUX_ISP_CAM,
+       CLK_CON_GAT_ISP_MUX_ISP,
+       CLK_CON_MUX_ISP_ISP,
+       CLK_CON_GAT_ISP_MUX_ISPD,
+       CLK_CON_MUX_ISP_ISPD,
+       CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER,
+       CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER_CON,
+       CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER,
+       CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER_CON,
+       CLK_CON_DIV_ISP_APB,
+       CLK_CON_DIV_ISP_CAM_HALF,
+       CLK_CON_GAT_ISP_VRA,
+       CLK_CON_GAT_ISP_ISPD,
+       CLK_CON_GAT_ISP_ISPD_PPMU,
+       CLK_CON_GAT_ISP_CAM,
+       CLK_CON_GAT_ISP_CAM_HALF,
+};
+
+static const struct samsung_fixed_rate_clock isp_fixed_clks[] __initconst = {
+       FRATE(0, "frat_isp_rxbyteclkhs0_sensor0", NULL, 0, 188000000),
+       FRATE(0, "frat_isp_rxbyteclkhs0_sensor1", NULL, 0, 188000000),
+};
+
+static const struct samsung_pll_clock isp_pll_clks[] __initconst = {
+       PLL(pll_1417x, CLK_FOUT_ISP_PLL, "fout_isp_pll", "oscclk",
+           PLL_LOCKTIME_ISP_PLL, PLL_CON0_ISP_PLL, NULL),
+};
+
+/* List of parent clocks for muxes in CMU_ISP */
+PNAME(mout_isp_cam_user_p)     = { "oscclk", "gout_mif_cmu_isp_cam" };
+PNAME(mout_isp_user_p)         = { "oscclk", "gout_mif_cmu_isp_isp" };
+PNAME(mout_isp_vra_user_p)     = { "oscclk", "gout_mif_cmu_isp_vra" };
+PNAME(mout_isp_cam_p)          = { "gout_isp_mux_cam_user",
+                                   "gout_isp_mux_pll_con" };
+PNAME(mout_isp_isp_p)          = { "gout_isp_mux_user", "gout_isp_mux_pll_con" };
+PNAME(mout_isp_ispd_p)         = { "gout_isp_mux_vra", "gout_isp_mux_cam" };
+PNAME(mout_isp_vra_p)          = { "gout_isp_mux_vra_user",
+                                   "gout_isp_mux_pll_con" };
+
+static const struct samsung_mux_clock isp_mux_clks[] __initconst = {
+       MUX(CLK_MOUT_ISP_CAM_USER, "mout_isp_cam_user", mout_isp_cam_user_p,
+           CLK_CON_MUX_ISP_CAM_USER, 12, 1),
+       MUX(CLK_MOUT_ISP_USER, "mout_isp_user", mout_isp_user_p,
+           CLK_CON_MUX_ISP_USER, 12, 1),
+       MUX(CLK_MOUT_ISP_VRA_USER, "mout_isp_vra_user", mout_isp_vra_user_p,
+           CLK_CON_MUX_ISP_VRA_USER, 12, 1),
+       MUX(CLK_MOUT_ISP_CAM, "mout_isp_cam", mout_isp_cam_p,
+           CLK_CON_MUX_ISP_CAM, 12, 1),
+       MUX(CLK_MOUT_ISP_ISP, "mout_isp_isp", mout_isp_isp_p,
+           CLK_CON_MUX_ISP_ISP, 12, 1),
+       MUX(CLK_MOUT_ISP_ISPD, "mout_isp_ispd", mout_isp_ispd_p,
+           CLK_CON_MUX_ISP_ISPD, 12, 1),
+       MUX(CLK_MOUT_ISP_VRA, "mout_isp_vra", mout_isp_vra_p,
+           CLK_CON_MUX_ISP_VRA, 12, 1),
+};
+
+static const struct samsung_div_clock isp_div_clks[] __initconst = {
+       DIV(CLK_DOUT_ISP_APB, "dout_isp_apb", "gout_isp_mux_vra",
+           CLK_CON_DIV_ISP_APB, 0, 2),
+       DIV(CLK_DOUT_ISP_CAM_HALF, "dout_isp_cam_half", "gout_isp_mux_cam",
+           CLK_CON_DIV_ISP_CAM_HALF, 0, 2),
+};
+
+static const struct samsung_gate_clock isp_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_ISP_CAM, "gout_isp_cam", "gout_isp_mux_cam",
+            CLK_CON_GAT_ISP_CAM, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_CAM_HALF, "gout_isp_cam_half", "dout_isp_cam_half",
+            CLK_CON_GAT_ISP_CAM_HALF, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_ISPD, "gout_isp_ispd", "gout_isp_mux_ispd",
+            CLK_CON_GAT_ISP_ISPD, 0, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_ISPD_PPMU, "gout_isp_ispd_ppmu", "gout_isp_mux_ispd",
+            CLK_CON_GAT_ISP_ISPD_PPMU, 1, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_VRA, "gout_isp_vra", "gout_isp_mux_vra",
+            CLK_CON_GAT_ISP_VRA, 0, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_CAM_USER, "gout_isp_mux_cam_user",
+            "mout_isp_cam_user", CLK_CON_GAT_ISP_MUX_CAM_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_USER, "gout_isp_mux_user", "mout_isp_user",
+            CLK_CON_GAT_ISP_MUX_USER, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_VRA_USER, "gout_isp_mux_vra_user",
+            "mout_isp_vra_user", CLK_CON_GAT_ISP_MUX_VRA_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER,
+            "gout_isp_mux_rxbyteclkhs0_sensor1_user",
+            "gout_isp_mux_rxbyteclkhs0_sensor1_user_con",
+            CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER, 21, CLK_IS_CRITICAL
+            | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER_CON,
+            "gout_isp_mux_rxbyteclkhs0_sensor1_user_con",
+            "frat_isp_rxbyteclkhs0_sensor1",
+            CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR1_USER_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER,
+            "gout_isp_mux_rxbyteclkhs0_sensor0_user",
+            "gout_isp_mux_rxbyteclkhs0_sensor0_user_con",
+            CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER, 21, CLK_IS_CRITICAL
+            | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER_CON,
+            "gout_isp_mux_rxbyteclkhs0_sensor0_user_con",
+            "frat_isp_rxbyteclkhs0_sensor0",
+            CLK_CON_GAT_ISP_MUX_RXBYTECLKHS0_SENSOR0_USER_CON, 12,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_CAM, "gout_isp_mux_cam", "mout_isp_cam",
+            CLK_CON_GAT_ISP_MUX_CAM, 21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_ISP_MUX_ISP, "gout_isp_mux_isp", "mout_isp_isp",
+            CLK_CON_GAT_ISP_MUX_ISP, 21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_ISP_MUX_ISPD, "gout_isp_mux_ispd", "mout_isp_ispd",
+            CLK_CON_GAT_ISP_MUX_ISPD, 21, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_ISP_MUX_VRA, "gout_isp_mux_vra", "mout_isp_vra",
+            CLK_CON_GAT_ISP_MUX_VRA, 21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_ISP_MUX_PLL, "gout_isp_mux_pll", "gout_isp_mux_pll_con",
+            CLK_CON_GAT_ISP_MUX_PLL, 21, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
+            0),
+       GATE(CLK_GOUT_ISP_MUX_PLL_CON, "gout_isp_mux_pll_con", "fout_isp_pll",
+            CLK_CON_GAT_ISP_MUX_PLL_CON, 12, CLK_IS_CRITICAL |
+            CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info isp_cmu_info __initconst = {
+       .fixed_clks     = isp_fixed_clks,
+       .nr_fixed_clks  = ARRAY_SIZE(isp_fixed_clks),
+       .pll_clks               = isp_pll_clks,
+       .nr_pll_clks            = ARRAY_SIZE(isp_pll_clks),
+       .mux_clks               = isp_mux_clks,
+       .nr_mux_clks            = ARRAY_SIZE(isp_mux_clks),
+       .div_clks               = isp_div_clks,
+       .nr_div_clks            = ARRAY_SIZE(isp_div_clks),
+       .gate_clks              = isp_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(isp_gate_clks),
+       .clk_regs               = isp_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(isp_clk_regs),
+       .nr_clk_ids             = ISP_NR_CLK,
+};
+
+/*
+ * Register offsets for CMU_MFCMSCL (0x12cb0000)
+ */
+#define CLK_CON_GAT_MFCMSCL_MUX_MSCL_USER      0x0200
+#define CLK_CON_MUX_MFCMSCL_MSCL_USER          0x0200
+#define CLK_CON_GAT_MFCMSCL_MUX_MFC_USER       0x0204
+#define CLK_CON_MUX_MFCMSCL_MFC_USER           0x0204
+#define CLK_CON_DIV_MFCMSCL_APB                        0x0400
+#define CLK_CON_GAT_MFCMSCL_MSCL               0x0804
+#define CLK_CON_GAT_MFCMSCL_MSCL_BI            0x0804
+#define CLK_CON_GAT_MFCMSCL_MSCL_D             0x0804
+#define CLK_CON_GAT_MFCMSCL_MSCL_JPEG          0x0804
+#define CLK_CON_GAT_MFCMSCL_MSCL_POLY          0x0804
+#define CLK_CON_GAT_MFCMSCL_MSCL_PPMU          0x0804
+#define CLK_CON_GAT_MFCMSCL_MFC                        0x0808
+
+static const unsigned long mfcmscl_clk_regs[] __initconst = {
+       CLK_CON_GAT_MFCMSCL_MUX_MSCL_USER,
+       CLK_CON_MUX_MFCMSCL_MSCL_USER,
+       CLK_CON_GAT_MFCMSCL_MUX_MFC_USER,
+       CLK_CON_MUX_MFCMSCL_MFC_USER,
+       CLK_CON_DIV_MFCMSCL_APB,
+       CLK_CON_GAT_MFCMSCL_MSCL,
+       CLK_CON_GAT_MFCMSCL_MSCL_BI,
+       CLK_CON_GAT_MFCMSCL_MSCL_D,
+       CLK_CON_GAT_MFCMSCL_MSCL_JPEG,
+       CLK_CON_GAT_MFCMSCL_MSCL_POLY,
+       CLK_CON_GAT_MFCMSCL_MSCL_PPMU,
+       CLK_CON_GAT_MFCMSCL_MFC,
+};
+
+/* List of parent clocks for muxes in CMU_MFCMSCL */
+PNAME(mout_mfcmscl_mfc_user_p) = { "oscclk", "gout_mif_cmu_mfcmscl_mfc" };
+PNAME(mout_mfcmscl_mscl_user_p)        = { "oscclk", "gout_mif_cmu_mfcmscl_mscl" };
+
+static const struct samsung_mux_clock mfcmscl_mux_clks[] __initconst = {
+       MUX(CLK_MOUT_MFCMSCL_MFC_USER, "mout_mfcmscl_mfc_user",
+           mout_mfcmscl_mfc_user_p, CLK_CON_MUX_MFCMSCL_MFC_USER, 12, 1),
+       MUX(CLK_MOUT_MFCMSCL_MSCL_USER, "mout_mfcmscl_mscl_user",
+           mout_mfcmscl_mscl_user_p, CLK_CON_MUX_MFCMSCL_MSCL_USER, 12, 1),
+};
+
+static const struct samsung_div_clock mfcmscl_div_clks[] __initconst = {
+       DIV(CLK_DOUT_MFCMSCL_APB, "dout_mfcmscl_apb",
+           "gout_mfcmscl_mux_mscl_user", CLK_CON_DIV_MFCMSCL_APB, 0, 2),
+};
+
+static const struct samsung_gate_clock mfcmscl_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_MFCMSCL_MFC, "gout_mfcmscl_mfc",
+            "gout_mfcmscl_mux_mfc_user", CLK_CON_GAT_MFCMSCL_MFC, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MSCL, "gout_mfcmscl_mscl",
+            "gout_mfcmscl_mux_mscl_user", CLK_CON_GAT_MFCMSCL_MSCL, 0,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MSCL_BI, "gout_mfcmscl_mscl_bi",
+            "gout_mfcmscl_mscl_d", CLK_CON_GAT_MFCMSCL_MSCL_BI, 4,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MSCL_D, "gout_mfcmscl_mscl_d",
+            "gout_mfcmscl_mux_mscl_user", CLK_CON_GAT_MFCMSCL_MSCL_D, 1,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MSCL_JPEG, "gout_mfcmscl_mscl_jpeg",
+            "gout_mfcmscl_mscl_d", CLK_CON_GAT_MFCMSCL_MSCL_JPEG, 2,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MSCL_POLY, "gout_mfcmscl_mscl_poly",
+            "gout_mfcmscl_mscl_d", CLK_CON_GAT_MFCMSCL_MSCL_POLY, 3,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MSCL_PPMU, "gout_mfcmscl_mscl_ppmu",
+            "gout_mfcmscl_mux_mscl_user", CLK_CON_GAT_MFCMSCL_MSCL_PPMU, 5,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MUX_MFC_USER, "gout_mfcmscl_mux_mfc_user",
+            "mout_mfcmscl_mfc_user", CLK_CON_GAT_MFCMSCL_MUX_MFC_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_MFCMSCL_MUX_MSCL_USER, "gout_mfcmscl_mux_mscl_user",
+            "mout_mfcmscl_mscl_user", CLK_CON_GAT_MFCMSCL_MUX_MSCL_USER, 21,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info mfcmscl_cmu_info __initconst = {
+       .mux_clks               = mfcmscl_mux_clks,
+       .nr_mux_clks            = ARRAY_SIZE(mfcmscl_mux_clks),
+       .div_clks               = mfcmscl_div_clks,
+       .nr_div_clks            = ARRAY_SIZE(mfcmscl_div_clks),
+       .gate_clks              = mfcmscl_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(mfcmscl_gate_clks),
+       .clk_regs               = mfcmscl_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(mfcmscl_clk_regs),
+       .nr_clk_ids             = MFCMSCL_NR_CLK,
+};
+
+/*
+ * Register offsets for CMU_PERI (0x101f0000)
+ */
+#define CLK_CON_GAT_PERI_PWM_MOTOR_OSCCLK      0x0800
+#define CLK_CON_GAT_PERI_TMU_CPUCL0_CLK                0x0800
+#define CLK_CON_GAT_PERI_TMU_CPUCL1_CLK                0x0800
+#define CLK_CON_GAT_PERI_TMU_CLK               0x0800
+#define CLK_CON_GAT_PERI_BUSP1_PERIC0_HCLK     0x0810
+#define CLK_CON_GAT_PERI_GPIO2_PCLK            0x0810
+#define CLK_CON_GAT_PERI_GPIO5_PCLK            0x0810
+#define CLK_CON_GAT_PERI_GPIO6_PCLK            0x0810
+#define CLK_CON_GAT_PERI_GPIO7_PCLK            0x0810
+#define CLK_CON_GAT_PERI_HSI2C4_IPCLK          0x0810
+#define CLK_CON_GAT_PERI_HSI2C6_IPCLK          0x0810
+#define CLK_CON_GAT_PERI_HSI2C3_IPCLK          0x0810
+#define CLK_CON_GAT_PERI_HSI2C5_IPCLK          0x0810
+#define CLK_CON_GAT_PERI_HSI2C2_IPCLK          0x0810
+#define CLK_CON_GAT_PERI_HSI2C1_IPCLK          0x0810
+#define CLK_CON_GAT_PERI_I2C0_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C4_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C5_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C6_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C7_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C8_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C3_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C2_PCLK             0x0810
+#define CLK_CON_GAT_PERI_I2C1_PCLK             0x0810
+#define CLK_CON_GAT_PERI_MCT_PCLK              0x0810
+#define CLK_CON_GAT_PERI_PWM_MOTOR_PCLK_S0     0x0810
+#define CLK_CON_GAT_PERI_SFRIF_TMU_CPUCL0_PCLK 0x0814
+#define CLK_CON_GAT_PERI_SFRIF_TMU_CPUCL1_PCLK 0x0814
+#define CLK_CON_GAT_PERI_SFRIF_TMU_PCLK                0x0814
+#define CLK_CON_GAT_PERI_SPI0_PCLK             0x0814
+#define CLK_CON_GAT_PERI_SPI2_PCLK             0x0814
+#define CLK_CON_GAT_PERI_SPI1_PCLK             0x0814
+#define CLK_CON_GAT_PERI_SPI4_PCLK             0x0814
+#define CLK_CON_GAT_PERI_SPI3_PCLK             0x0814
+#define CLK_CON_GAT_PERI_UART1_PCLK            0x0814
+#define CLK_CON_GAT_PERI_UART2_PCLK            0x0814
+#define CLK_CON_GAT_PERI_UART0_PCLK            0x0814
+#define CLK_CON_GAT_PERI_WDT_CPUCL0_PCLK       0x0814
+#define CLK_CON_GAT_PERI_WDT_CPUCL1_PCLK       0x0814
+#define CLK_CON_GAT_PERI_UART1_EXT_UCLK                0x0830
+#define CLK_CON_GAT_PERI_UART2_EXT_UCLK                0x0834
+#define CLK_CON_GAT_PERI_UART0_EXT_UCLK                0x0838
+#define CLK_CON_GAT_PERI_SPI2_SPI_EXT_CLK      0x083c
+#define CLK_CON_GAT_PERI_SPI1_SPI_EXT_CLK      0x0840
+#define CLK_CON_GAT_PERI_SPI0_SPI_EXT_CLK      0x0844
+#define CLK_CON_GAT_PERI_SPI3_SPI_EXT_CLK      0x0848
+#define CLK_CON_GAT_PERI_SPI4_SPI_EXT_CLK      0x084c
+
+static const unsigned long peri_clk_regs[] __initconst = {
+       CLK_CON_GAT_PERI_PWM_MOTOR_OSCCLK,
+       CLK_CON_GAT_PERI_TMU_CPUCL0_CLK,
+       CLK_CON_GAT_PERI_TMU_CPUCL1_CLK,
+       CLK_CON_GAT_PERI_TMU_CLK,
+       CLK_CON_GAT_PERI_BUSP1_PERIC0_HCLK,
+       CLK_CON_GAT_PERI_GPIO2_PCLK,
+       CLK_CON_GAT_PERI_GPIO5_PCLK,
+       CLK_CON_GAT_PERI_GPIO6_PCLK,
+       CLK_CON_GAT_PERI_GPIO7_PCLK,
+       CLK_CON_GAT_PERI_HSI2C4_IPCLK,
+       CLK_CON_GAT_PERI_HSI2C6_IPCLK,
+       CLK_CON_GAT_PERI_HSI2C3_IPCLK,
+       CLK_CON_GAT_PERI_HSI2C5_IPCLK,
+       CLK_CON_GAT_PERI_HSI2C2_IPCLK,
+       CLK_CON_GAT_PERI_HSI2C1_IPCLK,
+       CLK_CON_GAT_PERI_I2C0_PCLK,
+       CLK_CON_GAT_PERI_I2C4_PCLK,
+       CLK_CON_GAT_PERI_I2C5_PCLK,
+       CLK_CON_GAT_PERI_I2C6_PCLK,
+       CLK_CON_GAT_PERI_I2C7_PCLK,
+       CLK_CON_GAT_PERI_I2C8_PCLK,
+       CLK_CON_GAT_PERI_I2C3_PCLK,
+       CLK_CON_GAT_PERI_I2C2_PCLK,
+       CLK_CON_GAT_PERI_I2C1_PCLK,
+       CLK_CON_GAT_PERI_MCT_PCLK,
+       CLK_CON_GAT_PERI_PWM_MOTOR_PCLK_S0,
+       CLK_CON_GAT_PERI_SFRIF_TMU_CPUCL0_PCLK,
+       CLK_CON_GAT_PERI_SFRIF_TMU_CPUCL1_PCLK,
+       CLK_CON_GAT_PERI_SFRIF_TMU_PCLK,
+       CLK_CON_GAT_PERI_SPI0_PCLK,
+       CLK_CON_GAT_PERI_SPI2_PCLK,
+       CLK_CON_GAT_PERI_SPI1_PCLK,
+       CLK_CON_GAT_PERI_SPI4_PCLK,
+       CLK_CON_GAT_PERI_SPI3_PCLK,
+       CLK_CON_GAT_PERI_UART1_PCLK,
+       CLK_CON_GAT_PERI_UART2_PCLK,
+       CLK_CON_GAT_PERI_UART0_PCLK,
+       CLK_CON_GAT_PERI_WDT_CPUCL0_PCLK,
+       CLK_CON_GAT_PERI_WDT_CPUCL1_PCLK,
+       CLK_CON_GAT_PERI_UART1_EXT_UCLK,
+       CLK_CON_GAT_PERI_UART2_EXT_UCLK,
+       CLK_CON_GAT_PERI_UART0_EXT_UCLK,
+       CLK_CON_GAT_PERI_SPI2_SPI_EXT_CLK,
+       CLK_CON_GAT_PERI_SPI1_SPI_EXT_CLK,
+       CLK_CON_GAT_PERI_SPI0_SPI_EXT_CLK,
+       CLK_CON_GAT_PERI_SPI3_SPI_EXT_CLK,
+       CLK_CON_GAT_PERI_SPI4_SPI_EXT_CLK,
+};
+
+static const struct samsung_gate_clock peri_gate_clks[] __initconst = {
+       GATE(CLK_GOUT_PERI_BUSP1_PERIC0_HCLK, "gout_peri_busp1_peric0_hclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_BUSP1_PERIC0_HCLK, 3,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_GPIO2_PCLK, "gout_peri_gpio2_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_GPIO2_PCLK, 7,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_GPIO5_PCLK, "gout_peri_gpio5_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_GPIO5_PCLK, 8,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_GPIO6_PCLK, "gout_peri_gpio6_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_GPIO6_PCLK, 9,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_GPIO7_PCLK, "gout_peri_gpio7_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_GPIO7_PCLK, 10,
+            CLK_IS_CRITICAL | CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_HSI2C4_IPCLK, "gout_peri_hsi2c4_ipclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_HSI2C4_IPCLK, 14,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_HSI2C6_IPCLK, "gout_peri_hsi2c6_ipclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_HSI2C6_IPCLK, 16,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_HSI2C3_IPCLK, "gout_peri_hsi2c3_ipclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_HSI2C3_IPCLK, 13,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_HSI2C5_IPCLK, "gout_peri_hsi2c5_ipclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_HSI2C5_IPCLK, 15,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_HSI2C2_IPCLK, "gout_peri_hsi2c2_ipclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_HSI2C2_IPCLK, 12,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_HSI2C1_IPCLK, "gout_peri_hsi2c1_ipclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_HSI2C1_IPCLK, 11,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C0_PCLK, "gout_peri_i2c0_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C0_PCLK, 21,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C4_PCLK, "gout_peri_i2c4_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C4_PCLK, 17,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C5_PCLK, "gout_peri_i2c5_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C5_PCLK, 18,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C6_PCLK, "gout_peri_i2c6_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C6_PCLK, 19,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C7_PCLK, "gout_peri_i2c7_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C7_PCLK, 24,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C8_PCLK, "gout_peri_i2c8_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C8_PCLK, 25,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C3_PCLK, "gout_peri_i2c3_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C3_PCLK, 20,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C2_PCLK, "gout_peri_i2c2_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C2_PCLK, 22,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_I2C1_PCLK, "gout_peri_i2c1_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_I2C1_PCLK, 23,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_MCT_PCLK, "gout_peri_mct_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_MCT_PCLK, 26,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_PWM_MOTOR_OSCCLK, "gout_peri_pwm_motor_oscclk",
+            "oscclk", CLK_CON_GAT_PERI_PWM_MOTOR_OSCCLK, 2,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_PWM_MOTOR_PCLK_S0, "gout_peri_pwm_motor_pclk_s0",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_PWM_MOTOR_PCLK_S0, 29,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SFRIF_TMU_CPUCL0_PCLK,
+            "gout_peri_sfrif_tmu_cpucl0_pclk", "gout_mif_cmu_peri_bus",
+            CLK_CON_GAT_PERI_SFRIF_TMU_CPUCL0_PCLK, 1, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SFRIF_TMU_CPUCL1_PCLK,
+            "gout_peri_sfrif_tmu_cpucl1_pclk", "gout_mif_cmu_peri_bus",
+            CLK_CON_GAT_PERI_SFRIF_TMU_CPUCL1_PCLK, 2, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SFRIF_TMU_PCLK, "gout_peri_sfrif_tmu_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_SFRIF_TMU_PCLK, 3,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI0_PCLK, "gout_peri_spi0_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_SPI0_PCLK, 6,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI0_SPI_EXT_CLK, "gout_peri_spi0_spi_ext_clk",
+            "gout_mif_cmu_peri_spi0", CLK_CON_GAT_PERI_SPI0_SPI_EXT_CLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI2_PCLK, "gout_peri_spi2_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_SPI2_PCLK, 4,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI2_SPI_EXT_CLK, "gout_peri_spi2_spi_ext_clk",
+            "gout_mif_cmu_peri_spi2", CLK_CON_GAT_PERI_SPI2_SPI_EXT_CLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI1_PCLK, "gout_peri_spi1_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_SPI1_PCLK, 5,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI1_SPI_EXT_CLK, "gout_peri_spi1_spi_ext_clk",
+            "gout_mif_cmu_peri_spi1", CLK_CON_GAT_PERI_SPI1_SPI_EXT_CLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI4_PCLK, "gout_peri_spi4_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_SPI4_PCLK, 8,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI4_SPI_EXT_CLK, "gout_peri_spi4_spi_ext_clk",
+            "gout_mif_cmu_peri_spi4", CLK_CON_GAT_PERI_SPI4_SPI_EXT_CLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI3_PCLK, "gout_peri_spi3_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_SPI3_PCLK, 7,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_SPI3_SPI_EXT_CLK, "gout_peri_spi3_spi_ext_clk",
+            "gout_mif_cmu_peri_spi3", CLK_CON_GAT_PERI_SPI3_SPI_EXT_CLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_TMU_CPUCL0_CLK, "gout_peri_tmu_cpucl0_clk", "oscclk",
+            CLK_CON_GAT_PERI_TMU_CPUCL0_CLK, 4, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_TMU_CPUCL1_CLK, "gout_peri_tmu_cpucl1_clk", "oscclk",
+            CLK_CON_GAT_PERI_TMU_CPUCL1_CLK, 5, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_TMU_CLK, "gout_peri_tmu_clk", "oscclk",
+            CLK_CON_GAT_PERI_TMU_CLK, 6, CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_UART1_EXT_UCLK, "gout_peri_uart1_ext_uclk",
+            "gout_mif_cmu_peri_uart1", CLK_CON_GAT_PERI_UART1_EXT_UCLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_UART1_PCLK, "gout_peri_uart1_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_UART1_PCLK, 11,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_UART2_EXT_UCLK, "gout_peri_uart2_ext_uclk",
+            "gout_mif_cmu_peri_uart2", CLK_CON_GAT_PERI_UART2_EXT_UCLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_UART2_PCLK, "gout_peri_uart2_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_UART2_PCLK, 12,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_UART0_EXT_UCLK, "gout_peri_uart0_ext_uclk",
+            "gout_mif_cmu_peri_uart0", CLK_CON_GAT_PERI_UART0_EXT_UCLK, 0,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_UART0_PCLK, "gout_peri_uart0_pclk",
+            "gout_peri_busp1_peric0_hclk", CLK_CON_GAT_PERI_UART0_PCLK, 10,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_WDT_CPUCL0_PCLK, "gout_peri_wdt_cpucl0_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_WDT_CPUCL0_PCLK, 13,
+            CLK_SET_RATE_PARENT, 0),
+       GATE(CLK_GOUT_PERI_WDT_CPUCL1_PCLK, "gout_peri_wdt_cpucl1_pclk",
+            "gout_mif_cmu_peri_bus", CLK_CON_GAT_PERI_WDT_CPUCL1_PCLK, 14,
+            CLK_SET_RATE_PARENT, 0),
+};
+
+static const struct samsung_cmu_info peri_cmu_info __initconst = {
+       .gate_clks              = peri_gate_clks,
+       .nr_gate_clks           = ARRAY_SIZE(peri_gate_clks),
+       .clk_regs               = peri_clk_regs,
+       .nr_clk_regs            = ARRAY_SIZE(peri_clk_regs),
+       .nr_clk_ids             = PERI_NR_CLK,
+};
+
+static int __init exynos7870_cmu_probe(struct platform_device *pdev)
+{
+       const struct samsung_cmu_info *info;
+       struct device *dev = &pdev->dev;
+
+       info = of_device_get_match_data(dev);
+       exynos_arm64_register_cmu(dev, dev->of_node, info);
+
+       return 0;
+}
+
+static const struct of_device_id exynos7870_cmu_of_match[] = {
+       {
+               .compatible = "samsung,exynos7870-cmu-mif",
+               .data = &mif_cmu_info,
+       }, {
+               .compatible = "samsung,exynos7870-cmu-dispaud",
+               .data = &dispaud_cmu_info,
+       }, {
+               .compatible = "samsung,exynos7870-cmu-fsys",
+               .data = &fsys_cmu_info,
+       }, {
+               .compatible = "samsung,exynos7870-cmu-g3d",
+               .data = &g3d_cmu_info,
+       }, {
+               .compatible = "samsung,exynos7870-cmu-isp",
+               .data = &isp_cmu_info,
+       }, {
+               .compatible = "samsung,exynos7870-cmu-mfcmscl",
+               .data = &mfcmscl_cmu_info,
+       }, {
+               .compatible = "samsung,exynos7870-cmu-peri",
+               .data = &peri_cmu_info,
+       }, {
+       },
+};
+
+static struct platform_driver exynos7870_cmu_driver __refdata = {
+       .driver = {
+               .name = "exynos7870-cmu",
+               .of_match_table = exynos7870_cmu_of_match,
+               .suppress_bind_attrs = true,
+       },
+       .probe = exynos7870_cmu_probe,
+};
+
+static int __init exynos7870_cmu_init(void)
+{
+       return platform_driver_register(&exynos7870_cmu_driver);
+}
+core_initcall(exynos7870_cmu_init);