]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.arch/check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
Reenabled linux-xen, added patches for Xen Kernel Version 2.6.27.31,
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
diff --git a/src/patches/suse-2.6.27.31/patches.arch/check-for-acpi-resource-conflicts-in-hwmon-drivers.patch b/src/patches/suse-2.6.27.31/patches.arch/check-for-acpi-resource-conflicts-in-hwmon-drivers.patch
new file mode 100644 (file)
index 0000000..2b39830
--- /dev/null
@@ -0,0 +1,335 @@
+From: Jean Delvare <jdelvare@suse.de>
+Subject: Check for ACPI resource conflicts in hwmon drivers.
+Patch-mainline: 2.6.24-rc3-mm1
+
+I've included all Super-I/O and PCI drivers.
+
+I've voluntarily left out:
+* Laptop specific and 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 check will be added where it belongs, i.e. in the bus drivers.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+Cc: "Mark M. Hoffman" <mhoffman@lightlink.com>
+Cc: Len Brown <lenb@kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+---
+
+ drivers/hwmon/dme1737.c    |    5 +++++
+ drivers/hwmon/f71805f.c    |    5 +++++
+ drivers/hwmon/f71882fg.c   |    5 +++++
+ drivers/hwmon/it87.c       |    5 +++++
+ drivers/hwmon/pc87360.c    |    6 ++++++
+ drivers/hwmon/pc87427.c    |    5 +++++
+ drivers/hwmon/sis5595.c    |    5 +++++
+ drivers/hwmon/smsc47b397.c |    5 +++++
+ drivers/hwmon/smsc47m1.c   |    5 +++++
+ drivers/hwmon/via686a.c    |    5 +++++
+ drivers/hwmon/vt1211.c     |    5 +++++
+ drivers/hwmon/vt8231.c     |    5 +++++
+ drivers/hwmon/w83627ehf.c  |    6 ++++++
+ drivers/hwmon/w83627hf.c   |    5 +++++
+ 14 files changed, 72 insertions(+)
+
+--- a/drivers/hwmon/dme1737.c
++++ b/drivers/hwmon/dme1737.c
+@@ -34,6 +34,7 @@
+ #include <linux/hwmon-vid.h>
+ #include <linux/err.h>
+ #include <linux/mutex.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ /* ISA device, if found */
+@@ -2372,6 +2373,10 @@ static int __init dme1737_isa_device_add
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       if (!(pdev = platform_device_alloc("dme1737", addr))) {
+               printk(KERN_ERR "dme1737: Failed to allocate device.\n");
+               err = -ENOMEM;
+--- a/drivers/hwmon/f71805f.c
++++ b/drivers/hwmon/f71805f.c
+@@ -39,6 +39,7 @@
+ #include <linux/mutex.h>
+ #include <linux/sysfs.h>
+ #include <linux/ioport.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static unsigned short force_id;
+@@ -1455,6 +1456,10 @@ static int __init f71805f_device_add(uns
+       }
+       res.name = pdev->name;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit_device_put;
++
+       err = platform_device_add_resources(pdev, &res, 1);
+       if (err) {
+               printk(KERN_ERR DRVNAME ": Device resource addition failed "
+--- a/drivers/hwmon/f71882fg.c
++++ b/drivers/hwmon/f71882fg.c
+@@ -27,6 +27,7 @@
+ #include <linux/hwmon-sysfs.h>
+ #include <linux/err.h>
+ #include <linux/mutex.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ #define DRVNAME "f71882fg"
+@@ -892,6 +893,10 @@ static int __init f71882fg_device_add(un
+               return -ENOMEM;
+       res.name = f71882fg_pdev->name;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              return err;
++
+       err = platform_device_add_resources(f71882fg_pdev, &res, 1);
+       if (err) {
+               printk(KERN_ERR DRVNAME ": Device resource addition failed\n");
+--- a/drivers/hwmon/it87.c
++++ b/drivers/hwmon/it87.c
+@@ -48,6 +48,7 @@
+ #include <linux/sysfs.h>
+ #include <linux/string.h>
+ #include <linux/dmi.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ #define DRVNAME "it87"
+@@ -1535,6 +1536,10 @@ static int __init it87_device_add(unsign
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc(DRVNAME, address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/pc87360.c
++++ b/drivers/hwmon/pc87360.c
+@@ -43,6 +43,7 @@
+ #include <linux/hwmon-vid.h>
+ #include <linux/err.h>
+ #include <linux/mutex.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static u8 devid;
+@@ -1425,6 +1426,11 @@ static int __init pc87360_device_add(uns
+                       continue;
+               res.start = extra_isa[i];
+               res.end = extra_isa[i] + PC87360_EXTENT - 1;
++
++              err = acpi_check_resource_conflict(&res);
++              if (err)
++                      goto exit_device_put;
++
+               err = platform_device_add_resources(pdev, &res, 1);
+               if (err) {
+                       printk(KERN_ERR "pc87360: Device resource[%d] "
+--- a/drivers/hwmon/pc87427.c
++++ b/drivers/hwmon/pc87427.c
+@@ -32,6 +32,7 @@
+ #include <linux/mutex.h>
+ #include <linux/sysfs.h>
+ #include <linux/ioport.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static unsigned short force_id;
+@@ -524,6 +525,10 @@ static int __init pc87427_device_add(uns
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc(DRVNAME, address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/sis5595.c
++++ b/drivers/hwmon/sis5595.c
+@@ -62,6 +62,7 @@
+ #include <linux/jiffies.h>
+ #include <linux/mutex.h>
+ #include <linux/sysfs.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+@@ -727,6 +728,10 @@ static int __devinit sis5595_device_add(
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc("sis5595", address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/smsc47b397.c
++++ b/drivers/hwmon/smsc47b397.c
+@@ -36,6 +36,7 @@
+ #include <linux/err.h>
+ #include <linux/init.h>
+ #include <linux/mutex.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static unsigned short force_id;
+@@ -303,6 +304,10 @@ static int __init smsc47b397_device_add(
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc(DRVNAME, address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/smsc47m1.c
++++ b/drivers/hwmon/smsc47m1.c
+@@ -37,6 +37,7 @@
+ #include <linux/init.h>
+ #include <linux/mutex.h>
+ #include <linux/sysfs.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static unsigned short force_id;
+@@ -716,6 +717,10 @@ static int __init smsc47m1_device_add(un
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc(DRVNAME, address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/via686a.c
++++ b/drivers/hwmon/via686a.c
+@@ -41,6 +41,7 @@
+ #include <linux/init.h>
+ #include <linux/mutex.h>
+ #include <linux/sysfs.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+@@ -783,6 +784,10 @@ static int __devinit via686a_device_add(
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc("via686a", address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/vt1211.c
++++ b/drivers/hwmon/vt1211.c
+@@ -32,6 +32,7 @@
+ #include <linux/err.h>
+ #include <linux/mutex.h>
+ #include <linux/ioport.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static int uch_config = -1;
+@@ -1259,6 +1260,10 @@ static int __init vt1211_device_add(unsi
+       }
+       res.name = pdev->name;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto EXIT;
++
+       err = platform_device_add_resources(pdev, &res, 1);
+       if (err) {
+               printk(KERN_ERR DRVNAME ": Device resource addition failed "
+--- a/drivers/hwmon/vt8231.c
++++ b/drivers/hwmon/vt8231.c
+@@ -35,6 +35,7 @@
+ #include <linux/hwmon-vid.h>
+ #include <linux/err.h>
+ #include <linux/mutex.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ static int force_addr;
+@@ -894,6 +895,10 @@ static int __devinit vt8231_device_add(u
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc("vt8231", address);
+       if (!pdev) {
+               err = -ENOMEM;
+--- a/drivers/hwmon/w83627ehf.c
++++ b/drivers/hwmon/w83627ehf.c
+@@ -48,6 +48,7 @@
+ #include <linux/hwmon-vid.h>
+ #include <linux/err.h>
+ #include <linux/mutex.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ #include "lm75.h"
+@@ -1544,6 +1545,11 @@ static int __init sensors_w83627ehf_init
+       res.start = address + IOREGION_OFFSET;
+       res.end = address + IOREGION_OFFSET + IOREGION_LENGTH - 1;
+       res.flags = IORESOURCE_IO;
++
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       err = platform_device_add_resources(pdev, &res, 1);
+       if (err) {
+               printk(KERN_ERR DRVNAME ": Device resource addition failed "
+--- a/drivers/hwmon/w83627hf.c
++++ b/drivers/hwmon/w83627hf.c
+@@ -50,6 +50,7 @@
+ #include <linux/err.h>
+ #include <linux/mutex.h>
+ #include <linux/ioport.h>
++#include <linux/acpi.h>
+ #include <asm/io.h>
+ #include "lm75.h"
+@@ -1793,6 +1794,10 @@ static int __init w83627hf_device_add(un
+       };
+       int err;
++      err = acpi_check_resource_conflict(&res);
++      if (err)
++              goto exit;
++
+       pdev = platform_device_alloc(DRVNAME, address);
+       if (!pdev) {
+               err = -ENOMEM;