aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/platform/x86/samsung-laptop.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
index af1e296..c1aa1b7 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
@@ -226,6 +227,7 @@ static struct backlight_device *backlight_device;
static struct mutex sabi_mutex;
static struct platform_device *sdev;
static struct rfkill *rfk;
+static bool handle_backlight;
static bool has_stepping_quirk;
static int force;
@@ -602,6 +604,15 @@ static int __init samsung_init(void)
int retval;
mutex_init(&sabi_mutex);
+ 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");
+ handle_backlight = false;
+ }
+#endif
if (!force && !dmi_check_system(samsung_dmi_table))
return -ENODEV;
@@ -661,7 +672,8 @@ static int __init samsung_init(void)
printk(KERN_DEBUG "ifaceP = 0x%08x\n", ifaceP);
printk(KERN_DEBUG "sabi_iface = %p\n", sabi_iface);
- test_backlight();
+ if (handle_backlight)
+ test_backlight();
test_wireless();
retval = sabi_get_command(sabi_config->commands.get_brightness,
@@ -680,13 +692,17 @@ static int __init samsung_init(void)
}
/* Check for stepping quirk */
- check_for_stepping_quirk();
+ if (handle_backlight)
+ check_for_stepping_quirk();
/* knock up a platform device to hang stuff off of */
sdev = platform_device_register_simple("samsung", -1, NULL, 0);
if (IS_ERR(sdev))
goto error_no_platform;
+ if (!handle_backlight)
+ goto skip_backlight;
+
/* create a backlight device to talk to this one */
memset(&props, 0, sizeof(struct backlight_properties));
props.type = BACKLIGHT_PLATFORM;
@@ -702,6 +718,7 @@ static int __init samsung_init(void)
backlight_device->props.power = FB_BLANK_UNBLANK;
backlight_update_status(backlight_device);
+skip_backlight:
retval = init_wireless(sdev);
if (retval)
goto error_no_rfk;