Commit de078e57 authored by Anisse Astier's avatar Anisse Astier Committed by Len Brown

msi-wmi: depend on backlight and fix corner-cases problems

Now depends on BACKLIGHT_CLASS_DEVICE.
Driver will return an error if it can't get actual backlight value
Fix remapping of brightness keys when backlight is not controlled by ACPI.
Signed-off-by: default avatarAnisse Astier <anisse@astier.eu>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent c30116c6
...@@ -369,6 +369,7 @@ config MSI_WMI ...@@ -369,6 +369,7 @@ config MSI_WMI
tristate "MSI WMI extras" tristate "MSI WMI extras"
depends on ACPI_WMI depends on ACPI_WMI
depends on INPUT depends on INPUT
depends on BACKLIGHT_CLASS_DEVICE
select INPUT_SPARSEKMAP select INPUT_SPARSEKMAP
help help
Say Y here if you want to support WMI-based hotkeys on MSI laptops. Say Y here if you want to support WMI-based hotkeys on MSI laptops.
......
...@@ -53,11 +53,15 @@ MODULE_ALIAS("dmi:*:svnMICRO-STARINTERNATIONAL*:pnMS-6638:*"); ...@@ -53,11 +53,15 @@ MODULE_ALIAS("dmi:*:svnMICRO-STARINTERNATIONAL*:pnMS-6638:*");
#define dprintk(msg...) pr_debug(DRV_PFX msg) #define dprintk(msg...) pr_debug(DRV_PFX msg)
#define KEYCODE_BASE 0xD0 #define KEYCODE_BASE 0xD0
#define MSI_WMI_BRIGHTNESSUP KEYCODE_BASE
#define MSI_WMI_BRIGHTNESSDOWN (KEYCODE_BASE + 1)
#define MSI_WMI_VOLUMEUP (KEYCODE_BASE + 2)
#define MSI_WMI_VOLUMEDOWN (KEYCODE_BASE + 3)
static struct key_entry msi_wmi_keymap[] = { static struct key_entry msi_wmi_keymap[] = {
{ KE_KEY, KEYCODE_BASE, {KEY_BRIGHTNESSUP} }, { KE_KEY, MSI_WMI_BRIGHTNESSUP, {KEY_BRIGHTNESSUP} },
{ KE_KEY, KEYCODE_BASE + 1, {KEY_BRIGHTNESSDOWN} }, { KE_KEY, MSI_WMI_BRIGHTNESSDOWN, {KEY_BRIGHTNESSDOWN} },
{ KE_KEY, KEYCODE_BASE + 2, {KEY_VOLUMEUP} }, { KE_KEY, MSI_WMI_VOLUMEUP, {KEY_VOLUMEUP} },
{ KE_KEY, KEYCODE_BASE + 3, {KEY_VOLUMEDOWN} }, { KE_KEY, MSI_WMI_VOLUMEDOWN, {KEY_VOLUMEDOWN} },
{ KE_END, 0} { KE_END, 0}
}; };
static ktime_t last_pressed[ARRAY_SIZE(msi_wmi_keymap) - 1]; static ktime_t last_pressed[ARRAY_SIZE(msi_wmi_keymap) - 1];
...@@ -110,12 +114,14 @@ static int msi_wmi_set_block(int instance, int value) ...@@ -110,12 +114,14 @@ static int msi_wmi_set_block(int instance, int value)
static int bl_get(struct backlight_device *bd) static int bl_get(struct backlight_device *bd)
{ {
int level, err, ret = 0; int level, err, ret;
/* Instance 1 is "get backlight", cmp with DSDT */ /* Instance 1 is "get backlight", cmp with DSDT */
err = msi_wmi_query_block(1, &ret); err = msi_wmi_query_block(1, &ret);
if (err) if (err) {
printk(KERN_ERR DRV_PFX "Could not query backlight: %d\n", err); printk(KERN_ERR DRV_PFX "Could not query backlight: %d\n", err);
return -EINVAL;
}
dprintk("Get: Query block returned: %d\n", ret); dprintk("Get: Query block returned: %d\n", ret);
for (level = 0; level < ARRAY_SIZE(backlight_map); level++) { for (level = 0; level < ARRAY_SIZE(backlight_map); level++) {
if (backlight_map[level] == ret) { if (backlight_map[level] == ret) {
...@@ -180,8 +186,9 @@ static void msi_wmi_notify(u32 value, void *context) ...@@ -180,8 +186,9 @@ static void msi_wmi_notify(u32 value, void *context)
if (key->type == KE_KEY && if (key->type == KE_KEY &&
/* Brightness is served via acpi video driver */ /* Brightness is served via acpi video driver */
(backlight || (key->keycode != KEY_BRIGHTNESSUP && (!acpi_video_backlight_support() ||
key->keycode != KEY_BRIGHTNESSDOWN))) { (key->code != MSI_WMI_BRIGHTNESSUP &&
key->code != MSI_WMI_BRIGHTNESSDOWN))) {
dprintk("Send key: 0x%X - " dprintk("Send key: 0x%X - "
"Input layer keycode: %d\n", key->code, "Input layer keycode: %d\n", key->code,
key->keycode); key->keycode);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment