• Ville Syrjälä's avatar
    drm/i915: Register the backlight device after the modeset init · 0962c3c9
    Ville Syrjälä authored
    Currently we register the backlight device as soon as we register the
    connector. That means we can get backlight requests from userspace
    already before reading out the current modeset hardware state.
    
    That means we don't yet know the current crtc->encoder->connector mapping,
    which causes problems for VLV/CHV which need to know the current pipe in
    order to figure out which BLC registers to poke. Currently we just
    ignore such requests fairly deep in the backlight code which means the
    backlight device brightness property will get out of sync with our
    backlight.level and the actual hardware state.
    
    Fix the problem by delaying the backlight device registration until the
    entire modeset init has been performed. And we also move the
    backlight unregisteration to happen as the first thing during the
    modeset cleanup so that we also won't be bothered with userspace
    backlight requested during teardown.
    
    This is a real world problem on machines using systemd, because systemd,
    for some reason, wants to restore the backlight to the level it used last
    time. And that happens as soon as it sees the backlight device appearing
    in the system. Sometimes the userspace access makes it through before
    the modeset init, sometimes not.
    
    v2: Do not lie to the user in the debug prints (Jani)
        Include connector name in the prints (Jani)
        Fix a typo in the commit message (Jani)
    Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    0962c3c9
intel_display.c 375 KB