aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/platform
diff options
context:
space:
mode:
authorAzael Avalos <coproscefalo@gmail.com>2015-07-31 23:58:12 -0400
committerDarren Hart <dvhart@linux.intel.com>2015-08-05 05:08:02 -0400
commitea215a3f909c570521a9cc276163837ffa2c621a (patch)
tree5a9380761b743740fedec1fc3649bdf46df66350 /drivers/platform
parent3e07e5baa2af166a6f38a51e14ff036c341a57c7 (diff)
toshiba_acpi: Change *available functions return type
This patch changes the *available functions return type from int to void. The checks for support of their respective features are done inside such functions and there was no need to return anything as we can flag the queried feature as supported inside these functions. The code was adapted accordingly to these changes and two new variables were created and another was changed from uint to bool. Also, the function toshiba_acceleremoter_supported was renamed to toshiba_accelerometer_available to maintain the naming consistency on the driver. Signed-off-by: Azael Avalos <coproscefalo@gmail.com> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/toshiba_acpi.c129
1 files changed, 62 insertions, 67 deletions
diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c
index f7228987bd50..d983dc45f30d 100644
--- a/drivers/platform/x86/toshiba_acpi.c
+++ b/drivers/platform/x86/toshiba_acpi.c
@@ -187,7 +187,6 @@ struct toshiba_acpi_dev {
187 unsigned int info_supported:1; 187 unsigned int info_supported:1;
188 unsigned int tr_backlight_supported:1; 188 unsigned int tr_backlight_supported:1;
189 unsigned int kbd_illum_supported:1; 189 unsigned int kbd_illum_supported:1;
190 unsigned int kbd_led_registered:1;
191 unsigned int touchpad_supported:1; 190 unsigned int touchpad_supported:1;
192 unsigned int eco_supported:1; 191 unsigned int eco_supported:1;
193 unsigned int accelerometer_supported:1; 192 unsigned int accelerometer_supported:1;
@@ -198,6 +197,10 @@ struct toshiba_acpi_dev {
198 unsigned int panel_power_on_supported:1; 197 unsigned int panel_power_on_supported:1;
199 unsigned int usb_three_supported:1; 198 unsigned int usb_three_supported:1;
200 unsigned int sysfs_created:1; 199 unsigned int sysfs_created:1;
200
201 bool kbd_led_registered;
202 bool illumination_led_registered;
203 bool eco_led_registered;
201}; 204};
202 205
203static struct toshiba_acpi_dev *toshiba_acpi; 206static struct toshiba_acpi_dev *toshiba_acpi;
@@ -439,26 +442,26 @@ static u32 sci_write(struct toshiba_acpi_dev *dev, u32 reg, u32 in1)
439} 442}
440 443
441/* Illumination support */ 444/* Illumination support */
442static int toshiba_illumination_available(struct toshiba_acpi_dev *dev) 445static void toshiba_illumination_available(struct toshiba_acpi_dev *dev)
443{ 446{
444 u32 in[TCI_WORDS] = { SCI_GET, SCI_ILLUMINATION, 0, 0, 0, 0 }; 447 u32 in[TCI_WORDS] = { SCI_GET, SCI_ILLUMINATION, 0, 0, 0, 0 };
445 u32 out[TCI_WORDS]; 448 u32 out[TCI_WORDS];
446 acpi_status status; 449 acpi_status status;
447 450
451 dev->illumination_supported = 0;
452 dev->illumination_led_registered = false;
453
448 if (!sci_open(dev)) 454 if (!sci_open(dev))
449 return 0; 455 return;
450 456
451 status = tci_raw(dev, in, out); 457 status = tci_raw(dev, in, out);
452 sci_close(dev); 458 sci_close(dev);
453 if (ACPI_FAILURE(status)) { 459 if (ACPI_FAILURE(status))
454 pr_err("ACPI call to query Illumination support failed\n"); 460 pr_err("ACPI call to query Illumination support failed\n");
455 return 0; 461 else if (out[0] == TOS_NOT_SUPPORTED)
456 } else if (out[0] == TOS_NOT_SUPPORTED) {
457 pr_info("Illumination device not available\n"); 462 pr_info("Illumination device not available\n");
458 return 0; 463 else if (out[0] == TOS_SUCCESS)
459 } 464 dev->illumination_supported = 1;
460
461 return 1;
462} 465}
463 466
464static void toshiba_illumination_set(struct led_classdev *cdev, 467static void toshiba_illumination_set(struct led_classdev *cdev,
@@ -510,41 +513,42 @@ static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev)
510} 513}
511 514
512/* KBD Illumination */ 515/* KBD Illumination */
513static int toshiba_kbd_illum_available(struct toshiba_acpi_dev *dev) 516static void toshiba_kbd_illum_available(struct toshiba_acpi_dev *dev)
514{ 517{
515 u32 in[TCI_WORDS] = { SCI_GET, SCI_KBD_ILLUM_STATUS, 0, 0, 0, 0 }; 518 u32 in[TCI_WORDS] = { SCI_GET, SCI_KBD_ILLUM_STATUS, 0, 0, 0, 0 };
516 u32 out[TCI_WORDS]; 519 u32 out[TCI_WORDS];
517 acpi_status status; 520 acpi_status status;
518 521
522 dev->kbd_illum_supported = 0;
523 dev->kbd_led_registered = false;
524
519 if (!sci_open(dev)) 525 if (!sci_open(dev))
520 return 0; 526 return;
521 527
522 status = tci_raw(dev, in, out); 528 status = tci_raw(dev, in, out);
523 sci_close(dev); 529 sci_close(dev);
524 if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) { 530 if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) {
525 pr_err("ACPI call to query kbd illumination support failed\n"); 531 pr_err("ACPI call to query kbd illumination support failed\n");
526 return 0;
527 } else if (out[0] == TOS_NOT_SUPPORTED) { 532 } else if (out[0] == TOS_NOT_SUPPORTED) {
528 pr_info("Keyboard illumination not available\n"); 533 pr_info("Keyboard illumination not available\n");
529 return 0; 534 } else if (out[0] == TOS_SUCCESS) {
535 /*
536 * Check for keyboard backlight timeout max value,
537 * previous kbd backlight implementation set this to
538 * 0x3c0003, and now the new implementation set this
539 * to 0x3c001a, use this to distinguish between them.
540 */
541 if (out[3] == SCI_KBD_TIME_MAX)
542 dev->kbd_type = 2;
543 else
544 dev->kbd_type = 1;
545 /* Get the current keyboard backlight mode */
546 dev->kbd_mode = out[2] & SCI_KBD_MODE_MASK;
547 /* Get the current time (1-60 seconds) */
548 dev->kbd_time = out[2] >> HCI_MISC_SHIFT;
549 /* Flag as supported */
550 dev->kbd_illum_supported = 1;
530 } 551 }
531
532 /*
533 * Check for keyboard backlight timeout max value,
534 * previous kbd backlight implementation set this to
535 * 0x3c0003, and now the new implementation set this
536 * to 0x3c001a, use this to distinguish between them.
537 */
538 if (out[3] == SCI_KBD_TIME_MAX)
539 dev->kbd_type = 2;
540 else
541 dev->kbd_type = 1;
542 /* Get the current keyboard backlight mode */
543 dev->kbd_mode = out[2] & SCI_KBD_MODE_MASK;
544 /* Get the current time (1-60 seconds) */
545 dev->kbd_time = out[2] >> HCI_MISC_SHIFT;
546
547 return 1;
548} 552}
549 553
550static int toshiba_kbd_illum_status_set(struct toshiba_acpi_dev *dev, u32 time) 554static int toshiba_kbd_illum_status_set(struct toshiba_acpi_dev *dev, u32 time)
@@ -665,12 +669,15 @@ static int toshiba_touchpad_get(struct toshiba_acpi_dev *dev, u32 *state)
665} 669}
666 670
667/* Eco Mode support */ 671/* Eco Mode support */
668static int toshiba_eco_mode_available(struct toshiba_acpi_dev *dev) 672static void toshiba_eco_mode_available(struct toshiba_acpi_dev *dev)
669{ 673{
670 acpi_status status; 674 acpi_status status;
671 u32 in[TCI_WORDS] = { HCI_GET, HCI_ECO_MODE, 0, 0, 0, 0 }; 675 u32 in[TCI_WORDS] = { HCI_GET, HCI_ECO_MODE, 0, 0, 0, 0 };
672 u32 out[TCI_WORDS]; 676 u32 out[TCI_WORDS];
673 677
678 dev->eco_supported = 0;
679 dev->eco_led_registered = false;
680
674 status = tci_raw(dev, in, out); 681 status = tci_raw(dev, in, out);
675 if (ACPI_FAILURE(status)) { 682 if (ACPI_FAILURE(status)) {
676 pr_err("ACPI call to get ECO led failed\n"); 683 pr_err("ACPI call to get ECO led failed\n");
@@ -691,10 +698,8 @@ static int toshiba_eco_mode_available(struct toshiba_acpi_dev *dev)
691 if (ACPI_FAILURE(status) || out[0] == TOS_FAILURE) 698 if (ACPI_FAILURE(status) || out[0] == TOS_FAILURE)
692 pr_err("ACPI call to get ECO led failed\n"); 699 pr_err("ACPI call to get ECO led failed\n");
693 else if (out[0] == TOS_SUCCESS) 700 else if (out[0] == TOS_SUCCESS)
694 return 1; 701 dev->eco_supported = 1;
695 } 702 }
696
697 return 0;
698} 703}
699 704
700static enum led_brightness 705static enum led_brightness
@@ -734,30 +739,28 @@ static void toshiba_eco_mode_set_status(struct led_classdev *cdev,
734} 739}
735 740
736/* Accelerometer support */ 741/* Accelerometer support */
737static int toshiba_accelerometer_supported(struct toshiba_acpi_dev *dev) 742static void toshiba_accelerometer_available(struct toshiba_acpi_dev *dev)
738{ 743{
739 u32 in[TCI_WORDS] = { HCI_GET, HCI_ACCELEROMETER2, 0, 0, 0, 0 }; 744 u32 in[TCI_WORDS] = { HCI_GET, HCI_ACCELEROMETER2, 0, 0, 0, 0 };
740 u32 out[TCI_WORDS]; 745 u32 out[TCI_WORDS];
741 acpi_status status; 746 acpi_status status;
742 747
748 dev->accelerometer_supported = 0;
749
743 /* 750 /*
744 * Check if the accelerometer call exists, 751 * Check if the accelerometer call exists,
745 * this call also serves as initialization 752 * this call also serves as initialization
746 */ 753 */
747 status = tci_raw(dev, in, out); 754 status = tci_raw(dev, in, out);
748 if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR) { 755 if (ACPI_FAILURE(status) || out[0] == TOS_INPUT_DATA_ERROR)
749 pr_err("ACPI call to query the accelerometer failed\n"); 756 pr_err("ACPI call to query the accelerometer failed\n");
750 return -EIO; 757 else if (out[0] == TOS_DATA_NOT_AVAILABLE ||
751 } else if (out[0] == TOS_DATA_NOT_AVAILABLE || 758 out[0] == TOS_NOT_INITIALIZED)
752 out[0] == TOS_NOT_INITIALIZED) {
753 pr_err("Accelerometer not initialized\n"); 759 pr_err("Accelerometer not initialized\n");
754 return -EIO; 760 else if (out[0] == TOS_NOT_SUPPORTED)
755 } else if (out[0] == TOS_NOT_SUPPORTED) {
756 pr_info("Accelerometer not supported\n"); 761 pr_info("Accelerometer not supported\n");
757 return -ENODEV; 762 else if (out[0] == TOS_SUCCESS)
758 } 763 dev->accelerometer_supported = 1;
759
760 return 0;
761} 764}
762 765
763static int toshiba_accelerometer_get(struct toshiba_acpi_dev *dev, 766static int toshiba_accelerometer_get(struct toshiba_acpi_dev *dev,
@@ -787,7 +790,6 @@ static void toshiba_usb_sleep_charge_available(struct toshiba_acpi_dev *dev)
787 u32 out[TCI_WORDS]; 790 u32 out[TCI_WORDS];
788 acpi_status status; 791 acpi_status status;
789 792
790 /* Set the feature to "not supported" in case of error */
791 dev->usb_sleep_charge_supported = 0; 793 dev->usb_sleep_charge_supported = 0;
792 794
793 if (!sci_open(dev)) 795 if (!sci_open(dev))
@@ -808,25 +810,17 @@ static void toshiba_usb_sleep_charge_available(struct toshiba_acpi_dev *dev)
808 810
809 in[5] = SCI_USB_CHARGE_BAT_LVL; 811 in[5] = SCI_USB_CHARGE_BAT_LVL;
810 status = tci_raw(dev, in, out); 812 status = tci_raw(dev, in, out);
813 sci_close(dev);
811 if (ACPI_FAILURE(status)) { 814 if (ACPI_FAILURE(status)) {
812 pr_err("ACPI call to get USB Sleep and Charge mode failed\n"); 815 pr_err("ACPI call to get USB Sleep and Charge mode failed\n");
813 sci_close(dev);
814 return;
815 } else if (out[0] == TOS_NOT_SUPPORTED) { 816 } else if (out[0] == TOS_NOT_SUPPORTED) {
816 pr_info("USB Sleep and Charge not supported\n"); 817 pr_info("USB Sleep and Charge not supported\n");
817 sci_close(dev);
818 return;
819 } else if (out[0] == TOS_SUCCESS) { 818 } else if (out[0] == TOS_SUCCESS) {
820 dev->usbsc_bat_level = out[2]; 819 dev->usbsc_bat_level = out[2];
821 /* 820 /* Flag as supported */
822 * If we reach this point, it means that the laptop has support
823 * for this feature and all values are initialized.
824 * Set it as supported.
825 */
826 dev->usb_sleep_charge_supported = 1; 821 dev->usb_sleep_charge_supported = 1;
827 } 822 }
828 823
829 sci_close(dev);
830} 824}
831 825
832static int toshiba_usb_sleep_charge_get(struct toshiba_acpi_dev *dev, 826static int toshiba_usb_sleep_charge_get(struct toshiba_acpi_dev *dev,
@@ -2639,13 +2633,13 @@ static int toshiba_acpi_remove(struct acpi_device *acpi_dev)
2639 2633
2640 backlight_device_unregister(dev->backlight_dev); 2634 backlight_device_unregister(dev->backlight_dev);
2641 2635
2642 if (dev->illumination_supported) 2636 if (dev->illumination_led_registered)
2643 led_classdev_unregister(&dev->led_dev); 2637 led_classdev_unregister(&dev->led_dev);
2644 2638
2645 if (dev->kbd_led_registered) 2639 if (dev->kbd_led_registered)
2646 led_classdev_unregister(&dev->kbd_led); 2640 led_classdev_unregister(&dev->kbd_led);
2647 2641
2648 if (dev->eco_supported) 2642 if (dev->eco_led_registered)
2649 led_classdev_unregister(&dev->eco_led); 2643 led_classdev_unregister(&dev->eco_led);
2650 2644
2651 if (toshiba_acpi) 2645 if (toshiba_acpi)
@@ -2727,25 +2721,27 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev)
2727 if (ret) 2721 if (ret)
2728 goto error; 2722 goto error;
2729 2723
2730 if (toshiba_illumination_available(dev)) { 2724 toshiba_illumination_available(dev);
2725 if (dev->illumination_supported) {
2731 dev->led_dev.name = "toshiba::illumination"; 2726 dev->led_dev.name = "toshiba::illumination";
2732 dev->led_dev.max_brightness = 1; 2727 dev->led_dev.max_brightness = 1;
2733 dev->led_dev.brightness_set = toshiba_illumination_set; 2728 dev->led_dev.brightness_set = toshiba_illumination_set;
2734 dev->led_dev.brightness_get = toshiba_illumination_get; 2729 dev->led_dev.brightness_get = toshiba_illumination_get;
2735 if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev)) 2730 if (!led_classdev_register(&acpi_dev->dev, &dev->led_dev))
2736 dev->illumination_supported = 1; 2731 dev->illumination_led_registered = true;
2737 } 2732 }
2738 2733
2739 if (toshiba_eco_mode_available(dev)) { 2734 toshiba_eco_mode_available(dev);
2735 if (dev->eco_supported) {
2740 dev->eco_led.name = "toshiba::eco_mode"; 2736 dev->eco_led.name = "toshiba::eco_mode";
2741 dev->eco_led.max_brightness = 1; 2737 dev->eco_led.max_brightness = 1;
2742 dev->eco_led.brightness_set = toshiba_eco_mode_set_status; 2738 dev->eco_led.brightness_set = toshiba_eco_mode_set_status;
2743 dev->eco_led.brightness_get = toshiba_eco_mode_get_status; 2739 dev->eco_led.brightness_get = toshiba_eco_mode_get_status;
2744 if (!led_classdev_register(&dev->acpi_dev->dev, &dev->eco_led)) 2740 if (!led_classdev_register(&dev->acpi_dev->dev, &dev->eco_led))
2745 dev->eco_supported = 1; 2741 dev->eco_led_registered = true;
2746 } 2742 }
2747 2743
2748 dev->kbd_illum_supported = toshiba_kbd_illum_available(dev); 2744 toshiba_kbd_illum_available(dev);
2749 /* 2745 /*
2750 * Only register the LED if KBD illumination is supported 2746 * Only register the LED if KBD illumination is supported
2751 * and the keyboard backlight operation mode is set to FN-Z 2747 * and the keyboard backlight operation mode is set to FN-Z
@@ -2756,14 +2752,13 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev)
2756 dev->kbd_led.brightness_set = toshiba_kbd_backlight_set; 2752 dev->kbd_led.brightness_set = toshiba_kbd_backlight_set;
2757 dev->kbd_led.brightness_get = toshiba_kbd_backlight_get; 2753 dev->kbd_led.brightness_get = toshiba_kbd_backlight_get;
2758 if (!led_classdev_register(&dev->acpi_dev->dev, &dev->kbd_led)) 2754 if (!led_classdev_register(&dev->acpi_dev->dev, &dev->kbd_led))
2759 dev->kbd_led_registered = 1; 2755 dev->kbd_led_registered = true;
2760 } 2756 }
2761 2757
2762 ret = toshiba_touchpad_get(dev, &dummy); 2758 ret = toshiba_touchpad_get(dev, &dummy);
2763 dev->touchpad_supported = !ret; 2759 dev->touchpad_supported = !ret;
2764 2760
2765 ret = toshiba_accelerometer_supported(dev); 2761 toshiba_accelerometer_available(dev);
2766 dev->accelerometer_supported = !ret;
2767 2762
2768 toshiba_usb_sleep_charge_available(dev); 2763 toshiba_usb_sleep_charge_available(dev);
2769 2764