diff options
Diffstat (limited to 'drivers/platform/x86/classmate-laptop.c')
-rw-r--r-- | drivers/platform/x86/classmate-laptop.c | 20 |
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 | ||
660 | static void cmpc_keys_idev_init(struct input_dev *inputdev) | 664 | static void cmpc_keys_idev_init(struct input_dev *inputdev) |