Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7919589 authored by Seungwon Jeon's avatar Seungwon Jeon Committed by Kukjin Kim
Browse files

ARM: EXYNOS4: Add platform device for dwmci driver



This patch adds platform device for Synopsys DesignWare
Multimedia Card Interface driver.

Signed-off-by: default avatarSeungwon Jeon <tgih.jun@samsung.com>
Signed-off-by: default avatarKukjin Kim <kgene.kim@samsung.com>
parent 3a1a2b9e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -36,6 +36,11 @@ config EXYNOS4_DEV_SYSMMU
	help
	  Common setup code for SYSTEM MMU in EXYNOS4

config EXYNOS4_DEV_DWMCI
	bool
	help
	  Compile in platform device definitions for DWMCI

config EXYNOS4_SETUP_I2C1
	bool
	help
+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ obj-y += dev-audio.o
obj-$(CONFIG_EXYNOS4_DEV_AHCI)		+= dev-ahci.o
obj-$(CONFIG_EXYNOS4_DEV_PD)		+= dev-pd.o
obj-$(CONFIG_EXYNOS4_DEV_SYSMMU)	+= dev-sysmmu.o
obj-$(CONFIG_EXYNOS4_DEV_DWMCI)	+= dev-dwmci.o

obj-$(CONFIG_EXYNOS4_SETUP_FIMC)	+= setup-fimc.o
obj-$(CONFIG_EXYNOS4_SETUP_I2C1)	+= setup-i2c1.o
+82 −0
Original line number Diff line number Diff line
/*
 * 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/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] = {
		.start	= EXYNOS4_PA_DWMCI,
		.end	= EXYNOS4_PA_DWMCI + SZ_4K - 1,
		.flags	= IORESOURCE_MEM,
	},
	[1] = {
		.start	= IRQ_DWMCI,
		.end	= IRQ_DWMCI,
		.flags	= IORESOURCE_IRQ,
	}
};

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;
}
+20 −0
Original line number Diff line number Diff line
/* linux/arch/arm/mach-exynos4/include/mach/dwmci.h
 *
 * Copyright (c) 2011 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com/
 *
 * Synopsys DesignWare Mobile Storage for EXYNOS4210
 *
 * 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.
 */

#ifndef __ASM_ARM_ARCH_DWMCI_H
#define __ASM_ARM_ARCH_DWMCI_H __FILE__

#include <linux/mmc/dw_mmc.h>

extern void exynos4_dwmci_set_platdata(struct dw_mci_board *pd);

#endif /* __ASM_ARM_ARCH_DWMCI_H */
+1 −0
Original line number Diff line number Diff line
@@ -78,6 +78,7 @@
#define IRQ_HSMMC1		IRQ_SPI(74)
#define IRQ_HSMMC2		IRQ_SPI(75)
#define IRQ_HSMMC3		IRQ_SPI(76)
#define IRQ_DWMCI		IRQ_SPI(77)

#define IRQ_MIPICSI0		IRQ_SPI(78)

Loading