Hello everyone. After a tobhe@'s recent patch [1] to add suspend
keysyms for other mac laptops, and a brief consultation with him,
I am reposting an updated version of my keyboard backlight
patch [2], which you can find below:

[1] https://marc.info/?l=openbsd-tech&m=168884670208963&w=2

[2] https://marc.info/?l=openbsd-tech&m=167755750511636&w=2

Index: arch/macppc/dev/adb.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/dev/adb.c,v
retrieving revision 1.50
diff -u -p -r1.50 adb.c
--- arch/macppc/dev/adb.c       11 Apr 2023 00:45:07 -0000      1.50
+++ arch/macppc/dev/adb.c       13 Jul 2023 21:17:17 -0000
@@ -102,6 +102,8 @@
 #include <macppc/dev/pm_direct.h>
 #include <macppc/dev/viareg.h>
 
+#include <dev/wscons/wsconsio.h>
+
 #include "apm.h"
 
 #define printf_intr printf
@@ -242,6 +244,12 @@ void       setsoftadb(void);
 int    adb_intr(void *arg);
 void   adb_cuda_autopoll(void);
 void   adb_cuda_fileserver_mode(void);
+uint8_t         pmu_backlight; /* keyboard backlight value */
+int    pmu_get_backlight(struct wskbd_backlight *);
+int    pmu_set_backlight(struct wskbd_backlight *);
+extern int (*wskbd_get_backlight)(struct wskbd_backlight *);
+extern int (*wskbd_set_backlight)(struct wskbd_backlight *);
+
 
 #ifndef SMALL_KERNEL
 void   adb_shutdown(void *);
