Download raw body.
sys/qcdpc: blank eDP panels during suspend
> From: "Theo de Raadt" <deraadt@openbsd.org>
> Date: Mon, 05 Oct 2026 08:19:23 -0600
>
> ok deraadt
Please don't commit yet. I have some questions and this needs
testing.
> Kirill A. Korinsky <kirill@korins.ky> wrote:
>
> >
> >
> > and here I belive the correct diff.
> >
> > Index: sys/dev/fdt/qcdpc.c
> > ===================================================================
> > RCS file: /home/cvs/src/sys/dev/fdt/qcdpc.c,v
> > diff -u -p -r1.2 qcdpc.c
> > --- sys/dev/fdt/qcdpc.c 9 Mar 2026 23:57:53 -0000 1.2
> > +++ sys/dev/fdt/qcdpc.c 5 Oct 2026 14:05:20 -0000
> > @@ -71,15 +71,19 @@ struct qcdpc_softc {
> >
> > struct drm_edp_backlight_info sc_bl;
> > uint32_t sc_bl_level;
> > + uint8_t sc_bl_control;
> > + int sc_bl_suspended;
> > };
> >
> > struct qcdpc_softc *qcdpc_bl;
> >
> > int qcdpc_match(struct device *, void *, void *);
> > void qcdpc_attach(struct device *, struct device *, void *);
> > +int qcdpc_activate(struct device *, int);
> >
> > const struct cfattach qcdpc_ca = {
> > - sizeof(struct qcdpc_softc), qcdpc_match, qcdpc_attach
> > + sizeof(struct qcdpc_softc), qcdpc_match, qcdpc_attach,
> > + NULL, qcdpc_activate
> > };
> >
> > struct cfdriver qcdpc_cd = {
> > @@ -174,6 +178,46 @@ qcdpc_attach(struct device *parent, stru
> > fa.fa_node = node;
> > config_found(self, &fa, qcdpc_print);
> > }
> > +}
> > +
> > +int
> > +qcdpc_activate(struct device *self, int act)
> > +{
> > + struct qcdpc_softc *sc = (struct qcdpc_softc *)self;
> > + int ret;
> > +
> > + switch (act) {
> > + case DVACT_QUIESCE:
> > + ret = config_activate_children(self, act);
> > + if (ret)
> > + return ret;
> > + if (!sc->sc_bl.aux_enable)
> > + break;
> > +
> > + if (!sc->sc_bl_suspended) {
> > + if (drm_dp_dpcd_read_byte(&sc->sc_aux,
> > + DP_EDP_DISPLAY_CONTROL_REGISTER,
> > + &sc->sc_bl_control) < 0)
> > + break;
> > + sc->sc_bl_suspended = 1;
> > + }
> > + (void) drm_dp_dpcd_write_byte(&sc->sc_aux,
> > + DP_EDP_DISPLAY_CONTROL_REGISTER,
> > + DP_EDP_BLACK_VIDEO_ENABLE);
> > + break;
> > + case DVACT_WAKEUP:
> > + if (sc->sc_bl_suspended) {
> > + if (drm_dp_dpcd_write_byte(&sc->sc_aux,
> > + DP_EDP_DISPLAY_CONTROL_REGISTER,
> > + sc->sc_bl_control) == 0)
> > + sc->sc_bl_suspended = 0;
> > + }
> > + return config_activate_children(self, act);
> > + default:
> > + return config_activate_children(self, act);
> > + }
> > +
> > + return ret;
> > }
> >
> > int
> >
> >
> > --
> > wbr, Kirill
> >
>
>
sys/qcdpc: blank eDP panels during suspend