Download raw body.
sys/qcdpc: blank eDP panels during suspend
ok deraadt
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