hwmon: (adt7462) Wrong ADT7462_VOLT_COUNT
[safe/jmp/linux-2.6] / drivers / hwmon / vt1211.c
index 7dfcc8d..ae33bbb 100644 (file)
@@ -32,7 +32,8 @@
 #include <linux/err.h>
 #include <linux/mutex.h>
 #include <linux/ioport.h>
-#include <asm/io.h>
+#include <linux/acpi.h>
+#include <linux/io.h>
 
 static int uch_config = -1;
 module_param(uch_config, int, 0);
@@ -42,6 +43,10 @@ static int int_mode = -1;
 module_param(int_mode, int, 0);
 MODULE_PARM_DESC(int_mode, "Force the temperature interrupt mode");
 
+static unsigned short force_id;
+module_param(force_id, ushort, 0);
+MODULE_PARM_DESC(force_id, "Override the detected device ID");
+
 static struct platform_device *pdev;
 
 #define DRVNAME "vt1211"
@@ -1131,7 +1136,7 @@ static int __devinit vt1211_probe(struct platform_device *pdev)
        }
 
        res = platform_get_resource(pdev, IORESOURCE_IO, 0);
-       if (!request_region(res->start, res->end - res->start + 1, DRVNAME)) {
+       if (!request_region(res->start, resource_size(res), DRVNAME)) {
                err = -EBUSY;
                dev_err(dev, "Failed to request region 0x%lx-0x%lx\n",
                        (unsigned long)res->start, (unsigned long)res->end);
@@ -1204,7 +1209,7 @@ EXIT_DEV_REMOVE:
        dev_err(dev, "Sysfs interface creation failed (%d)\n", err);
 EXIT_DEV_REMOVE_SILENT:
        vt1211_remove_sysfs(pdev);
-       release_region(res->start, res->end - res->start + 1);
+       release_region(res->start, resource_size(res));
 EXIT_KFREE:
        platform_set_drvdata(pdev, NULL);
        kfree(data);
@@ -1223,7 +1228,7 @@ static int __devexit vt1211_remove(struct platform_device *pdev)
        kfree(data);
 
        res = platform_get_resource(pdev, IORESOURCE_IO, 0);
-       release_region(res->start, res->end - res->start + 1);
+       release_region(res->start, resource_size(res));
 
        return 0;
 }
@@ -1255,6 +1260,10 @@ static int __init vt1211_device_add(unsigned short address)
        }
 
        res.name = pdev->name;
+       err = acpi_check_resource_conflict(&res);
+       if (err)
+               goto EXIT_DEV_PUT;
+
        err = platform_device_add_resources(pdev, &res, 1);
        if (err) {
                printk(KERN_ERR DRVNAME ": Device resource addition failed "
@@ -1280,10 +1289,12 @@ EXIT:
 static int __init vt1211_find(int sio_cip, unsigned short *address)
 {
        int err = -ENODEV;
+       int devid;
 
        superio_enter(sio_cip);
 
-       if (superio_inb(sio_cip, SIO_VT1211_DEVID) != SIO_VT1211_ID) {
+       devid = force_id ? force_id : superio_inb(sio_cip, SIO_VT1211_DEVID);
+       if (devid != SIO_VT1211_ID) {
                goto EXIT;
        }