diff options
author | Tony Vroon <tony@linx.net> | 2009-01-07 05:11:24 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-01-09 01:04:25 -0500 |
commit | f87a1a5f6cdaff6232fed2ef0ae0479df9e781e8 (patch) | |
tree | ca32cd6c78803a218c56a439f9726b86d7c3ce7f /drivers/misc/fujitsu-laptop.c | |
parent | 3a407086090bb4fa1908d4dc3739c9ebc8ad6686 (diff) |
fujitsu-laptop: Simplify SBLL/SBL2 backlight handling
GBLS and GBLL only differ in the clearing of the GHKS flag, so there is no need
to have two backlight level readouts. Also, per Peter Gruber, the need for the
BLNF check has disappeared.
As a result, cleanups can be made in the code. This has been tested on the both
the S6410 and the S6420 platforms and causes no functionality regressions, on
the console without X or within X. One module parameter to disable the hotkeys
is dropped, as we only ever took one codepath anyway.
Signed-off-by: Tony Vroon <tony@linx.net>
Tested-by: Peter Gruber <nokos@gmx.net>
Tested-By: Stephen Gildea <stepheng+linux@gildea.com>
Acked-by: Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/misc/fujitsu-laptop.c')
-rw-r--r-- | drivers/misc/fujitsu-laptop.c | 114 |
1 files changed, 21 insertions, 93 deletions
diff --git a/drivers/misc/fujitsu-laptop.c b/drivers/misc/fujitsu-laptop.c index 9c407ab9ba2b..65dc41540c62 100644 --- a/drivers/misc/fujitsu-laptop.c +++ b/drivers/misc/fujitsu-laptop.c | |||
@@ -155,7 +155,6 @@ struct fujitsu_t { | |||
155 | 155 | ||
156 | static struct fujitsu_t *fujitsu; | 156 | static struct fujitsu_t *fujitsu; |
157 | static int use_alt_lcd_levels = -1; | 157 | static int use_alt_lcd_levels = -1; |
158 | static int disable_brightness_keys = -1; | ||
159 | static int disable_brightness_adjust = -1; | 158 | static int disable_brightness_adjust = -1; |
160 | 159 | ||
161 | /* Device used to access other hotkeys on the laptop */ | 160 | /* Device used to access other hotkeys on the laptop */ |
@@ -413,36 +412,11 @@ static int get_max_brightness(void) | |||
413 | return fujitsu->max_brightness; | 412 | return fujitsu->max_brightness; |
414 | } | 413 | } |
415 | 414 | ||
416 | static int get_lcd_level_alt(void) | ||
417 | { | ||
418 | unsigned long long state = 0; | ||
419 | acpi_status status = AE_OK; | ||
420 | |||
421 | vdbg_printk(FUJLAPTOP_DBG_TRACE, "get lcd level via GBLS\n"); | ||
422 | |||
423 | status = | ||
424 | acpi_evaluate_integer(fujitsu->acpi_handle, "GBLS", NULL, &state); | ||
425 | if (status < 0) | ||
426 | return status; | ||
427 | |||
428 | fujitsu->brightness_level = state & 0x0fffffff; | ||
429 | |||
430 | if (state & 0x80000000) | ||
431 | fujitsu->brightness_changed = 1; | ||
432 | else | ||
433 | fujitsu->brightness_changed = 0; | ||
434 | |||
435 | return fujitsu->brightness_level; | ||
436 | } | ||
437 | |||
438 | /* Backlight device stuff */ | 415 | /* Backlight device stuff */ |
439 | 416 | ||
440 | static int bl_get_brightness(struct backlight_device *b) | 417 | static int bl_get_brightness(struct backlight_device *b) |
441 | { | 418 | { |
442 | if (use_alt_lcd_levels) | 419 | return get_lcd_level(); |
443 | return get_lcd_level_alt(); | ||
444 | else | ||
445 | return get_lcd_level(); | ||
446 | } | 420 | } |
447 | 421 | ||
448 | static int bl_update_status(struct backlight_device *b) | 422 | static int bl_update_status(struct backlight_device *b) |
@@ -509,10 +483,7 @@ static ssize_t show_lcd_level(struct device *dev, | |||
509 | 483 | ||
510 | int ret; | 484 | int ret; |
511 | 485 | ||
512 | if (use_alt_lcd_levels) | 486 | ret = get_lcd_level(); |
513 | ret = get_lcd_level_alt(); | ||
514 | else | ||
515 | ret = get_lcd_level(); | ||
516 | if (ret < 0) | 487 | if (ret < 0) |
517 | return ret; | 488 | return ret; |
518 | 489 | ||
@@ -537,10 +508,7 @@ static ssize_t store_lcd_level(struct device *dev, | |||
537 | if (ret < 0) | 508 | if (ret < 0) |
538 | return ret; | 509 | return ret; |
539 | 510 | ||
540 | if (use_alt_lcd_levels) | 511 | ret = get_lcd_level(); |
541 | ret = get_lcd_level_alt(); | ||
542 | else | ||
543 | ret = get_lcd_level(); | ||
544 | if (ret < 0) | 512 | if (ret < 0) |
545 | return ret; | 513 | return ret; |
546 | 514 | ||
@@ -622,24 +590,16 @@ static struct platform_driver fujitsupf_driver = { | |||
622 | static void dmi_check_cb_common(const struct dmi_system_id *id) | 590 | static void dmi_check_cb_common(const struct dmi_system_id *id) |
623 | { | 591 | { |
624 | acpi_handle handle; | 592 | acpi_handle handle; |
625 | int have_blnf; | ||
626 | printk(KERN_INFO "fujitsu-laptop: Identified laptop model '%s'.\n", | 593 | printk(KERN_INFO "fujitsu-laptop: Identified laptop model '%s'.\n", |
627 | id->ident); | 594 | id->ident); |
628 | have_blnf = ACPI_SUCCESS | ||
629 | (acpi_get_handle(NULL, "\\_SB.PCI0.GFX0.LCD.BLNF", &handle)); | ||
630 | if (use_alt_lcd_levels == -1) { | 595 | if (use_alt_lcd_levels == -1) { |
631 | vdbg_printk(FUJLAPTOP_DBG_TRACE, "auto-detecting usealt\n"); | 596 | if (ACPI_SUCCESS(acpi_get_handle(NULL, |
632 | use_alt_lcd_levels = 1; | 597 | "\\_SB.PCI0.LPCB.FJEX.SBL2", &handle))) |
633 | } | 598 | use_alt_lcd_levels = 1; |
634 | if (disable_brightness_keys == -1) { | 599 | else |
635 | vdbg_printk(FUJLAPTOP_DBG_TRACE, | 600 | use_alt_lcd_levels = 0; |
636 | "auto-detecting disable_keys\n"); | 601 | vdbg_printk(FUJLAPTOP_DBG_TRACE, "auto-detected usealt as " |
637 | disable_brightness_keys = have_blnf ? 1 : 0; | 602 | "%i\n", use_alt_lcd_levels); |
638 | } | ||
639 | if (disable_brightness_adjust == -1) { | ||
640 | vdbg_printk(FUJLAPTOP_DBG_TRACE, | ||
641 | "auto-detecting disable_adjust\n"); | ||
642 | disable_brightness_adjust = have_blnf ? 0 : 1; | ||
643 | } | 603 | } |
644 | } | 604 | } |
645 | 605 | ||
@@ -768,19 +728,14 @@ static int acpi_fujitsu_add(struct acpi_device *device) | |||
768 | 728 | ||
769 | /* do config (detect defaults) */ | 729 | /* do config (detect defaults) */ |
770 | use_alt_lcd_levels = use_alt_lcd_levels == 1 ? 1 : 0; | 730 | use_alt_lcd_levels = use_alt_lcd_levels == 1 ? 1 : 0; |
771 | disable_brightness_keys = disable_brightness_keys == 1 ? 1 : 0; | ||
772 | disable_brightness_adjust = disable_brightness_adjust == 1 ? 1 : 0; | 731 | disable_brightness_adjust = disable_brightness_adjust == 1 ? 1 : 0; |
773 | vdbg_printk(FUJLAPTOP_DBG_INFO, | 732 | vdbg_printk(FUJLAPTOP_DBG_INFO, |
774 | "config: [alt interface: %d], [key disable: %d], [adjust disable: %d]\n", | 733 | "config: [alt interface: %d], [adjust disable: %d]\n", |
775 | use_alt_lcd_levels, disable_brightness_keys, | 734 | use_alt_lcd_levels, disable_brightness_adjust); |
776 | disable_brightness_adjust); | ||
777 | 735 | ||
778 | if (get_max_brightness() <= 0) | 736 | if (get_max_brightness() <= 0) |
779 | fujitsu->max_brightness = FUJITSU_LCD_N_LEVELS; | 737 | fujitsu->max_brightness = FUJITSU_LCD_N_LEVELS; |
780 | if (use_alt_lcd_levels) | 738 | get_lcd_level(); |
781 | get_lcd_level_alt(); | ||
782 | else | ||
783 | get_lcd_level(); | ||
784 | 739 | ||
785 | return result; | 740 | return result; |
786 | 741 | ||
@@ -831,43 +786,23 @@ static void acpi_fujitsu_notify(acpi_handle handle, u32 event, void *data) | |||
831 | case ACPI_FUJITSU_NOTIFY_CODE1: | 786 | case ACPI_FUJITSU_NOTIFY_CODE1: |
832 | keycode = 0; | 787 | keycode = 0; |
833 | oldb = fujitsu->brightness_level; | 788 | oldb = fujitsu->brightness_level; |
834 | get_lcd_level(); /* the alt version always yields changed */ | 789 | get_lcd_level(); |
835 | newb = fujitsu->brightness_level; | 790 | newb = fujitsu->brightness_level; |
836 | 791 | ||
837 | vdbg_printk(FUJLAPTOP_DBG_TRACE, | 792 | vdbg_printk(FUJLAPTOP_DBG_TRACE, |
838 | "brightness button event [%i -> %i (%i)]\n", | 793 | "brightness button event [%i -> %i (%i)]\n", |
839 | oldb, newb, fujitsu->brightness_changed); | 794 | oldb, newb, fujitsu->brightness_changed); |
840 | 795 | ||
841 | if (oldb == newb && fujitsu->brightness_changed) { | 796 | if (oldb < newb) { |
842 | keycode = 0; | ||
843 | if (disable_brightness_keys != 1) { | ||
844 | if (oldb == 0) { | ||
845 | acpi_bus_generate_proc_event | ||
846 | (fujitsu->dev, | ||
847 | ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS, | ||
848 | 0); | ||
849 | keycode = KEY_BRIGHTNESSDOWN; | ||
850 | } else if (oldb == | ||
851 | (fujitsu->max_brightness) - 1) { | ||
852 | acpi_bus_generate_proc_event | ||
853 | (fujitsu->dev, | ||
854 | ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS, | ||
855 | 0); | ||
856 | keycode = KEY_BRIGHTNESSUP; | ||
857 | } | ||
858 | } | ||
859 | } else if (oldb < newb) { | ||
860 | if (disable_brightness_adjust != 1) { | 797 | if (disable_brightness_adjust != 1) { |
861 | if (use_alt_lcd_levels) | 798 | if (use_alt_lcd_levels) |
862 | set_lcd_level_alt(newb); | 799 | set_lcd_level_alt(newb); |
863 | else | 800 | else |
864 | set_lcd_level(newb); | 801 | set_lcd_level(newb); |
865 | } | 802 | } |
866 | if (disable_brightness_keys != 1) { | 803 | acpi_bus_generate_proc_event(fujitsu->dev, |
867 | acpi_bus_generate_proc_event(fujitsu->dev, | 804 | ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS, 0); |
868 | ACPI_VIDEO_NOTIFY_INC_BRIGHTNESS, 0); | 805 | keycode = KEY_BRIGHTNESSUP; |
869 | keycode = KEY_BRIGHTNESSUP; | ||
870 | } | ||
871 | } else if (oldb > newb) { | 806 | } else if (oldb > newb) { |
872 | if (disable_brightness_adjust != 1) { | 807 | if (disable_brightness_adjust != 1) { |
873 | if (use_alt_lcd_levels) | 808 | if (use_alt_lcd_levels) |
@@ -875,13 +810,9 @@ static void acpi_fujitsu_notify(acpi_handle handle, u32 event, void *data) | |||
875 | else | 810 | else |
876 | set_lcd_level(newb); | 811 | set_lcd_level(newb); |
877 | } | 812 | } |
878 | if (disable_brightness_keys != 1) { | 813 | acpi_bus_generate_proc_event(fujitsu->dev, |
879 | acpi_bus_generate_proc_event(fujitsu->dev, | 814 | ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS, 0); |
880 | ACPI_VIDEO_NOTIFY_DEC_BRIGHTNESS, 0); | 815 | keycode = KEY_BRIGHTNESSDOWN; |
881 | keycode = KEY_BRIGHTNESSDOWN; | ||
882 | } | ||
883 | } else { | ||
884 | keycode = KEY_UNKNOWN; | ||
885 | } | 816 | } |
886 | break; | 817 | break; |
887 | default: | 818 | default: |
@@ -1336,9 +1267,6 @@ module_exit(fujitsu_cleanup); | |||
1336 | module_param(use_alt_lcd_levels, uint, 0644); | 1267 | module_param(use_alt_lcd_levels, uint, 0644); |
1337 | MODULE_PARM_DESC(use_alt_lcd_levels, | 1268 | MODULE_PARM_DESC(use_alt_lcd_levels, |
1338 | "Use alternative interface for lcd_levels (needed for Lifebook s6410)."); | 1269 | "Use alternative interface for lcd_levels (needed for Lifebook s6410)."); |
1339 | module_param(disable_brightness_keys, uint, 0644); | ||
1340 | MODULE_PARM_DESC(disable_brightness_keys, | ||
1341 | "Disable brightness keys (eg. if they are already handled by the generic ACPI_VIDEO device)."); | ||
1342 | module_param(disable_brightness_adjust, uint, 0644); | 1270 | module_param(disable_brightness_adjust, uint, 0644); |
1343 | MODULE_PARM_DESC(disable_brightness_adjust, "Disable brightness adjustment ."); | 1271 | MODULE_PARM_DESC(disable_brightness_adjust, "Disable brightness adjustment ."); |
1344 | #ifdef CONFIG_FUJITSU_LAPTOP_DEBUG | 1272 | #ifdef CONFIG_FUJITSU_LAPTOP_DEBUG |