aboutsummaryrefslogtreecommitdiff
path: root/drivers/acpi/ibm_acpi.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-03-22 19:43:02 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-03-22 19:43:02 -0700
commit37c70d0d09747a958ec50aeb11ed1bf896da028c (patch)
tree5f026a3cfc7e4d4b11ca8cf7c787325bfb96e4e0 /drivers/acpi/ibm_acpi.c
parent7f52a3afc4c02db75b3953fcbbb980abc86873a2 (diff)
parentcddece4beccaa72dcb57d64a7f1e496b2e61a16b (diff)
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: ACPI: IA64: fix %ll build warnings ACPI: IA64: fix allnoconfig build ACPI: Only use IPI on known broken machines (AMD, Dothan/BaniasPentium M) ACPI: ibm-acpi: allow module to load when acpi notifiers can't be set (v2) ACPI: parse 2nd MADT by default ACPICA: revert "acpi_serialize" changes sony-laptop: MAINTAINERS fix entry, add L: and W: ACPI: resolve HP nx6125 S3 immediate wakeup regression ACPI: Add support to parse 2nd MADT
Diffstat (limited to 'drivers/acpi/ibm_acpi.c')
-rw-r--r--drivers/acpi/ibm_acpi.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/acpi/ibm_acpi.c b/drivers/acpi/ibm_acpi.c
index 36901362fd2..dc1096608f4 100644
--- a/drivers/acpi/ibm_acpi.c
+++ b/drivers/acpi/ibm_acpi.c
@@ -2507,7 +2507,7 @@ static int __init setup_notify(struct ibm_struct *ibm)
ret = acpi_bus_get_device(*ibm->handle, &ibm->device);
if (ret < 0) {
printk(IBM_ERR "%s device not present\n", ibm->name);
- return 0;
+ return -ENODEV;
}
acpi_driver_data(ibm->device) = ibm;
@@ -2516,8 +2516,13 @@ static int __init setup_notify(struct ibm_struct *ibm)
status = acpi_install_notify_handler(*ibm->handle, ibm->type,
dispatch_notify, ibm);
if (ACPI_FAILURE(status)) {
- printk(IBM_ERR "acpi_install_notify_handler(%s) failed: %d\n",
- ibm->name, status);
+ if (status == AE_ALREADY_EXISTS) {
+ printk(IBM_NOTICE "another device driver is already handling %s events\n",
+ ibm->name);
+ } else {
+ printk(IBM_ERR "acpi_install_notify_handler(%s) failed: %d\n",
+ ibm->name, status);
+ }
return -ENODEV;
}
ibm->notify_installed = 1;
@@ -2553,6 +2558,8 @@ static int __init register_driver(struct ibm_struct *ibm)
return ret;
}
+static void ibm_exit(struct ibm_struct *ibm);
+
static int __init ibm_init(struct ibm_struct *ibm)
{
int ret;
@@ -2594,6 +2601,12 @@ static int __init ibm_init(struct ibm_struct *ibm)
if (ibm->notify) {
ret = setup_notify(ibm);
+ if (ret == -ENODEV) {
+ printk(IBM_NOTICE "disabling subdriver %s\n",
+ ibm->name);
+ ibm_exit(ibm);
+ return 0;
+ }
if (ret < 0)
return ret;
}