• Jesse Barnes's avatar
    drm: initial KMS config fixes · 40a518d9
    Jesse Barnes authored
    When mode setting is first initialized, the driver will call into
    drm_helper_initial_config() to set up an initial output and framebuffer
    configuration.  This routine is responsible for probing the available
    connectors, encoders, and crtcs, looking for modes and putting together
    something reasonable (where reasonable is defined as "allows kernel
    messages to be visible on as many displays as possible").
    
    However, the code was a bit too aggressive in setting default modes when
    none were found on a given connector.  Even if some connectors had modes,
    any connectors found lacking modes would have the default 800x600 mode added
    to their mode list, which in some cases could cause problems later down the
    line.  In my case, the LVDS was perfectly available, but the initial config
    code added 800x600 modes to both of the detected but unavailable HDMI
    connectors (which are on my non-existent docking station).  This ended up
    preventing later code from setting a mode on my LVDS, which is bad.
    
    This patch fixes that behavior by making the initial config code walk
    through the connectors first, counting the available modes, before it decides
    to add any default modes to a possibly connected output.  It also fixes the
    logic in drm_target_preferred() that was causing zeroed out modes to be set
    as the preferred mode for a given connector, even if no modes were available.
    Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
    Signed-off-by: default avatarEric Anholt <eric@anholt.net>
    Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
    40a518d9
drm_crtc_helper.c 22.9 KB