devices: msm8625: Add SDCC 1/2/3/4 platform devices
To support single binary for 7627a and 8625, define
SDCC 1/2/3/4 devices for 8625
Change-Id: Ie81d75a8d1126eb5dc34e8e24f1bfe3bb601717c
Signed-off-by: Trilok Soni <tsoni@codeaurora.org>
diff --git a/arch/arm/mach-msm/devices-msm7x27a.c b/arch/arm/mach-msm/devices-msm7x27a.c
index f5b12c3..043ec0e 100644
--- a/arch/arm/mach-msm/devices-msm7x27a.c
+++ b/arch/arm/mach-msm/devices-msm7x27a.c
@@ -513,18 +513,6 @@
&msm_device_sdc4,
};
-int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
-{
- struct platform_device *pdev;
-
- if (controller < 1 || controller > 4)
- return -EINVAL;
-
- pdev = msm_sdcc_devices[controller-1];
- pdev->dev.platform_data = plat;
- return platform_device_register(pdev);
-}
-
#ifdef CONFIG_MSM_CAMERA_V4L2
static struct resource msm_csic0_resources[] = {
{
@@ -975,6 +963,169 @@
.num_resources = ARRAY_SIZE(msm8625_gpio_resources),
};
+static struct resource msm8625_resources_sdc1[] = {
+ {
+ .start = MSM_SDC1_BASE,
+ .end = MSM_SDC1_BASE + SZ_4K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = MSM8625_INT_SDC1_0,
+ .end = MSM8625_INT_SDC1_1,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "sdcc_dma_chnl",
+ .start = DMOV_SDC1_CHAN,
+ .end = DMOV_SDC1_CHAN,
+ .flags = IORESOURCE_DMA,
+ },
+ {
+ .name = "sdcc_dma_crci",
+ .start = DMOV_SDC1_CRCI,
+ .end = DMOV_SDC1_CRCI,
+ .flags = IORESOURCE_DMA,
+ }
+};
+
+static struct resource msm8625_resources_sdc2[] = {
+ {
+ .start = MSM_SDC2_BASE,
+ .end = MSM_SDC2_BASE + SZ_4K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = MSM8625_INT_SDC2_0,
+ .end = MSM8625_INT_SDC2_1,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "sdcc_dma_chnl",
+ .start = DMOV_SDC2_CHAN,
+ .end = DMOV_SDC2_CHAN,
+ .flags = IORESOURCE_DMA,
+ },
+ {
+ .name = "sdcc_dma_crci",
+ .start = DMOV_SDC2_CRCI,
+ .end = DMOV_SDC2_CRCI,
+ .flags = IORESOURCE_DMA,
+ }
+};
+
+static struct resource msm8625_resources_sdc3[] = {
+ {
+ .start = MSM_SDC3_BASE,
+ .end = MSM_SDC3_BASE + SZ_4K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = MSM8625_INT_SDC3_0,
+ .end = MSM8625_INT_SDC3_1,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "sdcc_dma_chnl",
+ .start = DMOV_SDC3_CHAN,
+ .end = DMOV_SDC3_CHAN,
+ .flags = IORESOURCE_DMA,
+ },
+ {
+ .name = "sdcc_dma_crci",
+ .start = DMOV_SDC3_CRCI,
+ .end = DMOV_SDC3_CRCI,
+ .flags = IORESOURCE_DMA,
+ },
+};
+
+static struct resource msm8625_resources_sdc4[] = {
+ {
+ .start = MSM_SDC4_BASE,
+ .end = MSM_SDC4_BASE + SZ_4K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = MSM8625_INT_SDC4_0,
+ .end = MSM8625_INT_SDC4_1,
+ .flags = IORESOURCE_IRQ,
+ },
+ {
+ .name = "sdcc_dma_chnl",
+ .start = DMOV_SDC4_CHAN,
+ .end = DMOV_SDC4_CHAN,
+ .flags = IORESOURCE_DMA,
+ },
+ {
+ .name = "sdcc_dma_crci",
+ .start = DMOV_SDC4_CRCI,
+ .end = DMOV_SDC4_CRCI,
+ .flags = IORESOURCE_DMA,
+ },
+};
+
+struct platform_device msm8625_device_sdc1 = {
+ .name = "msm_sdcc",
+ .id = 1,
+ .num_resources = ARRAY_SIZE(msm8625_resources_sdc1),
+ .resource = msm8625_resources_sdc1,
+ .dev = {
+ .coherent_dma_mask = 0xffffffff,
+ },
+};
+
+struct platform_device msm8625_device_sdc2 = {
+ .name = "msm_sdcc",
+ .id = 2,
+ .num_resources = ARRAY_SIZE(msm8625_resources_sdc2),
+ .resource = msm8625_resources_sdc2,
+ .dev = {
+ .coherent_dma_mask = 0xffffffff,
+ },
+};
+
+struct platform_device msm8625_device_sdc3 = {
+ .name = "msm_sdcc",
+ .id = 3,
+ .num_resources = ARRAY_SIZE(msm8625_resources_sdc3),
+ .resource = msm8625_resources_sdc3,
+ .dev = {
+ .coherent_dma_mask = 0xffffffff,
+ },
+};
+
+struct platform_device msm8625_device_sdc4 = {
+ .name = "msm_sdcc",
+ .id = 4,
+ .num_resources = ARRAY_SIZE(msm8625_resources_sdc4),
+ .resource = msm8625_resources_sdc4,
+ .dev = {
+ .coherent_dma_mask = 0xffffffff,
+ },
+};
+
+static struct platform_device *msm8625_sdcc_devices[] __initdata = {
+ &msm8625_device_sdc1,
+ &msm8625_device_sdc2,
+ &msm8625_device_sdc3,
+ &msm8625_device_sdc4,
+};
+
+int __init msm_add_sdcc(unsigned int controller, struct mmc_platform_data *plat)
+{
+ struct platform_device *pdev;
+
+ if (controller < 1 || controller > 4)
+ return -EINVAL;
+
+ if (cpu_is_msm8625())
+ pdev = msm8625_sdcc_devices[controller-1];
+ else
+ pdev = msm_sdcc_devices[controller-1];
+
+ pdev->dev.platform_data = plat;
+ return platform_device_register(pdev);
+}
+
static struct clk_lookup msm_clock_8625_dummy[] = {
CLK_DUMMY("core_clk", adm_clk.c, "msm_dmov", 0),
CLK_DUMMY("adsp_clk", adsp_clk.c, NULL, 0),
diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h
index 1aaa9e0..2cc208a 100644
--- a/arch/arm/mach-msm/devices.h
+++ b/arch/arm/mach-msm/devices.h
@@ -130,6 +130,10 @@
extern struct platform_device msm8625_device_qup_i2c_gsbi1;
extern struct platform_device msm8625_device_uart_dm1;
extern struct platform_device msm8625_device_uart_dm2;
+extern struct platform_device msm8625_device_sdc1;
+extern struct platform_device msm8625_device_sdc2;
+extern struct platform_device msm8625_device_sdc3;
+extern struct platform_device msm8625_device_sdc4;
extern struct platform_device msm_slim_ctrl;
extern struct platform_device msm_device_sps;