]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/hwmon/via686a.c
Pull memoryless-node-allocation into release branch
[karo-tx-linux.git] / drivers / hwmon / via686a.c
index 60e94879f4153bcca1d73f805616092f7bf6abe4..6f696f897176b678b05a11228a775d3abc603c05 100644 (file)
@@ -44,7 +44,7 @@
 
 /* If force_addr is set to anything different from 0, we forcibly enable
    the device at the given address. */
-static unsigned short force_addr = 0;
+static unsigned short force_addr;
 module_param(force_addr, ushort, 0);
 MODULE_PARM_DESC(force_addr,
                 "Initialize the base address of the sensors");
@@ -589,10 +589,8 @@ static int via686a_detect(struct i2c_adapter *adapter)
        u16 val;
 
        /* 8231 requires multiple of 256, we enforce that on 686 as well */
-       if (force_addr)
-               address = force_addr & 0xFF00;
-
        if (force_addr) {
+               address = force_addr & 0xFF00;
                dev_warn(&adapter->dev, "forcing ISA address 0x%04X\n",
                         address);
                if (PCIBIOS_SUCCESSFUL !=
@@ -603,11 +601,17 @@ static int via686a_detect(struct i2c_adapter *adapter)
            pci_read_config_word(s_bridge, VIA686A_ENABLE_REG, &val))
                return -ENODEV;
        if (!(val & 0x0001)) {
-               dev_warn(&adapter->dev, "enabling sensors\n");
-               if (PCIBIOS_SUCCESSFUL !=
-                   pci_write_config_word(s_bridge, VIA686A_ENABLE_REG,
-                                         val | 0x0001))
+               if (force_addr) {
+                       dev_info(&adapter->dev, "enabling sensors\n");
+                       if (PCIBIOS_SUCCESSFUL !=
+                           pci_write_config_word(s_bridge, VIA686A_ENABLE_REG,
+                                                 val | 0x0001))
+                               return -ENODEV;
+               } else {
+                       dev_warn(&adapter->dev, "sensors disabled - enable "
+                                "with force_addr=0x%x\n", address);
                        return -ENODEV;
+               }
        }
 
        /* Reserve the ISA region */
@@ -617,11 +621,10 @@ static int via686a_detect(struct i2c_adapter *adapter)
                return -ENODEV;
        }
 
-       if (!(data = kmalloc(sizeof(struct via686a_data), GFP_KERNEL))) {
+       if (!(data = kzalloc(sizeof(struct via686a_data), GFP_KERNEL))) {
                err = -ENOMEM;
                goto exit_release;
        }
-       memset(data, 0, sizeof(struct via686a_data));
 
        new_client = &data->client;
        i2c_set_clientdata(new_client, data);
@@ -708,7 +711,6 @@ static int via686a_detach_client(struct i2c_client *client)
        return 0;
 }
 
-/* Called when we have found a new VIA686A. Set limits, etc. */
 static void via686a_init_client(struct i2c_client *client)
 {
        u8 reg;