Commit 6bf2e032 authored by Sean Paul's avatar Sean Paul

drm/rockchip: Fix uninitialized use of ret

If there are no children for lvds, ret is used uninitialized. This patch
initializes ret and returns an error if the port has no children.

Fixes: 34cc0aa2 ("drm/rockchip: Add support for Rockchip Soc LVDS")
Cc: Mark Yao <mark.yao@rock-chips.com>
Cc: Heiko Stuebner <heiko@sntech.de>
Cc: Sandy Huang <hjc@rock-chips.com>
Cc: dri-devel@lists.freedesktop.org
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-rockchip@lists.infradead.org
Reviewed-by: default avatarMark Yao <mark.yao@rock-chips.com>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20170921001408.1839-1-seanpaul@chromium.org
parent 531beb06
...@@ -346,7 +346,7 @@ static int rockchip_lvds_bind(struct device *dev, struct device *master, ...@@ -346,7 +346,7 @@ static int rockchip_lvds_bind(struct device *dev, struct device *master,
struct drm_connector *connector; struct drm_connector *connector;
struct device_node *remote = NULL; struct device_node *remote = NULL;
struct device_node *port, *endpoint; struct device_node *port, *endpoint;
int ret; int ret = 0, child_count = 0;
const char *name; const char *name;
u32 endpoint_id; u32 endpoint_id;
...@@ -358,15 +358,20 @@ static int rockchip_lvds_bind(struct device *dev, struct device *master, ...@@ -358,15 +358,20 @@ static int rockchip_lvds_bind(struct device *dev, struct device *master,
return -EINVAL; return -EINVAL;
} }
for_each_child_of_node(port, endpoint) { for_each_child_of_node(port, endpoint) {
child_count++;
of_property_read_u32(endpoint, "reg", &endpoint_id); of_property_read_u32(endpoint, "reg", &endpoint_id);
ret = drm_of_find_panel_or_bridge(dev->of_node, 1, endpoint_id, ret = drm_of_find_panel_or_bridge(dev->of_node, 1, endpoint_id,
&lvds->panel, &lvds->bridge); &lvds->panel, &lvds->bridge);
if (!ret) if (!ret)
break; break;
} }
if (ret) { if (!child_count) {
DRM_DEV_ERROR(dev, "lvds port does not have any children\n");
ret = -EINVAL;
goto err_put_port;
} else if (ret) {
DRM_DEV_ERROR(dev, "failed to find panel and bridge node\n"); DRM_DEV_ERROR(dev, "failed to find panel and bridge node\n");
ret = -EPROBE_DEFER; ret = -EPROBE_DEFER;
goto err_put_port; goto err_put_port;
} }
if (lvds->panel) if (lvds->panel)
......
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