Commit 3f4a1221 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

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