drm/msm/dp: support finding next bridge even for DP interfaces
authorDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Fri, 11 Feb 2022 22:40:04 +0000 (01:40 +0300)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Sat, 19 Feb 2022 02:31:36 +0000 (05:31 +0300)
It is possible to supply display-connector (bridge) to the DP interface,
add support for parsing it too.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Tested-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
Link: https://lore.kernel.org/r/20220211224006.1797846-4-dmitry.baryshkov@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/msm/dp/dp_parser.c

index 901d796..1056b8d 100644 (file)
@@ -301,17 +301,22 @@ static int dp_parser_parse(struct dp_parser *parser, int connector_type)
                return rc;
 
        /*
-        * Currently we support external bridges only for eDP connectors.
+        * External bridges are mandatory for eDP interfaces: one has to
+        * provide at least an eDP panel (which gets wrapped into panel-bridge).
         *
-        * No external bridges are expected for the DisplayPort connector,
-        * it is physically present in a form of a DP or USB-C connector.
+        * For DisplayPort interfaces external bridges are optional, so
+        * silently ignore an error if one is not present (-ENODEV).
         */
-       if (connector_type == DRM_MODE_CONNECTOR_eDP) {
-               rc = dp_parser_find_next_bridge(parser);
-               if (rc) {
-                       DRM_ERROR("DP: failed to find next bridge\n");
+       rc = dp_parser_find_next_bridge(parser);
+       if (rc == -ENODEV) {
+               if (connector_type == DRM_MODE_CONNECTOR_eDP) {
+                       DRM_ERROR("eDP: next bridge is not present\n");
                        return rc;
                }
+       } else if (rc) {
+               if (rc != -EPROBE_DEFER)
+                       DRM_ERROR("DP: error parsing next bridge: %d\n", rc);
+               return rc;
        }
 
        /* Map the corresponding regulator information according to