Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=849be516c57501ec4729bde51babc25a7b073b65
Commit:     849be516c57501ec4729bde51babc25a7b073b65
Parent:     69735698312f6f5e47001cf62dc678f591b6a6de
Author:     Jean Delvare <[EMAIL PROTECTED]>
AuthorDate: Tue Feb 13 22:08:57 2007 +0100
Committer:  Jean Delvare <[EMAIL PROTECTED]>
CommitDate: Tue Feb 13 22:08:57 2007 +0100

    i2c-ali1563: Fix device initialization
    
    The i2c-ali1563 initialization looks quite broken to me:
    * If the I/O space isn't enabled, we forcibly set 3 bits in
      the PCI configuration space instead of just the one enabling
      the I/O space.
    * After that we pretend to check if the write worked, but we
      don't actually read the new value from the register.
    * It's probably not a good idea to enable the I/O space if no
      base address has been set.
    
    So I propose the following changes to that part of the driver:
    * Merge ali1563_enable() into ali1563_setup().
    * Check the base address before the I/O space enabled bit.
    
    Signed-off-by: Jean Delvare <[EMAIL PROTECTED]>
    Acked-by: Rudolf Marek <[EMAIL PROTECTED]>
---
 drivers/i2c/busses/i2c-ali1563.c |   41 ++++++++++++++++---------------------
 1 files changed, 18 insertions(+), 23 deletions(-)

diff --git a/drivers/i2c/busses/i2c-ali1563.c b/drivers/i2c/busses/i2c-ali1563.c
index 3b0e79b..55ebbef 100644
--- a/drivers/i2c/busses/i2c-ali1563.c
+++ b/drivers/i2c/busses/i2c-ali1563.c
@@ -314,35 +314,12 @@ static u32 ali1563_func(struct i2c_adapter * a)
 }
 
 
-static void ali1563_enable(struct pci_dev * dev)
-{
-       u16 ctrl;
-
-       pci_read_config_word(dev,ALI1563_SMBBA,&ctrl);
-       ctrl |= 0x7;
-       pci_write_config_word(dev,ALI1563_SMBBA,ctrl);
-}
-
 static int __devinit ali1563_setup(struct pci_dev * dev)
 {
        u16 ctrl;
 
        pci_read_config_word(dev,ALI1563_SMBBA,&ctrl);
 
-       /* Check if device is even enabled first */
-       if (!(ctrl & ALI1563_SMB_IOEN)) {
-               dev_warn(&dev->dev,"I/O space not enabled, trying manually\n");
-               ali1563_enable(dev);
-       }
-       if (!(ctrl & ALI1563_SMB_IOEN)) {
-               dev_warn(&dev->dev,"I/O space still not enabled, giving up\n");
-               goto Err;
-       }
-       if (!(ctrl & ALI1563_SMB_HOSTEN)) {
-               dev_warn(&dev->dev,"Host Controller not enabled\n");
-               goto Err;
-       }
-
        /* SMB I/O Base in high 12 bits and must be aligned with the
         * size of the I/O space. */
        ali1563_smba = ctrl & ~(ALI1563_SMB_IOSIZE - 1);
@@ -350,6 +327,24 @@ static int __devinit ali1563_setup(struct pci_dev * dev)
                dev_warn(&dev->dev,"ali1563_smba Uninitialized\n");
                goto Err;
        }
+
+       /* Check if device is enabled */
+       if (!(ctrl & ALI1563_SMB_HOSTEN)) {
+               dev_warn(&dev->dev, "Host Controller not enabled\n");
+               goto Err;
+       }
+       if (!(ctrl & ALI1563_SMB_IOEN)) {
+               dev_warn(&dev->dev, "I/O space not enabled, trying manually\n");
+               pci_write_config_word(dev, ALI1563_SMBBA,
+                                     ctrl | ALI1563_SMB_IOEN);
+               pci_read_config_word(dev, ALI1563_SMBBA, &ctrl);
+               if (!(ctrl & ALI1563_SMB_IOEN)) {
+                       dev_err(&dev->dev, "I/O space still not enabled, "
+                               "giving up\n");
+                       goto Err;
+               }
+       }
+
        if (!request_region(ali1563_smba, ALI1563_SMB_IOSIZE,
                            ali1563_pci_driver.name)) {
                dev_err(&dev->dev, "Could not allocate I/O space at 0x%04x\n",
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to