• Douglas Anderson's avatar
    drm/dp: For drm_panel_dp_aux_backlight(), init backlight as disabled · 17a1837d
    Douglas Anderson authored
    Even after the DP AUX backlight on my board worked OK after applying
    the patch ("drm/panel-simple: Power the panel when probing DP AUX
    backlight") [1], I still noticed some strange timeouts being reported
    by ti_sn_aux_transfer(). Digging, I realized the problem was this:
    * Even though `enabled` in `struct dp_aux_backlight` was false, the
      base backlight structure (`base` in that structure) thought that the
      backlight was powered on.
    * If userspace wrote to sysfs in this state then we'd try to enable
      the backlight.
    * Unfortunatley, enabling the backlight didn't work because the panel
      itself wasn't powered.
    
    We can only use the backlight if the panel is on and the panel is not
    officially on when we probe (it's temporarily just on enough for us to
    talk to it).
    
    The important thing we want here is to get `BL_CORE_FBBLANK` set since
    userspace can't mess with that. This will keep us disabled until
    drm_panel enables us, which means that the panel is enabled
    first. Ideally we'd just set this in our `props` before calling
    devm_backlight_device_register() but the comments in the header file
    are pretty explicit that we're not supposed to much with the `state`
    ourselves. Because of this, there may be a small window where the
    backlight device is registered and someone could try to tweak with the
    backlight. This isn't likely to happen and even if it did, I don't
    believe this causes any huge problem.
    
    [1] https://lore.kernel.org/lkml/20210714093334.1.Idb41f87e5abae4aee0705db7458b0097fc50e7ab@changeid/Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20210714101744.1.Ifc22696b27930749915e383f0108b7bcdc015a6e@changeid
    17a1837d
drm_dp_helper.c 99.8 KB