]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/i2c/busses/i2c-ibm_iic.c
Convert files to UTF-8 and some cleanups
[mirror_ubuntu-bionic-kernel.git] / drivers / i2c / busses / i2c-ibm_iic.c
index 5bccb5d68318b6ea5fdfc0387a3136138d8bb20b..9b43ff7270d0213db406e034ec486e78af984336 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * drivers/i2c/i2c-ibm_iic.c
+ * drivers/i2c/busses/i2c-ibm_iic.c
  *
  * Support for the IIC peripheral on IBM PPC 4xx
  *
@@ -18,7 +18,7 @@
  *     Copyright 1995-97 Simon G. Vogl
  *                1998-99 Hans Berglund
  *
- *     With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> 
+ *     With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi>
  *     and even Frodo Looijaard <frodol@dds.nl>
  *
  * This program is free software; you can redistribute  it and/or modify it
@@ -320,7 +320,7 @@ err:
 /*
  * IIC interrupt handler
  */
-static irqreturn_t iic_handler(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t iic_handler(int irq, void *dev_id)
 {
        struct ibm_iic_private* dev = (struct ibm_iic_private*)dev_id;
        volatile struct iic_regs __iomem *iic = dev->vaddr;
@@ -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;
@@ -731,7 +738,14 @@ static int __devinit iic_probe(struct ocp_device *ocp){
        adap->timeout = 1;
        adap->retries = 1;
 
-       if ((ret = i2c_add_adapter(adap)) != 0){
+       /*
+        * If "dev->idx" is negative we consider it as zero.
+        * The reason to do so is to avoid sysfs names that only make
+        * sense when there are multiple adapters.
+        */
+       adap->nr = dev->idx >= 0 ? dev->idx : 0;
+
+       if ((ret = i2c_add_numbered_adapter(adap)) < 0) {
                printk(KERN_CRIT "ibm-iic%d: failed to register i2c adapter\n",
                        dev->idx);
                goto fail;
@@ -750,6 +764,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 +793,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);
        }
 }