aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2006-07-01 14:56:44 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-07-01 14:56:44 -0400
commitce9c1a8388e16f2a158491ceb5c58a6101b905f6 (patch)
tree00028beeb3c308dc16c47622c5855a84ebf783b0
parent0d1bca1602fb9996a3730e0e882945d7361507b1 (diff)
[ARM] 3678/1: MMC: Make OMAP MMC work
Patch from Tony Lindgren This patch makes OMAP MMC work again: - Fix compile errors - Do not ioremap base as it is already statically mapped - Clean-up platform device handling - Fix compile warnings Signed-off-by: Tony Lindgren <tony@atomide.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/plat-omap/devices.c8
-rw-r--r--drivers/mmc/omap.c41
2 files changed, 23 insertions, 26 deletions
diff --git a/arch/arm/plat-omap/devices.c b/arch/arm/plat-omap/devices.c
index ee15b4089127..8bff56673831 100644
--- a/arch/arm/plat-omap/devices.c
+++ b/arch/arm/plat-omap/devices.c
@@ -162,8 +162,8 @@ static u64 mmc1_dmamask = 0xffffffff;
162 162
163static struct resource mmc1_resources[] = { 163static struct resource mmc1_resources[] = {
164 { 164 {
165 .start = IO_ADDRESS(OMAP_MMC1_BASE), 165 .start = OMAP_MMC1_BASE,
166 .end = IO_ADDRESS(OMAP_MMC1_BASE) + 0x7f, 166 .end = OMAP_MMC1_BASE + 0x7f,
167 .flags = IORESOURCE_MEM, 167 .flags = IORESOURCE_MEM,
168 }, 168 },
169 { 169 {
@@ -191,8 +191,8 @@ static u64 mmc2_dmamask = 0xffffffff;
191 191
192static struct resource mmc2_resources[] = { 192static struct resource mmc2_resources[] = {
193 { 193 {
194 .start = IO_ADDRESS(OMAP_MMC2_BASE), 194 .start = OMAP_MMC2_BASE,
195 .end = IO_ADDRESS(OMAP_MMC2_BASE) + 0x7f, 195 .end = OMAP_MMC2_BASE + 0x7f,
196 .flags = IORESOURCE_MEM, 196 .flags = IORESOURCE_MEM,
197 }, 197 },
198 { 198 {
diff --git a/drivers/mmc/omap.c b/drivers/mmc/omap.c
index 4aa1e56235c9..2b7996da875b 100644
--- a/drivers/mmc/omap.c
+++ b/drivers/mmc/omap.c
@@ -61,6 +61,7 @@ struct mmc_omap_host {
61 unsigned char id; /* 16xx chips have 2 MMC blocks */ 61 unsigned char id; /* 16xx chips have 2 MMC blocks */
62 struct clk * iclk; 62 struct clk * iclk;
63 struct clk * fclk; 63 struct clk * fclk;
64 struct resource *res;
64 void __iomem *base; 65 void __iomem *base;
65 int irq; 66 int irq;
66 unsigned char bus_mode; 67 unsigned char bus_mode;
@@ -340,8 +341,6 @@ static void
340mmc_omap_xfer_data(struct mmc_omap_host *host, int write) 341mmc_omap_xfer_data(struct mmc_omap_host *host, int write)
341{ 342{
342 int n; 343 int n;
343 void __iomem *reg;
344 u16 *p;
345 344
346 if (host->buffer_bytes_left == 0) { 345 if (host->buffer_bytes_left == 0) {
347 host->sg_idx++; 346 host->sg_idx++;
@@ -658,8 +657,8 @@ static void mmc_omap_dma_cb(int lch, u16 ch_status, void *data)
658 struct mmc_data *mmcdat = host->data; 657 struct mmc_data *mmcdat = host->data;
659 658
660 if (unlikely(host->dma_ch < 0)) { 659 if (unlikely(host->dma_ch < 0)) {
661 dev_err(mmc_dev(host->mmc), "DMA callback while DMA not 660 dev_err(mmc_dev(host->mmc),
662 enabled\n"); 661 "DMA callback while DMA not enabled\n");
663 return; 662 return;
664 } 663 }
665 /* FIXME: We really should do something to _handle_ the errors */ 664 /* FIXME: We really should do something to _handle_ the errors */
@@ -973,20 +972,20 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
973 struct omap_mmc_conf *minfo = pdev->dev.platform_data; 972 struct omap_mmc_conf *minfo = pdev->dev.platform_data;
974 struct mmc_host *mmc; 973 struct mmc_host *mmc;
975 struct mmc_omap_host *host = NULL; 974 struct mmc_omap_host *host = NULL;
975 struct resource *r;
976 int ret = 0; 976 int ret = 0;
977 int irq;
977 978
978 if (platform_get_resource(pdev, IORESOURCE_MEM, 0) || 979 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
979 platform_get_irq(pdev, IORESOURCE_IRQ, 0)) { 980 irq = platform_get_irq(pdev, 0);
980 dev_err(&pdev->dev, "mmc_omap_probe: invalid resource type\n"); 981 if (!r || irq < 0)
981 return -ENODEV; 982 return -ENXIO;
982 }
983 983
984 if (!request_mem_region(pdev->resource[0].start, 984 r = request_mem_region(pdev->resource[0].start,
985 pdev->resource[0].end - pdev->resource[0].start + 1, 985 pdev->resource[0].end - pdev->resource[0].start + 1,
986 pdev->name)) { 986 pdev->name);
987 dev_dbg(&pdev->dev, "request_mem_region failed\n"); 987 if (!r)
988 return -EBUSY; 988 return -EBUSY;
989 }
990 989
991 mmc = mmc_alloc_host(sizeof(struct mmc_omap_host), &pdev->dev); 990 mmc = mmc_alloc_host(sizeof(struct mmc_omap_host), &pdev->dev);
992 if (!mmc) { 991 if (!mmc) {
@@ -1003,6 +1002,8 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
1003 host->dma_timer.data = (unsigned long) host; 1002 host->dma_timer.data = (unsigned long) host;
1004 1003
1005 host->id = pdev->id; 1004 host->id = pdev->id;
1005 host->res = r;
1006 host->irq = irq;
1006 1007
1007 if (cpu_is_omap24xx()) { 1008 if (cpu_is_omap24xx()) {
1008 host->iclk = clk_get(&pdev->dev, "mmc_ick"); 1009 host->iclk = clk_get(&pdev->dev, "mmc_ick");
@@ -1032,13 +1033,9 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
1032 host->dma_ch = -1; 1033 host->dma_ch = -1;
1033 1034
1034 host->irq = pdev->resource[1].start; 1035 host->irq = pdev->resource[1].start;
1035 host->base = ioremap(pdev->res.start, SZ_4K); 1036 host->base = (void __iomem*)IO_ADDRESS(r->start);
1036 if (!host->base) {
1037 ret = -ENOMEM;
1038 goto out;
1039 }
1040 1037
1041 if (minfo->wire4) 1038 if (minfo->wire4)
1042 mmc->caps |= MMC_CAP_4_BIT_DATA; 1039 mmc->caps |= MMC_CAP_4_BIT_DATA;
1043 1040
1044 mmc->ops = &mmc_omap_ops; 1041 mmc->ops = &mmc_omap_ops;
@@ -1057,8 +1054,8 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
1057 1054
1058 if (host->power_pin >= 0) { 1055 if (host->power_pin >= 0) {
1059 if ((ret = omap_request_gpio(host->power_pin)) != 0) { 1056 if ((ret = omap_request_gpio(host->power_pin)) != 0) {
1060 dev_err(mmc_dev(host->mmc), "Unable to get GPIO 1057 dev_err(mmc_dev(host->mmc),
1061 pin for MMC power\n"); 1058 "Unable to get GPIO pin for MMC power\n");
1062 goto out; 1059 goto out;
1063 } 1060 }
1064 omap_set_gpio_direction(host->power_pin, 0); 1061 omap_set_gpio_direction(host->power_pin, 0);
@@ -1100,7 +1097,7 @@ static int __init mmc_omap_probe(struct platform_device *pdev)
1100 device_remove_file(&pdev->dev, &dev_attr_cover_switch); 1097 device_remove_file(&pdev->dev, &dev_attr_cover_switch);
1101 } 1098 }
1102 if (ret) { 1099 if (ret) {
1103 dev_wan(mmc_dev(host->mmc), "Unable to create sysfs attributes\n"); 1100 dev_warn(mmc_dev(host->mmc), "Unable to create sysfs attributes\n");
1104 free_irq(OMAP_GPIO_IRQ(host->switch_pin), host); 1101 free_irq(OMAP_GPIO_IRQ(host->switch_pin), host);
1105 omap_free_gpio(host->switch_pin); 1102 omap_free_gpio(host->switch_pin);
1106 host->switch_pin = -1; 1103 host->switch_pin = -1;