diff options
Diffstat (limited to 'drivers/gpu/drm/bridge/adv7511/adv7533.c')
| -rw-r--r-- | drivers/gpu/drm/bridge/adv7511/adv7533.c | 25 | 
1 files changed, 11 insertions, 14 deletions
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c index fdfeadcefe80..7e3e56441aed 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c @@ -103,22 +103,19 @@ void adv7533_dsi_power_off(struct adv7511 *adv)  enum drm_mode_status adv7533_mode_valid(struct adv7511 *adv,  					const struct drm_display_mode *mode)  { -	int lanes; +	unsigned long max_lane_freq;  	struct mipi_dsi_device *dsi = adv->dsi; +	u8 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format); -	if (mode->clock > 80000) -		lanes = 4; -	else -		lanes = 3; - -	/* -	 * TODO: add support for dynamic switching of lanes -	 * by using the bridge pre_enable() op . Till then filter -	 * out the modes which shall need different number of lanes -	 * than what was configured in the device tree. -	 */ -	if (lanes != dsi->lanes) -		return MODE_BAD; +	/* Check max clock for either 7533 or 7535 */ +	if (mode->clock > (adv->type == ADV7533 ? 80000 : 148500)) +		return MODE_CLOCK_HIGH; + +	/* Check max clock for each lane */ +	max_lane_freq = (adv->type == ADV7533 ? 800000 : 891000); + +	if (mode->clock * bpp > max_lane_freq * adv->num_dsi_lanes) +		return MODE_CLOCK_HIGH;  	return MODE_OK;  }  |