Commit 28c80aa7 authored by Jeongbae Seo's avatar Jeongbae Seo Committed by Kukjin Kim

ARM: SAMSUNG: Add clock types into platform data

This patch adds clock types into platform data to support
external clock divider instead of internal clock divider.
It is defined that what kinds of clock type is used in machine.
Signed-off-by: default avatarJeongbae Seo <jeongbae.seo@samsung.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 40fcd5b9
...@@ -74,6 +74,7 @@ static struct s3c_sdhci_platdata smdkc210_hsmmc0_pdata __initdata = { ...@@ -74,6 +74,7 @@ static struct s3c_sdhci_platdata smdkc210_hsmmc0_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK0(2), .ext_cd_gpio = S5PV310_GPK0(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
#ifdef CONFIG_S5PV310_SDHCI_CH0_8BIT #ifdef CONFIG_S5PV310_SDHCI_CH0_8BIT
.max_width = 8, .max_width = 8,
.host_caps = MMC_CAP_8_BIT_DATA, .host_caps = MMC_CAP_8_BIT_DATA,
...@@ -84,12 +85,14 @@ static struct s3c_sdhci_platdata smdkc210_hsmmc1_pdata __initdata = { ...@@ -84,12 +85,14 @@ static struct s3c_sdhci_platdata smdkc210_hsmmc1_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK0(2), .ext_cd_gpio = S5PV310_GPK0(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
}; };
static struct s3c_sdhci_platdata smdkc210_hsmmc2_pdata __initdata = { static struct s3c_sdhci_platdata smdkc210_hsmmc2_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK2(2), .ext_cd_gpio = S5PV310_GPK2(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
#ifdef CONFIG_S5PV310_SDHCI_CH2_8BIT #ifdef CONFIG_S5PV310_SDHCI_CH2_8BIT
.max_width = 8, .max_width = 8,
.host_caps = MMC_CAP_8_BIT_DATA, .host_caps = MMC_CAP_8_BIT_DATA,
...@@ -100,6 +103,7 @@ static struct s3c_sdhci_platdata smdkc210_hsmmc3_pdata __initdata = { ...@@ -100,6 +103,7 @@ static struct s3c_sdhci_platdata smdkc210_hsmmc3_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK2(2), .ext_cd_gpio = S5PV310_GPK2(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
}; };
static struct platform_device *smdkc210_devices[] __initdata = { static struct platform_device *smdkc210_devices[] __initdata = {
......
...@@ -74,6 +74,7 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc0_pdata __initdata = { ...@@ -74,6 +74,7 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc0_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK0(2), .ext_cd_gpio = S5PV310_GPK0(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
#ifdef CONFIG_S5PV310_SDHCI_CH0_8BIT #ifdef CONFIG_S5PV310_SDHCI_CH0_8BIT
.max_width = 8, .max_width = 8,
.host_caps = MMC_CAP_8_BIT_DATA, .host_caps = MMC_CAP_8_BIT_DATA,
...@@ -84,12 +85,14 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc1_pdata __initdata = { ...@@ -84,12 +85,14 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc1_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK0(2), .ext_cd_gpio = S5PV310_GPK0(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
}; };
static struct s3c_sdhci_platdata smdkv310_hsmmc2_pdata __initdata = { static struct s3c_sdhci_platdata smdkv310_hsmmc2_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK2(2), .ext_cd_gpio = S5PV310_GPK2(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
#ifdef CONFIG_S5PV310_SDHCI_CH2_8BIT #ifdef CONFIG_S5PV310_SDHCI_CH2_8BIT
.max_width = 8, .max_width = 8,
.host_caps = MMC_CAP_8_BIT_DATA, .host_caps = MMC_CAP_8_BIT_DATA,
...@@ -100,6 +103,7 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc3_pdata __initdata = { ...@@ -100,6 +103,7 @@ static struct s3c_sdhci_platdata smdkv310_hsmmc3_pdata __initdata = {
.cd_type = S3C_SDHCI_CD_GPIO, .cd_type = S3C_SDHCI_CD_GPIO,
.ext_cd_gpio = S5PV310_GPK2(2), .ext_cd_gpio = S5PV310_GPK2(2),
.ext_cd_gpio_invert = 1, .ext_cd_gpio_invert = 1,
.clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL,
}; };
static struct platform_device *smdkv310_devices[] __initdata = { static struct platform_device *smdkv310_devices[] __initdata = {
......
...@@ -41,6 +41,7 @@ struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata = { ...@@ -41,6 +41,7 @@ struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata = {
.max_width = 4, .max_width = 4,
.host_caps = (MMC_CAP_4_BIT_DATA | .host_caps = (MMC_CAP_4_BIT_DATA |
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
.clk_type = S3C_SDHCI_CLK_DIV_INTERNAL,
}; };
struct platform_device s3c_device_hsmmc0 = { struct platform_device s3c_device_hsmmc0 = {
...@@ -73,4 +74,6 @@ void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd) ...@@ -73,4 +74,6 @@ void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd)
set->cfg_card = pd->cfg_card; set->cfg_card = pd->cfg_card;
if (pd->host_caps) if (pd->host_caps)
set->host_caps |= pd->host_caps; set->host_caps |= pd->host_caps;
if (pd->clk_type)
set->clk_type = pd->clk_type;
} }
...@@ -41,6 +41,7 @@ struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata = { ...@@ -41,6 +41,7 @@ struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata = {
.max_width = 4, .max_width = 4,
.host_caps = (MMC_CAP_4_BIT_DATA | .host_caps = (MMC_CAP_4_BIT_DATA |
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
.clk_type = S3C_SDHCI_CLK_DIV_INTERNAL,
}; };
struct platform_device s3c_device_hsmmc1 = { struct platform_device s3c_device_hsmmc1 = {
...@@ -73,4 +74,6 @@ void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd) ...@@ -73,4 +74,6 @@ void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd)
set->cfg_card = pd->cfg_card; set->cfg_card = pd->cfg_card;
if (pd->host_caps) if (pd->host_caps)
set->host_caps |= pd->host_caps; set->host_caps |= pd->host_caps;
if (pd->clk_type)
set->clk_type = pd->clk_type;
} }
...@@ -42,6 +42,7 @@ struct s3c_sdhci_platdata s3c_hsmmc2_def_platdata = { ...@@ -42,6 +42,7 @@ struct s3c_sdhci_platdata s3c_hsmmc2_def_platdata = {
.max_width = 4, .max_width = 4,
.host_caps = (MMC_CAP_4_BIT_DATA | .host_caps = (MMC_CAP_4_BIT_DATA |
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
.clk_type = S3C_SDHCI_CLK_DIV_INTERNAL,
}; };
struct platform_device s3c_device_hsmmc2 = { struct platform_device s3c_device_hsmmc2 = {
...@@ -74,4 +75,6 @@ void s3c_sdhci2_set_platdata(struct s3c_sdhci_platdata *pd) ...@@ -74,4 +75,6 @@ void s3c_sdhci2_set_platdata(struct s3c_sdhci_platdata *pd)
set->cfg_card = pd->cfg_card; set->cfg_card = pd->cfg_card;
if (pd->host_caps) if (pd->host_caps)
set->host_caps |= pd->host_caps; set->host_caps |= pd->host_caps;
if (pd->clk_type)
set->clk_type = pd->clk_type;
} }
...@@ -45,6 +45,7 @@ struct s3c_sdhci_platdata s3c_hsmmc3_def_platdata = { ...@@ -45,6 +45,7 @@ struct s3c_sdhci_platdata s3c_hsmmc3_def_platdata = {
.max_width = 4, .max_width = 4,
.host_caps = (MMC_CAP_4_BIT_DATA | .host_caps = (MMC_CAP_4_BIT_DATA |
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED), MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
.clk_type = S3C_SDHCI_CLK_DIV_INTERNAL,
}; };
struct platform_device s3c_device_hsmmc3 = { struct platform_device s3c_device_hsmmc3 = {
...@@ -77,4 +78,6 @@ void s3c_sdhci3_set_platdata(struct s3c_sdhci_platdata *pd) ...@@ -77,4 +78,6 @@ void s3c_sdhci3_set_platdata(struct s3c_sdhci_platdata *pd)
set->cfg_card = pd->cfg_card; set->cfg_card = pd->cfg_card;
if (pd->host_caps) if (pd->host_caps)
set->host_caps |= pd->host_caps; set->host_caps |= pd->host_caps;
if (pd->clk_type)
set->clk_type = pd->clk_type;
} }
...@@ -28,11 +28,17 @@ enum cd_types { ...@@ -28,11 +28,17 @@ enum cd_types {
S3C_SDHCI_CD_PERMANENT, /* no CD line, card permanently wired to host */ S3C_SDHCI_CD_PERMANENT, /* no CD line, card permanently wired to host */
}; };
enum clk_types {
S3C_SDHCI_CLK_DIV_INTERNAL, /* use mmc internal clock divider */
S3C_SDHCI_CLK_DIV_EXTERNAL, /* use external clock divider */
};
/** /**
* struct s3c_sdhci_platdata() - Platform device data for Samsung SDHCI * struct s3c_sdhci_platdata() - Platform device data for Samsung SDHCI
* @max_width: The maximum number of data bits supported. * @max_width: The maximum number of data bits supported.
* @host_caps: Standard MMC host capabilities bit field. * @host_caps: Standard MMC host capabilities bit field.
* @cd_type: Type of Card Detection method (see cd_types enum above) * @cd_type: Type of Card Detection method (see cd_types enum above)
* @clk_type: Type of clock divider method (see clk_types enum above)
* @ext_cd_init: Initialize external card detect subsystem. Called on * @ext_cd_init: Initialize external card detect subsystem. Called on
* sdhci-s3c driver probe when cd_type == S3C_SDHCI_CD_EXTERNAL. * sdhci-s3c driver probe when cd_type == S3C_SDHCI_CD_EXTERNAL.
* notify_func argument is a callback to the sdhci-s3c driver * notify_func argument is a callback to the sdhci-s3c driver
...@@ -59,6 +65,7 @@ struct s3c_sdhci_platdata { ...@@ -59,6 +65,7 @@ struct s3c_sdhci_platdata {
unsigned int max_width; unsigned int max_width;
unsigned int host_caps; unsigned int host_caps;
enum cd_types cd_type; enum cd_types cd_type;
enum clk_types clk_type;
char **clocks; /* set of clock sources */ char **clocks; /* set of clock sources */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment