Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Define THINKPAD_EXTENDED_HOTKEYS to enable more hotkeys ...



details:   https://anonhg.NetBSD.org/src/rev/c5a2b6c78bfd
branches:  trunk
changeset: 785796:c5a2b6c78bfd
user:      christos <christos%NetBSD.org@localhost>
date:      Sat Mar 30 03:09:44 2013 +0000

description:
Define THINKPAD_EXTENDED_HOTKEYS to enable more hotkeys on ThinkPads.
This has only been tested on a T61.
XXX: Should we put THINKPAD_EXTENDED_HOTKEYS into a opt_*.h include
     (defflag) or just always enable it?

diffstat:

 sys/dev/acpi/thinkpad_acpi.c |  135 ++++++++++++++++++++++++++++++++++++++----
 sys/sys/power.h              |   18 +++++-
 2 files changed, 136 insertions(+), 17 deletions(-)

diffs (245 lines):

diff -r 8d12d2b2132a -r c5a2b6c78bfd sys/dev/acpi/thinkpad_acpi.c
--- a/sys/dev/acpi/thinkpad_acpi.c      Sat Mar 30 03:04:01 2013 +0000
+++ b/sys/dev/acpi/thinkpad_acpi.c      Sat Mar 30 03:09:44 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: thinkpad_acpi.c,v 1.42 2012/11/24 20:56:39 riastradh Exp $ */
+/* $NetBSD: thinkpad_acpi.c,v 1.43 2013/03/30 03:09:44 christos Exp $ */
 
 /*-
  * Copyright (c) 2007 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: thinkpad_acpi.c,v 1.42 2012/11/24 20:56:39 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: thinkpad_acpi.c,v 1.43 2013/03/30 03:09:44 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -55,15 +55,28 @@
        ACPI_HANDLE             sc_powhdl;
        ACPI_HANDLE             sc_cmoshdl;
 
-#define        TP_PSW_SLEEP            0
-#define        TP_PSW_HIBERNATE        1
-#define        TP_PSW_DISPLAY_CYCLE    2
-#define        TP_PSW_LOCK_SCREEN      3
-#define        TP_PSW_BATTERY_INFO     4
-#define        TP_PSW_EJECT_BUTTON     5
-#define        TP_PSW_ZOOM_BUTTON      6
-#define        TP_PSW_VENDOR_BUTTON    7
-#define        TP_PSW_LAST             8
+#define        TP_PSW_SLEEP            0       /* FnF4 */
+#define        TP_PSW_HIBERNATE        1       /* FnF12 */
+#define        TP_PSW_DISPLAY_CYCLE    2       /* FnF7 */
+#define        TP_PSW_LOCK_SCREEN      3       /* FnF2 */
+#define        TP_PSW_BATTERY_INFO     4       /* FnF3 */
+#define        TP_PSW_EJECT_BUTTON     5       /* FnF9 */
+#define        TP_PSW_ZOOM_BUTTON      6       /* FnSPACE */
+#define        TP_PSW_VENDOR_BUTTON    7       /* ThinkVantage */
+#define        TP_PSW_FNF1_BUTTON      8       /* FnF1 */
+#define        TP_PSW_WIRELESS_BUTTON  9       /* FnF5 */
+#define        TP_PSW_WWAN_BUTTON      10      /* FnF6 */
+#define        TP_PSW_POINTER_BUTTON   11      /* FnF8 */
+#define        TP_PSW_FNF10_BUTTON     12      /* FnF10 */
+#define        TP_PSW_FNF11_BUTTON     13      /* FnF11 */
+#define        TP_PSW_BRIGHTNESS_UP    14
+#define        TP_PSW_BRIGHTNESS_DOWN  15
+#define        TP_PSW_THINKLIGHT       16
+#define        TP_PSW_VOLUME_UP        17
+#define        TP_PSW_VOLUME_DOWN      18
+#define        TP_PSW_VOLUME_MUTE      19
+#define        TP_PSW_LAST             20
+
        struct sysmon_pswitch   sc_smpsw[TP_PSW_LAST];
        bool                    sc_smpsw_valid;
 
@@ -83,16 +96,16 @@
 #define        THINKPAD_NOTIFY_DisplayCycle    0x007
 #define        THINKPAD_NOTIFY_PointerSwitch   0x008
 #define        THINKPAD_NOTIFY_EjectButton     0x009
-#define        THINKPAD_NOTIFY_FnF10           0x00a
+#define        THINKPAD_NOTIFY_FnF10           0x00a   /* XXX: Not seen on T61 */
 #define        THINKPAD_NOTIFY_FnF11           0x00b
 #define        THINKPAD_NOTIFY_HibernateButton 0x00c
 #define        THINKPAD_NOTIFY_BrightnessUp    0x010
 #define        THINKPAD_NOTIFY_BrightnessDown  0x011
 #define        THINKPAD_NOTIFY_ThinkLight      0x012
 #define        THINKPAD_NOTIFY_Zoom            0x014
-#define        THINKPAD_NOTIFY_VolumeUp        0x015
-#define        THINKPAD_NOTIFY_VolumeDown      0x016
-#define        THINKPAD_NOTIFY_VolumeMute      0x017
+#define        THINKPAD_NOTIFY_VolumeUp        0x015   /* XXX: Not seen on T61 */
+#define        THINKPAD_NOTIFY_VolumeDown      0x016   /* XXX: Not seen on T61 */
+#define        THINKPAD_NOTIFY_VolumeMute      0x017   /* XXX: Not seen on T61 */
 #define        THINKPAD_NOTIFY_ThinkVantage    0x018
 
 #define        THINKPAD_CMOS_BRIGHTNESS_UP     0x04
@@ -245,6 +258,20 @@
        psw[TP_PSW_EJECT_BUTTON].smpsw_name = PSWITCH_HK_EJECT_BUTTON;
        psw[TP_PSW_ZOOM_BUTTON].smpsw_name = PSWITCH_HK_ZOOM_BUTTON;
        psw[TP_PSW_VENDOR_BUTTON].smpsw_name = PSWITCH_HK_VENDOR_BUTTON;
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+       psw[TP_PSW_FNF1_BUTTON].smpsw_name     = PSWITCH_HK_FNF1_BUTTON;
+       psw[TP_PSW_WIRELESS_BUTTON].smpsw_name = PSWITCH_HK_WIRELESS_BUTTON;
+       psw[TP_PSW_WWAN_BUTTON].smpsw_name     = PSWITCH_HK_WWAN_BUTTON;
+       psw[TP_PSW_POINTER_BUTTON].smpsw_name  = PSWITCH_HK_POINTER_BUTTON;
+       psw[TP_PSW_FNF10_BUTTON].smpsw_name    = PSWITCH_HK_FNF10_BUTTON;
+       psw[TP_PSW_FNF11_BUTTON].smpsw_name    = PSWITCH_HK_FNF11_BUTTON;
+       psw[TP_PSW_BRIGHTNESS_UP].smpsw_name   = PSWITCH_HK_BRIGHTNESS_UP;
+       psw[TP_PSW_BRIGHTNESS_DOWN].smpsw_name = PSWITCH_HK_BRIGHTNESS_DOWN;
+       psw[TP_PSW_THINKLIGHT].smpsw_name      = PSWITCH_HK_THINKLIGHT;
+       psw[TP_PSW_VOLUME_UP].smpsw_name       = PSWITCH_HK_VOLUME_UP;
+       psw[TP_PSW_VOLUME_DOWN].smpsw_name     = PSWITCH_HK_VOLUME_DOWN;
+       psw[TP_PSW_VOLUME_MUTE].smpsw_name     = PSWITCH_HK_VOLUME_MUTE;
+#endif /* THINKPAD_EXTENDED_HOTKEYS */
 
        for (i = 0; i < TP_PSW_LAST; i++) {
                /* not supported yet */
@@ -343,15 +370,39 @@
                switch (event) {
                case THINKPAD_NOTIFY_BrightnessUp:
                        thinkpad_brightness_up(self);
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_BRIGHTNESS_UP],
+                           PSWITCH_EVENT_PRESSED);
+#endif
                        break;
                case THINKPAD_NOTIFY_BrightnessDown:
                        thinkpad_brightness_down(self);
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_BRIGHTNESS_DOWN],
+                           PSWITCH_EVENT_PRESSED);
+#endif
                        break;
                case THINKPAD_NOTIFY_WirelessSwitch:
                        thinkpad_wireless_toggle(sc);
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_WIRELESS_BUTTON],
+                           PSWITCH_EVENT_PRESSED);
+#endif
                        break;
                case THINKPAD_NOTIFY_wWANSwitch:
                        thinkpad_wwan_toggle(sc);
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_WWAN_BUTTON],
+                           PSWITCH_EVENT_PRESSED);
+#endif
                        break;
                case THINKPAD_NOTIFY_SleepButton:
                        if (sc->sc_smpsw_valid == false)
