28c80aa707
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: Jeongbae Seo <jeongbae.seo@samsung.com> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
80 lines
2.0 KiB
C
80 lines
2.0 KiB
C
/* linux/arch/arm/plat-s3c/dev-hsmmc.c
|
|
*
|
|
* Copyright (c) 2008 Simtec Electronics
|
|
* Ben Dooks <ben@simtec.co.uk>
|
|
* http://armlinux.simtec.co.uk/
|
|
*
|
|
* S3C series device definition for hsmmc devices
|
|
*
|
|
* 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/kernel.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/mmc/host.h>
|
|
|
|
#include <mach/map.h>
|
|
#include <plat/sdhci.h>
|
|
#include <plat/devs.h>
|
|
#include <plat/cpu.h>
|
|
|
|
#define S3C_SZ_HSMMC (0x1000)
|
|
|
|
static struct resource s3c_hsmmc_resource[] = {
|
|
[0] = {
|
|
.start = S3C_PA_HSMMC0,
|
|
.end = S3C_PA_HSMMC0 + S3C_SZ_HSMMC - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
[1] = {
|
|
.start = IRQ_HSMMC0,
|
|
.end = IRQ_HSMMC0,
|
|
.flags = IORESOURCE_IRQ,
|
|
}
|
|
};
|
|
|
|
static u64 s3c_device_hsmmc_dmamask = 0xffffffffUL;
|
|
|
|
struct s3c_sdhci_platdata s3c_hsmmc0_def_platdata = {
|
|
.max_width = 4,
|
|
.host_caps = (MMC_CAP_4_BIT_DATA |
|
|
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
|
|
.clk_type = S3C_SDHCI_CLK_DIV_INTERNAL,
|
|
};
|
|
|
|
struct platform_device s3c_device_hsmmc0 = {
|
|
.name = "s3c-sdhci",
|
|
.id = 0,
|
|
.num_resources = ARRAY_SIZE(s3c_hsmmc_resource),
|
|
.resource = s3c_hsmmc_resource,
|
|
.dev = {
|
|
.dma_mask = &s3c_device_hsmmc_dmamask,
|
|
.coherent_dma_mask = 0xffffffffUL,
|
|
.platform_data = &s3c_hsmmc0_def_platdata,
|
|
},
|
|
};
|
|
|
|
void s3c_sdhci0_set_platdata(struct s3c_sdhci_platdata *pd)
|
|
{
|
|
struct s3c_sdhci_platdata *set = &s3c_hsmmc0_def_platdata;
|
|
|
|
set->cd_type = pd->cd_type;
|
|
set->ext_cd_init = pd->ext_cd_init;
|
|
set->ext_cd_cleanup = pd->ext_cd_cleanup;
|
|
set->ext_cd_gpio = pd->ext_cd_gpio;
|
|
set->ext_cd_gpio_invert = pd->ext_cd_gpio_invert;
|
|
|
|
if (pd->max_width)
|
|
set->max_width = pd->max_width;
|
|
if (pd->cfg_gpio)
|
|
set->cfg_gpio = pd->cfg_gpio;
|
|
if (pd->cfg_card)
|
|
set->cfg_card = pd->cfg_card;
|
|
if (pd->host_caps)
|
|
set->host_caps |= pd->host_caps;
|
|
if (pd->clk_type)
|
|
set->clk_type = pd->clk_type;
|
|
}
|