drm/rockchip: analogix_dp: make panel detect to an optional action
authorYakir Yang <ykk@rock-chips.com>
Wed, 29 Jun 2016 09:15:30 +0000 (17:15 +0800)
committerYakir Yang <ykk@rock-chips.com>
Tue, 5 Jul 2016 13:53:37 +0000 (21:53 +0800)
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>
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c

index 8557a085d0aceef6554b8eae77ffb9795902df08..0755573151af8d802ff48735212978c220f3bc3f 100644 (file)
@@ -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;