Commit b48ccb18 authored by Douglas Anderson's avatar Douglas Anderson

drm-panel: If drm_panel_dp_aux_backlight() fails, don't fail panel probe

If we're using the AUX channel for eDP backlight and it fails to probe
for some reason, let's _not_ fail the panel probe.

At least one case where we could fail to init the backlight is because
of a dead or physically missing panel. As talked about in detail in
the earlier patch in this series, ("drm/panel-edp: If we fail to
powerup/get EDID, use conservative timings"), this can cause the
entire system's display pipeline to fail to come up and that's
non-ideal.

If we fail to init the backlight for some transitory reason, we should
dig in and see if there's a way to fix this (perhaps retries?). Even
in that case, though, having a panel whose backlight is stuck at 100%
(the default, at least in the panel Samsung ATNA33XC20 I tested) is
better than having no panel at all.
Reviewed-by: default avatarHsin-Yi Wang <hsinyi@chromium.org>
Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240325145626.3.I552e8af0ddb1691cc0fe5d27ea3d8020e36f7006@changeid
parent ce0ff223
...@@ -944,8 +944,14 @@ static int panel_edp_probe(struct device *dev, const struct panel_desc *desc, ...@@ -944,8 +944,14 @@ static int panel_edp_probe(struct device *dev, const struct panel_desc *desc,
err = drm_panel_dp_aux_backlight(&panel->base, panel->aux); err = drm_panel_dp_aux_backlight(&panel->base, panel->aux);
pm_runtime_mark_last_busy(dev); pm_runtime_mark_last_busy(dev);
pm_runtime_put_autosuspend(dev); pm_runtime_put_autosuspend(dev);
/*
* Warn if we get an error, but don't consider it fatal. Having
* a panel where we can't control the backlight is better than
* no panel.
*/
if (err) if (err)
goto err_finished_pm_runtime; dev_warn(dev, "failed to register dp aux backlight: %d\n", err);
} }
drm_panel_add(&panel->base); drm_panel_add(&panel->base);
......
...@@ -328,9 +328,14 @@ static int atana33xc20_probe(struct dp_aux_ep_device *aux_ep) ...@@ -328,9 +328,14 @@ static int atana33xc20_probe(struct dp_aux_ep_device *aux_ep)
ret = drm_panel_dp_aux_backlight(&panel->base, aux_ep->aux); ret = drm_panel_dp_aux_backlight(&panel->base, aux_ep->aux);
pm_runtime_mark_last_busy(dev); pm_runtime_mark_last_busy(dev);
pm_runtime_put_autosuspend(dev); pm_runtime_put_autosuspend(dev);
/*
* Warn if we get an error, but don't consider it fatal. Having
* a panel where we can't control the backlight is better than
* no panel.
*/
if (ret) if (ret)
return dev_err_probe(dev, ret, dev_warn(dev, "failed to register dp aux backlight: %d\n", ret);
"failed to register dp aux backlight\n");
drm_panel_add(&panel->base); drm_panel_add(&panel->base);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment