Hello. Following up on my previous post
https://marc.info/?l=openbsd-ppc&m=166150553627054&w=2

I actually implemented support for fn-keys controls of the keyboard
backlight as outlined there, seems to work fairly ok, would appreciate
any feedback

Index: arch/macppc/dev/adb.c
===================================================================
RCS file: /cvs/src/sys/arch/macppc/dev/adb.c,v
retrieving revision 1.49
diff -u -p -r1.49 adb.c
--- arch/macppc/dev/adb.c       26 Dec 2022 19:17:00 -0000      1.49
+++ arch/macppc/dev/adb.c       28 Feb 2023 03:56:11 -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 28 Feb 2023 03:56:12 -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 28 Feb 2023 03:56:12 -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.8
diff -u -p -r1.8 hidkbd.c
--- dev/hid/hidkbd.c    9 Nov 2022 10:05:18 -0000       1.8
+++ dev/hid/hidkbd.c    28 Feb 2023 03:56:13 -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
        { 67, 127 },    /* F10 -> audio mute */
        { 68, 129 },    /* F11 -> audio lower */
@@ -567,6 +571,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.15
diff -u -p -r1.15 makemap.awk
--- dev/usb/makemap.awk 2 Nov 2020 19:45:18 -0000       1.15
+++ dev/usb/makemap.awk 28 Feb 2023 03:56:15 -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.47
diff -u -p -r1.47 ukbdmap.c
--- dev/usb/ukbdmap.c   23 Jan 2023 09:38:03 -0000      1.47
+++ dev/usb/ukbdmap.c   28 Feb 2023 03:56:15 -0000
@@ -186,6 +186,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.114
diff -u -p -r1.114 wskbd.c
--- dev/wscons/wskbd.c  10 Nov 2022 12:10:54 -0000      1.114
+++ dev/wscons/wskbd.c  28 Feb 2023 03:56:17 -0000
@@ -1537,6 +1537,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.40
diff -u -p -r1.40 wsksymdef.h
--- dev/wscons/wsksymdef.h      23 Jan 2023 09:36:40 -0000      1.40
+++ dev/wscons/wsksymdef.h      28 Feb 2023 03:56:17 -0000
@@ -667,6 +667,9 @@
 #define KS_Cmd_ScrollBack      0xf42c
 #define KS_Cmd_ScrollFwd       0xf42d
 #define KS_Cmd_KbdReset                0xf42e
+#define KS_Cmd_KbdBacklightToggle              0xf42f
+#define KS_Cmd_KbdBacklightUp          0xf430
+#define KS_Cmd_KbdBacklightDown                0xf431
 
 /*
  * Group 5 (internal)

Reply via email to