diff options
author | Mika Kahola <mika.kahola@intel.com> | 2016-09-09 07:10:50 -0400 |
---|---|---|
committer | Jani Nikula <jani.nikula@intel.com> | 2016-09-15 07:50:01 -0400 |
commit | 7529d6af1cd16b0ecd286a1bf6ceee5328ab9809 (patch) | |
tree | d20ab3af9417ae038fec481715d2e96f7c635157 | |
parent | 1c29bd3d6011bed4cbae215571f6f4c25ab10012 (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.c | 42 | ||||
-rw-r--r-- | include/drm/drm_dp_helper.h | 2 |
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 | } |
472 | EXPORT_SYMBOL(drm_dp_downstream_max_clock); | 472 | EXPORT_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 | */ | ||
482 | int 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 | } | ||
514 | EXPORT_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); | |||
817 | int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link); | 817 | int drm_dp_link_configure(struct drm_dp_aux *aux, struct drm_dp_link *link); |
818 | int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], | 818 | int drm_dp_downstream_max_clock(const u8 dpcd[DP_RECEIVER_CAP_SIZE], |
819 | const u8 port_cap[4]); | 819 | const u8 port_cap[4]); |
820 | int drm_dp_downstream_max_bpc(const u8 dpcd[DP_RECEIVER_CAP_SIZE], | ||
821 | const u8 port_cap[4]); | ||
820 | 822 | ||
821 | void drm_dp_aux_init(struct drm_dp_aux *aux); | 823 | void drm_dp_aux_init(struct drm_dp_aux *aux); |
822 | int drm_dp_aux_register(struct drm_dp_aux *aux); | 824 | int drm_dp_aux_register(struct drm_dp_aux *aux); |