From: Jean-Baptiste Maneyrol Reserving I/O memory for a driver with request_mem_region is necessary to avoid memory access conflicts. Even if it's never going to happen, it is cleaner and it allows to monitor I/O memory used in /proc/iomem. Signed-off-by: Jean-Baptiste Maneyrol Signed-off-by: Jean Delvare --- drivers/i2c/busses/i2c-ibm_iic.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- linux-2.6.19-rc1.orig/drivers/i2c/busses/i2c-ibm_iic.c 2006-10-09 21:15:56.000000000 +0200 +++ linux-2.6.19-rc1/drivers/i2c/busses/i2c-ibm_iic.c 2006-10-09 21:18:05.000000000 +0200 @@ -680,6 +680,12 @@ dev->idx = ocp->def->index; ocp_set_drvdata(ocp, dev); + if (!request_mem_region(ocp->def->paddr, sizeof(struct iic_regs), + "ibm_iic")) { + ret = -EBUSY; + goto fail1; + } + if (!(dev->vaddr = ioremap(ocp->def->paddr, sizeof(struct iic_regs)))){ printk(KERN_CRIT "ibm-iic%d: failed to ioremap device registers\n", dev->idx); @@ -750,6 +756,8 @@ iounmap(dev->vaddr); fail2: + release_mem_region(ocp->def->paddr, sizeof(struct iic_regs)); +fail1: ocp_set_drvdata(ocp, NULL); kfree(dev); return ret; @@ -777,6 +785,7 @@ free_irq(dev->irq, dev); } iounmap(dev->vaddr); + release_mem_region(ocp->def->paddr, sizeof(struct iic_regs)); kfree(dev); } }