19206b1742
On some Samsung SoCs not all SDHCI controllers have card detect (CD) line. For some embedded designs it is not even needed, because ususally the device (like SDIO flash memory or wifi controller) is permanently wired to the controller. There are also systems which have a card detect line connected to some of the external interrupt lines or the presence of the card depends on some other actions (like enabling a power regulator). This patch adds all required changes to platform support code, so another patch, which extends the driver with support for the new card detection methods can be applied. Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> [kgene.kim@samsung.com: minor title and coding-style fixes] [kgene.kim@samsung.com: fix build errors] Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
73 lines
1.8 KiB
C
73 lines
1.8 KiB
C
/* linux/arch/arm/plat-s3c/dev-hsmmc1.c
|
|
*
|
|
* Copyright (c) 2008 Simtec Electronics
|
|
* Ben Dooks <ben@simtec.co.uk>
|
|
* http://armlinux.simtec.co.uk/
|
|
*
|
|
* S3C series device definition for hsmmc device 1
|
|
*
|
|
* 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_hsmmc1_resource[] = {
|
|
[0] = {
|
|
.start = S3C_PA_HSMMC1,
|
|
.end = S3C_PA_HSMMC1 + S3C_SZ_HSMMC - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
[1] = {
|
|
.start = IRQ_HSMMC1,
|
|
.end = IRQ_HSMMC1,
|
|
.flags = IORESOURCE_IRQ,
|
|
}
|
|
};
|
|
|
|
static u64 s3c_device_hsmmc1_dmamask = 0xffffffffUL;
|
|
|
|
struct s3c_sdhci_platdata s3c_hsmmc1_def_platdata = {
|
|
.max_width = 4,
|
|
.host_caps = (MMC_CAP_4_BIT_DATA |
|
|
MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED),
|
|
};
|
|
|
|
struct platform_device s3c_device_hsmmc1 = {
|
|
.name = "s3c-sdhci",
|
|
.id = 1,
|
|
.num_resources = ARRAY_SIZE(s3c_hsmmc1_resource),
|
|
.resource = s3c_hsmmc1_resource,
|
|
.dev = {
|
|
.dma_mask = &s3c_device_hsmmc1_dmamask,
|
|
.coherent_dma_mask = 0xffffffffUL,
|
|
.platform_data = &s3c_hsmmc1_def_platdata,
|
|
},
|
|
};
|
|
|
|
void s3c_sdhci1_set_platdata(struct s3c_sdhci_platdata *pd)
|
|
{
|
|
struct s3c_sdhci_platdata *set = &s3c_hsmmc1_def_platdata;
|
|
|
|
set->max_width = pd->max_width;
|
|
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->cfg_gpio)
|
|
set->cfg_gpio = pd->cfg_gpio;
|
|
if (pd->cfg_card)
|
|
set->cfg_card = pd->cfg_card;
|
|
}
|