From f85fc2789e71cee38dae6b1b7e719338273d61a1 Mon Sep 17 00:00:00 2001 From: Lekensteyn Date: Mon, 12 Dec 2011 18:21:56 +0100 Subject: [PATCH] bbswitch: Don't continue on disabling the device on a failing ACPI call --- bbswitch.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/bbswitch.c b/bbswitch.c index d109109..bfa033c 100644 --- a/bbswitch.c +++ b/bbswitch.c @@ -81,16 +81,19 @@ static int acpi_optimus_dsm(acpi_handle handle, int func, char *args, return 0; } -static void bbswitch_acpi_off(void) { +static int bbswitch_acpi_off(void) { char args[] = {1, 0, 0, 3}; u32 result = 0; if (!acpi_optimus_dsm(dis_handle, 0x1A, args, &result)) { printk(KERN_INFO "bbswitch: Result of _DSM call: %08X\n", result); + return 0; } + // failure + return 1; } -static void bbswitch_acpi_on(void) { - +static int bbswitch_acpi_on(void) { + return 0; } // Returns 1 if the card is disabled, 0 if enabled @@ -112,13 +115,17 @@ static void bbswitch_off(void) { // if it's still in use by a driver (i.e. nouveau or nvidia) if (dis_dev->driver) { printk(KERN_WARNING "bbswitch: device %s is in use by driver '%s', " - "refusing OFF", dev_name(&dis_dev->dev), dis_dev->driver->name); + "refusing OFF\n", dev_name(&dis_dev->dev), dis_dev->driver->name); return; } printk(KERN_INFO "bbswitch: disabling discrete graphics\n"); - bbswitch_acpi_off(); + if (bbswitch_acpi_off()) { + printk(KERN_WARNING "bbswitch: ACPI call failed, the device is not" + " disabled\n"); + return; + } pci_save_state(dis_dev); pci_clear_master(dis_dev);