aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/classmate-laptop.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/platform/x86/classmate-laptop.c')
-rw-r--r--drivers/platform/x86/classmate-laptop.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/platform/x86/classmate-laptop.c b/drivers/platform/x86/classmate-laptop.c
index 341cbfef93ee..94f93b621d7b 100644
--- a/drivers/platform/x86/classmate-laptop.c
+++ b/drivers/platform/x86/classmate-laptop.c
@@ -522,18 +522,20 @@ static int cmpc_rfkill_block(void *data, bool blocked)
522 acpi_status status; 522 acpi_status status;
523 acpi_handle handle; 523 acpi_handle handle;
524 unsigned long long state; 524 unsigned long long state;
525 bool is_blocked;
525 526
526 handle = data; 527 handle = data;
527 status = cmpc_get_rfkill_wlan(handle, &state); 528 status = cmpc_get_rfkill_wlan(handle, &state);
528 if (ACPI_FAILURE(status)) 529 if (ACPI_FAILURE(status))
529 return -ENODEV; 530 return -ENODEV;
530 if (blocked) 531 /* Check if we really need to call cmpc_set_rfkill_wlan */
531 state &= ~1; 532 is_blocked = state & 1 ? false : true;
532 else 533 if (is_blocked != blocked) {
533 state |= 1; 534 state = blocked ? 0 : 1;
534 status = cmpc_set_rfkill_wlan(handle, state); 535 status = cmpc_set_rfkill_wlan(handle, state);
535 if (ACPI_FAILURE(status)) 536 if (ACPI_FAILURE(status))
536 return -ENODEV; 537 return -ENODEV;
538 }
537 return 0; 539 return 0;
538} 540}
539 541
@@ -562,6 +564,7 @@ static int cmpc_ipml_add(struct acpi_device *acpi)
562 return -ENOMEM; 564 return -ENOMEM;
563 565
564 memset(&props, 0, sizeof(struct backlight_properties)); 566 memset(&props, 0, sizeof(struct backlight_properties));
567 props.type = BACKLIGHT_PLATFORM;
565 props.max_brightness = 7; 568 props.max_brightness = 7;
566 ipml->bd = backlight_device_register("cmpc_bl", &acpi->dev, 569 ipml->bd = backlight_device_register("cmpc_bl", &acpi->dev,
567 acpi->handle, &cmpc_bl_ops, 570 acpi->handle, &cmpc_bl_ops,
@@ -653,8 +656,9 @@ static void cmpc_keys_handler(struct acpi_device *dev, u32 event)
653 656
654 if ((event & 0x0F) < ARRAY_SIZE(cmpc_keys_codes)) 657 if ((event & 0x0F) < ARRAY_SIZE(cmpc_keys_codes))
655 code = cmpc_keys_codes[event & 0x0F]; 658 code = cmpc_keys_codes[event & 0x0F];
656 inputdev = dev_get_drvdata(&dev->dev);; 659 inputdev = dev_get_drvdata(&dev->dev);
657 input_report_key(inputdev, code, !(event & 0x10)); 660 input_report_key(inputdev, code, !(event & 0x10));
661 input_sync(inputdev);
658} 662}
659 663
660static void cmpc_keys_idev_init(struct input_dev *inputdev) 664static void cmpc_keys_idev_init(struct input_dev *inputdev)