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)