drm/nouveau: fix blank LVDS screen regression on pre-nv50 cards
authorMarcin Slusarz <marcin.slusarz@gmail.com>
Tue, 18 Dec 2012 19:30:47 +0000 (20:30 +0100)
committerBen Skeggs <bskeggs@redhat.com>
Sun, 13 Jan 2013 08:07:45 +0000 (18:07 +1000)
commit92441b2263866c27ef48137be5aa6c8c692652fc
treed018c605f3ab5ae42f2d2180cdab889f9b2d8d6f
parentdd5700ea98ad0b375a72525ce7d7edddf15b2693
drm/nouveau: fix blank LVDS screen regression on pre-nv50 cards

Commit 2a44e499 ("drm/nouveau/disp: introduce proper init/fini, separate
from create/destroy") started to call display init routines on pre-nv50
hardware on module load. But LVDS init code sets driver state in a way
which prevents modesetting code from operating properly.

nv04_display_init calls nv04_dfp_restore, which sets encoder->last_dpms to
NV_DPMS_CLEARED.

drm_crtc_helper_set_mode
  nv04_dfp_prepare
    nv04_lvds_dpms(DRM_MODE_DPMS_OFF)

nv04_lvds_dpms checks last_dpms mode (which is NV_DPMS_CLEARED) and wrongly
assumes it's a "powersaving mode", the new one (DRM_MODE_DPMS_OFF) is too,
so it skips calling some crucial lvds scripts.

Reported-by: Chris Paulson-Ellis <chris@edesix.com>
Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Cc: stable@vger.kernel.org
drivers/gpu/drm/nouveau/nv04_dfp.c