> Date: Sun, 23 Jul 2023 15:21:38 +0200 > From: Anton Lindqvist <an...@basename.se> > > On Sun, Jul 23, 2023 at 11:37:38AM +0000, jon@elytron.openbsd.amsterdam wrote: > > Hello all. Thank you very much for your input. I have taken heed of > > your suggestions in the diff below > > > > On Sat, 22 Jul 2023 20:59:04 -0400 George Koehler <kern...@gmail.com> > > wrote: > > > > > We should check if (wskbd_get_backlight != NULL), like we do for > > > WSKBDIO_GETBACKLIGHT. Same for wskbd_set_backlight. > > > > Fixed. I am returning 0 if they are NULL, is that acceptable? > > 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 23 Jul 2023 11:10:27 -0000 > > @@ -96,6 +96,7 @@ > > #include <machine/autoconf.h> > > #include <machine/cpu.h> > > #include <dev/ofw/openfirm.h> > > +#include <dev/wscons/wsconsio.h> > > > > #include <dev/adb/adb.h> > > #include <macppc/dev/adbvar.h> > > @@ -242,6 +243,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 +1737,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 +1767,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 23 Jul 2023 11:10:29 -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 23 Jul 2023 11:10:29 -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 23 Jul 2023 11:10:34 -0000 > > @@ -143,6 +143,9 @@ static const struct hidkbd_translation a > > { 60, 127 }, /* F3 -> audio mute */ > > { 61, 129 }, /* F4 -> audio lower */ > > { 62, 128 }, /* F5 -> audio raise */ > > + { 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 +572,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 23 Jul 2023 11:10:44 -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_KbdBacklightUp," > > + lines[236] = " KC(236),\tKS_Cmd_KbdBacklightDown," > > } > > > > 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 23 Jul 2023 11:10:48 -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 23 Jul 2023 11:11:03 -0000 > > @@ -1544,6 +1544,24 @@ 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; > > + if (wskbd_get_backlight == NULL || wskbd_set_backlight == NULL) > > + return (0); > > + (*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); > > Are all wskbd_{get,set}_backlight callbacks safe to call from interrupt > context?
Probably not.