diff options
author | Azael Avalos <coproscefalo@gmail.com> | 2014-11-24 21:29:36 -0500 |
---|---|---|
committer | Darren Hart <dvhart@linux.intel.com> | 2014-12-03 13:10:14 -0500 |
commit | a39f46df33c6847399f9b41b74ef09a4095fb996 (patch) | |
tree | a013d8e4d0497f67d3282a5697d16cddb66a2556 /drivers/platform/x86 | |
parent | 841e11ccdf90c29a7778a5d5d553bc716c3d477a (diff) |
toshiba_acpi: Fix regression caused by backlight extra check code
Bug 86521 uncovered that some TOS6208 devices also return
non zero values on a write call to the backlight method,
thus getting caught and bailed out by the extra check code.
This patch changes the set_lcd_brightness function to its
"original" state by just adapting it to the new function
format.
Signed-off-by: Azael Avalos <coproscefalo@gmail.com>
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Diffstat (limited to 'drivers/platform/x86')
-rw-r--r-- | drivers/platform/x86/toshiba_acpi.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c index 96076d99cf33..06362b7d3ad7 100644 --- a/drivers/platform/x86/toshiba_acpi.c +++ b/drivers/platform/x86/toshiba_acpi.c | |||
@@ -928,9 +928,7 @@ static int lcd_proc_open(struct inode *inode, struct file *file) | |||
928 | 928 | ||
929 | static int set_lcd_brightness(struct toshiba_acpi_dev *dev, int value) | 929 | static int set_lcd_brightness(struct toshiba_acpi_dev *dev, int value) |
930 | { | 930 | { |
931 | u32 in[TCI_WORDS] = { HCI_SET, HCI_LCD_BRIGHTNESS, 0, 0, 0, 0 }; | 931 | u32 hci_result; |
932 | u32 out[TCI_WORDS]; | ||
933 | acpi_status status; | ||
934 | 932 | ||
935 | if (dev->tr_backlight_supported) { | 933 | if (dev->tr_backlight_supported) { |
936 | bool enable = !value; | 934 | bool enable = !value; |
@@ -941,20 +939,9 @@ static int set_lcd_brightness(struct toshiba_acpi_dev *dev, int value) | |||
941 | value--; | 939 | value--; |
942 | } | 940 | } |
943 | 941 | ||
944 | in[2] = value << HCI_LCD_BRIGHTNESS_SHIFT; | 942 | value = value << HCI_LCD_BRIGHTNESS_SHIFT; |
945 | status = tci_raw(dev, in, out); | 943 | hci_result = hci_write1(dev, HCI_LCD_BRIGHTNESS, value); |
946 | if (ACPI_FAILURE(status) || out[0] == TOS_FAILURE) { | 944 | return hci_result == TOS_SUCCESS ? 0 : -EIO; |
947 | pr_err("ACPI call to set brightness failed"); | ||
948 | return -EIO; | ||
949 | } | ||
950 | /* Extra check for "incomplete" backlight method, where the AML code | ||
951 | * doesn't check for HCI_SET or HCI_GET and returns TOS_SUCCESS, | ||
952 | * the actual brightness, and in some cases the max brightness. | ||
953 | */ | ||
954 | if (out[2] > 0 || out[3] == 0xE000) | ||
955 | return -ENODEV; | ||
956 | |||
957 | return out[0] == TOS_SUCCESS ? 0 : -EIO; | ||
958 | } | 945 | } |
959 | 946 | ||
960 | static int set_lcd_status(struct backlight_device *bd) | 947 | static int set_lcd_status(struct backlight_device *bd) |