drm/panel: do not return negative error codes from drm_panel_get_modes()
[ Upstream commit fc4e97726530241d96dd7db72eb65979217422c9 ] None of the callers of drm_panel_get_modes() expect it to return negative error codes. Either they propagate the return value in their struct drm_connector_helper_funcs .get_modes() hook (which is also not supposed to return negative codes), or add it to other counts leading to bogus values. On the other hand, many of the struct drm_panel_funcs .get_modes() hooks do return negative error codes, so handle them gracefully instead of propagating further. Return 0 for no modes, whatever the reason. Cc: Neil Armstrong <neil.armstrong@linaro.org> Cc: Jessica Zhang <quic_jesszhan@quicinc.com> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: stable@vger.kernel.org Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Reviewed-by: Jessica Zhang <quic_jesszhan@quicinc.com> Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/79f559b72d8c493940417304e222a4b04dfa19c4.1709913674.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
6470078ab3
commit
9aaa60f35b
@@ -207,19 +207,24 @@ EXPORT_SYMBOL(drm_panel_disable);
|
|||||||
* The modes probed from the panel are automatically added to the connector
|
* The modes probed from the panel are automatically added to the connector
|
||||||
* that the panel is attached to.
|
* that the panel is attached to.
|
||||||
*
|
*
|
||||||
* Return: The number of modes available from the panel on success or a
|
* Return: The number of modes available from the panel on success, or 0 on
|
||||||
* negative error code on failure.
|
* failure (no modes).
|
||||||
*/
|
*/
|
||||||
int drm_panel_get_modes(struct drm_panel *panel,
|
int drm_panel_get_modes(struct drm_panel *panel,
|
||||||
struct drm_connector *connector)
|
struct drm_connector *connector)
|
||||||
{
|
{
|
||||||
if (!panel)
|
if (!panel)
|
||||||
return -EINVAL;
|
return 0;
|
||||||
|
|
||||||
if (panel->funcs && panel->funcs->get_modes)
|
if (panel->funcs && panel->funcs->get_modes) {
|
||||||
return panel->funcs->get_modes(panel, connector);
|
int num;
|
||||||
|
|
||||||
return -EOPNOTSUPP;
|
num = panel->funcs->get_modes(panel, connector);
|
||||||
|
if (num > 0)
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_panel_get_modes);
|
EXPORT_SYMBOL(drm_panel_get_modes);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user