@@ -409,6 +460,59 @@
                            &sc->sc_smpsw[TP_PSW_VENDOR_BUTTON],
                            PSWITCH_EVENT_PRESSED);
                        break;
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+               case THINKPAD_NOTIFY_FnF1:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_FNF1_BUTTON],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               case THINKPAD_NOTIFY_PointerSwitch:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_POINTER_BUTTON],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               case THINKPAD_NOTIFY_FnF11:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_FNF11_BUTTON],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               case THINKPAD_NOTIFY_ThinkLight:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_THINKLIGHT],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               /*
+                * For some reason the next four aren't seen on my T61.
+                */
+               case THINKPAD_NOTIFY_FnF10:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_FNF10_BUTTON],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               case THINKPAD_NOTIFY_VolumeUp:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_VOLUME_UP],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               case THINKPAD_NOTIFY_VolumeDown:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_VOLUME_DOWN],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+               case THINKPAD_NOTIFY_VolumeMute:
+                       if (sc->sc_smpsw_valid == false)
+                               break;
+                       sysmon_pswitch_event(&sc->sc_smpsw[TP_PSW_VOLUME_MUTE],
+                           PSWITCH_EVENT_PRESSED);
+                       break;
+#else
                case THINKPAD_NOTIFY_FnF1:
                case THINKPAD_NOTIFY_PointerSwitch:
                case THINKPAD_NOTIFY_FnF10:
@@ -419,6 +523,7 @@
                case THINKPAD_NOTIFY_VolumeMute:
                        /* XXXJDM we should deliver hotkeys as keycodes */
                        break;
+#endif /* THINKPAD_EXTENDED_HOTKEYS */
                default:
                        aprint_debug_dev(self, "notify event 0x%03x\n", event);
                        break;
diff -r 8d12d2b2132a -r c5a2b6c78bfd sys/sys/power.h
--- a/sys/sys/power.h   Sat Mar 30 03:04:01 2013 +0000
+++ b/sys/sys/power.h   Sat Mar 30 03:09:44 2013 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: power.h,v 1.17 2012/07/15 18:31:35 pgoyette Exp $      */
+/*     $NetBSD: power.h,v 1.18 2013/03/30 03:09:44 christos Exp $      */
 
 /*
  * Copyright (c) 2003 Wasabi Systems, Inc.
@@ -97,6 +97,20 @@
 #define                PSWITCH_HK_EJECT_BUTTON         "eject-button"
 #define                PSWITCH_HK_ZOOM_BUTTON          "zoom-button"
 #define                PSWITCH_HK_VENDOR_BUTTON        "vendor-button"
+#ifdef THINKPAD_EXTENDED_HOTKEYS
+#define                PSWITCH_HK_FNF1_BUTTON          "fnf1-button"
+#define                PSWITCH_HK_WIRELESS_BUTTON      "wireless-button"
+#define                PSWITCH_HK_WWAN_BUTTON          "wWAN-button"
+#define                PSWITCH_HK_POINTER_BUTTON       "pointer-button"
+#define                PSWITCH_HK_FNF10_BUTTON         "fnf10-button"
+#define                PSWITCH_HK_FNF11_BUTTON         "fnf11-button"
+#define                PSWITCH_HK_BRIGHTNESS_UP        "brightness-up"
+#define                PSWITCH_HK_BRIGHTNESS_DOWN      "brightness-down"
+#define                PSWITCH_HK_THINKLIGHT           "thinklight"
+#define                PSWITCH_HK_VOLUME_UP            "volume-up"
+#define                PSWITCH_HK_VOLUME_DOWN          "volume-down"
+#define                PSWITCH_HK_VOLUME_MUTE          "volume-mute"
+#endif /* THINKPAD_EXTENDED_HOTKEYS */
 
 #define        PSWITCH_EVENT_PRESSED   0       /* button pressed, lid closed, AC off */
 #define        PSWITCH_EVENT_RELEASED  1       /* button released, lid open, AC on */
@@ -145,7 +159,7 @@
 #define PENVSYS_TYPE_INDICATOR         17
 
 /*
- * The following events apply for temperatures, power, resistance, 
+ * The following events apply for temperatures, power, resistance,
  * voltages, battery and fan sensors:
  *
  *     PENVSYS_EVENT_CRITICAL          A critical limit.



Home | Main Index | Thread Index | Old Index