diff options
author | Jean Delvare <jdelvare@suse.de> | 2009-01-07 10:37:35 -0500 |
---|---|---|
committer | Jean Delvare <khali@linux-fr.org> | 2009-01-07 10:37:35 -0500 |
commit | b9acb64a385c5b26fc392e0d58ac7b8e0a2cd812 (patch) | |
tree | efd4f47d256551082742a092a15ac9b28ddeefe5 | |
parent | c8ac32e4711639c81e5f4d4cd78c8f21675a2bae (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.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/f71805f.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/f71882fg.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/it87.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/pc87360.c | 6 | ||||
-rw-r--r-- | drivers/hwmon/pc87427.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/sis5595.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/smsc47b397.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/smsc47m1.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/via686a.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/vt1211.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/vt8231.c | 5 | ||||
-rw-r--r-- | drivers/hwmon/w83627ehf.c | 6 | ||||
-rw-r--r-- | drivers/hwmon/w83627hf.c | 5 |
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 | ||
44 | static unsigned short force_id; | 45 | static 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 | ||
48 | static u8 devid; | 49 | static 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 | ||
37 | static unsigned short force_id; | 38 | static 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 | ||
41 | static unsigned short force_id; | 42 | static 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 | ||
42 | static unsigned short force_id; | 43 | static 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 | ||
37 | static int uch_config = -1; | 38 | static 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 | ||
40 | static int force_addr; | 41 | static 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; |