From: Maxime Ripard <maxime@cerno.tech>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Thomas Zimmermann <tzimmermann@suse.de>,
Maxime Ripard <maxime@cerno.tech>,
Daniel Vetter <daniel.vetter@intel.com>,
David Airlie <airlied@linux.ie>
Cc: Dom Cobley <dom@raspberrypi.com>,
Tim Gover <tim.gover@raspberrypi.com>,
Dave Stevenson <dave.stevenson@raspberrypi.com>,
dri-devel@lists.freedesktop.org,
Werner Sembach <wse@tuxedocomputers.com>,
Phil Elwell <phil@raspberrypi.com>
Subject: [PATCH v4 12/16] drm/vc4: hdmi: Move clock calculation into its own function
Date: Thu, 20 Jan 2022 16:16:21 +0100 [thread overview]
Message-ID: <20220120151625.594595-13-maxime@cerno.tech> (raw)
In-Reply-To: <20220120151625.594595-1-maxime@cerno.tech>
The code to compute our clock rate for a given setup will be called in
multiple places in the next patches, so let's create a separate function
for it.
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
---
drivers/gpu/drm/vc4/vc4_hdmi.c | 49 +++++++++++++++++++++++-----------
1 file changed, 34 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 1b75e8cfd5d5..764f3c5cfa54 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -1275,6 +1275,35 @@ vc4_hdmi_encoder_clock_valid(const struct vc4_hdmi *vc4_hdmi,
return MODE_OK;
}
+static unsigned long long
+vc4_hdmi_encoder_compute_mode_clock(const struct drm_display_mode *mode,
+ unsigned int bpc)
+{
+ unsigned long long clock = mode->crtc_clock * 1000;
+
+ if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+ clock = clock * 2;
+
+ return clock * bpc / 8;
+}
+
+static int
+vc4_hdmi_encoder_compute_clock(const struct vc4_hdmi *vc4_hdmi,
+ struct vc4_hdmi_connector_state *vc4_state,
+ const struct drm_display_mode *mode,
+ unsigned int bpc)
+{
+ unsigned long long clock;
+
+ clock = vc4_hdmi_encoder_compute_mode_clock(mode, bpc);
+ if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, clock) != MODE_OK)
+ return -EINVAL;
+
+ vc4_state->pixel_rate = clock;
+
+ return 0;
+}
+
#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
@@ -1287,6 +1316,7 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder,
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
unsigned long long pixel_rate = mode->clock * 1000;
unsigned long long tmds_rate;
+ int ret;
if (vc4_hdmi->variant->unsupported_odd_h_timings &&
((mode->hdisplay % 2) || (mode->hsync_start % 2) ||
@@ -1307,21 +1337,10 @@ static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder,
pixel_rate = mode->clock * 1000;
}
- if (conn_state->max_bpc == 12) {
- pixel_rate = pixel_rate * 150;
- do_div(pixel_rate, 100);
- } else if (conn_state->max_bpc == 10) {
- pixel_rate = pixel_rate * 125;
- do_div(pixel_rate, 100);
- }
-
- if (mode->flags & DRM_MODE_FLAG_DBLCLK)
- pixel_rate = pixel_rate * 2;
-
- if (vc4_hdmi_encoder_clock_valid(vc4_hdmi, pixel_rate) != MODE_OK)
- return -EINVAL;
-
- vc4_state->pixel_rate = pixel_rate;
+ ret = vc4_hdmi_encoder_compute_clock(vc4_hdmi, vc4_state, mode,
+ conn_state->max_bpc);
+ if (ret)
+ return ret;
return 0;
}
--
2.34.1
next prev parent reply other threads:[~2022-01-20 15:17 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-20 15:16 [PATCH v4 00/16] drm/vc4: hdmi: Yet Another Approach to HDMI YUV output Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 01/16] drm/edid: Rename drm_hdmi_avi_infoframe_colorspace to _colorimetry Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 02/16] drm/edid: Don't clear formats if using deep color Maxime Ripard
2022-01-24 9:00 ` Ville Syrjälä
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 03/16] drm/edid: Split deep color modes between RGB and YUV444 Maxime Ripard
2022-01-24 9:01 ` Ville Syrjälä
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 04/16] drm/connector: Fix typo in output format Maxime Ripard
2022-01-24 9:04 ` Ville Syrjälä
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 05/16] drm/vc4: hdmi: Add full range RGB helper Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 06/16] drm/vc4: hdmi: Use full range helper in csc functions Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 07/16] drm/vc4: hdmi: Move XBAR setup to csc_setup Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 08/16] drm/vc4: hdmi: Replace CSC_CTL hardcoded value by defines Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 09/16] drm/vc4: hdmi: Define colorspace matrices Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 10/16] drm/vc4: hdmi: Change CSC callback prototype Maxime Ripard
2022-01-25 9:25 ` (subset) " Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 11/16] drm/vc4: hdmi: Move clock validation to its own function Maxime Ripard
2022-01-20 15:16 ` Maxime Ripard [this message]
2022-01-20 15:16 ` [PATCH v4 13/16] drm/vc4: hdmi: Take the sink maximum TMDS clock into account Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 14/16] drm/vc4: hdmi: Take bpp into account for the scrambler Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 15/16] drm/vc4: hdmi: Always try to have the highest bpc Maxime Ripard
2022-01-20 15:16 ` [PATCH v4 16/16] drm/vc4: hdmi: Support HDMI YUV output Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220120151625.594595-13-maxime@cerno.tech \
--to=maxime@cerno.tech \
--cc=airlied@linux.ie \
--cc=daniel.vetter@intel.com \
--cc=dave.stevenson@raspberrypi.com \
--cc=dom@raspberrypi.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=phil@raspberrypi.com \
--cc=tim.gover@raspberrypi.com \
--cc=tzimmermann@suse.de \
--cc=wse@tuxedocomputers.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox