| /* |
| * linux/arch/arm/mach-exynos4/dev-dwmci.c |
| * |
| * Copyright (c) 2011 Samsung Electronics Co., Ltd. |
| * http://www.samsung.com |
| * |
| * Platform device for Synopsys DesignWare Mobile Storage IP |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| */ |
| |
| #include <linux/kernel.h> |
| #include <linux/dma-mapping.h> |
| #include <linux/platform_device.h> |
| #include <linux/interrupt.h> |
| #include <linux/ioport.h> |
| #include <linux/mmc/dw_mmc.h> |
| |
| #include <plat/devs.h> |
| |
| #include <mach/map.h> |
| |
| static int exynos4_dwmci_get_bus_wd(u32 slot_id) |
| { |
| return 4; |
| } |
| |
| static int exynos4_dwmci_init(u32 slot_id, irq_handler_t handler, void *data) |
| { |
| return 0; |
| } |
| |
| static struct resource exynos4_dwmci_resource[] = { |
| [0] = DEFINE_RES_MEM(EXYNOS4_PA_DWMCI, SZ_4K), |
| [1] = DEFINE_RES_IRQ(EXYNOS4_IRQ_DWMCI), |
| }; |
| |
| static struct dw_mci_board exynos4_dwci_pdata = { |
| .num_slots = 1, |
| .quirks = DW_MCI_QUIRK_BROKEN_CARD_DETECTION, |
| .bus_hz = 80 * 1000 * 1000, |
| .detect_delay_ms = 200, |
| .init = exynos4_dwmci_init, |
| .get_bus_wd = exynos4_dwmci_get_bus_wd, |
| }; |
| |
| static u64 exynos4_dwmci_dmamask = DMA_BIT_MASK(32); |
| |
| struct platform_device exynos4_device_dwmci = { |
| .name = "dw_mmc", |
| .id = -1, |
| .num_resources = ARRAY_SIZE(exynos4_dwmci_resource), |
| .resource = exynos4_dwmci_resource, |
| .dev = { |
| .dma_mask = &exynos4_dwmci_dmamask, |
| .coherent_dma_mask = DMA_BIT_MASK(32), |
| .platform_data = &exynos4_dwci_pdata, |
| }, |
| }; |
| |
| void __init exynos4_dwmci_set_platdata(struct dw_mci_board *pd) |
| { |
| struct dw_mci_board *npd; |
| |
| npd = s3c_set_platdata(pd, sizeof(struct dw_mci_board), |
| &exynos4_device_dwmci); |
| |
| if (!npd->init) |
| npd->init = exynos4_dwmci_init; |
| if (!npd->get_bus_wd) |
| npd->get_bus_wd = exynos4_dwmci_get_bus_wd; |
| } |