]> git.hungrycats.org Git - linux/commitdiff
[PATCH] i2c: bring i2c-viapro uptodate with the style guide
authorChristoph Hellwig <hch@lst.de>
Wed, 23 Apr 2003 04:33:48 +0000 (21:33 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 23 Apr 2003 04:33:48 +0000 (21:33 -0700)
drivers/i2c/busses/i2c-viapro.c

index 8452c168d8b78546f6eadc7f7c7acac119e175fd..05b54382d6c1465b1d4203d09cb13743004e2307 100644 (file)
 #include <linux/init.h>
 #include <asm/io.h>
 
-#define SMBBA1     0x90
-#define SMBBA2      0x80
-#define SMBBA3      0xD0
+#define SMBBA1          0x90
+#define SMBBA2          0x80
+#define SMBBA3          0xD0
 
 /* SMBus address offsets */
-#define SMBHSTSTS (0 + vt596_smba)
-#define SMBHSLVSTS (1 + vt596_smba)
-#define SMBHSTCNT (2 + vt596_smba)
-#define SMBHSTCMD (3 + vt596_smba)
-#define SMBHSTADD (4 + vt596_smba)
-#define SMBHSTDAT0 (5 + vt596_smba)
-#define SMBHSTDAT1 (6 + vt596_smba)
-#define SMBBLKDAT (7 + vt596_smba)
-#define SMBSLVCNT (8 + vt596_smba)
-#define SMBSHDWCMD (9 + vt596_smba)
-#define SMBSLVEVT (0xA + vt596_smba)
-#define SMBSLVDAT (0xC + vt596_smba)
+static unsigned short vt596_smba;
+#define SMBHSTSTS      (vt596_smba + 0)
+#define SMBHSLVSTS     (vt596_smba + 1)
+#define SMBHSTCNT      (vt596_smba + 2)
+#define SMBHSTCMD      (vt596_smba + 3)
+#define SMBHSTADD      (vt596_smba + 4)
+#define SMBHSTDAT0     (vt596_smba + 5)
+#define SMBHSTDAT1     (vt596_smba + 6)
+#define SMBBLKDAT      (vt596_smba + 7)
+#define SMBSLVCNT      (vt596_smba + 8)
+#define SMBSHDWCMD     (vt596_smba + 9)
+#define SMBSLVEVT      (vt596_smba + 0xA)
+#define SMBSLVDAT      (vt596_smba + 0xC)
 
 /* PCI Address Constants */
 
 static unsigned short smb_cf_hstcfg = 0xD2;
 
 #define SMBHSTCFG   (smb_cf_hstcfg)
-#define SMBSLVC     (SMBHSTCFG+1)
-#define SMBSHDW1    (SMBHSTCFG+2)
-#define SMBSHDW2    (SMBHSTCFG+3)
-#define SMBREV      (SMBHSTCFG+4)
+#define SMBSLVC     (smb_cf_hstcfg + 1)
+#define SMBSHDW1    (smb_cf_hstcfg + 2)
+#define SMBSHDW2    (smb_cf_hstcfg + 3)
+#define SMBREV      (smb_cf_hstcfg + 4)
 
 /* Other settings */
-#define MAX_TIMEOUT 500
-#define  ENABLE_INT9 0
+#define MAX_TIMEOUT    500
+#define ENABLE_INT9    0
 
 /* VT82C596 constants */
 #define VT596_QUICK      0x00
@@ -84,144 +85,33 @@ static unsigned short smb_cf_hstcfg = 0xD2;
 #define VT596_WORD_DATA  0x0C
 #define VT596_BLOCK_DATA 0x14
 
-/* insmod parameters */
 
 /* If force is set to anything different from 0, we forcibly enable the
    VT596. DANGEROUS! */
-static int force = 0;
+static int force;
 MODULE_PARM(force, "i");
 MODULE_PARM_DESC(force, "Forcibly enable the SMBus. DANGEROUS!");
 
 /* If force_addr is set to anything different from 0, we forcibly enable
    the VT596 at the given address. VERY DANGEROUS! */
-static int force_addr = 0;
+static int force_addr;
 MODULE_PARM(force_addr, "i");
 MODULE_PARM_DESC(force_addr,
                 "Forcibly enable the SMBus at the given address. "
                 "EXTREMELY DANGEROUS!");
 
-static void vt596_do_pause(unsigned int amount);
-static int vt596_transaction(void);
-s32 vt596_access(struct i2c_adapter * adap, u16 addr, unsigned short flags, 
-       char read_write, u8 command, int size, union i2c_smbus_data * data);
-u32 vt596_func(struct i2c_adapter *adapter);
-
-static struct i2c_algorithm smbus_algorithm = {
-       .name           = "Non-I2C SMBus adapter",
-       .id             = I2C_ALGO_SMBUS,
-       .smbus_xfer     = vt596_access,
-       .functionality  = vt596_func,
-};
-
-static struct i2c_adapter vt596_adapter = {
-       .owner          = THIS_MODULE,
-       .id             = I2C_ALGO_SMBUS | I2C_HW_SMBUS_VIA2,
-       .algo           = &smbus_algorithm,
-       .dev            = {
-               .name   = "unset",
-       },
-};
-
-
-
-
-static unsigned short vt596_smba = 0;
-
-
-/* Detect whether a compatible device can be found, and initialize it. */
-int vt596_setup(struct pci_dev *VT596_dev, struct pci_device_id const *id)
-{
-       unsigned char temp;
-       
-       dev_info(&VT596_dev->dev, "Found Via %s device\n", VT596_dev->dev.name);
-
-       /* Determine the address of the SMBus areas */
-       if (force_addr) {
-               vt596_smba = force_addr & 0xfff0;
-               force = 0;
-       } else {
-               if ((pci_read_config_word(VT596_dev, id->driver_data, &vt596_smba))
-                   || !(vt596_smba & 0x1)) {
-                       /* try 2nd address and config reg. for 596 */
-                       if((id->device == PCI_DEVICE_ID_VIA_82C596_3) &&
-                          (!pci_read_config_word(VT596_dev, SMBBA2, &vt596_smba)) &&
-                          (vt596_smba & 0x1)) {
-                               smb_cf_hstcfg = 0x84;
-                       } else {
-                               /* no matches at all */
-                               dev_err(&VT596_dev->dev, "Cannot configure "
-                                       "SMBus I/O Base address\n");
-                               return(-ENODEV);
-                       }
-               }
-               vt596_smba &= 0xfff0;
-               if(vt596_smba == 0) {
-                       dev_err(&VT596_dev->dev, "SMBus base address "
-                               "uninitialized - upgrade BIOS or use "
-                               "force_addr=0xaddr\n");
-                       return -ENODEV;
-               }
-       }
-
-       if (!request_region(vt596_smba, 8, "viapro-smbus")) {
-               dev_err(&VT596_dev->dev, "SMBus region 0x%x already in use!\n",
-                       vt596_smba);
-               return(-ENODEV);
-       }
-
-       pci_read_config_byte(VT596_dev, SMBHSTCFG, &temp);
-       /* If force_addr is set, we program the new address here. Just to make
-          sure, we disable the VT596 first. */
-       if (force_addr) {
-               pci_write_config_byte(VT596_dev, SMBHSTCFG, temp & 0xfe);
-               pci_write_config_word(VT596_dev, id->driver_data, vt596_smba);
-               pci_write_config_byte(VT596_dev, SMBHSTCFG, temp | 0x01);
-               dev_warn(&VT596_dev->dev, "WARNING: SMBus interface set to new "
-                    "address 0x%04x!\n", vt596_smba);
-       } else if ((temp & 1) == 0) {
-               if (force) {
-                       /* NOTE: This assumes I/O space and other allocations 
-                        * WERE done by the Bios!  Don't complain if your 
-                        * hardware does weird things after enabling this. 
-                        * :') Check for Bios updates before resorting to 
-                        * this.
-                        */
-                       pci_write_config_byte(VT596_dev, SMBHSTCFG,
-                                             temp | 1);
-                       dev_info(&VT596_dev->dev, "Enabling SMBus device\n");
-               } else {
-                       dev_err(&VT596_dev->dev, "SMBUS: Error: Host SMBus "
-                               "controller not enabled! - upgrade BIOS or "
-                               "use force=1\n");
-                       return(-ENODEV);
-               }
-       }
-
-       if ((temp & 0x0E) == 8)
-               dev_dbg(&VT596_dev->dev, "using Interrupt 9 for SMBus.\n");
-       else if ((temp & 0x0E) == 0)
-               dev_dbg(&VT596_dev->dev, "using Interrupt SMI# for SMBus.\n");
-       else
-               dev_dbg(&VT596_dev->dev, "Illegal Interrupt configuration "
-                       "(or code out of date)!\n");
-
-       pci_read_config_byte(VT596_dev, SMBREV, &temp);
-       dev_dbg(&VT596_dev->dev, "SMBREV = 0x%X\n", temp);
-       dev_dbg(&VT596_dev->dev, "VT596_smba = 0x%X\n", vt596_smba);
-
-       return(0);
-}
 
+static struct i2c_adapter vt596_adapter;
 
 /* Internally used pause function */
-void vt596_do_pause(unsigned int amount)
+static void vt596_do_pause(unsigned int amount)
 {
        current->state = TASK_INTERRUPTIBLE;
        schedule_timeout(amount);
 }
 
 /* Another internally used function */
-int vt596_transaction(void)
+static int vt596_transaction(void)
 {
        int temp;
        int result = 0;
@@ -296,15 +186,16 @@ int vt596_transaction(void)
 }
 
 /* Return -1 on error. */
-s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags, 
-               char read_write, u8 command, int size, 
-               union i2c_smbus_data * data)
+static s32 vt596_access(struct i2c_adapter *adap, u16 addr,
+               unsigned short flags,  char read_write, u8 command,
+               int size,  union i2c_smbus_data *data)
 {
        int i, len;
 
        switch (size) {
        case I2C_SMBUS_PROC_CALL:
-               dev_info(&vt596_adapter.dev, "I2C_SMBUS_PROC_CALL not supported!\n");
+               dev_info(&vt596_adapter.dev,
+                        "I2C_SMBUS_PROC_CALL not supported!\n");
                return -1;
        case I2C_SMBUS_QUICK:
                outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
@@ -363,7 +254,6 @@ s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags,
        if ((read_write == I2C_SMBUS_WRITE) || (size == VT596_QUICK))
                return 0;
 
-
        switch (size) {
        case VT596_BYTE:
                /* Where is the result put? I assume here it is in
@@ -388,15 +278,127 @@ s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags,
        return 0;
 }
 
-
-u32 vt596_func(struct i2c_adapter *adapter)
+static u32 vt596_func(struct i2c_adapter *adapter)
 {
        return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
            I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
            I2C_FUNC_SMBUS_BLOCK_DATA;
 }
 
+static struct i2c_algorithm smbus_algorithm = {
+       .name           = "Non-I2C SMBus adapter",
+       .id             = I2C_ALGO_SMBUS,
+       .smbus_xfer     = vt596_access,
+       .functionality  = vt596_func,
+};
+
+static struct i2c_adapter vt596_adapter = {
+       .owner          = THIS_MODULE,
+       .id             = I2C_ALGO_SMBUS | I2C_HW_SMBUS_VIA2,
+       .algo           = &smbus_algorithm,
+       .dev            = {
+               .name   = "unset",
+       },
+};
+
+static int __devinit vt596_probe(struct pci_dev *pdev,
+                                const struct pci_device_id *id)
+{
+       unsigned char temp;
+       int error = -ENODEV;
+       
+       /* Determine the address of the SMBus areas */
+       if (force_addr) {
+               vt596_smba = force_addr & 0xfff0;
+               force = 0;
+               goto found;
+       }
+
+       if ((pci_read_config_word(pdev, id->driver_data, &vt596_smba)) ||
+           !(vt596_smba & 0x1)) {
+               /* try 2nd address and config reg. for 596 */
+               if (id->device == PCI_DEVICE_ID_VIA_82C596_3 &&
+                   !pci_read_config_word(pdev, SMBBA2, &vt596_smba) &&
+                   (vt596_smba & 0x1)) {
+                       smb_cf_hstcfg = 0x84;
+               } else {
+                       /* no matches at all */
+                       dev_err(&pdev->dev, "Cannot configure "
+                               "SMBus I/O Base address\n");
+                       return -ENODEV;
+               }
+       }
 
+       vt596_smba &= 0xfff0;
+       if (vt596_smba == 0) {
+               dev_err(&pdev->dev, "SMBus base address "
+                       "uninitialized - upgrade BIOS or use "
+                       "force_addr=0xaddr\n");
+               return -ENODEV;
+       }
+
+ found:
+       if (!request_region(vt596_smba, 8, "viapro-smbus")) {
+               dev_err(&pdev->dev, "SMBus region 0x%x already in use!\n",
+                       vt596_smba);
+               return -ENODEV;
+       }
+
+       pci_read_config_byte(pdev, SMBHSTCFG, &temp);
+       /* If force_addr is set, we program the new address here. Just to make
+          sure, we disable the VT596 first. */
+       if (force_addr) {
+               pci_write_config_byte(pdev, SMBHSTCFG, temp & 0xfe);
+               pci_write_config_word(pdev, id->driver_data, vt596_smba);
+               pci_write_config_byte(pdev, SMBHSTCFG, temp | 0x01);
+               dev_warn(&pdev->dev, "WARNING: SMBus interface set to new "
+                    "address 0x%04x!\n", vt596_smba);
+       } else if ((temp & 1) == 0) {
+               if (force) {
+                       /* NOTE: This assumes I/O space and other allocations 
+                        * WERE done by the Bios!  Don't complain if your 
+                        * hardware does weird things after enabling this. 
+                        * :') Check for Bios updates before resorting to 
+                        * this.
+                        */
+                       pci_write_config_byte(pdev, SMBHSTCFG, temp | 1);
+                       dev_info(&pdev->dev, "Enabling SMBus device\n");
+               } else {
+                       dev_err(&pdev->dev, "SMBUS: Error: Host SMBus "
+                               "controller not enabled! - upgrade BIOS or "
+                               "use force=1\n");
+                       goto release_region;
+               }
+       }
+
+       if ((temp & 0x0E) == 8)
+               dev_dbg(&pdev->dev, "using Interrupt 9 for SMBus.\n");
+       else if ((temp & 0x0E) == 0)
+               dev_dbg(&pdev->dev, "using Interrupt SMI# for SMBus.\n");
+       else
+               dev_dbg(&pdev->dev, "Illegal Interrupt configuration "
+                       "(or code out of date)!\n");
+
+       pci_read_config_byte(pdev, SMBREV, &temp);
+       dev_dbg(&pdev->dev, "SMBREV = 0x%X\n", temp);
+       dev_dbg(&pdev->dev, "VT596_smba = 0x%X\n", vt596_smba);
+
+       vt596_adapter.dev.parent = &pdev->dev;
+       snprintf(vt596_adapter.dev.name, DEVICE_NAME_SIZE,
+                       "SMBus Via Pro adapter at %04x", vt596_smba);
+       
+       return i2c_add_adapter(&vt596_adapter);
+
+ release_region:
+       release_region(vt596_smba, 8);
+       return error;
+}
+
+static void __devexit vt596_remove(struct pci_dev *pdev)
+{
+       i2c_del_adapter(&vt596_adapter);
+       release_region(vt596_smba, 8);
+}
 
 static struct pci_device_id vt596_ids[] __devinitdata = {
        {
@@ -451,29 +453,6 @@ static struct pci_device_id vt596_ids[] __devinitdata = {
        { 0, }
 };
 
-static int __devinit vt596_probe(struct pci_dev *dev, const struct pci_device_id *id)
-{
-       int retval;
-
-       retval = vt596_setup(dev, id);
-       if (retval)
-               return retval;
-
-       vt596_adapter.dev.parent = &dev->dev;
-
-       snprintf(vt596_adapter.dev.name, DEVICE_NAME_SIZE,
-                       "SMBus Via Pro adapter at %04x", vt596_smba);
-       
-       retval = i2c_add_adapter(&vt596_adapter);
-
-       return retval;
-}
-
-static void __devexit vt596_remove(struct pci_dev *dev)
-{
-       i2c_del_adapter(&vt596_adapter);
-}
-
 static struct pci_driver vt596_driver = {
        .name           = "vt596 smbus",
        .id_table       = vt596_ids,
@@ -490,14 +469,12 @@ static int __init i2c_vt596_init(void)
 static void __exit i2c_vt596_exit(void)
 {
        pci_unregister_driver(&vt596_driver);
-       release_region(vt596_smba, 8);
 }
 
-
-
-MODULE_AUTHOR("Frodo Looijaard <frodol@dds.nl> and Philip Edelbrock <phil@netroedge.com>");
+MODULE_AUTHOR(
+    "Frodo Looijaard <frodol@dds.nl> and "
+    "Philip Edelbrock <phil@netroedge.com>");
 MODULE_DESCRIPTION("vt82c596 SMBus driver");
-
 MODULE_LICENSE("GPL");
 
 module_init(i2c_vt596_init);