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