From: Maxime Ripard <mripard@kernel.org>
To: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Emma Anholt" <emma@anholt.net>,
"Jonathan Corbet" <corbet@lwn.net>,
"Sandy Huang" <hjc@rock-chips.com>,
"Heiko Stübner" <heiko@sntech.de>, "Chen-Yu Tsai" <wens@csie.org>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"Samuel Holland" <samuel@sholland.org>
Cc: Hans Verkuil <hverkuil@xs4all.nl>,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-rockchip@lists.infradead.org, linux-sunxi@lists.linux.dev,
Maxime Ripard <mripard@kernel.org>
Subject: [PATCH RFC v2 04/37] drm/connector: hdmi: Add helper to get the RGB range
Date: Wed, 20 Sep 2023 16:35:19 +0200 [thread overview]
Message-ID: <20230920-kms-hdmi-connector-state-v2-4-17932daddd7d@kernel.org> (raw)
In-Reply-To: <20230920-kms-hdmi-connector-state-v2-0-17932daddd7d@kernel.org>
HDMI controller drivers will need to figure out the RGB range they need
to configure based on a given atomic state.
Let's provide a helper to provide that information.
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_atomic_state_helper.c | 39 +++++++++++++++++++++++++++++++
include/drm/drm_atomic_state_helper.h | 5 ++++
2 files changed, 44 insertions(+)
diff --git a/drivers/gpu/drm/drm_atomic_state_helper.c b/drivers/gpu/drm/drm_atomic_state_helper.c
index 4b24ebb7e3e8..0f7e5ba555b8 100644
--- a/drivers/gpu/drm/drm_atomic_state_helper.c
+++ b/drivers/gpu/drm/drm_atomic_state_helper.c
@@ -31,6 +31,7 @@
#include <drm/drm_connector.h>
#include <drm/drm_crtc.h>
#include <drm/drm_device.h>
+#include <drm/drm_edid.h>
#include <drm/drm_framebuffer.h>
#include <drm/drm_plane.h>
#include <drm/drm_print.h>
@@ -621,6 +622,15 @@ int drm_atomic_helper_connector_tv_check(struct drm_connector *connector,
}
EXPORT_SYMBOL(drm_atomic_helper_connector_tv_check);
+static const struct drm_display_mode *
+connector_state_get_adjusted_mode(const struct drm_connector_state *state)
+{
+ struct drm_crtc *crtc = state->crtc;
+ struct drm_crtc_state *crtc_state = crtc->state;
+
+ return &crtc_state->adjusted_mode;
+}
+
/**
* drm_atomic_helper_connector_hdmi_check() - Helper to check HDMI connector atomic state
* @connector: DRM Connector
@@ -656,6 +666,35 @@ int drm_atomic_helper_connector_hdmi_check(struct drm_connector *connector,
}
EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_check);
+/**
+ * drm_atomic_helper_connector_hdmi_is_full_range() - Checks whether a state uses Full-Range RGB
+ * @connector: the HDMI connector this state refers to
+ * @state: the HDMI connector state to check
+ *
+ * RETURNS:
+ * True if @state requires a Full range RGB output, False otherwise
+ */
+bool
+drm_atomic_helper_connector_hdmi_is_full_range(const struct drm_connector *connector,
+ const struct drm_connector_state *state)
+{
+ const struct drm_display_mode *mode =
+ connector_state_get_adjusted_mode(state);
+ const struct drm_display_info *display = &connector->display_info;
+
+ if (state->hdmi.broadcast_rgb == DRM_HDMI_BROADCAST_RGB_FULL)
+ return true;
+
+ if (state->hdmi.broadcast_rgb == DRM_HDMI_BROADCAST_RGB_LIMITED)
+ return false;
+
+ if (!display->is_hdmi)
+ return true;
+
+ return drm_default_rgb_quant_range(mode);
+}
+EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_is_full_range);
+
/**
* __drm_atomic_helper_connector_duplicate_state - copy atomic connector state
* @connector: connector object
diff --git a/include/drm/drm_atomic_state_helper.h b/include/drm/drm_atomic_state_helper.h
index d59d2b3aef9a..c6d941b9e846 100644
--- a/include/drm/drm_atomic_state_helper.h
+++ b/include/drm/drm_atomic_state_helper.h
@@ -88,6 +88,11 @@ void
__drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state);
void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
struct drm_connector_state *state);
+
+bool
+drm_atomic_helper_connector_hdmi_is_full_range(const struct drm_connector *connector,
+ const struct drm_connector_state *state);
+
void __drm_atomic_helper_private_obj_duplicate_state(struct drm_private_obj *obj,
struct drm_private_state *state);
--
2.41.0
next prev parent reply other threads:[~2023-09-20 14:36 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-20 14:35 [PATCH RFC v2 00/37] drm/connector: Create HDMI Connector infrastructure Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 01/37] drm/connector: Introduce an HDMI connector Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 02/37] drm/connector: hdmi: Create a custom state Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 03/37] drm/connector: hdmi: Add Broadcast RGB property Maxime Ripard
2023-09-21 8:39 ` Pekka Paalanen
2023-09-20 14:35 ` Maxime Ripard [this message]
2023-09-20 14:35 ` [PATCH RFC v2 05/37] drm/connector: hdmi: Add output BPC to the connector state Maxime Ripard
2023-09-21 8:48 ` Pekka Paalanen
2023-09-21 8:56 ` Jani Nikula
2023-09-20 14:35 ` [PATCH RFC v2 06/37] drm/connector: hdmi: Add support for output format Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 07/37] drm/connector: hdmi: Add HDMI compute clock helper Maxime Ripard
2023-09-20 17:15 ` Jernej Škrabec
2023-09-20 14:35 ` [PATCH RFC v2 08/37] drm/connector: hdmi: Calculate TMDS character rate Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 09/37] drm/connector: hdmi: Add custom hook to filter " Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 10/37] drm/connector: hdmi: Compute bpc and format automatically Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 11/37] drm/connector: hdmi: Add Infoframes generation Maxime Ripard
2023-09-20 17:11 ` Jernej Škrabec
2023-09-20 14:35 ` [PATCH RFC v2 12/37] drm/connector: hdmi: Create Infoframe DebugFS entries Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 13/37] drm/vc4: hdmi: Create destroy state implementation Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 14/37] drm/vc4: hdmi: Switch to HDMI connector Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 15/37] drm/rockchip: inno_hdmi: Remove useless mode_fixup Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 16/37] drm/rockchip: inno_hdmi: Remove useless copy of drm_display_mode Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 17/37] drm/rockchip: inno_hdmi: Switch encoder hooks to atomic Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 18/37] drm/rockchip: inno_hdmi: Get rid of mode_set Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 19/37] drm/rockchip: inno_hdmi: no need to store vic Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 20/37] drm/rockchip: inno_hdmi: Remove unneeded has audio flag Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 21/37] drm/rockchip: inno_hdmi: Remove useless input format Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 22/37] drm/rockchip: inno_hdmi: Remove useless output format Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 23/37] drm/rockchip: inno_hdmi: Remove useless colorimetry Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 24/37] drm/rockchip: inno_hdmi: Remove useless enum Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 25/37] drm/rockchip: inno_hdmi: Remove tmds rate from structure Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 26/37] drm/rockchip: inno_hdmi: Remove useless coeff_csc matrix Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 27/37] drm/rockchip: inno_hdmi: Remove useless mode_valid Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 28/37] drm/rockchip: inno_hdmi: Move infoframe disable to separate function Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 29/37] drm/rockchip: inno_hdmi: Create mask retrieval functions Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 30/37] drm/rockchip: inno_hdmi: Switch to infoframe type Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 31/37] drm/rockchip: inno_hdmi: Remove unused drm device pointer Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 32/37] drm/rockchip: inno_hdmi: Switch to HDMI connector Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 33/37] drm/sun4i: hdmi: Convert encoder to atomic Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 34/37] drm/sun4i: hdmi: Move mode_set into enable Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 35/37] drm/sun4i: hdmi: Switch to container_of_const Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 36/37] drm/sun4i: hdmi: Consolidate atomic_check and mode_valid Maxime Ripard
2023-09-20 14:35 ` [PATCH RFC v2 37/37] drm/sun4i: hdmi: Switch to HDMI connector Maxime Ripard
2023-09-21 16:29 ` [PATCH RFC v2 00/37] drm/connector: Create HDMI Connector infrastructure Hans Verkuil
2023-09-21 16:48 ` 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=20230920-kms-hdmi-connector-state-v2-4-17932daddd7d@kernel.org \
--to=mripard@kernel.org \
--cc=airlied@gmail.com \
--cc=corbet@lwn.net \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=emma@anholt.net \
--cc=heiko@sntech.de \
--cc=hjc@rock-chips.com \
--cc=hverkuil@xs4all.nl \
--cc=jernej.skrabec@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=maarten.lankhorst@linux.intel.com \
--cc=samuel@sholland.org \
--cc=tzimmermann@suse.de \
--cc=wens@csie.org \
/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
all inboxes | Powered by JetHome®