From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Jani Nikula <jani.nikula@intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [Intel-gfx] [RFC 06/19] drm/edid: clean up cea_db_is_*() functions
Date: Wed, 23 Mar 2022 17:43:48 +0200 [thread overview]
Message-ID: <YjtANOJjTC4Q4T3m@intel.com> (raw)
In-Reply-To: <a9b83af4adfbc10296933958a057dddbb42bf769.1647985054.git.jani.nikula@intel.com>
On Tue, Mar 22, 2022 at 11:40:35PM +0200, Jani Nikula wrote:
> Abstract helpers for matching vendor data blocks and extended tags, and
> use them to simplify all the cea_db_is_*() functions.
>
> Take void pointer as parameter to allow transitional use for both u8 *
> and struct cea_db *.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> ---
> drivers/gpu/drm/drm_edid.c | 113 ++++++++++++-------------------------
> 1 file changed, 37 insertions(+), 76 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index c12c3cbab274..a0a5a7271658 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -4196,12 +4196,6 @@ do_hdmi_vsdb_modes(struct drm_connector *connector, const u8 *db, u8 len,
> return modes;
> }
>
> -static int
> -cea_db_extended_tag(const u8 *db)
> -{
> - return db[1];
> -}
> -
> static int
> cea_revision(const u8 *cea)
> {
> @@ -4313,6 +4307,22 @@ static const void *cea_db_data(const struct cea_db *db)
> return db->data;
> }
>
> +static bool cea_db_is_extended_tag(const struct cea_db *db, int tag)
> +{
> + return (cea_db_tag(db) == CEA_DB_EXTENDED_TAG &&
> + cea_db_payload_len(db) >= 1 &&
> + db->data[0] == tag);
> +}
nit: not a huge fan of the redundant parens in all of these
> +
> +static bool cea_db_is_vendor(const struct cea_db *db, int vendor_oui)
I'd probably make the tag/oui unsigned.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> +{
> + const u8 *data = cea_db_data(db);
> +
> + return (cea_db_tag(db) == CEA_DB_VENDOR &&
> + cea_db_payload_len(db) >= 3 &&
> + oui(data[2], data[1], data[0]) == vendor_oui);
> +}
> +
> static void cea_db_iter_edid_begin(const struct edid *edid, struct cea_db_iter *iter)
> {
> memset(iter, 0, sizeof(*iter));
> @@ -4443,79 +4453,44 @@ static void cea_db_iter_end(struct cea_db_iter *iter)
> memset(iter, 0, sizeof(*iter));
> }
>
> -static bool cea_db_is_hdmi_vsdb(const u8 *db)
> +static bool cea_db_is_hdmi_vsdb(const void *db)
> {
> - if (cea_db_tag(db) != CEA_DB_VENDOR)
> - return false;
> -
> - if (cea_db_payload_len(db) < 5)
> - return false;
> -
> - return oui(db[3], db[2], db[1]) == HDMI_IEEE_OUI;
> + return (cea_db_is_vendor(db, HDMI_IEEE_OUI) &&
> + cea_db_payload_len(db) >= 5);
> }
>
> -static bool cea_db_is_hdmi_forum_vsdb(const u8 *db)
> +static bool cea_db_is_hdmi_forum_vsdb(const void *db)
> {
> - if (cea_db_tag(db) != CEA_DB_VENDOR)
> - return false;
> -
> - if (cea_db_payload_len(db) < 7)
> - return false;
> -
> - return oui(db[3], db[2], db[1]) == HDMI_FORUM_IEEE_OUI;
> + return (cea_db_is_vendor(db, HDMI_FORUM_IEEE_OUI) &&
> + cea_db_payload_len(db) >= 7);
> }
>
> -static bool cea_db_is_microsoft_vsdb(const u8 *db)
> +static bool cea_db_is_microsoft_vsdb(const void *db)
> {
> - if (cea_db_tag(db) != CEA_DB_VENDOR)
> - return false;
> -
> - if (cea_db_payload_len(db) != 21)
> - return false;
> -
> - return oui(db[3], db[2], db[1]) == MICROSOFT_IEEE_OUI;
> + return (cea_db_is_vendor(db, MICROSOFT_IEEE_OUI) &&
> + cea_db_payload_len(db) == 21);
> }
>
> -static bool cea_db_is_vcdb(const u8 *db)
> +static bool cea_db_is_vcdb(const void *db)
> {
> - if (cea_db_tag(db) != CEA_DB_EXTENDED_TAG)
> - return false;
> -
> - if (cea_db_payload_len(db) != 2)
> - return false;
> -
> - if (cea_db_extended_tag(db) != CEA_EXT_DB_VIDEO_CAP)
> - return false;
> -
> - return true;
> + return (cea_db_is_extended_tag(db, CEA_EXT_DB_VIDEO_CAP) &&
> + cea_db_payload_len(db) == 2);
> }
>
> -static bool cea_db_is_y420cmdb(const u8 *db)
> +static bool cea_db_is_y420cmdb(const void *db)
> {
> - if (cea_db_tag(db) != CEA_DB_EXTENDED_TAG)
> - return false;
> -
> - if (!cea_db_payload_len(db))
> - return false;
> -
> - if (cea_db_extended_tag(db) != CEA_EXT_DB_420_VIDEO_CAP_MAP)
> - return false;
> -
> - return true;
> + return cea_db_is_extended_tag(db, CEA_EXT_DB_420_VIDEO_CAP_MAP);
> }
>
> -static bool cea_db_is_y420vdb(const u8 *db)
> +static bool cea_db_is_y420vdb(const void *db)
> {
> - if (cea_db_tag(db) != CEA_DB_EXTENDED_TAG)
> - return false;
> -
> - if (!cea_db_payload_len(db))
> - return false;
> -
> - if (cea_db_extended_tag(db) != CEA_EXT_DB_420_VIDEO_DATA)
> - return false;
> + return cea_db_is_extended_tag(db, CEA_EXT_DB_420_VIDEO_DATA);
> +}
>
> - return true;
> +static bool cea_db_is_hdmi_hdr_metadata_block(const void *db)
> +{
> + return (cea_db_is_extended_tag(db, CEA_EXT_DB_HDR_STATIC_METADATA) &&
> + cea_db_payload_len(db) >= 3);
> }
>
> #define for_each_cea_db(cea, i, start, end) \
> @@ -4651,20 +4626,6 @@ static void fixup_detailed_cea_mode_clock(struct drm_display_mode *mode)
> mode->clock = clock;
> }
>
> -static bool cea_db_is_hdmi_hdr_metadata_block(const u8 *db)
> -{
> - if (cea_db_tag(db) != CEA_DB_EXTENDED_TAG)
> - return false;
> -
> - if (db[1] != CEA_EXT_DB_HDR_STATIC_METADATA)
> - return false;
> -
> - if (cea_db_payload_len(db) < 3)
> - return false;
> -
> - return true;
> -}
> -
> static uint8_t eotf_supported(const u8 *edid_ext)
> {
> return edid_ext[2] &
> --
> 2.30.2
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2022-03-23 15:43 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-22 21:40 [Intel-gfx] [RFC 00/19] drm/edid: overhaul CEA data block iteration Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 01/19] drm/edid: add drm_edid_extension_block_count() and drm_edid_size() Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 15:21 ` [Intel-gfx] " Ville Syrjälä
2022-03-22 21:40 ` [Intel-gfx] [RFC 02/19] drm: use " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 15:24 ` [Intel-gfx] " Ville Syrjälä
2022-03-23 15:24 ` Ville Syrjälä
2022-03-22 21:40 ` [Intel-gfx] [RFC 03/19] drm/edid: clean up CEA data block tag definitions Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 15:33 ` [Intel-gfx] " Ville Syrjälä
2022-03-22 21:40 ` [Intel-gfx] [RFC 04/19] drm/edid: add iterator for EDID base and extension blocks Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 05/19] drm/edid: add iterator for CEA data blocks Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 16:05 ` [Intel-gfx] " Ville Syrjälä
2022-03-23 16:05 ` Ville Syrjälä
2022-03-22 21:40 ` [Intel-gfx] [RFC 06/19] drm/edid: clean up cea_db_is_*() functions Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 15:43 ` Ville Syrjälä [this message]
2022-03-23 17:26 ` [Intel-gfx] " Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 07/19] drm/edid: convert add_cea_modes() to use cea db iter Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 08/19] drm/edid: convert drm_edid_to_speaker_allocation() " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 09/19] drm/edid: convert drm_edid_to_sad() " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 16:18 ` [Intel-gfx] " Ville Syrjälä
2022-03-23 16:18 ` Ville Syrjälä
2022-03-22 21:40 ` [Intel-gfx] [RFC 10/19] drm/edid: convert drm_detect_hdmi_monitor() " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 11/19] drm/edid: convert drm_detect_monitor_audio() " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 12/19] drm/edid: convert drm_parse_cea_ext() " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 13/19] drm/edid: convert drm_edid_to_eld() " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 14/19] drm/edid: sunset the old unused cea data block iterators Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 15/19] drm/edid: restore some type safety to cea_db_*() functions Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 16/19] drm/edid: detect basic audio only on CEA extension Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 17/19] drm/edid: detect color formats and CEA revision " Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 18/19] drm/edid: skip CEA extension scan in drm_edid_to_eld() just for CEA rev Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-22 21:40 ` [Intel-gfx] [RFC 19/19] drm/edid: sunset drm_find_cea_extension() Jani Nikula
2022-03-22 21:40 ` Jani Nikula
2022-03-23 16:36 ` [Intel-gfx] " Ville Syrjälä
2022-03-23 16:36 ` Ville Syrjälä
2022-03-22 22:07 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/edid: overhaul CEA data block iteration Patchwork
2022-03-22 22:09 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-03-22 22:13 ` [Intel-gfx] ✗ Fi.CI.DOCS: " Patchwork
2022-03-22 22:37 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-03-23 7:06 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2022-03-23 16:38 ` [Intel-gfx] [RFC 00/19] " Ville Syrjälä
2022-03-23 16:38 ` Ville Syrjälä
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=YjtANOJjTC4Q4T3m@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=jani.nikula@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.