Download raw body.
sys/qcdpc: blank eDP panels during suspend
and here the version where I have actually called config_activate_children()
before switch off the panel.
With all three patches my honor laptop goes to zzz and seems completley stop
any fan activity that I treat as it actually sleep.
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 13:24:04 -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,44 @@ 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 (!sc->sc_bl.aux_enable)
+ return ret;
+
+ if (!sc->sc_bl_suspended) {
+ if (drm_dp_dpcd_read_byte(&sc->sc_aux,
+ DP_EDP_DISPLAY_CONTROL_REGISTER,
+ &sc->sc_bl_control) < 0)
+ return ret;
+ sc->sc_bl_suspended = 1;
+ }
+ (void) drm_dp_dpcd_write_byte(&sc->sc_aux,
+ DP_EDP_DISPLAY_CONTROL_REGISTER,
+ DP_EDP_BLACK_VIDEO_ENABLE);
+ return ret;
+
+ case DVACT_WAKEUP:
+ if (sc->sc_bl_suspended) {
+ ret = drm_dp_dpcd_write_byte(&sc->sc_aux,
+ DP_EDP_DISPLAY_CONTROL_REGISTER, sc->sc_bl_control);
+ if (ret == 0)
+ sc->sc_bl_suspended = 0;
+ }
+ break;
+ }
+
+ return config_activate_children(self, act);
}
int
--
wbr, Kirill
sys/qcdpc: blank eDP panels during suspend