Skip to content

Commit

Permalink
drm/vc4: hdmi: Move clock validation to its own function
Browse files Browse the repository at this point in the history
Our code is doing the same clock rate validation in multiple instances.
Let's create a helper to share the rate validation.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220222164042.403112-3-maxime@cerno.tech
  • Loading branch information
Maxime Ripard committed Mar 24, 2022
1 parent 6135ee0 commit ccbf364
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions drivers/gpu/drm/vc4/vc4_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -1245,6 +1245,19 @@ static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
mutex_unlock(&vc4_hdmi->mutex);
}

static enum drm_mode_status
vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
unsigned long long clock)
{
if (clock > vc4_hdmi->variant->max_pixel_clock)
return MODE_CLOCK_HIGH;

if (vc4_hdmi->disable_4kp60 && clock > HDMI_14_MAX_TMDS_CLK)
return MODE_CLOCK_HIGH;

return MODE_OK;
}

#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL

Expand Down Expand Up @@ -1288,10 +1301,7 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder,
if (mode->flags & DRM_MODE_FLAG_DBLCLK)
tmds_char_rate = tmds_char_rate * 2;

if (tmds_char_rate > vc4_hdmi->variant->max_pixel_clock)
return -EINVAL;

if (vc4_hdmi->disable_4kp60 && (tmds_char_rate > HDMI_14_MAX_TMDS_CLK))
if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, tmds_char_rate) != MODE_OK)
return -EINVAL;

vc4_state->tmds_char_rate = tmds_char_rate;
Expand All @@ -1310,13 +1320,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_encoder *encoder,
(mode->hsync_end % 2) || (mode->htotal % 2)))
return MODE_H_ILLEGAL;

if ((mode->clock * 1000) > vc4_hdmi->variant->max_pixel_clock)
return MODE_CLOCK_HIGH;

if (vc4_hdmi->disable_4kp60 && vc4_hdmi_mode_needs_scrambling(mode))
return MODE_CLOCK_HIGH;

return MODE_OK;
return vc4_hdmi_encoder_clock_valid(vc4_hdmi, mode->clock * 1000);
}

static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
Expand Down

0 comments on commit ccbf364

Please sign in to comment.