aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMika Kahola <mika.kahola@intel.com>2016-09-09 07:10:50 -0400
committerJani Nikula <jani.nikula@intel.com>2016-09-15 07:50:01 -0400
commit7529d6af1cd16b0ecd286a1bf6ceee5328ab9809 (patch)
treed20ab3af9417ae038fec481715d2e96f7c635157
parent1c29bd3d6011bed4cbae215571f6f4c25ab10012 (diff)
drm: Helper to read max bits per component
Helper routine to read out maximum supported bits per component for DisplayPort legay converters. v2: Return early if detailed port cap info is not available. Replace if-else ladder with switch-case (Ville) Reviewed-by: Jim Bride <jim.bride@linux.intel.com> Signed-off-by: Mika Kahola <mika.kahola@intel.com> Acked-by: Dave Airlie <airlied@gmail.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/1473419458-17080-5-git-send-email-mika.kahola@intel.com
-rw-r--r--drivers/gpu/drm/drm_dp_helper.c42
-rw-r--r--include/drm/drm_dp_helper.h2
2 files changed, 44 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index f171fbf8b1b9..57c61d126a56 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -471,6 +471,48 @@ int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
471} 471}
472EXPORT_SYMBOL(drm_dp_downstream_max_clock); 472EXPORT_SYMBOL(drm_dp_downstream_max_clock);
473 473
474/**
475 * drm_dp_downstream_max_bpc() - extract branch device max
476 * bits per component
477 * @dpcd: DisplayPort configuration data
478 * @port_cap: port capabilities
479 *
480 * Returns max bpc on success or 0 if max bpc not defined
481 */
482int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
483 const u8 port_cap[4])
484{
485 int type = port_cap[0] & DP_DS_PORT_TYPE_MASK;
486 bool detailed_cap_info = dpcd[DP_DOWNSTREAMPORT_PRESENT] &
487 DP_DETAILED_CAP_INFO_AVAILABLE;
488 int bpc;
489
490 if (!detailed_cap_info)
491 return 0;
492
493 switch (type) {
494 case DP_DS_PORT_TYPE_VGA:
495 case DP_DS_PORT_TYPE_DVI:
496 case DP_DS_PORT_TYPE_HDMI:
497 case DP_DS_PORT_TYPE_DP_DUALMODE:
498 bpc = port_cap[2] & DP_DS_MAX_BPC_MASK;
499
500 switch (bpc) {
501 case DP_DS_8BPC:
502 return 8;
503 case DP_DS_10BPC:
504 return 10;
505 case DP_DS_12BPC:
506 return 12;
507 case DP_DS_16BPC:
508 return 16;
509 }
510 default:
511 return 0;
512 }
513}
514EXPORT_SYMBOL(drm_dp_downstream_max_bpc);
515
474/* 516/*
475 * I2C-over-AUX implementation 517 * I2C-over-AUX implementation
476 */ 518 */
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index 60dd9dca4ce2..f3d14240338e 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -817,6 +817,8 @@ int drm_dp_link_power_down(struct drm_dp_aux *aux, struct drm_dp_link *link);
817int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link); 817int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link);
818int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], 818int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
819 const u8 port_cap[4]); 819 const u8 port_cap[4]);
820int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE],
821 const u8 port_cap[4]);
820 822
821void drm_dp_aux_init(struct drm_dp_aux *aux); 823void drm_dp_aux_init(struct drm_dp_aux *aux);
822int drm_dp_aux_register(struct drm_dp_aux *aux); 824int drm_dp_aux_register(struct drm_dp_aux *aux);