drm/dp: Add support to indicate if sink supports AS SDP
authorMitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Fri, 22 Mar 2024 03:11:49 +0000 (08:41 +0530)
committerAnkit Nautiyal <ankit.k.nautiyal@intel.com>
Thu, 4 Apr 2024 07:38:45 +0000 (13:08 +0530)
Add an API that indicates support for Adaptive Sync SDP in
the sink, which can be utilized by the rest of the DP programming.

--v1:
- Format commit message properly.

Signed-off-by: Mitul Golani <mitulkumar.ajitkumar.golani@intel.com>
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240322031157.3823909-2-mitulkumar.ajitkumar.golani@intel.com
drivers/gpu/drm/display/drm_dp_helper.c
include/drm/display/drm_dp_helper.h

index f5d4be897866093a68c0d4f41380b3fdc20aaa85..5d7c6bab8e33f1f0ddc1c7ebdfb3e0136790136c 100644 (file)
@@ -2948,6 +2948,31 @@ void drm_dp_vsc_sdp_log(struct drm_printer *p, const struct drm_dp_vsc_sdp *vsc)
 }
 EXPORT_SYMBOL(drm_dp_vsc_sdp_log);
 
+/**
+ * drm_dp_as_sdp_supported() - check if adaptive sync sdp is supported
+ * @aux: DisplayPort AUX channel
+ * @dpcd: DisplayPort configuration data
+ *
+ * Returns true if adaptive sync sdp is supported, else returns false
+ */
+bool drm_dp_as_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE])
+{
+       u8 rx_feature;
+
+       if (dpcd[DP_DPCD_REV] < DP_DPCD_REV_13)
+               return false;
+
+       if (drm_dp_dpcd_readb(aux, DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1,
+                             &rx_feature) != 1) {
+               drm_dbg_dp(aux->drm_dev,
+                          "Failed to read DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1\n");
+               return false;
+       }
+
+       return (rx_feature & DP_ADAPTIVE_SYNC_SDP_SUPPORTED);
+}
+EXPORT_SYMBOL(drm_dp_as_sdp_supported);
+
 /**
  * drm_dp_vsc_sdp_supported() - check if vsc sdp is supported
  * @aux: DisplayPort AUX channel
index a62fcd051d4d4dfad983d6f355e2d268cf23fd6a..7df19acdc790168c3a343daede2ed7490b8dbdd3 100644 (file)
@@ -101,6 +101,7 @@ struct drm_dp_vsc_sdp {
 void drm_dp_vsc_sdp_log(struct drm_printer *p, const struct drm_dp_vsc_sdp *vsc);
 
 bool drm_dp_vsc_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
+bool drm_dp_as_sdp_supported(struct drm_dp_aux *aux, const u8 dpcd[DP_RECEIVER_CAP_SIZE]);
 
 int drm_dp_psr_setup_time(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]);