|
@@ -14,16 +14,12 @@
|
|
|
#include <linux/init.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/backlight.h>
|
|
|
-#include <linux/i8042.h>
|
|
|
#include <linux/dmi.h>
|
|
|
+#include <acpi/acpi_drivers.h>
|
|
|
|
|
|
-#define SAMSUNGQ10_BL_MAX_INTENSITY 255
|
|
|
-#define SAMSUNGQ10_BL_DEFAULT_INTENSITY 185
|
|
|
+#define SAMSUNGQ10_BL_MAX_INTENSITY 7
|
|
|
|
|
|
-#define SAMSUNGQ10_BL_8042_CMD 0xbe
|
|
|
-#define SAMSUNGQ10_BL_8042_DATA { 0x89, 0x91 }
|
|
|
-
|
|
|
-static int samsungq10_bl_brightness;
|
|
|
+static acpi_handle ec_handle;
|
|
|
|
|
|
static bool force;
|
|
|
module_param(force, bool, 0);
|
|
@@ -33,21 +29,26 @@ MODULE_PARM_DESC(force,
|
|
|
static int samsungq10_bl_set_intensity(struct backlight_device *bd)
|
|
|
{
|
|
|
|
|
|
- int brightness = bd->props.brightness;
|
|
|
- unsigned char c[3] = SAMSUNGQ10_BL_8042_DATA;
|
|
|
+ acpi_status status;
|
|
|
+ int i;
|
|
|
|
|
|
- c[2] = (unsigned char)brightness;
|
|
|
- i8042_lock_chip();
|
|
|
- i8042_command(c, (0x30 << 8) | SAMSUNGQ10_BL_8042_CMD);
|
|
|
- i8042_unlock_chip();
|
|
|
- samsungq10_bl_brightness = brightness;
|
|
|
+ for (i = 0; i < SAMSUNGQ10_BL_MAX_INTENSITY; i++) {
|
|
|
+ status = acpi_evaluate_object(ec_handle, "_Q63", NULL, NULL);
|
|
|
+ if (ACPI_FAILURE(status))
|
|
|
+ return -EIO;
|
|
|
+ }
|
|
|
+ for (i = 0; i < bd->props.brightness; i++) {
|
|
|
+ status = acpi_evaluate_object(ec_handle, "_Q64", NULL, NULL);
|
|
|
+ if (ACPI_FAILURE(status))
|
|
|
+ return -EIO;
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
static int samsungq10_bl_get_intensity(struct backlight_device *bd)
|
|
|
{
|
|
|
- return samsungq10_bl_brightness;
|
|
|
+ return bd->props.brightness;
|
|
|
}
|
|
|
|
|
|
static const struct backlight_ops samsungq10_bl_ops = {
|
|
@@ -55,28 +56,6 @@ static const struct backlight_ops samsungq10_bl_ops = {
|
|
|
.update_status = samsungq10_bl_set_intensity,
|
|
|
};
|
|
|
|
|
|
-#ifdef CONFIG_PM_SLEEP
|
|
|
-static int samsungq10_suspend(struct device *dev)
|
|
|
-{
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int samsungq10_resume(struct device *dev)
|
|
|
-{
|
|
|
-
|
|
|
- struct backlight_device *bd = dev_get_drvdata(dev);
|
|
|
-
|
|
|
- samsungq10_bl_set_intensity(bd);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-#else
|
|
|
-#define samsungq10_suspend NULL
|
|
|
-#define samsungq10_resume NULL
|
|
|
-#endif
|
|
|
-
|
|
|
-static SIMPLE_DEV_PM_OPS(samsungq10_pm_ops,
|
|
|
- samsungq10_suspend, samsungq10_resume);
|
|
|
-
|
|
|
static int samsungq10_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
|
|
@@ -93,9 +72,6 @@ static int samsungq10_probe(struct platform_device *pdev)
|
|
|
|
|
|
platform_set_drvdata(pdev, bd);
|
|
|
|
|
|
- bd->props.brightness = SAMSUNGQ10_BL_DEFAULT_INTENSITY;
|
|
|
- samsungq10_bl_set_intensity(bd);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -104,9 +80,6 @@ static int samsungq10_remove(struct platform_device *pdev)
|
|
|
|
|
|
struct backlight_device *bd = platform_get_drvdata(pdev);
|
|
|
|
|
|
- bd->props.brightness = SAMSUNGQ10_BL_DEFAULT_INTENSITY;
|
|
|
- samsungq10_bl_set_intensity(bd);
|
|
|
-
|
|
|
backlight_device_unregister(bd);
|
|
|
|
|
|
return 0;
|
|
@@ -116,7 +89,6 @@ static struct platform_driver samsungq10_driver = {
|
|
|
.driver = {
|
|
|
.name = KBUILD_MODNAME,
|
|
|
.owner = THIS_MODULE,
|
|
|
- .pm = &samsungq10_pm_ops,
|
|
|
},
|
|
|
.probe = samsungq10_probe,
|
|
|
.remove = samsungq10_remove,
|
|
@@ -172,6 +144,11 @@ static int __init samsungq10_init(void)
|
|
|
if (!force && !dmi_check_system(samsungq10_dmi_table))
|
|
|
return -ENODEV;
|
|
|
|
|
|
+ ec_handle = ec_get_handle();
|
|
|
+
|
|
|
+ if (!ec_handle)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
samsungq10_device = platform_create_bundle(&samsungq10_driver,
|
|
|
samsungq10_probe,
|
|
|
NULL, 0, NULL, 0);
|