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)