With latest snapshot the iwm driver attaches the wireless card which
works. Awesome !

Le sam. 9 nov. 2019 à 22:02, Patrick Wildt <patr...@blueri.se> a écrit :
>
> On Sat, Nov 09, 2019 at 12:08:35PM +0100, Thomas de Grivel wrote:
> > Everything works except wifi, suspend/resume and screen backlight, and
> > mute speakers button.
>
> Hi,
>
> I have an X395 which is basically the same machine.
>
> For Wifi I have temporarily replaced the Intel WiFi with a bwfm(4), the
> Dell Wireless DW1820a (note the a), which has two antenna connectors.
> There's the DW1830 which has three.  My X395 has two connectors, so I
> just put in the DW1820a.  Both can be purchased cheaply on eBay.
>
> The mute speaker button works for me, but the light doesn't show up.
>
> I will try to have a look at suspend/resume at one of the next OpenBSD
> hackathons.
>
> For the screen backlight I have come up with a diff, but it's not yet
> ready to be committed, as it should be done in a different fashion.
> Still, I have attached the diff if you want to give it a go.
>
> Patrick
>
> diff --git a/sys/dev/acpi/acpivideo.c b/sys/dev/acpi/acpivideo.c
> index 9498465a418..a46a99a67f7 100644
> --- a/sys/dev/acpi/acpivideo.c
> +++ b/sys/dev/acpi/acpivideo.c
> @@ -149,7 +149,7 @@ acpi_foundvout(struct aml_node *node, void *arg)
>         if (node->parent != sc->sc_devnode)
>                 return (0);
>
> -       if (aml_searchname(node, "_BCM") && aml_searchname(node, "_BQC")) {
> +       if (aml_searchname(node, "_BCM")) {
>                 memset(&aaa, 0, sizeof(aaa));
>                 aaa.aaa_iot = sc->sc_acpi->sc_iot;
>                 aaa.aaa_memt = sc->sc_acpi->sc_memt;
> diff --git a/sys/dev/acpi/acpivout.c b/sys/dev/acpi/acpivout.c
> index 5fb6973f595..b1957b0c652 100644
> --- a/sys/dev/acpi/acpivout.c
> +++ b/sys/dev/acpi/acpivout.c
> @@ -60,6 +60,7 @@ struct acpivout_softc {
>
>         int     *sc_bcl;
>         size_t  sc_bcl_len;
> +       int     sc_bcl_cur;
>  };
>
>  void   acpivout_brightness_cycle(struct acpivout_softc *);
> @@ -113,10 +114,16 @@ acpivout_attach(struct device *parent, struct device 
> *self, void *aux)
>         aml_register_notify(sc->sc_devnode, aaa->aaa_dev,
>             acpivout_notify, sc, ACPIDEV_NOPOLL);
>
> +       acpivout_get_bcl(sc);
> +       if (!sc->sc_bcl_len)
> +               return;
> +
> +       sc->sc_bcl_cur = sc->sc_bcl[sc->sc_bcl_len - 1];
> +       sc->sc_bcl_cur = acpivout_get_brightness(sc);
> +       acpivout_set_brightness(sc, sc->sc_bcl_cur);
> +
>         ws_get_param = acpivout_get_param;
>         ws_set_param = acpivout_set_param;
> -
> -       acpivout_get_bcl(sc);
>  }
>
>  int
> @@ -130,12 +137,15 @@ acpivout_notify(struct aml_node *node, int notify, void 
> *arg)
>                 break;
>         case NOTIFY_BRIGHTNESS_UP:
>                 acpivout_brightness_step(sc, 1);
> +               wsdisplay_change_brightness(1);
>                 break;
>         case NOTIFY_BRIGHTNESS_DOWN:
>                 acpivout_brightness_step(sc, -1);
> +               wsdisplay_change_brightness(-1);
>                 break;
>         case NOTIFY_BRIGHTNESS_ZERO:
>                 acpivout_brightness_zero(sc);
> +               wsdisplay_change_brightness(0);
>                 break;
>         case NOTIFY_DISPLAY_OFF:
>                 /* TODO: D3 state change */
> @@ -200,7 +210,9 @@ acpivout_get_brightness(struct acpivout_softc *sc)
>         struct aml_value res;
>         int level;
>
> -       aml_evalname(sc->sc_acpi, sc->sc_devnode, "_BQC", 0, NULL, &res);
> +       if (aml_evalname(sc->sc_acpi, sc->sc_devnode, "_BQC", 0, NULL, &res))
> +               return sc->sc_bcl_cur;
> +
>         level = aml_val2int(&res);
>         aml_freevalue(&res);
>         DPRINTF(("%s: BQC = %d\n", DEVNAME(sc), level));
> @@ -242,6 +254,7 @@ acpivout_set_brightness(struct acpivout_softc *sc, int 
> level)
>         aml_evalname(sc->sc_acpi, sc->sc_devnode, "_BCM", 1, &args, &res);
>
>         aml_freevalue(&res);
> +       sc->sc_bcl_cur = level;
>  }
>
>  void
> diff --git a/sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c 
> b/sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c
> index 02a90069f8d..4bad51b7d5f 100644
> --- a/sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c
> +++ b/sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c
> @@ -1656,7 +1656,7 @@ amdgpu_wsioctl(void *v, u_long cmd, caddr_t data, int 
> flag, struct proc *p)
>                 case WSDISPLAYIO_PARAM_BRIGHTNESS:
>                         dp->min = 0;
>                         dp->max = bd->props.max_brightness;
> -                       dp->curval = bd->ops->get_brightness(bd);
> +                       dp->curval = bd->props.brightness;
>                         return (dp->max > dp->min) ? 0 : -1;
>                 }
>                 break;
> diff --git a/sys/dev/wscons/wsdisplay.c b/sys/dev/wscons/wsdisplay.c
> index 61ccd2dae43..eda5c9d8843 100644
> --- a/sys/dev/wscons/wsdisplay.c
> +++ b/sys/dev/wscons/wsdisplay.c
> @@ -3369,3 +3369,43 @@ mouse_remove(struct wsscreen *scr)
>  }
>
>  #endif /* HAVE_WSMOUSED_SUPPORT */
> +
> +int
> +wsdisplay_change_brightness(int dir)
> +{
> +       struct wsdisplay_softc *sc;
> +       struct wsdisplay_param dp;
> +       int step, ret;
> +
> +       sc = (struct wsdisplay_softc *)device_lookup(&wsdisplay_cd, 0);
> +       if (sc == NULL)
> +               return ENODEV;
> +
> +       memset(&dp, 0, sizeof(dp));
> +       dp.param = WSDISPLAYIO_PARAM_BRIGHTNESS;
> +       ret = wsdisplay_internal_ioctl(sc, NULL, WSDISPLAYIO_GETPARAM,
> +           (caddr_t)&dp, 0, NULL);
> +       if (ret)
> +               return ret;
> +
> +       step = ((dp.max - dp.min) * 5) / 100;
> +       if (step <= 0)
> +               step = 1;
> +
> +       if (dir > 0) {
> +               if (dp.max - dp.curval > step)
> +                       dp.curval += step;
> +               else
> +                       dp.curval = dp.max;
> +       } else if (dir < 0) {
> +               if (dp.curval - dp.min > step)
> +                       dp.curval -= step;
> +               else
> +                       dp.curval = dp.min;
> +       } else
> +               dp.curval = dp.min;
> +       wsdisplay_internal_ioctl(sc, NULL, WSDISPLAYIO_SETPARAM,
> +           (caddr_t)&dp, FWRITE, NULL);
> +
> +       return 0;
> +}
> diff --git a/sys/dev/wscons/wsdisplayvar.h b/sys/dev/wscons/wsdisplayvar.h
> index ee36ac26a08..a1ecd376ec8 100644
> --- a/sys/dev/wscons/wsdisplayvar.h
> +++ b/sys/dev/wscons/wsdisplayvar.h
> @@ -243,6 +243,7 @@ const struct wsscreen_descr *
>  struct wsdisplay_param;
>  extern int (*ws_get_param)(struct wsdisplay_param *);
>  extern int (*ws_set_param)(struct wsdisplay_param *);
> +extern int wsdisplay_change_brightness(int);
>
>  /*
>   * for use by wskbd



-- 
 Thomas de Grivel
 kmx.io

Reply via email to