Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvar...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 25 Jul 2011 18:40:24 +0000 (11:40 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 25 Jul 2011 18:40:24 +0000 (11:40 -0700)
* 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  i2c: Allow i2c_add_numbered_adapter() to assign a bus id
  i2c-ali1535: Fix style issues

drivers/i2c/busses/i2c-ali1535.c
drivers/i2c/busses/i2c-cpm.c
drivers/i2c/busses/i2c-pxa.c
drivers/i2c/busses/i2c-s6000.c
drivers/i2c/i2c-core.c

index dd36417..b6807db 100644 (file)
@@ -1,23 +1,23 @@
 /*
-    Copyright (c) 2000  Frodo Looijaard <frodol@dds.nl>, 
-                        Philip Edelbrock <phil@netroedge.com>, 
                       Mark D. Studebaker <mdsxyz123@yahoo.com>,
-                        Dan Eaton <dan.eaton@rocketlogix.com> and 
-                        Stephen Rousset<stephen.rousset@rocketlogix.com> 
-
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
-
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
-
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * Copyright (c) 2000  Frodo Looijaard <frodol@dds.nl>,
+ *                      Philip Edelbrock <phil@netroedge.com>,
*                      Mark D. Studebaker <mdsxyz123@yahoo.com>,
+ *                      Dan Eaton <dan.eaton@rocketlogix.com> and
+ *                      Stephen Rousset <stephen.rousset@rocketlogix.com>
+ *
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
+ *
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
+ *
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 
 /*
@@ -254,8 +254,8 @@ static int ali1535_transaction(struct i2c_adapter *adap)
        if (temp & (ALI1535_STS_ERR | ALI1535_STS_BUSY)) {
                /* do a clear-on-write */
                outb_p(0xFF, SMBHSTSTS);
-               if ((temp = inb_p(SMBHSTSTS)) &
-                   (ALI1535_STS_ERR | ALI1535_STS_BUSY)) {
+               temp = inb_p(SMBHSTSTS);
+               if (temp & (ALI1535_STS_ERR | ALI1535_STS_BUSY)) {
                        /* This is probably going to be correctable only by a
                         * power reset as one of the bits now appears to be
                         * stuck */
@@ -267,9 +267,8 @@ static int ali1535_transaction(struct i2c_adapter *adap)
                }
        } else {
                /* check and clear done bit */
-               if (temp & ALI1535_STS_DONE) {
+               if (temp & ALI1535_STS_DONE)
                        outb_p(temp, SMBHSTSTS);
-               }
        }
 
        /* start the transaction by writing anything to the start register */
@@ -278,7 +277,7 @@ static int ali1535_transaction(struct i2c_adapter *adap)
        /* We will always wait for a fraction of a second! */
        timeout = 0;
        do {
-               msleep(1);
+               usleep_range(1000, 2000);
                temp = inb_p(SMBHSTSTS);
        } while (((temp & ALI1535_STS_BUSY) && !(temp & ALI1535_STS_IDLE))
                 && (timeout++ < MAX_TIMEOUT));
@@ -325,12 +324,12 @@ static int ali1535_transaction(struct i2c_adapter *adap)
        /* take consequent actions for error conditions */
        if (!(temp & ALI1535_STS_DONE)) {
                /* issue "kill" to reset host controller */
-               outb_p(ALI1535_KILL,SMBHSTTYP);
-               outb_p(0xFF,SMBHSTSTS);
+               outb_p(ALI1535_KILL, SMBHSTTYP);
+               outb_p(0xFF, SMBHSTSTS);
        } else if (temp & ALI1535_STS_ERR) {
                /* issue "timeout" to reset all devices on bus */
-               outb_p(ALI1535_T_OUT,SMBHSTTYP);
-               outb_p(0xFF,SMBHSTSTS);
+               outb_p(ALI1535_T_OUT, SMBHSTTYP);
+               outb_p(0xFF, SMBHSTSTS);
        }
 
        return result;
@@ -351,7 +350,7 @@ static s32 ali1535_access(struct i2c_adapter *adap, u16 addr,
        for (timeout = 0;
             (timeout < MAX_TIMEOUT) && !(temp & ALI1535_STS_IDLE);
             timeout++) {
-               msleep(1);
+               usleep_range(1000, 2000);
                temp = inb_p(SMBHSTSTS);
        }
        if (timeout >= MAX_TIMEOUT)
@@ -480,12 +479,12 @@ static struct i2c_adapter ali1535_adapter = {
        .algo           = &smbus_algorithm,
 };
 
-static const struct pci_device_id ali1535_ids[] = {
+static DEFINE_PCI_DEVICE_TABLE(ali1535_ids) = {
        { PCI_DEVICE(PCI_VENDOR_ID_AL, PCI_DEVICE_ID_AL_M7101) },
        { },
 };
 
-MODULE_DEVICE_TABLE (pci, ali1535_ids);
+MODULE_DEVICE_TABLE(pci, ali1535_ids);
 
 static int __devinit ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
index 3a20961..b1d9cd2 100644 (file)
@@ -662,11 +662,8 @@ static int __devinit cpm_i2c_probe(struct platform_device *ofdev)
        /* register new adapter to i2c module... */
 
        data = of_get_property(ofdev->dev.of_node, "linux,i2c-index", &len);
-       if (data && len == 4) {
-               cpm->adap.nr = *data;
-               result = i2c_add_numbered_adapter(&cpm->adap);
-       } else
-               result = i2c_add_adapter(&cpm->adap);
+       cpm->adap.nr = (data && len == 4) ? be32_to_cpup(data) : -1;
+       result = i2c_add_numbered_adapter(&cpm->adap);
 
        if (result < 0) {
                dev_err(&ofdev->dev, "Unable to register with I2C\n");
index f59224a..d603646 100644 (file)
@@ -1079,7 +1079,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
         * The reason to do so is to avoid sysfs names that only make
         * sense when there are multiple adapters.
         */
-       i2c->adap.nr = dev->id != -1 ? dev->id : 0;
+       i2c->adap.nr = dev->id;
        snprintf(i2c->adap.name, sizeof(i2c->adap.name), "pxa_i2c-i2c.%u",
                 i2c->adap.nr);
 
@@ -1142,10 +1142,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
        i2c->adap.dev.of_node = dev->dev.of_node;
 #endif
 
-       if (i2c_type == REGS_CE4100)
-               ret = i2c_add_adapter(&i2c->adap);
-       else
-               ret = i2c_add_numbered_adapter(&i2c->adap);
+       ret = i2c_add_numbered_adapter(&i2c->adap);
        if (ret < 0) {
                printk(KERN_INFO "I2C: Failed to add bus\n");
                goto eadapt;
index cb5d01e..c64ba73 100644 (file)
@@ -341,10 +341,7 @@ static int __devinit s6i2c_probe(struct platform_device *dev)
        i2c_wr16(iface, S6_I2C_TXTL, 0);
 
        platform_set_drvdata(dev, iface);
-       if (bus_num < 0)
-               rc = i2c_add_adapter(p_adap);
-       else
-               rc = i2c_add_numbered_adapter(p_adap);
+       rc = i2c_add_numbered_adapter(p_adap);
        if (rc)
                goto err_irq_free;
        return 0;
index 9a58994..131079a 100644 (file)
@@ -925,6 +925,9 @@ EXPORT_SYMBOL(i2c_add_adapter);
  * or otherwise built in to the system's mainboard, and where i2c_board_info
  * is used to properly configure I2C devices.
  *
+ * If the requested bus number is set to -1, then this function will behave
+ * identically to i2c_add_adapter, and will dynamically assign a bus number.
+ *
  * If no devices have pre-been declared for this bus, then be sure to
  * register the adapter before any dynamically allocated ones.  Otherwise
  * the required bus ID may not be available.
@@ -940,6 +943,8 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adap)
        int     id;
        int     status;
 
+       if (adap->nr == -1) /* -1 means dynamically assign bus id */
+               return i2c_add_adapter(adap);
        if (adap->nr & ~MAX_ID_MASK)
                return -EINVAL;