summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCorentin Chary <corentincj@iksaif.net>2011-11-26 11:00:00 +0100
committerMatthew Garrett <mjg@redhat.com>2012-03-20 12:02:06 -0400
commitf34cd9ca9320876e9c12764f052004628a03ba2d (patch)
tree2661a5241c3b2255602b46bc12a4b2b80915b29e
parent5dea7a2094d5e60fe8f8ec4277d22d7ad6fa8c26 (diff)
samsung-laptop: don't handle backlight if handled by acpi/video
samsung-laptop is not at all related to ACPI, but since this interface is not documented at all, and the driver has to use it at load to understand how it works on the laptop, I think it's a good idea to disable it if a better solution is available. Signed-off-by: Corentin Chary <corentincj@iksaif.net> Signed-off-by: Matthew Garrett <mjg@redhat.com>
-rw-r--r--drivers/platform/x86/samsung-laptop.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
index 1dd81d148cb..b391a38bc7c 100644
--- a/drivers/platform/x86/samsung-laptop.c
+++ b/drivers/platform/x86/samsung-laptop.c
@@ -21,6 +21,7 @@
#include <linux/dmi.h>
#include <linux/platform_device.h>
#include <linux/rfkill.h>
+#include <linux/acpi.h>
/*
* This driver is needed because a number of Samsung laptops do not hook
@@ -230,6 +231,7 @@ struct samsung_laptop {
struct backlight_device *backlight_device;
struct rfkill *rfk;
+ bool handle_backlight;
bool has_stepping_quirk;
};
@@ -616,6 +618,9 @@ static int __init samsung_backlight_init(struct samsung_laptop *samsung)
struct backlight_device *bd;
struct backlight_properties props;
+ if (!samsung->handle_backlight)
+ return 0;
+
memset(&props, 0, sizeof(struct backlight_properties));
props.type = BACKLIGHT_PLATFORM;
props.max_brightness = samsung->config->max_brightness -
@@ -698,7 +703,8 @@ static void __init samsung_sabi_selftest(struct samsung_laptop *samsung,
printk(KERN_DEBUG "ifaceP = 0x%08x\n", ifaceP);
printk(KERN_DEBUG "sabi_iface = %p\n", samsung->sabi_iface);
- test_backlight(samsung);
+ if (samsung->handle_backlight)
+ test_backlight(samsung);
test_wireless(samsung);
sabi_get_command(samsung, config->commands.get_brightness, &sretval);
@@ -771,7 +777,8 @@ static int __init samsung_sabi_init(struct samsung_laptop *samsung)
}
/* Check for stepping quirk */
- check_for_stepping_quirk(samsung);
+ if (samsung->handle_backlight)
+ check_for_stepping_quirk(samsung);
exit:
if (ret)
@@ -1059,6 +1066,15 @@ static int __init samsung_init(void)
return -ENOMEM;
mutex_init(&samsung->sabi_mutex);
+ samsung->handle_backlight = true;
+
+#ifdef CONFIG_ACPI
+ /* Don't handle backlight here if the acpi video already handle it */
+ if (acpi_video_backlight_support()) {
+ pr_info("Backlight controlled by ACPI video driver\n");
+ samsung->handle_backlight = false;
+ }
+#endif
ret = samsung_platform_init(samsung);
if (ret)