aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/busses/i2c-ibm_iic.c
diff options
context:
space:
mode:
authorJean-Baptiste Maneyrol <jean-baptiste.maneyrol@teamlog.com>2006-12-10 21:21:29 +0100
committerJean Delvare <khali@arrakis.delvare>2006-12-10 21:21:29 +0100
commit31c095b09ea2fe6a4c752fccaabd9025e1c6e7c7 (patch)
tree2d8c976933cca004c74a30a73bc109f6acc5acf3 /drivers/i2c/busses/i2c-ibm_iic.c
parent41561f28e76a47dc6de0a954da85d0b5c42874eb (diff)
downloadkernel_goldelico_gta04-31c095b09ea2fe6a4c752fccaabd9025e1c6e7c7.zip
kernel_goldelico_gta04-31c095b09ea2fe6a4c752fccaabd9025e1c6e7c7.tar.gz
kernel_goldelico_gta04-31c095b09ea2fe6a4c752fccaabd9025e1c6e7c7.tar.bz2
i2c: Add request/release_mem_region to i2c-ibm_iic bus driver
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 <jean-baptiste.maneyrol@teamlog.com> Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers/i2c/busses/i2c-ibm_iic.c')
-rw-r--r--drivers/i2c/busses/i2c-ibm_iic.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/i2c/busses/i2c-ibm_iic.c b/drivers/i2c/busses/i2c-ibm_iic.c
index 781a99c..1898e99 100644
--- a/drivers/i2c/busses/i2c-ibm_iic.c
+++ b/drivers/i2c/busses/i2c-ibm_iic.c
@@ -680,6 +680,12 @@ static int __devinit iic_probe(struct ocp_device *ocp){
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 @@ fail:
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 @@ static void __devexit iic_remove(struct ocp_device *ocp)
free_irq(dev->irq, dev);
}
iounmap(dev->vaddr);
+ release_mem_region(ocp->def->paddr, sizeof(struct iic_regs));
kfree(dev);
}
}