On Wed, Jun 29, 2016 at 5:15 AM, Yakir Yang ykk@rock-chips.com wrote:
Some boards don't need to declare a panel device node, like the display interface is DP monitors, so it's necessary to make the panel detect to an optional action.
Signed-off-by: Yakir Yang ykk@rock-chips.com Acked-by: Mark Yao mark.yao@rock-chips.com Reviewed-by: Tomasz Figa tomasz.figa@chromium.com
Reviewed-by: Sean Paul seanpaul@chromium.org
Changes in v4:
- Move of_node_put(panel_node) directly below of_drm_find_panel (Sean)
- Add reviewed flag from Tomasz
Changes in v3:
- Add the acked flag from Mark.
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c | 47 +++++++++++-------------- 1 file changed, 21 insertions(+), 26 deletions(-)
diff --git a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c index 8557a08..0755573 100644 --- a/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c +++ b/drivers/gpu/drm/rockchip/analogix_dp-rockchip.c @@ -329,38 +329,33 @@ static int rockchip_dp_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct device_node *panel_node, *port, *endpoint;
struct drm_panel *panel = NULL; struct rockchip_dp_device *dp;
struct drm_panel *panel; port = of_graph_get_port_by_id(dev->of_node, 1);
if (!port) {
dev_err(dev, "can't find output port\n");
return -EINVAL;
}
endpoint = of_get_child_by_name(port, "endpoint");
of_node_put(port);
if (!endpoint) {
dev_err(dev, "no output endpoint found\n");
return -EINVAL;
}
panel_node = of_graph_get_remote_port_parent(endpoint);
of_node_put(endpoint);
if (!panel_node) {
dev_err(dev, "no output node found\n");
return -EINVAL;
}
panel = of_drm_find_panel(panel_node);
if (!panel) {
DRM_ERROR("failed to find panel\n");
if (port) {
endpoint = of_get_child_by_name(port, "endpoint");
of_node_put(port);
if (!endpoint) {
dev_err(dev, "no output endpoint found\n");
return -EINVAL;
}
panel_node = of_graph_get_remote_port_parent(endpoint);
of_node_put(endpoint);
if (!panel_node) {
dev_err(dev, "no output node found\n");
return -EINVAL;
}
panel = of_drm_find_panel(panel_node); of_node_put(panel_node);
return -EPROBE_DEFER;
if (!panel) {
DRM_ERROR("failed to find panel\n");
return -EPROBE_DEFER;
} }
of_node_put(panel_node);
dp = devm_kzalloc(dev, sizeof(*dp), GFP_KERNEL); if (!dp) return -ENOMEM;
-- 1.9.1