|
|
|
@ -124,6 +124,194 @@ struct platform_device msm_device_hsusb_host = { |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static struct resource resources_sdc1[] = { |
|
|
|
|
{ |
|
|
|
|
.start = MSM_SDC1_PHYS, |
|
|
|
|
.end = MSM_SDC1_PHYS + MSM_SDC1_SIZE - 1, |
|
|
|
|
.flags = IORESOURCE_MEM, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC1_0, |
|
|
|
|
.end = INT_SDC1_0, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "cmd_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC1_1, |
|
|
|
|
.end = INT_SDC1_1, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "pio_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.flags = IORESOURCE_IRQ | IORESOURCE_DISABLED, |
|
|
|
|
.name = "status_irq" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = 8, |
|
|
|
|
.end = 8, |
|
|
|
|
.flags = IORESOURCE_DMA, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static struct resource resources_sdc2[] = { |
|
|
|
|
{ |
|
|
|
|
.start = MSM_SDC2_PHYS, |
|
|
|
|
.end = MSM_SDC2_PHYS + MSM_SDC2_SIZE - 1, |
|
|
|
|
.flags = IORESOURCE_MEM, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC2_0, |
|
|
|
|
.end = INT_SDC2_0, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "cmd_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC2_1, |
|
|
|
|
.end = INT_SDC2_1, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "pio_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.flags = IORESOURCE_IRQ | IORESOURCE_DISABLED, |
|
|
|
|
.name = "status_irq" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = 8, |
|
|
|
|
.end = 8, |
|
|
|
|
.flags = IORESOURCE_DMA, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static struct resource resources_sdc3[] = { |
|
|
|
|
{ |
|
|
|
|
.start = MSM_SDC3_PHYS, |
|
|
|
|
.end = MSM_SDC3_PHYS + MSM_SDC3_SIZE - 1, |
|
|
|
|
.flags = IORESOURCE_MEM, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC3_0, |
|
|
|
|
.end = INT_SDC3_0, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "cmd_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC3_1, |
|
|
|
|
.end = INT_SDC3_1, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "pio_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.flags = IORESOURCE_IRQ | IORESOURCE_DISABLED, |
|
|
|
|
.name = "status_irq" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = 8, |
|
|
|
|
.end = 8, |
|
|
|
|
.flags = IORESOURCE_DMA, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static struct resource resources_sdc4[] = { |
|
|
|
|
{ |
|
|
|
|
.start = MSM_SDC4_PHYS, |
|
|
|
|
.end = MSM_SDC4_PHYS + MSM_SDC4_SIZE - 1, |
|
|
|
|
.flags = IORESOURCE_MEM, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC4_0, |
|
|
|
|
.end = INT_SDC4_0, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "cmd_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = INT_SDC4_1, |
|
|
|
|
.end = INT_SDC4_1, |
|
|
|
|
.flags = IORESOURCE_IRQ, |
|
|
|
|
.name = "pio_irq", |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.flags = IORESOURCE_IRQ | IORESOURCE_DISABLED, |
|
|
|
|
.name = "status_irq" |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
.start = 8, |
|
|
|
|
.end = 8, |
|
|
|
|
.flags = IORESOURCE_DMA, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct platform_device msm_device_sdc1 = { |
|
|
|
|
.name = "msm_sdcc", |
|
|
|
|
.id = 1, |
|
|
|
|
.num_resources = ARRAY_SIZE(resources_sdc1), |
|
|
|
|
.resource = resources_sdc1, |
|
|
|
|
.dev = { |
|
|
|
|
.coherent_dma_mask = 0xffffffff, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct platform_device msm_device_sdc2 = { |
|
|
|
|
.name = "msm_sdcc", |
|
|
|
|
.id = 2, |
|
|
|
|
.num_resources = ARRAY_SIZE(resources_sdc2), |
|
|
|
|
.resource = resources_sdc2, |
|
|
|
|
.dev = { |
|
|
|
|
.coherent_dma_mask = 0xffffffff, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct platform_device msm_device_sdc3 = { |
|
|
|
|
.name = "msm_sdcc", |
|
|
|
|
.id = 3, |
|
|
|
|
.num_resources = ARRAY_SIZE(resources_sdc3), |
|
|
|
|
.resource = resources_sdc3, |
|
|
|
|
.dev = { |
|
|
|
|
.coherent_dma_mask = 0xffffffff, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct platform_device msm_device_sdc4 = { |
|
|
|
|
.name = "msm_sdcc", |
|
|
|
|
.id = 4, |
|
|
|
|
.num_resources = ARRAY_SIZE(resources_sdc4), |
|
|
|
|
.resource = resources_sdc4, |
|
|
|
|
.dev = { |
|
|
|
|
.coherent_dma_mask = 0xffffffff, |
|
|
|
|
}, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static struct platform_device *msm_sdcc_devices[] __initdata = { |
|
|
|
|
&msm_device_sdc1, |
|
|
|
|
&msm_device_sdc2, |
|
|
|
|
&msm_device_sdc3, |
|
|
|
|
&msm_device_sdc4, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
int __init msm_add_sdcc(unsigned int controller, |
|
|
|
|
struct msm_mmc_platform_data *plat, |
|
|
|
|
unsigned int stat_irq, unsigned long stat_irq_flags) |
|
|
|
|
{ |
|
|
|
|
struct platform_device *pdev; |
|
|
|
|
struct resource *res; |
|
|
|
|
|
|
|
|
|
if (controller < 1 || controller > 4) |
|
|
|
|
return -EINVAL; |
|
|
|
|
|
|
|
|
|
pdev = msm_sdcc_devices[controller-1]; |
|
|
|
|
pdev->dev.platform_data = plat; |
|
|
|
|
|
|
|
|
|
res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "status_irq"); |
|
|
|
|
if (!res) |
|
|
|
|
return -EINVAL; |
|
|
|
|
else if (stat_irq) { |
|
|
|
|
res->start = res->end = stat_irq; |
|
|
|
|
res->flags &= ~IORESOURCE_DISABLED; |
|
|
|
|
res->flags |= stat_irq_flags; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return platform_device_register(pdev); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct clk msm_clocks_8x50[] = { |
|
|
|
|
CLK_PCOM("adm_clk", ADM_CLK, NULL, 0), |
|
|
|
|
CLK_PCOM("ebi1_clk", EBI1_CLK, NULL, CLK_MIN), |
|
|
|
@ -144,6 +332,14 @@ struct clk msm_clocks_8x50[] = { |
|
|
|
|
CLK_PCOM("pbus_clk", PBUS_CLK, NULL, CLK_MIN), |
|
|
|
|
CLK_PCOM("pcm_clk", PCM_CLK, NULL, 0), |
|
|
|
|
CLK_PCOM("sdac_clk", SDAC_CLK, NULL, OFF), |
|
|
|
|
CLK_PCOM("sdc_clk", SDC1_CLK, &msm_device_sdc1.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_pclk", SDC1_P_CLK, &msm_device_sdc1.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_clk", SDC2_CLK, &msm_device_sdc2.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_pclk", SDC2_P_CLK, &msm_device_sdc2.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_clk", SDC3_CLK, &msm_device_sdc3.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_pclk", SDC3_P_CLK, &msm_device_sdc3.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_clk", SDC4_CLK, &msm_device_sdc4.dev, OFF), |
|
|
|
|
CLK_PCOM("sdc_pclk", SDC4_P_CLK, &msm_device_sdc4.dev, OFF), |
|
|
|
|
CLK_PCOM("spi_clk", SPI_CLK, NULL, 0), |
|
|
|
|
CLK_PCOM("tsif_clk", TSIF_CLK, NULL, 0), |
|
|
|
|
CLK_PCOM("tsif_ref_clk", TSIF_REF_CLK, NULL, 0), |
|
|
|
|