aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2009-01-07 10:37:35 -0500
committerJean Delvare <khali@linux-fr.org>2009-01-07 10:37:35 -0500
commitb9acb64a385c5b26fc392e0d58ac7b8e0a2cd812 (patch)
treeefd4f47d256551082742a092a15ac9b28ddeefe5
parentc8ac32e4711639c81e5f4d4cd78c8f21675a2bae (diff)
hwmon: Check for ACPI resource conflicts
Check for ACPI resource conflicts in hwmon drivers. I've included all Super-I/O and PCI drivers. I've voluntarily left out: * Vendor-specific drivers: if they conflicted on any system, this would pretty much mean that they conflict on all systems, and we would know by now. * Legacy ISA drivers (lm78 and w83781d): they only support chips found on old designs were ACPI either wasn't supported or didn't deal with thermal management. * Drivers accessing the I/O resources indirectly (e.g. through SMBus): the checks are already done where they belong, i.e. in the bus drivers. Signed-off-by: Jean Delvare <jdelvare@suse.de> Acked-by: David Hubbard <david.c.hubbard@gmail.com>
-rw-r--r--drivers/hwmon/dme1737.c5
-rw-r--r--drivers/hwmon/f71805f.c5
-rw-r--r--drivers/hwmon/f71882fg.c5
-rw-r--r--drivers/hwmon/it87.c5
-rw-r--r--drivers/hwmon/pc87360.c6
-rw-r--r--drivers/hwmon/pc87427.c5
-rw-r--r--drivers/hwmon/sis5595.c5
-rw-r--r--drivers/hwmon/smsc47b397.c5
-rw-r--r--drivers/hwmon/smsc47m1.c5
-rw-r--r--drivers/hwmon/via686a.c5
-rw-r--r--drivers/hwmon/vt1211.c5
-rw-r--r--drivers/hwmon/vt8231.c5
-rw-r--r--drivers/hwmon/w83627ehf.c6
-rw-r--r--drivers/hwmon/w83627hf.c5
14 files changed, 72 insertions, 0 deletions
diff --git a/drivers/hwmon/dme1737.c b/drivers/hwmon/dme1737.c
index 27a5d397f9a1..3df202a9ad72 100644
--- a/drivers/hwmon/dme1737.c
+++ b/drivers/hwmon/dme1737.c
@@ -34,6 +34,7 @@
34#include <linux/hwmon-vid.h> 34#include <linux/hwmon-vid.h>
35#include <linux/err.h> 35#include <linux/err.h>
36#include <linux/mutex.h> 36#include <linux/mutex.h>
37#include <linux/acpi.h>
37#include <asm/io.h> 38#include <asm/io.h>
38 39
39/* ISA device, if found */ 40/* ISA device, if found */
@@ -2361,6 +2362,10 @@ static int __init dme1737_isa_device_add(unsigned short addr)
2361 }; 2362 };
2362 int err; 2363 int err;
2363 2364
2365 err = acpi_check_resource_conflict(&res);
2366 if (err)
2367 goto exit;
2368
2364 if (!(pdev = platform_device_alloc("dme1737", addr))) { 2369 if (!(pdev = platform_device_alloc("dme1737", addr))) {
2365 printk(KERN_ERR "dme1737: Failed to allocate device.\n"); 2370 printk(KERN_ERR "dme1737: Failed to allocate device.\n");
2366 err = -ENOMEM; 2371 err = -ENOMEM;
diff --git a/drivers/hwmon/f71805f.c b/drivers/hwmon/f71805f.c
index 7a14a2dbb752..899876579253 100644
--- a/drivers/hwmon/f71805f.c
+++ b/drivers/hwmon/f71805f.c
@@ -39,6 +39,7 @@
39#include <linux/mutex.h> 39#include <linux/mutex.h>
40#include <linux/sysfs.h> 40#include <linux/sysfs.h>
41#include <linux/ioport.h> 41#include <linux/ioport.h>
42#include <linux/acpi.h>
42#include <asm/io.h> 43#include <asm/io.h>
43 44
44static unsigned short force_id; 45static unsigned short force_id;
@@ -1455,6 +1456,10 @@ static int __init f71805f_device_add(unsigned short address,
1455 } 1456 }
1456 1457
1457 res.name = pdev->name; 1458 res.name = pdev->name;
1459 err = acpi_check_resource_conflict(&res);
1460 if (err)
1461 goto exit_device_put;
1462
1458 err = platform_device_add_resources(pdev, &res, 1); 1463 err = platform_device_add_resources(pdev, &res, 1);
1459 if (err) { 1464 if (err) {
1460 printk(KERN_ERR DRVNAME ": Device resource addition failed " 1465 printk(KERN_ERR DRVNAME ": Device resource addition failed "
diff --git a/drivers/hwmon/f71882fg.c b/drivers/hwmon/f71882fg.c
index d867b377d4e9..609cafff86bc 100644
--- a/drivers/hwmon/f71882fg.c
+++ b/drivers/hwmon/f71882fg.c
@@ -28,6 +28,7 @@
28#include <linux/err.h> 28#include <linux/err.h>
29#include <linux/mutex.h> 29#include <linux/mutex.h>
30#include <linux/io.h> 30#include <linux/io.h>
31#include <linux/acpi.h>
31 32
32#define DRVNAME "f71882fg" 33#define DRVNAME "f71882fg"
33 34
@@ -1929,6 +1930,10 @@ static int __init f71882fg_device_add(unsigned short address,
1929 return -ENOMEM; 1930 return -ENOMEM;
1930 1931
1931 res.name = f71882fg_pdev->name; 1932 res.name = f71882fg_pdev->name;
1933 err = acpi_check_resource_conflict(&res);
1934 if (err)
1935 return err;
1936
1932 err = platform_device_add_resources(f71882fg_pdev, &res, 1); 1937 err = platform_device_add_resources(f71882fg_pdev, &res, 1);
1933 if (err) { 1938 if (err) {
1934 printk(KERN_ERR DRVNAME ": Device resource addition failed\n"); 1939 printk(KERN_ERR DRVNAME ": Device resource addition failed\n");
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 0e0d692f0c9e..88e71f195ec7 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -49,6 +49,7 @@
49#include <linux/sysfs.h> 49#include <linux/sysfs.h>
50#include <linux/string.h> 50#include <linux/string.h>
51#include <linux/dmi.h> 51#include <linux/dmi.h>
52#include <linux/acpi.h>
52#include <asm/io.h> 53#include <asm/io.h>
53 54
54#define DRVNAME "it87" 55#define DRVNAME "it87"
@@ -1552,6 +1553,10 @@ static int __init it87_device_add(unsigned short address,
1552 }; 1553 };
1553 int err; 1554 int err;
1554 1555
1556 err = acpi_check_resource_conflict(&res);
1557 if (err)
1558 goto exit;
1559
1555 pdev = platform_device_alloc(DRVNAME, address); 1560 pdev = platform_device_alloc(DRVNAME, address);
1556 if (!pdev) { 1561 if (!pdev) {
1557 err = -ENOMEM; 1562 err = -ENOMEM;
diff --git a/drivers/hwmon/pc87360.c b/drivers/hwmon/pc87360.c
index 5fbfa34c110e..fb052fea3744 100644
--- a/drivers/hwmon/pc87360.c
+++ b/drivers/hwmon/pc87360.c
@@ -43,6 +43,7 @@
43#include <linux/hwmon-vid.h> 43#include <linux/hwmon-vid.h>
44#include <linux/err.h> 44#include <linux/err.h>
45#include <linux/mutex.h> 45#include <linux/mutex.h>
46#include <linux/acpi.h>
46#include <asm/io.h> 47#include <asm/io.h>
47 48
48static u8 devid; 49static u8 devid;
@@ -1627,6 +1628,11 @@ static int __init pc87360_device_add(unsigned short address)
1627 continue; 1628 continue;
1628 res.start = extra_isa[i]; 1629 res.start = extra_isa[i];
1629 res.end = extra_isa[i] + PC87360_EXTENT - 1; 1630 res.end = extra_isa[i] + PC87360_EXTENT - 1;
1631
1632 err = acpi_check_resource_conflict(&res);
1633 if (err)
1634 goto exit_device_put;
1635
1630 err = platform_device_add_resources(pdev, &res, 1); 1636 err = platform_device_add_resources(pdev, &res, 1);
1631 if (err) { 1637 if (err) {
1632 printk(KERN_ERR "pc87360: Device resource[%d] " 1638 printk(KERN_ERR "pc87360: Device resource[%d] "
diff --git a/drivers/hwmon/pc87427.c b/drivers/hwmon/pc87427.c
index 7265f22ae5cd..3a8a0f7a7736 100644
--- a/drivers/hwmon/pc87427.c
+++ b/drivers/hwmon/pc87427.c
@@ -32,6 +32,7 @@
32#include <linux/mutex.h> 32#include <linux/mutex.h>
33#include <linux/sysfs.h> 33#include <linux/sysfs.h>
34#include <linux/ioport.h> 34#include <linux/ioport.h>
35#include <linux/acpi.h>
35#include <asm/io.h> 36#include <asm/io.h>
36 37
37static unsigned short force_id; 38static unsigned short force_id;
@@ -524,6 +525,10 @@ static int __init pc87427_device_add(unsigned short address)
524 }; 525 };
525 int err; 526 int err;
526 527
528 err = acpi_check_resource_conflict(&res);
529 if (err)
530 goto exit;
531
527 pdev = platform_device_alloc(DRVNAME, address); 532 pdev = platform_device_alloc(DRVNAME, address);
528 if (!pdev) { 533 if (!pdev) {
529 err = -ENOMEM; 534 err = -ENOMEM;
diff --git a/drivers/hwmon/sis5595.c b/drivers/hwmon/sis5595.c
index a276806f3d53..aa2e8318f167 100644
--- a/drivers/hwmon/sis5595.c
+++ b/drivers/hwmon/sis5595.c
@@ -62,6 +62,7 @@
62#include <linux/jiffies.h> 62#include <linux/jiffies.h>
63#include <linux/mutex.h> 63#include <linux/mutex.h>
64#include <linux/sysfs.h> 64#include <linux/sysfs.h>
65#include <linux/acpi.h>
65#include <asm/io.h> 66#include <asm/io.h>
66 67
67 68
@@ -727,6 +728,10 @@ static int __devinit sis5595_device_add(unsigned short address)
727 }; 728 };
728 int err; 729 int err;
729 730
731 err = acpi_check_resource_conflict(&res);
732 if (err)
733 goto exit;
734
730 pdev = platform_device_alloc("sis5595", address); 735 pdev = platform_device_alloc("sis5595", address);
731 if (!pdev) { 736 if (!pdev) {
732 err = -ENOMEM; 737 err = -ENOMEM;
diff --git a/drivers/hwmon/smsc47b397.c b/drivers/hwmon/smsc47b397.c
index eb03544c731c..6f6d52b4fb64 100644
--- a/drivers/hwmon/smsc47b397.c
+++ b/drivers/hwmon/smsc47b397.c
@@ -36,6 +36,7 @@
36#include <linux/err.h> 36#include <linux/err.h>
37#include <linux/init.h> 37#include <linux/init.h>
38#include <linux/mutex.h> 38#include <linux/mutex.h>
39#include <linux/acpi.h>
39#include <asm/io.h> 40#include <asm/io.h>
40 41
41static unsigned short force_id; 42static unsigned short force_id;
@@ -303,6 +304,10 @@ static int __init smsc47b397_device_add(unsigned short address)
303 }; 304 };
304 int err; 305 int err;
305 306
307 err = acpi_check_resource_conflict(&res);
308 if (err)
309 goto exit;
310
306 pdev = platform_device_alloc(DRVNAME, address); 311 pdev = platform_device_alloc(DRVNAME, address);
307 if (!pdev) { 312 if (!pdev) {
308 err = -ENOMEM; 313 err = -ENOMEM;
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c
index d1b498548736..a92dbb97ee99 100644
--- a/drivers/hwmon/smsc47m1.c
+++ b/drivers/hwmon/smsc47m1.c
@@ -37,6 +37,7 @@
37#include <linux/init.h> 37#include <linux/init.h>
38#include <linux/mutex.h> 38#include <linux/mutex.h>
39#include <linux/sysfs.h> 39#include <linux/sysfs.h>
40#include <linux/acpi.h>
40#include <asm/io.h> 41#include <asm/io.h>
41 42
42static unsigned short force_id; 43static unsigned short force_id;
@@ -705,6 +706,10 @@ static int __init smsc47m1_device_add(unsigned short address,
705 }; 706 };
706 int err; 707 int err;
707 708
709 err = acpi_check_resource_conflict(&res);
710 if (err)
711 goto exit;
712
708 pdev = platform_device_alloc(DRVNAME, address); 713 pdev = platform_device_alloc(DRVNAME, address);
709 if (!pdev) { 714 if (!pdev) {
710 err = -ENOMEM; 715 err = -ENOMEM;
diff --git a/drivers/hwmon/via686a.c b/drivers/hwmon/via686a.c
index f1ee5e731968..a022aedcaacb 100644
--- a/drivers/hwmon/via686a.c
+++ b/drivers/hwmon/via686a.c
@@ -41,6 +41,7 @@
41#include <linux/init.h> 41#include <linux/init.h>
42#include <linux/mutex.h> 42#include <linux/mutex.h>
43#include <linux/sysfs.h> 43#include <linux/sysfs.h>
44#include <linux/acpi.h>
44#include <asm/io.h> 45#include <asm/io.h>
45 46
46 47
@@ -783,6 +784,10 @@ static int __devinit via686a_device_add(unsigned short address)
783 }; 784 };
784 int err; 785 int err;
785 786
787 err = acpi_check_resource_conflict(&res);
788 if (err)
789 goto exit;
790
786 pdev = platform_device_alloc("via686a", address); 791 pdev = platform_device_alloc("via686a", address);
787 if (!pdev) { 792 if (!pdev) {
788 err = -ENOMEM; 793 err = -ENOMEM;
diff --git a/drivers/hwmon/vt1211.c b/drivers/hwmon/vt1211.c
index 12b43590fa53..b0ce37852281 100644
--- a/drivers/hwmon/vt1211.c
+++ b/drivers/hwmon/vt1211.c
@@ -32,6 +32,7 @@
32#include <linux/err.h> 32#include <linux/err.h>
33#include <linux/mutex.h> 33#include <linux/mutex.h>
34#include <linux/ioport.h> 34#include <linux/ioport.h>
35#include <linux/acpi.h>
35#include <asm/io.h> 36#include <asm/io.h>
36 37
37static int uch_config = -1; 38static int uch_config = -1;
@@ -1259,6 +1260,10 @@ static int __init vt1211_device_add(unsigned short address)
1259 } 1260 }
1260 1261
1261 res.name = pdev->name; 1262 res.name = pdev->name;
1263 err = acpi_check_resource_conflict(&res);
1264 if (err)
1265 goto EXIT;
1266
1262 err = platform_device_add_resources(pdev, &res, 1); 1267 err = platform_device_add_resources(pdev, &res, 1);
1263 if (err) { 1268 if (err) {
1264 printk(KERN_ERR DRVNAME ": Device resource addition failed " 1269 printk(KERN_ERR DRVNAME ": Device resource addition failed "
diff --git a/drivers/hwmon/vt8231.c b/drivers/hwmon/vt8231.c
index 5bc57275cae8..9982b45fbb14 100644
--- a/drivers/hwmon/vt8231.c
+++ b/drivers/hwmon/vt8231.c
@@ -35,6 +35,7 @@
35#include <linux/hwmon-vid.h> 35#include <linux/hwmon-vid.h>
36#include <linux/err.h> 36#include <linux/err.h>
37#include <linux/mutex.h> 37#include <linux/mutex.h>
38#include <linux/acpi.h>
38#include <asm/io.h> 39#include <asm/io.h>
39 40
40static int force_addr; 41static int force_addr;
@@ -894,6 +895,10 @@ static int __devinit vt8231_device_add(unsigned short address)
894 }; 895 };
895 int err; 896 int err;
896 897
898 err = acpi_check_resource_conflict(&res);
899 if (err)
900 goto exit;
901
897 pdev = platform_device_alloc("vt8231", address); 902 pdev = platform_device_alloc("vt8231", address);
898 if (!pdev) { 903 if (!pdev) {
899 err = -ENOMEM; 904 err = -ENOMEM;
diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c
index 075164dd65a7..a3a01dc35a31 100644
--- a/drivers/hwmon/w83627ehf.c
+++ b/drivers/hwmon/w83627ehf.c
@@ -48,6 +48,7 @@
48#include <linux/hwmon-vid.h> 48#include <linux/hwmon-vid.h>
49#include <linux/err.h> 49#include <linux/err.h>
50#include <linux/mutex.h> 50#include <linux/mutex.h>
51#include <linux/acpi.h>
51#include <asm/io.h> 52#include <asm/io.h>
52#include "lm75.h" 53#include "lm75.h"
53 54
@@ -1544,6 +1545,11 @@ static int __init sensors_w83627ehf_init(void)
1544 res.start = address + IOREGION_OFFSET; 1545 res.start = address + IOREGION_OFFSET;
1545 res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1; 1546 res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
1546 res.flags = IORESOURCE_IO; 1547 res.flags = IORESOURCE_IO;
1548
1549 err = acpi_check_resource_conflict(&res);
1550 if (err)
1551 goto exit;
1552
1547 err = platform_device_add_resources(pdev, &res, 1); 1553 err = platform_device_add_resources(pdev, &res, 1);
1548 if (err) { 1554 if (err) {
1549 printk(KERN_ERR DRVNAME ": Device resource addition failed " 1555 printk(KERN_ERR DRVNAME ": Device resource addition failed "
diff --git a/drivers/hwmon/w83627hf.c b/drivers/hwmon/w83627hf.c
index b30e5796cb26..389150ba30d3 100644
--- a/drivers/hwmon/w83627hf.c
+++ b/drivers/hwmon/w83627hf.c
@@ -50,6 +50,7 @@
50#include <linux/err.h> 50#include <linux/err.h>
51#include <linux/mutex.h> 51#include <linux/mutex.h>
52#include <linux/ioport.h> 52#include <linux/ioport.h>
53#include <linux/acpi.h>
53#include <asm/io.h> 54#include <asm/io.h>
54#include "lm75.h" 55#include "lm75.h"
55 56
@@ -1793,6 +1794,10 @@ static int __init w83627hf_device_add(unsigned short address,
1793 }; 1794 };
1794 int err; 1795 int err;
1795 1796
1797 err = acpi_check_resource_conflict(&res);
1798 if (err)
1799 goto exit;
1800
1796 pdev = platform_device_alloc(DRVNAME, address); 1801 pdev = platform_device_alloc(DRVNAME, address);
1797 if (!pdev) { 1802 if (!pdev) {
1798 err = -ENOMEM; 1803 err = -ENOMEM;