mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 17:04:50 -04:00
Merge branch 'next-samsung-cleanup-mmc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into samsung/cleanup
This commit is contained in:
@@ -58,6 +58,5 @@ obj-$(CONFIG_EXYNOS4_SETUP_I2C5) += setup-i2c5.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_I2C6) += setup-i2c6.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_I2C7) += setup-i2c7.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_KEYPAD) += setup-keypad.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
obj-$(CONFIG_EXYNOS4_SETUP_USB_PHY) += setup-usb-phy.o
|
||||
|
||||
@@ -1154,42 +1154,6 @@ static struct clksrc_clk clksrcs[] = {
|
||||
.sources = &clkset_mout_mfc,
|
||||
.reg_src = { .reg = S5P_CLKSRC_MFC, .shift = 8, .size = 1 },
|
||||
.reg_div = { .reg = S5P_CLKDIV_MFC, .shift = 0, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_dout_mmc0.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 0),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_dout_mmc1.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 4),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_dout_mmc2.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 8),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.3",
|
||||
.parent = &clk_dout_mmc3.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 12),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_dwmmc",
|
||||
@@ -1249,6 +1213,50 @@ static struct clksrc_clk clk_sclk_uart3 = {
|
||||
.reg_div = { .reg = S5P_CLKDIV_PERIL0, .shift = 12, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc0 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_dout_mmc0.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 0),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 8, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc1 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_dout_mmc1.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 4),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS1, .shift = 24, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc2 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_dout_mmc2.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 8),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 8, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc3 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.3",
|
||||
.parent = &clk_dout_mmc3.clk,
|
||||
.enable = exynos4_clksrc_mask_fsys_ctrl,
|
||||
.ctrlbit = (1 << 12),
|
||||
},
|
||||
.reg_div = { .reg = S5P_CLKDIV_FSYS2, .shift = 24, .size = 8 },
|
||||
};
|
||||
|
||||
/* Clock initialization code */
|
||||
static struct clksrc_clk *sysclks[] = {
|
||||
&clk_mout_apll,
|
||||
@@ -1293,6 +1301,10 @@ static struct clksrc_clk *clksrc_cdev[] = {
|
||||
&clk_sclk_uart1,
|
||||
&clk_sclk_uart2,
|
||||
&clk_sclk_uart3,
|
||||
&clk_sclk_mmc0,
|
||||
&clk_sclk_mmc1,
|
||||
&clk_sclk_mmc2,
|
||||
&clk_sclk_mmc3,
|
||||
};
|
||||
|
||||
static struct clk_lookup exynos4_clk_lookup[] = {
|
||||
@@ -1300,6 +1312,10 @@ static struct clk_lookup exynos4_clk_lookup[] = {
|
||||
CLKDEV_INIT("exynos4210-uart.1", "clk_uart_baud0", &clk_sclk_uart1.clk),
|
||||
CLKDEV_INIT("exynos4210-uart.2", "clk_uart_baud0", &clk_sclk_uart2.clk),
|
||||
CLKDEV_INIT("exynos4210-uart.3", "clk_uart_baud0", &clk_sclk_uart3.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &clk_sclk_mmc3.clk),
|
||||
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &clk_pdma0),
|
||||
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &clk_pdma1),
|
||||
};
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
/* linux/arch/arm/mach-exynos4/setup-sdhci.c
|
||||
*
|
||||
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* EXYNOS4 - Helper functions for settign up SDHCI device(s) (HSMMC)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
|
||||
|
||||
char *exynos4_hsmmc_clksrcs[4] = {
|
||||
[0] = NULL,
|
||||
[1] = NULL,
|
||||
[2] = "sclk_mmc", /* mmc_bus */
|
||||
[3] = NULL,
|
||||
};
|
||||
@@ -15,7 +15,6 @@ obj-$(CONFIG_S3C2416_PM) += pm.o
|
||||
#obj-$(CONFIG_S3C2416_DMA) += dma.o
|
||||
|
||||
# Device setup
|
||||
obj-$(CONFIG_S3C2416_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_S3C2416_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
|
||||
# Machine support
|
||||
|
||||
@@ -90,39 +90,38 @@ static struct clksrc_clk hsmmc_div[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct clksrc_clk hsmmc_mux[] = {
|
||||
[0] = {
|
||||
.clk = {
|
||||
.name = "hsmmc-if",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.ctrlbit = (1 << 6),
|
||||
.enable = s3c2443_clkcon_enable_s,
|
||||
},
|
||||
.sources = &(struct clksrc_sources) {
|
||||
.nr_sources = 2,
|
||||
.sources = (struct clk *[]) {
|
||||
[0] = &hsmmc_div[0].clk,
|
||||
[1] = NULL, /* to fix */
|
||||
},
|
||||
},
|
||||
.reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 16 },
|
||||
static struct clksrc_clk hsmmc_mux0 = {
|
||||
.clk = {
|
||||
.name = "hsmmc-if",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.ctrlbit = (1 << 6),
|
||||
.enable = s3c2443_clkcon_enable_s,
|
||||
},
|
||||
[1] = {
|
||||
.clk = {
|
||||
.name = "hsmmc-if",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.ctrlbit = (1 << 12),
|
||||
.enable = s3c2443_clkcon_enable_s,
|
||||
.sources = &(struct clksrc_sources) {
|
||||
.nr_sources = 2,
|
||||
.sources = (struct clk * []) {
|
||||
[0] = &hsmmc_div[0].clk,
|
||||
[1] = NULL, /* to fix */
|
||||
},
|
||||
.sources = &(struct clksrc_sources) {
|
||||
.nr_sources = 2,
|
||||
.sources = (struct clk *[]) {
|
||||
[0] = &hsmmc_div[1].clk,
|
||||
[1] = NULL, /* to fix */
|
||||
},
|
||||
},
|
||||
.reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 17 },
|
||||
},
|
||||
.reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 16 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk hsmmc_mux1 = {
|
||||
.clk = {
|
||||
.name = "hsmmc-if",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.ctrlbit = (1 << 12),
|
||||
.enable = s3c2443_clkcon_enable_s,
|
||||
},
|
||||
.sources = &(struct clksrc_sources) {
|
||||
.nr_sources = 2,
|
||||
.sources = (struct clk * []) {
|
||||
[0] = &hsmmc_div[1].clk,
|
||||
[1] = NULL, /* to fix */
|
||||
},
|
||||
},
|
||||
.reg_src = { .reg = S3C2443_CLKSRC, .size = 1, .shift = 17 },
|
||||
};
|
||||
|
||||
static struct clk hsmmc0_clk = {
|
||||
@@ -144,8 +143,14 @@ static struct clksrc_clk *clksrcs[] __initdata = {
|
||||
&hsspi_mux,
|
||||
&hsmmc_div[0],
|
||||
&hsmmc_div[1],
|
||||
&hsmmc_mux[0],
|
||||
&hsmmc_mux[1],
|
||||
&hsmmc_mux0,
|
||||
&hsmmc_mux1,
|
||||
};
|
||||
|
||||
static struct clk_lookup s3c2416_clk_lookup[] = {
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &hsmmc0_clk),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &hsmmc_mux0.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &hsmmc_mux1.clk),
|
||||
};
|
||||
|
||||
void __init s3c2416_init_clocks(int xtal)
|
||||
@@ -167,6 +172,7 @@ void __init s3c2416_init_clocks(int xtal)
|
||||
s3c_register_clksrc(clksrcs[ptr], 1);
|
||||
|
||||
s3c24xx_register_clock(&hsmmc0_clk);
|
||||
clkdev_add_table(s3c2416_clk_lookup, ARRAY_SIZE(s3c2416_clk_lookup));
|
||||
|
||||
s3c_pwmclk_init();
|
||||
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
/* linux/arch/arm/mach-s3c2416/setup-sdhci.c
|
||||
*
|
||||
* Copyright 2010 Promwad Innovation Company
|
||||
* Yauhen Kharuzhy <yauhen.kharuzhy@promwad.com>
|
||||
*
|
||||
* S3C2416 - Helper functions for settign up SDHCI device(s) (HSMMC)
|
||||
*
|
||||
* Based on mach-s3c64xx/setup-sdhci.c
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
|
||||
|
||||
char *s3c2416_hsmmc_clksrcs[4] = {
|
||||
[0] = "hsmmc",
|
||||
[1] = "hsmmc",
|
||||
[2] = "hsmmc-if",
|
||||
/* [3] = "48m", - note not successfully used yet */
|
||||
};
|
||||
@@ -32,7 +32,6 @@ obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_IDE) += setup-ide.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_KEYPAD) += setup-keypad.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
|
||||
|
||||
@@ -242,24 +242,6 @@ static struct clk init_clocks[] = {
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_UHOST,
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC0,
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC1,
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC2,
|
||||
}, {
|
||||
.name = "otg",
|
||||
.parent = &clk_h,
|
||||
@@ -310,6 +292,29 @@ static struct clk init_clocks[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc0 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC0,
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc1 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC1,
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc2 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_HSMMC2,
|
||||
};
|
||||
|
||||
static struct clk clk_fout_apll = {
|
||||
.name = "fout_apll",
|
||||
@@ -577,36 +582,6 @@ static struct clksrc_sources clkset_camif = {
|
||||
|
||||
static struct clksrc_clk clksrcs[] = {
|
||||
{
|
||||
.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,
|
||||
}, {
|
||||
.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,
|
||||
}, {
|
||||
.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,
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "usb-bus-host",
|
||||
.ctrlbit = S3C_CLKCON_SCLK_UHOST,
|
||||
@@ -697,6 +672,42 @@ static struct clksrc_clk clk_sclk_uclk = {
|
||||
.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,
|
||||
};
|
||||
|
||||
/* Clock initialisation code */
|
||||
|
||||
static struct clksrc_clk *init_parents[] = {
|
||||
@@ -707,11 +718,26 @@ static struct clksrc_clk *init_parents[] = {
|
||||
|
||||
static struct clksrc_clk *clksrc_cdev[] = {
|
||||
&clk_sclk_uclk,
|
||||
&clk_sclk_mmc0,
|
||||
&clk_sclk_mmc1,
|
||||
&clk_sclk_mmc2,
|
||||
};
|
||||
|
||||
static struct clk *clk_cdev[] = {
|
||||
&clk_hsmmc0,
|
||||
&clk_hsmmc1,
|
||||
&clk_hsmmc2,
|
||||
};
|
||||
|
||||
static struct clk_lookup s3c64xx_clk_lookup[] = {
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p),
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_sclk_uclk.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &clk_hsmmc0),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &clk_hsmmc1),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.0", &clk_hsmmc2),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
|
||||
};
|
||||
|
||||
#define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1)
|
||||
@@ -834,6 +860,10 @@ void __init s3c64xx_register_clocks(unsigned long xtal,
|
||||
s3c_register_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
|
||||
s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
|
||||
|
||||
s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev));
|
||||
for (cnt = 0; cnt < ARRAY_SIZE(clk_cdev); cnt++)
|
||||
s3c_disable_clocks(clk_cdev[cnt], 1);
|
||||
|
||||
s3c24xx_register_clocks(clks1, ARRAY_SIZE(clks1));
|
||||
s3c_register_clksrc(clksrcs, ARRAY_SIZE(clksrcs));
|
||||
for (cnt = 0; cnt < ARRAY_SIZE(clksrc_cdev); cnt++)
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
/* linux/arch/arm/mach-s3c64xx/setup-sdhci.c
|
||||
*
|
||||
* Copyright 2008 Simtec Electronics
|
||||
* Copyright 2008 Simtec Electronics
|
||||
* Ben Dooks <ben@simtec.co.uk>
|
||||
* http://armlinux.simtec.co.uk/
|
||||
*
|
||||
* S3C6400/S3C6410 - Helper functions for settign up SDHCI device(s) (HSMMC)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
|
||||
|
||||
char *s3c64xx_hsmmc_clksrcs[4] = {
|
||||
[0] = "hsmmc",
|
||||
[1] = "hsmmc",
|
||||
[2] = "mmc_bus",
|
||||
/* [3] = "48m", - note not successfully used yet */
|
||||
};
|
||||
@@ -21,7 +21,6 @@ obj-$(CONFIG_S5PC100_SETUP_FB_24BPP) += setup-fb-24bpp.o
|
||||
obj-$(CONFIG_S5PC100_SETUP_I2C1) += setup-i2c1.o
|
||||
obj-$(CONFIG_S5PC100_SETUP_IDE) += setup-ide.o
|
||||
obj-$(CONFIG_S5PC100_SETUP_KEYPAD) += setup-keypad.o
|
||||
obj-$(CONFIG_S5PC100_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_S5PC100_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
|
||||
# device support
|
||||
|
||||
@@ -425,24 +425,6 @@ static struct clk init_clocks_off[] = {
|
||||
.parent = &clk_div_d0_bus.clk,
|
||||
.enable = s5pc100_d0_2_ctrl,
|
||||
.ctrlbit = (1 << 1),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
.enable = s5pc100_d1_0_ctrl,
|
||||
.ctrlbit = (1 << 7),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
.enable = s5pc100_d1_0_ctrl,
|
||||
.ctrlbit = (1 << 6),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
.enable = s5pc100_d1_0_ctrl,
|
||||
.ctrlbit = (1 << 5),
|
||||
}, {
|
||||
.name = "modemif",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
@@ -711,6 +693,30 @@ static struct clk init_clocks_off[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc2 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
.enable = s5pc100_d1_0_ctrl,
|
||||
.ctrlbit = (1 << 7),
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc1 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
.enable = s5pc100_d1_0_ctrl,
|
||||
.ctrlbit = (1 << 6),
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc0 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_div_d1_bus.clk,
|
||||
.enable = s5pc100_d1_0_ctrl,
|
||||
.ctrlbit = (1 << 5),
|
||||
};
|
||||
|
||||
static struct clk clk_vclk54m = {
|
||||
.name = "vclk_54m",
|
||||
.rate = 54000000,
|
||||
@@ -1012,39 +1018,6 @@ static struct clksrc_clk clksrcs[] = {
|
||||
.sources = &clk_src_group7,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 24, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 24, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.ctrlbit = (1 << 12),
|
||||
.enable = s5pc100_sclk1_ctrl,
|
||||
|
||||
},
|
||||
.sources = &clk_src_mmc0,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 0, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 0, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.ctrlbit = (1 << 13),
|
||||
.enable = s5pc100_sclk1_ctrl,
|
||||
|
||||
},
|
||||
.sources = &clk_src_mmc12,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 4, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 4, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.ctrlbit = (1 << 14),
|
||||
.enable = s5pc100_sclk1_ctrl,
|
||||
|
||||
},
|
||||
.sources = &clk_src_mmc12,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 8, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 8, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_irda",
|
||||
@@ -1099,6 +1072,42 @@ static struct clksrc_clk clk_sclk_uart = {
|
||||
.reg_div = { .reg = S5P_CLK_DIV2, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc0 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.ctrlbit = (1 << 12),
|
||||
.enable = s5pc100_sclk1_ctrl,
|
||||
},
|
||||
.sources = &clk_src_mmc0,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 0, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc1 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.ctrlbit = (1 << 13),
|
||||
.enable = s5pc100_sclk1_ctrl,
|
||||
},
|
||||
.sources = &clk_src_mmc12,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 4, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 4, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc2 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.ctrlbit = (1 << 14),
|
||||
.enable = s5pc100_sclk1_ctrl,
|
||||
},
|
||||
.sources = &clk_src_mmc12,
|
||||
.reg_src = { .reg = S5P_CLK_SRC2, .shift = 8, .size = 2 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV3, .shift = 8, .size = 4 },
|
||||
};
|
||||
|
||||
/* Clock initialisation code */
|
||||
static struct clksrc_clk *sysclks[] = {
|
||||
&clk_mout_apll,
|
||||
@@ -1128,8 +1137,17 @@ static struct clksrc_clk *sysclks[] = {
|
||||
&clk_sclk_spdif,
|
||||
};
|
||||
|
||||
static struct clk *clk_cdev[] = {
|
||||
&clk_hsmmc0,
|
||||
&clk_hsmmc1,
|
||||
&clk_hsmmc2,
|
||||
};
|
||||
|
||||
static struct clksrc_clk *clksrc_cdev[] = {
|
||||
&clk_sclk_uart,
|
||||
&clk_sclk_mmc0,
|
||||
&clk_sclk_mmc1,
|
||||
&clk_sclk_mmc2,
|
||||
};
|
||||
|
||||
void __init_or_cpufreq s5pc100_setup_clocks(void)
|
||||
@@ -1274,6 +1292,12 @@ static struct clk *clks[] __initdata = {
|
||||
static struct clk_lookup s5pc100_clk_lookup[] = {
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p),
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_sclk_uart.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &clk_hsmmc0),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &clk_hsmmc1),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.0", &clk_hsmmc2),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
|
||||
};
|
||||
|
||||
void __init s5pc100_register_clocks(void)
|
||||
@@ -1294,6 +1318,10 @@ void __init s5pc100_register_clocks(void)
|
||||
s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
|
||||
clkdev_add_table(s5pc100_clk_lookup, ARRAY_SIZE(s5pc100_clk_lookup));
|
||||
|
||||
s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev));
|
||||
for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++)
|
||||
s3c_disable_clocks(clk_cdev[ptr], 1);
|
||||
|
||||
s3c24xx_register_clock(&dummy_apb_pclk);
|
||||
|
||||
s3c_pwmclk_init();
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
/* linux/arch/arm/mach-s5pc100/setup-sdhci.c
|
||||
*
|
||||
* Copyright 2008 Samsung Electronics
|
||||
*
|
||||
* S5PC100 - Helper functions for settign up SDHCI device(s) (HSMMC)
|
||||
*
|
||||
* Based on mach-s3c6410/setup-sdhci.c
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
|
||||
|
||||
char *s5pc100_hsmmc_clksrcs[4] = {
|
||||
[0] = "hsmmc", /* HCLK */
|
||||
/* [1] = "hsmmc", - duplicate HCLK entry */
|
||||
[2] = "sclk_mmc", /* mmc_bus */
|
||||
/* [3] = "48m", - note not successfully used yet */
|
||||
};
|
||||
@@ -35,5 +35,4 @@ obj-$(CONFIG_S5PV210_SETUP_I2C1) += setup-i2c1.o
|
||||
obj-$(CONFIG_S5PV210_SETUP_I2C2) += setup-i2c2.o
|
||||
obj-$(CONFIG_S5PV210_SETUP_IDE) += setup-ide.o
|
||||
obj-$(CONFIG_S5PV210_SETUP_KEYPAD) += setup-keypad.o
|
||||
obj-$(CONFIG_S5PV210_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_S5PV210_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
|
||||
@@ -398,30 +398,6 @@ static struct clk init_clocks_off[] = {
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip1_ctrl,
|
||||
.ctrlbit = (1<<25),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<16),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<17),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<18),
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.3",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<19),
|
||||
}, {
|
||||
.name = "systimer",
|
||||
.parent = &clk_pclk_psys.clk,
|
||||
@@ -559,6 +535,38 @@ static struct clk init_clocks[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc0 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<16),
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc1 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<17),
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc2 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<18),
|
||||
};
|
||||
|
||||
static struct clk clk_hsmmc3 = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.3",
|
||||
.parent = &clk_hclk_psys.clk,
|
||||
.enable = s5pv210_clk_ip2_ctrl,
|
||||
.ctrlbit = (1<<19),
|
||||
};
|
||||
|
||||
static struct clk *clkset_uart_list[] = {
|
||||
[6] = &clk_mout_mpll.clk,
|
||||
[7] = &clk_mout_epll.clk,
|
||||
@@ -864,46 +872,6 @@ static struct clksrc_clk clksrcs[] = {
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC1, .shift = 20, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV1, .shift = 20, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 8),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 0, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 9),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 4, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 10),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 8, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.3",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 11),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 12, .size = 4 },
|
||||
}, {
|
||||
.clk = {
|
||||
.name = "sclk_mfc",
|
||||
@@ -1030,11 +998,70 @@ static struct clksrc_clk clk_sclk_uart3 = {
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 28, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc0 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.0",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 8),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 0, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc1 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 9),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 4, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 4, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc2 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.2",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 10),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 8, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 8, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk clk_sclk_mmc3 = {
|
||||
.clk = {
|
||||
.name = "sclk_mmc",
|
||||
.devname = "s3c-sdhci.3",
|
||||
.enable = s5pv210_clk_mask0_ctrl,
|
||||
.ctrlbit = (1 << 11),
|
||||
},
|
||||
.sources = &clkset_group2,
|
||||
.reg_src = { .reg = S5P_CLK_SRC4, .shift = 12, .size = 4 },
|
||||
.reg_div = { .reg = S5P_CLK_DIV4, .shift = 12, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk *clksrc_cdev[] = {
|
||||
&clk_sclk_uart0,
|
||||
&clk_sclk_uart1,
|
||||
&clk_sclk_uart2,
|
||||
&clk_sclk_uart3,
|
||||
&clk_sclk_mmc0,
|
||||
&clk_sclk_mmc1,
|
||||
&clk_sclk_mmc2,
|
||||
&clk_sclk_mmc3,
|
||||
};
|
||||
|
||||
static struct clk *clk_cdev[] = {
|
||||
&clk_hsmmc0,
|
||||
&clk_hsmmc1,
|
||||
&clk_hsmmc2,
|
||||
&clk_hsmmc3,
|
||||
};
|
||||
|
||||
/* Clock initialisation code */
|
||||
@@ -1282,6 +1309,14 @@ static struct clk_lookup s5pv210_clk_lookup[] = {
|
||||
CLKDEV_INIT("s5pv210-uart.1", "clk_uart_baud1", &clk_sclk_uart1.clk),
|
||||
CLKDEV_INIT("s5pv210-uart.2", "clk_uart_baud1", &clk_sclk_uart2.clk),
|
||||
CLKDEV_INIT("s5pv210-uart.3", "clk_uart_baud1", &clk_sclk_uart3.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &clk_hsmmc0),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &clk_hsmmc1),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.0", &clk_hsmmc2),
|
||||
CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.0", &clk_hsmmc3),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &clk_sclk_mmc0.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.3", "mmc_busclk.2", &clk_sclk_mmc3.clk),
|
||||
};
|
||||
|
||||
void __init s5pv210_register_clocks(void)
|
||||
@@ -1306,6 +1341,10 @@ void __init s5pv210_register_clocks(void)
|
||||
s3c_disable_clocks(init_clocks_off, ARRAY_SIZE(init_clocks_off));
|
||||
clkdev_add_table(s5pv210_clk_lookup, ARRAY_SIZE(s5pv210_clk_lookup));
|
||||
|
||||
s3c24xx_register_clocks(clk_cdev, ARRAY_SIZE(clk_cdev));
|
||||
for (ptr = 0; ptr < ARRAY_SIZE(clk_cdev); ptr++)
|
||||
s3c_disable_clocks(clk_cdev[ptr], 1);
|
||||
|
||||
s3c24xx_register_clock(&dummy_apb_pclk);
|
||||
s3c_pwmclk_init();
|
||||
}
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
/* linux/arch/arm/mach-s5pv210/setup-sdhci.c
|
||||
*
|
||||
* Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com/
|
||||
*
|
||||
* S5PV210 - Helper functions for settign up SDHCI device(s) (HSMMC)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
/* clock sources for the mmc bus clock, order as for the ctrl2[5..4] */
|
||||
|
||||
char *s5pv210_hsmmc_clksrcs[4] = {
|
||||
[0] = "hsmmc", /* HCLK */
|
||||
/* [1] = "hsmmc", - duplicate HCLK entry */
|
||||
[2] = "sclk_mmc", /* mmc_bus */
|
||||
/* [3] = NULL, - reserved */
|
||||
};
|
||||
@@ -426,12 +426,6 @@ static struct clk init_clocks[] = {
|
||||
.parent = &clk_h,
|
||||
.enable = s3c2443_clkcon_enable_h,
|
||||
.ctrlbit = S3C2443_HCLKCON_DMA5,
|
||||
}, {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c2443_clkcon_enable_h,
|
||||
.ctrlbit = S3C2443_HCLKCON_HSMMC,
|
||||
}, {
|
||||
.name = "gpio",
|
||||
.parent = &clk_p,
|
||||
@@ -514,6 +508,14 @@ static struct clk init_clocks[] = {
|
||||
}
|
||||
};
|
||||
|
||||
static struct clk hsmmc1_clk = {
|
||||
.name = "hsmmc",
|
||||
.devname = "s3c-sdhci.1",
|
||||
.parent = &clk_h,
|
||||
.enable = s3c2443_clkcon_enable_h,
|
||||
.ctrlbit = S3C2443_HCLKCON_HSMMC,
|
||||
};
|
||||
|
||||
static inline unsigned long s3c2443_get_hdiv(unsigned long clkcon0)
|
||||
{
|
||||
clkcon0 &= S3C2443_CLKDIV0_HCLKDIV_MASK;
|
||||
@@ -579,6 +581,7 @@ static struct clk *clks[] __initdata = {
|
||||
&clk_epll,
|
||||
&clk_usb_bus,
|
||||
&clk_armdiv,
|
||||
&hsmmc1_clk,
|
||||
};
|
||||
|
||||
static struct clksrc_clk *clksrcs[] __initdata = {
|
||||
@@ -595,6 +598,7 @@ static struct clk_lookup s3c2443_clk_lookup[] = {
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud1", &s3c24xx_uclk),
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p),
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_esys_uart.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &hsmmc1_clk),
|
||||
};
|
||||
|
||||
void __init s3c2443_common_init_clocks(int xtal, pll_fn get_mpll,
|
||||
|
||||
@@ -66,8 +66,6 @@ struct s3c_sdhci_platdata {
|
||||
enum cd_types cd_type;
|
||||
enum clk_types clk_type;
|
||||
|
||||
char **clocks; /* set of clock sources */
|
||||
|
||||
int ext_cd_gpio;
|
||||
bool ext_cd_gpio_invert;
|
||||
int (*ext_cd_init)(void (*notify_func)(struct platform_device *,
|
||||
@@ -129,12 +127,9 @@ extern void exynos4_setup_sdhci3_cfg_gpio(struct platform_device *, int w);
|
||||
/* S3C2416 SDHCI setup */
|
||||
|
||||
#ifdef CONFIG_S3C2416_SETUP_SDHCI
|
||||
extern char *s3c2416_hsmmc_clksrcs[4];
|
||||
|
||||
static inline void s3c2416_default_sdhci0(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC
|
||||
s3c_hsmmc0_def_platdata.clocks = s3c2416_hsmmc_clksrcs;
|
||||
s3c_hsmmc0_def_platdata.cfg_gpio = s3c2416_setup_sdhci0_cfg_gpio;
|
||||
#endif /* CONFIG_S3C_DEV_HSMMC */
|
||||
}
|
||||
@@ -142,7 +137,6 @@ static inline void s3c2416_default_sdhci0(void)
|
||||
static inline void s3c2416_default_sdhci1(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC1
|
||||
s3c_hsmmc1_def_platdata.clocks = s3c2416_hsmmc_clksrcs;
|
||||
s3c_hsmmc1_def_platdata.cfg_gpio = s3c2416_setup_sdhci1_cfg_gpio;
|
||||
#endif /* CONFIG_S3C_DEV_HSMMC1 */
|
||||
}
|
||||
@@ -155,12 +149,9 @@ static inline void s3c2416_default_sdhci1(void) { }
|
||||
/* S3C64XX SDHCI setup */
|
||||
|
||||
#ifdef CONFIG_S3C64XX_SETUP_SDHCI
|
||||
extern char *s3c64xx_hsmmc_clksrcs[4];
|
||||
|
||||
static inline void s3c6400_default_sdhci0(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC
|
||||
s3c_hsmmc0_def_platdata.clocks = s3c64xx_hsmmc_clksrcs;
|
||||
s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -168,7 +159,6 @@ static inline void s3c6400_default_sdhci0(void)
|
||||
static inline void s3c6400_default_sdhci1(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC1
|
||||
s3c_hsmmc1_def_platdata.clocks = s3c64xx_hsmmc_clksrcs;
|
||||
s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -176,7 +166,6 @@ static inline void s3c6400_default_sdhci1(void)
|
||||
static inline void s3c6400_default_sdhci2(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC2
|
||||
s3c_hsmmc2_def_platdata.clocks = s3c64xx_hsmmc_clksrcs;
|
||||
s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -184,7 +173,6 @@ static inline void s3c6400_default_sdhci2(void)
|
||||
static inline void s3c6410_default_sdhci0(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC
|
||||
s3c_hsmmc0_def_platdata.clocks = s3c64xx_hsmmc_clksrcs;
|
||||
s3c_hsmmc0_def_platdata.cfg_gpio = s3c64xx_setup_sdhci0_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -192,7 +180,6 @@ static inline void s3c6410_default_sdhci0(void)
|
||||
static inline void s3c6410_default_sdhci1(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC1
|
||||
s3c_hsmmc1_def_platdata.clocks = s3c64xx_hsmmc_clksrcs;
|
||||
s3c_hsmmc1_def_platdata.cfg_gpio = s3c64xx_setup_sdhci1_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -200,7 +187,6 @@ static inline void s3c6410_default_sdhci1(void)
|
||||
static inline void s3c6410_default_sdhci2(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC2
|
||||
s3c_hsmmc2_def_platdata.clocks = s3c64xx_hsmmc_clksrcs;
|
||||
s3c_hsmmc2_def_platdata.cfg_gpio = s3c64xx_setup_sdhci2_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -218,12 +204,9 @@ static inline void s3c6400_default_sdhci2(void) { }
|
||||
/* S5PC100 SDHCI setup */
|
||||
|
||||
#ifdef CONFIG_S5PC100_SETUP_SDHCI
|
||||
extern char *s5pc100_hsmmc_clksrcs[4];
|
||||
|
||||
static inline void s5pc100_default_sdhci0(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC
|
||||
s3c_hsmmc0_def_platdata.clocks = s5pc100_hsmmc_clksrcs;
|
||||
s3c_hsmmc0_def_platdata.cfg_gpio = s5pc100_setup_sdhci0_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -231,7 +214,6 @@ static inline void s5pc100_default_sdhci0(void)
|
||||
static inline void s5pc100_default_sdhci1(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC1
|
||||
s3c_hsmmc1_def_platdata.clocks = s5pc100_hsmmc_clksrcs;
|
||||
s3c_hsmmc1_def_platdata.cfg_gpio = s5pc100_setup_sdhci1_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -239,7 +221,6 @@ static inline void s5pc100_default_sdhci1(void)
|
||||
static inline void s5pc100_default_sdhci2(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC2
|
||||
s3c_hsmmc2_def_platdata.clocks = s5pc100_hsmmc_clksrcs;
|
||||
s3c_hsmmc2_def_platdata.cfg_gpio = s5pc100_setup_sdhci2_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -254,12 +235,9 @@ static inline void s5pc100_default_sdhci2(void) { }
|
||||
/* S5PV210 SDHCI setup */
|
||||
|
||||
#ifdef CONFIG_S5PV210_SETUP_SDHCI
|
||||
extern char *s5pv210_hsmmc_clksrcs[4];
|
||||
|
||||
static inline void s5pv210_default_sdhci0(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC
|
||||
s3c_hsmmc0_def_platdata.clocks = s5pv210_hsmmc_clksrcs;
|
||||
s3c_hsmmc0_def_platdata.cfg_gpio = s5pv210_setup_sdhci0_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -267,7 +245,6 @@ static inline void s5pv210_default_sdhci0(void)
|
||||
static inline void s5pv210_default_sdhci1(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC1
|
||||
s3c_hsmmc1_def_platdata.clocks = s5pv210_hsmmc_clksrcs;
|
||||
s3c_hsmmc1_def_platdata.cfg_gpio = s5pv210_setup_sdhci1_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -275,7 +252,6 @@ static inline void s5pv210_default_sdhci1(void)
|
||||
static inline void s5pv210_default_sdhci2(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC2
|
||||
s3c_hsmmc2_def_platdata.clocks = s5pv210_hsmmc_clksrcs;
|
||||
s3c_hsmmc2_def_platdata.cfg_gpio = s5pv210_setup_sdhci2_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -283,7 +259,6 @@ static inline void s5pv210_default_sdhci2(void)
|
||||
static inline void s5pv210_default_sdhci3(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC3
|
||||
s3c_hsmmc3_def_platdata.clocks = s5pv210_hsmmc_clksrcs;
|
||||
s3c_hsmmc3_def_platdata.cfg_gpio = s5pv210_setup_sdhci3_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -298,12 +273,9 @@ static inline void s5pv210_default_sdhci3(void) { }
|
||||
|
||||
/* EXYNOS4 SDHCI setup */
|
||||
#ifdef CONFIG_EXYNOS4_SETUP_SDHCI
|
||||
extern char *exynos4_hsmmc_clksrcs[4];
|
||||
|
||||
static inline void exynos4_default_sdhci0(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC
|
||||
s3c_hsmmc0_def_platdata.clocks = exynos4_hsmmc_clksrcs;
|
||||
s3c_hsmmc0_def_platdata.cfg_gpio = exynos4_setup_sdhci0_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -311,7 +283,6 @@ static inline void exynos4_default_sdhci0(void)
|
||||
static inline void exynos4_default_sdhci1(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC1
|
||||
s3c_hsmmc1_def_platdata.clocks = exynos4_hsmmc_clksrcs;
|
||||
s3c_hsmmc1_def_platdata.cfg_gpio = exynos4_setup_sdhci1_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -319,7 +290,6 @@ static inline void exynos4_default_sdhci1(void)
|
||||
static inline void exynos4_default_sdhci2(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC2
|
||||
s3c_hsmmc2_def_platdata.clocks = exynos4_hsmmc_clksrcs;
|
||||
s3c_hsmmc2_def_platdata.cfg_gpio = exynos4_setup_sdhci2_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
@@ -327,7 +297,6 @@ static inline void exynos4_default_sdhci2(void)
|
||||
static inline void exynos4_default_sdhci3(void)
|
||||
{
|
||||
#ifdef CONFIG_S3C_DEV_HSMMC3
|
||||
s3c_hsmmc3_def_platdata.clocks = exynos4_hsmmc_clksrcs;
|
||||
s3c_hsmmc3_def_platdata.cfg_gpio = exynos4_setup_sdhci3_cfg_gpio;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -435,14 +435,11 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
|
||||
|
||||
for (clks = 0, ptr = 0; ptr < MAX_BUS_CLK; ptr++) {
|
||||
struct clk *clk;
|
||||
char *name = pdata->clocks[ptr];
|
||||
|
||||
if (name == NULL)
|
||||
continue;
|
||||
char name[14];
|
||||
|
||||
snprintf(name, 14, "mmc_busclk.%d", ptr);
|
||||
clk = clk_get(dev, name);
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(dev, "failed to get clock %s\n", name);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user