]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/i2c/busses/i2c-ibm_iic.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6.23
[linux-2.6-omap-h63xx.git] / drivers / i2c / busses / i2c-ibm_iic.c
index 781a99c1647a3875d06cab731bc022af8bd8c780..8b14d14e60cad3e3cd1099df6d221dc6ab1b475e 100644 (file)
@@ -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);
@@ -721,6 +727,7 @@ static int __devinit iic_probe(struct ocp_device *ocp){
        
        /* Register it with i2c layer */
        adap = &dev->adap;
+       adap->dev.parent = &ocp->dev;
        strcpy(adap->name, "IBM IIC");
        i2c_set_adapdata(adap, dev);
        adap->id = I2C_HW_OCP;
@@ -750,6 +757,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 +786,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);
        }
 }