mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									44cee85a88
								
							
						
					
					
						commit
						6608804b3d
					
				
					 2 changed files with 34 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -860,3 +860,35 @@ void drm_dp_aux_unregister(struct drm_dp_aux *aux)
 | 
			
		|||
	i2c_del_adapter(&aux->ddc);
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(drm_dp_aux_unregister);
 | 
			
		||||
 | 
			
		||||
#define PSR_SETUP_TIME(x) [DP_PSR_SETUP_TIME_ ## x >> DP_PSR_SETUP_TIME_SHIFT] = (x)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * drm_dp_psr_setup_time() - PSR setup in time usec
 | 
			
		||||
 * @psr_cap: PSR capabilities from DPCD
 | 
			
		||||
 *
 | 
			
		||||
 * Returns:
 | 
			
		||||
 * PSR setup time for the panel in microseconds,  negative
 | 
			
		||||
 * error code on failure.
 | 
			
		||||
 */
 | 
			
		||||
int drm_dp_psr_setup_time(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE])
 | 
			
		||||
{
 | 
			
		||||
	static const u16 psr_setup_time_us[] = {
 | 
			
		||||
		PSR_SETUP_TIME(330),
 | 
			
		||||
		PSR_SETUP_TIME(275),
 | 
			
		||||
		PSR_SETUP_TIME(165),
 | 
			
		||||
		PSR_SETUP_TIME(110),
 | 
			
		||||
		PSR_SETUP_TIME(55),
 | 
			
		||||
		PSR_SETUP_TIME(0),
 | 
			
		||||
	};
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	i = (psr_cap[1] & DP_PSR_SETUP_TIME_MASK) >> DP_PSR_SETUP_TIME_SHIFT;
 | 
			
		||||
	if (i >= ARRAY_SIZE(psr_setup_time_us))
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	return psr_setup_time_us[i];
 | 
			
		||||
}
 | 
			
		||||
EXPORT_SYMBOL(drm_dp_psr_setup_time);
 | 
			
		||||
 | 
			
		||||
#undef PSR_SETUP_TIME
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -657,6 +657,8 @@ struct edp_vsc_psr {
 | 
			
		|||
#define EDP_VSC_PSR_UPDATE_RFB		(1<<1)
 | 
			
		||||
#define EDP_VSC_PSR_CRC_VALUES_VALID	(1<<2)
 | 
			
		||||
 | 
			
		||||
int drm_dp_psr_setup_time(const u8 psr_cap[EDP_PSR_RECEIVER_CAP_SIZE]);
 | 
			
		||||
 | 
			
		||||
static inline int
 | 
			
		||||
drm_dp_max_link_rate(const u8 dpcd[DP_RECEIVER_CAP_SIZE])
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue