Skip to content

Commit 6608804

Browse files
vsyrjalaairlied
authored andcommitted
drm/dp: Add drm_dp_psr_setup_time()
Add a small helper to parse the PSR setup time from the DPCD PSR capabilities and return the value in microseconds. v2: Don't waste so many bytes on the psr_setup_time_us[] table Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent 44cee85 commit 6608804

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

drivers/gpu/drm/drm_dp_helper.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,3 +860,35 @@ void drm_dp_aux_unregister(struct drm_dp_aux *aux)
860860
i2c_del_adapter(&aux->ddc);
861861
}
862862
EXPORT_SYMBOL(drm_dp_aux_unregister);
863+
864+
#define PSR_SETUP_TIME(x) [DP_PSR_SETUP_TIME_ ## x >> DP_PSR_SETUP_TIME_SHIFT] = (x)
865+
866+
/**
867+
* drm_dp_psr_setup_time() - PSR setup in time usec
868+
* @psr_cap: PSR capabilities from DPCD
869+
*
870+
* Returns:
871+
* PSR setup time for the panel in microseconds, negative
872+
* error code on failure.
873+
*/
874+
int drm_dp_psr_setup_time(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE])
875+
{
876+
static const u16 psr_setup_time_us[] = {
877+
PSR_SETUP_TIME(330),
878+
PSR_SETUP_TIME(275),
879+
PSR_SETUP_TIME(165),
880+
PSR_SETUP_TIME(110),
881+
PSR_SETUP_TIME(55),
882+
PSR_SETUP_TIME(0),
883+
};
884+
int i;
885+
886+
i = (psr_cap[1] & DP_PSR_SETUP_TIME_MASK) >> DP_PSR_SETUP_TIME_SHIFT;
887+
if (i >= ARRAY_SIZE(psr_setup_time_us))
888+
return -EINVAL;
889+
890+
return psr_setup_time_us[i];
891+
}
892+
EXPORT_SYMBOL(drm_dp_psr_setup_time);
893+
894+
#undef PSR_SETUP_TIME

include/drm/drm_dp_helper.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,8 @@ struct edp_vsc_psr {
657657
#define EDP_VSC_PSR_UPDATE_RFB (1<<1)
658658
#define EDP_VSC_PSR_CRC_VALUES_VALID (1<<2)
659659

660+
int drm_dp_psr_setup_time(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]);
661+
660662
static inline int
661663
drm_dp_max_link_rate(const u8 dpcd[DP_RECEIVER_CAP_SIZE])
662664
{

0 commit comments

Comments
 (0)