lkml.org 
[lkml]   [2021]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 23/27] drm/panel: panel-simple: Power the panel when reading the EDID
    Date
    I don't believe that it ever makes sense to read the EDID when a panel
    is not powered and the powering on of the panel is the job of
    prepare(). Let's make sure that this happens before we try to read the
    EDID. We use the pm_runtime functions directly rather than directly
    calling the normal prepare() function because the pm_runtime functions
    are definitely refcounted whereas it's less clear if the prepare() one
    is.

    NOTE: I'm not 100% sure how EDID reading was working for folks in the
    past, but I can only assume that it was failing on the initial attempt
    and then working only later. This patch, presumably, will fix that. If
    some panel out there really can read the EDID without powering up and
    it's a big advantage to preserve the old behavior we can add a
    per-panel flag. It appears that providing the DDC bus to the panel in
    the past was somewhat uncommon in any case.

    Signed-off-by: Douglas Anderson <dianders@chromium.org>
    ---

    (no changes since v1)

    drivers/gpu/drm/panel/panel-simple.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
    index c91e8aa108f7..40382c1be692 100644
    --- a/drivers/gpu/drm/panel/panel-simple.c
    +++ b/drivers/gpu/drm/panel/panel-simple.c
    @@ -510,12 +510,18 @@ static int panel_simple_get_modes(struct drm_panel *panel,

    /* probe EDID if a DDC bus is available */
    if (p->ddc) {
    - struct edid *edid = drm_get_edid(connector, p->ddc);
    + struct edid *edid;

    + pm_runtime_get_sync(panel->dev);
    +
    + edid = drm_get_edid(connector, p->ddc);
    if (edid) {
    num += drm_add_edid_modes(connector, edid);
    kfree(edid);
    }
    +
    + pm_runtime_mark_last_busy(panel->dev);
    + pm_runtime_put_autosuspend(panel->dev);
    }

    /* add hard-coded panel modes */
    --
    2.31.1.368.gbe11c130af-goog
    \
     
     \ /
      Last update: 2021-04-17 01:11    [W:3.951 / U:0.516 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site