|
@@ -667,3 +667,174 @@ static struct clksrc_sources clkset_audio1 = {
|
|
|
.nr_sources = ARRAY_SIZE(clkset_audio1_list),
|
|
|
};
|
|
|
|
|
|
+#ifdef CONFIG_CPU_S3C6410
|
|
|
+static struct clk *clkset_audio2_list[] = {
|
|
|
+ [0] = &clk_mout_epll.clk,
|
|
|
+ [1] = &clk_dout_mpll,
|
|
|
+ [2] = &clk_fin_epll,
|
|
|
+ [3] = &clk_iisv4_cd,
|
|
|
+ [4] = &clk_pcm_cd,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_sources clkset_audio2 = {
|
|
|
+ .sources = clkset_audio2_list,
|
|
|
+ .nr_sources = ARRAY_SIZE(clkset_audio2_list),
|
|
|
+};
|
|
|
+#endif
|
|
|
+
|
|
|
+static struct clksrc_clk clksrcs[] = {
|
|
|
+ {
|
|
|
+ .clk = {
|
|
|
+ .name = "usb-bus-host",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 5, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV1, .shift = 20, .size = 4 },
|
|
|
+ .sources = &clkset_uhost,
|
|
|
+ }, {
|
|
|
+ .clk = {
|
|
|
+ .name = "irda-bus",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_IRDA,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 24, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 20, .size = 4 },
|
|
|
+ .sources = &clkset_irda,
|
|
|
+ }, {
|
|
|
+ .clk = {
|
|
|
+ .name = "camera",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_CAM,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ .parent = &clk_h2,
|
|
|
+ },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV0, .shift = 20, .size = 4 },
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+/* Where does UCLK0 come from? */
|
|
|
+static struct clksrc_clk clk_sclk_uclk = {
|
|
|
+ .clk = {
|
|
|
+ .name = "uclk1",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_UART,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 13, .size = 1 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 16, .size = 4 },
|
|
|
+ .sources = &clkset_uart,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_sclk_mmc0 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "mmc_bus",
|
|
|
+ .devname = "s3c-sdhci.0",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_MMC0,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 18, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV1, .shift = 0, .size = 4 },
|
|
|
+ .sources = &clkset_spi_mmc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_sclk_mmc1 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "mmc_bus",
|
|
|
+ .devname = "s3c-sdhci.1",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_MMC1,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 20, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV1, .shift = 4, .size = 4 },
|
|
|
+ .sources = &clkset_spi_mmc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_sclk_mmc2 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "mmc_bus",
|
|
|
+ .devname = "s3c-sdhci.2",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_MMC2,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 22, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV1, .shift = 8, .size = 4 },
|
|
|
+ .sources = &clkset_spi_mmc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_sclk_spi0 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "spi-bus",
|
|
|
+ .devname = "s3c6410-spi.0",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_SPI0,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 14, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 0, .size = 4 },
|
|
|
+ .sources = &clkset_spi_mmc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_sclk_spi1 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "spi-bus",
|
|
|
+ .devname = "s3c6410-spi.1",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_SPI1,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 16, .size = 2 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 4, .size = 4 },
|
|
|
+ .sources = &clkset_spi_mmc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_audio_bus0 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "audio-bus",
|
|
|
+ .devname = "samsung-i2s.0",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_AUDIO0,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 7, .size = 3 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 8, .size = 4 },
|
|
|
+ .sources = &clkset_audio0,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk clk_audio_bus1 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "audio-bus",
|
|
|
+ .devname = "samsung-i2s.1",
|
|
|
+ .ctrlbit = S3C_CLKCON_SCLK_AUDIO1,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C_CLK_SRC, .shift = 10, .size = 3 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 12, .size = 4 },
|
|
|
+ .sources = &clkset_audio1,
|
|
|
+};
|
|
|
+
|
|
|
+#ifdef CONFIG_CPU_S3C6410
|
|
|
+static struct clksrc_clk clk_audio_bus2 = {
|
|
|
+ .clk = {
|
|
|
+ .name = "audio-bus",
|
|
|
+ .devname = "samsung-i2s.2",
|
|
|
+ .ctrlbit = S3C6410_CLKCON_SCLK_AUDIO2,
|
|
|
+ .enable = s3c64xx_sclk_ctrl,
|
|
|
+ },
|
|
|
+ .reg_src = { .reg = S3C6410_CLK_SRC2, .shift = 0, .size = 3 },
|
|
|
+ .reg_div = { .reg = S3C_CLK_DIV2, .shift = 24, .size = 4 },
|
|
|
+ .sources = &clkset_audio2,
|
|
|
+};
|
|
|
+#endif
|
|
|
+/* Clock initialisation code */
|
|
|
+
|
|
|
+static struct clksrc_clk *init_parents[] = {
|
|
|
+ &clk_mout_apll,
|
|
|
+ &clk_mout_epll,
|
|
|
+ &clk_mout_mpll,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clksrc_clk *clksrc_cdev[] = {
|
|
|
+ &clk_sclk_uclk,
|
|
|
+ &clk_sclk_mmc0,
|
|
|
+ &clk_sclk_mmc1,
|
|
|
+ &clk_sclk_mmc2,
|
|
|
+ &clk_sclk_spi0,
|
|
|
+ &clk_sclk_spi1,
|
|
|
+ &clk_audio_bus0,
|
|
|
+ &clk_audio_bus1,
|