On Fri, Jul 14, 2023 at 05:53:41PM +0000, jon@elytron.openbsd.amsterdam wrote:
> 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

Hi,

the diff looks good to me except for maybe the numlock bit in hidkbd
which seems unrelated to the rest of the changes, but we can drop that
before committing.
One thing I am never quite sure about is the keycode to internal key 
translation,
I am assuming you just picked 234 - 236 incrementally. Maybe miod@ (cc) knows if
there are better ones to use here.

I have also tested it and verified it works on my PowerBook G4.

ok anyone?

> 
> 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