]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/drm_dp_mst_topology.c
drm/nouveau/kms: Don't change EDID when it hasn't actually changed
[linux.git] / drivers / gpu / drm / drm_dp_mst_topology.c
index 09b32289497ed35626133b45ce7bb2a9904b349e..61755c26fac03cce121221e13bad37c640b0221d 100644 (file)
@@ -3486,6 +3486,28 @@ static int drm_dp_get_vc_payload_bw(u8 dp_link_bw, u8  dp_link_count)
        return dp_link_bw * dp_link_count / 2;
 }
 
+/**
+ * drm_dp_read_mst_cap() - check whether or not a sink supports MST
+ * @aux: The DP AUX channel to use
+ * @dpcd: A cached copy of the DPCD capabilities for this sink
+ *
+ * Returns: %True if the sink supports MST, %false otherwise
+ */
+bool drm_dp_read_mst_cap(struct drm_dp_aux *aux,
+                        const u8 dpcd[DP_RECEIVER_CAP_SIZE])
+{
+       u8 mstm_cap;
+
+       if (dpcd[DP_DPCD_REV] < DP_DPCD_REV_12)
+               return false;
+
+       if (drm_dp_dpcd_readb(aux, DP_MSTM_CAP, &mstm_cap) != 1)
+               return false;
+
+       return mstm_cap & DP_MST_CAP;
+}
+EXPORT_SYMBOL(drm_dp_read_mst_cap);
+
 /**
  * drm_dp_mst_topology_mgr_set_mst() - Set the MST state for a topology manager
  * @mgr: manager to set state for
@@ -4308,11 +4330,11 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
 {
        int ret;
 
-       port = drm_dp_mst_topology_get_port_validated(mgr, port);
-       if (!port)
+       if (slots < 0)
                return false;
 
-       if (slots < 0)
+       port = drm_dp_mst_topology_get_port_validated(mgr, port);
+       if (!port)
                return false;
 
        if (port->vcpi.vcpi > 0) {
@@ -4328,6 +4350,7 @@ bool drm_dp_mst_allocate_vcpi(struct drm_dp_mst_topology_mgr *mgr,
        if (ret) {
                DRM_DEBUG_KMS("failed to init vcpi slots=%d max=63 ret=%d\n",
                              DIV_ROUND_UP(pbn, mgr->pbn_div), ret);
+               drm_dp_mst_topology_put_port(port);
                goto out;
        }
        DRM_DEBUG_KMS("initing vcpi for pbn=%d slots=%d\n",
This page took 0.032498 seconds and 4 git commands to generate.