@@ -1730,8 +1738,11 @@ adbattach(struct device *parent, struct 
 
        if (adbHardware == ADB_HW_CUDA)
                adb_cuda_fileserver_mode();
-       if (adbHardware == ADB_HW_PMU)
+       if (adbHardware == ADB_HW_PMU) {
+               wskbd_get_backlight = pmu_get_backlight;
+               wskbd_set_backlight = pmu_set_backlight;
                pmu_fileserver_mode(1);
+       }
 
        /*
         * XXX If the machine doesn't have an ADB bus (PowerBook5,6+)
@@ -1757,4 +1768,20 @@ adbattach(struct device *parent, struct 
        if (adbHardware == ADB_HW_CUDA)
                adb_cuda_autopoll();
        adb_polling = 0;
+}
+
+int
+pmu_get_backlight(struct wskbd_backlight *kbl)
+{
+       kbl->min = 0;
+       kbl->max = 0xff;
+       kbl->curval = pmu_backlight;
+       return 0;
+}
+
+int
+pmu_set_backlight(struct wskbd_backlight *kbl)
+{
+       pmu_backlight = kbl->curval;
+       return pmu_set_kbl(pmu_backlight);
 }
Index: arch/macppc/dev/pm_direct.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/dev/pm_direct.c,v
retrieving revision 1.34
diff -u -p -r1.34 pm_direct.c
--- arch/macppc/dev/pm_direct.c 28 Dec 2022 07:40:23 -0000      1.34
+++ arch/macppc/dev/pm_direct.c 13 Jul 2023 21:17:24 -0000
@@ -853,3 +853,22 @@ pmu_fileserver_mode(int on)
        }
        pmgrop(&p);
 }
+
+int
+pmu_set_kbl(unsigned int level)
+{
+       if (level > 0xff)
+               return (EINVAL);
+
+       PMData p;
+
+       p.command = 0x4F;
+       p.num_data = 3;
+       p.s_buf = p.r_buf = p.data;
+       p.data[0] = 0;
+       p.data[1] = 0;
+       p.data[2] = level;
+       pmgrop(&p);
+       return (0);
+}
+
Index: arch/macppc/dev/pm_direct.h
===================================================================
RCS file: /cvs/src/sys/arch/macppc/dev/pm_direct.h,v
retrieving revision 1.15
diff -u -p -r1.15 pm_direct.h
--- arch/macppc/dev/pm_direct.h 21 Oct 2022 22:42:36 -0000      1.15
+++ arch/macppc/dev/pm_direct.h 13 Jul 2023 21:17:24 -0000
@@ -67,6 +67,7 @@ struct pmu_battery_info
 };
 
 int pm_battery_info(int, struct pmu_battery_info *);
+int pmu_set_kbl(unsigned int);
 
 void pm_eject_pcmcia(int);
 void pmu_fileserver_mode(int);
Index: dev/hid/hidkbd.c
===================================================================
RCS file: /cvs/src/sys/dev/hid/hidkbd.c,v
retrieving revision 1.9
diff -u -p -r1.9 hidkbd.c
--- dev/hid/hidkbd.c    9 Jul 2023 08:02:13 -0000       1.9
+++ dev/hid/hidkbd.c    13 Jul 2023 21:17:42 -0000
@@ -143,6 +143,10 @@ static const struct hidkbd_translation a
        { 60, 127 },    /* F3 -> audio mute */
        { 61, 129 },    /* F4 -> audio lower */
        { 62, 128 },    /* F5 -> audio raise */
+       { 63, 83 },     /* F6 -> num lock */
+       { 65, 234 },    /* F8 -> backlight toggle*/
+       { 66, 236 },    /* F9 -> backlight lower */
+       { 67, 235 },    /* F10 -> backlight raise*/
 #else
        { 63, 102 },    /* F6 -> sleep */
        { 67, 127 },    /* F10 -> audio mute */
@@ -569,6 +573,9 @@ hidkbd_decode(struct hidkbd *kbd, struct
                        case 129:
                        case 232:
                        case 233:
+                       case 234:
+                       case 235:
+                       case 236:
                                wskbd_input(kbd->sc_wskbddev,
                                    key & RELEASE ?  WSCONS_EVENT_KEY_UP :
                                      WSCONS_EVENT_KEY_DOWN, key & CODEMASK);
Index: dev/usb/makemap.awk
===================================================================
RCS file: /cvs/src/sys/dev/usb/makemap.awk,v
retrieving revision 1.16
diff -u -p -r1.16 makemap.awk
--- dev/usb/makemap.awk 9 Jul 2023 08:02:13 -0000       1.16
+++ dev/usb/makemap.awk 13 Jul 2023 21:18:24 -0000
@@ -343,6 +343,9 @@ $1 == "#define" || $1 == "#undef" {
                        lines[126] = "    KC(126),\tKS_Find,"
                        lines[232] = "    KC(232),\tKS_Cmd_BrightnessUp,"
                        lines[233] = "    KC(233),\tKS_Cmd_BrightnessDown,"
+                       lines[234] = "    KC(234),\tKS_Cmd_KbdBacklightToggle,"
+                       lines[235] = "    KC(235),\tKS_Cmd_KbdBacklightDown,"
+                       lines[236] = "    KC(236),\tKS_Cmd_KbdBacklightUp,"
                }
 
                for (i = 0; i < 256; i++)
Index: dev/usb/ukbdmap.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/ukbdmap.c,v
retrieving revision 1.48
diff -u -p -r1.48 ukbdmap.c
--- dev/usb/ukbdmap.c   9 Jul 2023 08:04:09 -0000       1.48
+++ dev/usb/ukbdmap.c   13 Jul 2023 21:18:38 -0000
@@ -187,6 +187,9 @@ static const keysym_t ukbd_keydesc_us[] 
     KC(231),   KS_Meta_R,
     KC(232),   KS_Cmd_BrightnessUp,
     KC(233),   KS_Cmd_BrightnessDown,
+               KC(234),        KS_Cmd_KbdBacklightToggle,
+               KC(235),        KS_Cmd_KbdBacklightUp,
+               KC(236),        KS_Cmd_KbdBacklightDown,
 };
 
 #if !defined(WSKBD_NO_INTL_LAYOUTS)
Index: dev/wscons/wskbd.c
===================================================================
RCS file: /cvs/src/sys/dev/wscons/wskbd.c,v
retrieving revision 1.115
diff -u -p -r1.115 wskbd.c
--- dev/wscons/wskbd.c  9 Jul 2023 08:02:14 -0000       1.115
+++ dev/wscons/wskbd.c  13 Jul 2023 21:19:54 -0000
@@ -1544,6 +1544,22 @@ internal_command(struct wskbd_softc *sc,
 #endif
 #endif
 
+       switch (ksym) {
+       case KS_Cmd_KbdBacklightToggle:
+       case KS_Cmd_KbdBacklightDown:
+       case KS_Cmd_KbdBacklightUp:{
+               struct wskbd_backlight data;
+               (*wskbd_get_backlight)(&data);
+               int step = (data.max - data.min + 1) / 8;
+               int val = (ksym == KS_Cmd_KbdBacklightUp) ? data.curval + step 
+                       : (ksym == KS_Cmd_KbdBacklightDown) ? data.curval - step
+                       : (data.curval) ? 0 : (data.max - data.min + 1) / 2;
+               data.curval = (val > 0xff) ? 0xff : (val < 0) ? 0 : val;
+               (*wskbd_set_backlight)(&data);
+               return (1);
+       }
+       }
+
 #if NWSDISPLAY > 0
        switch(ksym) {
        case KS_Cmd_BrightnessUp:
Index: dev/wscons/wsksymdef.h
===================================================================
RCS file: /cvs/src/sys/dev/wscons/wsksymdef.h,v
retrieving revision 1.41
diff -u -p -r1.41 wsksymdef.h
--- dev/wscons/wsksymdef.h      9 Jul 2023 08:02:14 -0000       1.41
+++ dev/wscons/wsksymdef.h      13 Jul 2023 21:19:59 -0000
@@ -668,6 +676,9 @@
 #define KS_Cmd_ScrollFwd       0xf42d
 #define KS_Cmd_KbdReset                0xf42e
 #define KS_Cmd_Sleep           0xf42f
+#define KS_Cmd_KbdBacklightToggle              0xf430
+#define KS_Cmd_KbdBacklightUp          0xf431
+#define KS_Cmd_KbdBacklightDown                0xf432
 
 /*
  * Group 5 (internal)

Reply via email to