Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / i2c / busses / i2c-sis5595.c
index 90b7269..b57ab74 100644 (file)
@@ -55,9 +55,9 @@
  * Add adapter resets
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/ioport.h>
 #include <linux/init.h>
@@ -123,11 +123,12 @@ static int blacklist[] = {
 
 /* If force_addr is set to anything different from 0, we forcibly enable
    the device at the given address. */
-static int force_addr = 0;
-MODULE_PARM(force_addr, "i");
+static u16 force_addr;
+module_param(force_addr, ushort, 0);
 MODULE_PARM_DESC(force_addr, "Initialize the base address of the i2c controller");
 
-static unsigned short sis5595_base = 0;
+static struct pci_driver sis5595_driver;
+static unsigned short sis5595_base;
 
 static u8 sis5595_read(u8 reg)
 {
@@ -172,7 +173,8 @@ static int sis5595_setup(struct pci_dev *SIS5595_dev)
 
        /* NB: We grab just the two SMBus registers here, but this may still
         * interfere with ACPI :-(  */
-       if (!request_region(sis5595_base + SMB_INDEX, 2, "sis5595-smbus")) {
+       if (!request_region(sis5595_base + SMB_INDEX, 2,
+                           sis5595_driver.name)) {
                dev_err(&SIS5595_dev->dev, "SMBus registers 0x%04x-0x%04x already in use!\n",
                        sis5595_base + SMB_INDEX, sis5595_base + SMB_INDEX + 1);
                return -ENODEV;
@@ -180,9 +182,11 @@ static int sis5595_setup(struct pci_dev *SIS5595_dev)
 
        if (force_addr) {
                dev_info(&SIS5595_dev->dev, "forcing ISA address 0x%04X\n", sis5595_base);
-               if (!pci_write_config_word(SIS5595_dev, ACPI_BASE, sis5595_base))
+               if (pci_write_config_word(SIS5595_dev, ACPI_BASE, sis5595_base)
+                   != PCIBIOS_SUCCESSFUL)
                        goto error;
-               if (!pci_read_config_word(SIS5595_dev, ACPI_BASE, &a))
+               if (pci_read_config_word(SIS5595_dev, ACPI_BASE, &a)
+                   != PCIBIOS_SUCCESSFUL)
                        goto error;
                if ((a & ~(SIS5595_EXTENT - 1)) != sis5595_base) {
                        /* doesn't work for some chips! */
@@ -191,13 +195,16 @@ static int sis5595_setup(struct pci_dev *SIS5595_dev)
                }
        }
 
-       if (!pci_read_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, &val))
+       if (pci_read_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, &val)
+           != PCIBIOS_SUCCESSFUL)
                goto error;
        if ((val & 0x80) == 0) {
                dev_info(&SIS5595_dev->dev, "enabling ACPI\n");
-               if (!pci_write_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, val | 0x80))
+               if (pci_write_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, val | 0x80)
+                   != PCIBIOS_SUCCESSFUL)
                        goto error;
-               if (!pci_read_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, &val))
+               if (pci_read_config_byte(SIS5595_dev, SIS5595_ENABLE_REG, &val)
+                   != PCIBIOS_SUCCESSFUL)
                        goto error;
                if ((val & 0x80) == 0) {
                        /* doesn't work for some chips? */
@@ -223,7 +230,7 @@ static int sis5595_transaction(struct i2c_adapter *adap)
        /* Make sure the SMBus host is ready to start transmitting */
        temp = sis5595_read(SMB_STS_LO) + (sis5595_read(SMB_STS_HI) << 8);
        if (temp != 0x00) {
-               dev_dbg(&adap->dev, "SMBus busy (%04x). Resetting... \n", temp);
+               dev_dbg(&adap->dev, "SMBus busy (%04x). Resetting...\n", temp);
                sis5595_write(SMB_STS_LO, temp & 0xff);
                sis5595_write(SMB_STS_HI, temp >> 8);
                if ((temp = sis5595_read(SMB_STS_LO) + (sis5595_read(SMB_STS_HI) << 8)) != 0x00) {
@@ -239,7 +246,7 @@ static int sis5595_transaction(struct i2c_adapter *adap)
 
        /* We will always wait for a fraction of a second! */
        do {
-               i2c_delay(1);
+               msleep(1);
                temp = sis5595_read(SMB_STS_LO);
        } while (!(temp & 0x40) && (timeout++ < MAX_TIMEOUT));
 
@@ -352,16 +359,13 @@ static u32 sis5595_func(struct i2c_adapter *adapter)
 }
 
 static struct i2c_algorithm smbus_algorithm = {
-       .name           = "Non-I2C SMBus adapter",
-       .id             = I2C_ALGO_SMBUS,
        .smbus_xfer     = sis5595_access,
        .functionality  = sis5595_func,
 };
 
 static struct i2c_adapter sis5595_adapter = {
        .owner          = THIS_MODULE,
-       .class          = I2C_ADAP_CLASS_SMBUS,
-       .name           = "unset",
+       .class          = I2C_CLASS_HWMON,
        .algo           = &smbus_algorithm,
 };
 
@@ -370,6 +374,8 @@ static struct pci_device_id sis5595_ids[] __devinitdata = {
        { 0, }
 };
 
+MODULE_DEVICE_TABLE (pci, sis5595_ids);
+
 static int __devinit sis5595_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
        if (sis5595_setup(dev)) {
@@ -392,7 +398,7 @@ static void __devexit sis5595_remove(struct pci_dev *dev)
 }
 
 static struct pci_driver sis5595_driver = {
-       .name           = "sis5595 smbus",
+       .name           = "sis5595_smbus",
        .id_table       = sis5595_ids,
        .probe          = sis5595_probe,
        .remove         = __devexit_p(sis5595_remove),
@@ -400,7 +406,7 @@ static struct pci_driver sis5595_driver = {
 
 static int __init i2c_sis5595_init(void)
 {
-       return pci_module_init(&sis5595_driver);
+       return pci_register_driver(&sis5595_driver);
 }
 
 static void __exit i2c_sis5595_exit(void)