Commit ce42a549 authored by Sergei Shtylyov's avatar Sergei Shtylyov Committed by Bartlomiej Zolnierkiewicz

palm_bk3710: fix resource management

The driver expected a *virtual* address in the IDE platform device's memory
resource and didn't request the memory region for the register block. Fix this
taking into account the fact that DaVinci SoC devices are fixed-mapped to the
virtual memory early and we can get their virtual addresses using IO_ADDRESS()
macro, not having to call ioremap()...

While at it, also do some cosmetic changes...
Signed-off-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 9bedbcb2
...@@ -353,8 +353,8 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev) ...@@ -353,8 +353,8 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
struct clk *clkp; struct clk *clkp;
struct resource *mem, *irq; struct resource *mem, *irq;
ide_hwif_t *hwif; ide_hwif_t *hwif;
void __iomem *base; unsigned long base;
int pribase, i; int i;
hw_regs_t hw; hw_regs_t hw;
u8 idx[4] = { 0xff, 0xff, 0xff, 0xff }; u8 idx[4] = { 0xff, 0xff, 0xff, 0xff };
...@@ -374,22 +374,27 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev) ...@@ -374,22 +374,27 @@ static int __devinit palm_bk3710_probe(struct platform_device *pdev)
printk(KERN_ERR "failed to get memory region resource\n"); printk(KERN_ERR "failed to get memory region resource\n");
return -ENODEV; return -ENODEV;
} }
irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0); irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (irq == NULL) { if (irq == NULL) {
printk(KERN_ERR "failed to get IRQ resource\n"); printk(KERN_ERR "failed to get IRQ resource\n");
return -ENODEV; return -ENODEV;
} }
base = (void *)mem->start; if (request_mem_region(mem->start, mem->end - mem->start + 1,
"palm_bk3710") == NULL) {
printk(KERN_ERR "failed to request memory region\n");
return -EBUSY;
}
base = IO_ADDRESS(mem->start);
/* Configure the Palm Chip controller */ /* Configure the Palm Chip controller */
palm_bk3710_chipinit(base); palm_bk3710_chipinit((void __iomem *)base);
pribase = mem->start + IDE_PALM_ATA_PRI_REG_OFFSET;
for (i = 0; i < IDE_NR_PORTS - 2; i++) for (i = 0; i < IDE_NR_PORTS - 2; i++)
hw.io_ports_array[i] = pribase + i; hw.io_ports_array[i] = base + IDE_PALM_ATA_PRI_REG_OFFSET + i;
hw.io_ports.ctl_addr = mem->start + hw.io_ports.ctl_addr = base + IDE_PALM_ATA_PRI_CTL_OFFSET;
IDE_PALM_ATA_PRI_CTL_OFFSET;
hw.irq = irq->start; hw.irq = irq->start;
hw.chipset = ide_palm3710; hw.chipset = ide_palm3710;
...@@ -434,4 +439,3 @@ static int __init palm_bk3710_init(void) ...@@ -434,4 +439,3 @@ static int __init palm_bk3710_init(void)
module_init(palm_bk3710_init); module_init(palm_bk3710_init);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment