On Tue, Nov 4, 2014 at 9:50 AM, Thierry Reding <thierry.reding@xxxxxxxxx> wrote: > On Mon, Nov 03, 2014 at 12:18:30PM -0500, Sean Paul wrote: >> On Mon, Nov 3, 2014 at 4:27 AM, Thierry Reding <thierry.reding@xxxxxxxxx> wrote: >> > From: Thierry Reding <treding@xxxxxxxxxx> >> > >> > The output is already enabled in .dpms(), doing it in .mode_set() too >> > can cause noticeable flicker. >> > >> >> I think this should be coupled with "drm/tegra: DPMS off/on in encoder >> prepare/commit" that I sent earlier this week. Without it, the driver >> can get into a state where connector status is on, but the output is >> disabled. > > I'm not sure I exactly understand which problem that patch fixes, but > I'll give it some testing to see if it doesn't break anything. > I'll try to explain it more clearly. The problem occurs when userspace does set_property(dpms_on), then modeset. When the set_property ioctl to set dpms = on is called, the tegra driver goes through drm_helper_connector_dpms(). At this point, because the connector has not participated in a modeset, connector->encoder == NULL. In drm_helper_connector_dpms(), we set connector->dpms = DRM_MODE_DPMS_ON, and skip everything else because !encoder && !crtc. When modeset is called, we go through drm_crtc_helper_set_config(). This function will populate connector->encoder with the appropriate encoder and call drm_crtc_helper_set_mode(), which goes through the prepare/mode_set/commit calls. Finally, drm_crtc_helper_set_config() iterates through the connectors involved in the modeset and calls their dpms() func. In our case, as above, we go through drm_helper_connector_dpms(), but it just exits early because mode == connector->dpms. So we end up in a state where connector->dpms == DRM_MODE_DPMS_ON, and the output, as well as any connected panel, has never been enabled. The reason is that they're only enabled in encoder_funcs->dpms(), which is never called in the above scenario. I hope that makes more sense :-) Sean > Thierry _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel