Message ID | 1486389566-28613-3-git-send-email-shashank.sharma@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Shashank, On 06-02-2017 13:59, Shashank Sharma wrote: > From: Thierry Reding <treding@nvidia.com> > > This patch implements a small function that finds if a > given CEA db is hdmi-forum vendor specific data block > or not. > > Signed-off-by: Thierry Reding <treding@nvidia.com> > Signed-off-by: Shashank Sharma <shashank.sharma@intel.com> Reviewed-by: Jose Abreu <joabreu@synopsys.com> Best regards, Jose Miguel Abreu > --- > drivers/gpu/drm/drm_edid.c | 15 +++++++++++++++ > include/linux/hdmi.h | 1 + > 2 files changed, 16 insertions(+) > > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index baa6ccb..96d3e47 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -3239,6 +3239,21 @@ static bool cea_db_is_hdmi_vsdb(const u8 *db) > return hdmi_id == HDMI_IEEE_OUI; > } > > +static bool cea_db_is_hdmi_forum_vsdb(const u8 *db) > +{ > + unsigned int oui; > + > + if (cea_db_tag(db) != VENDOR_BLOCK) > + return false; > + > + if (cea_db_payload_len(db) < 7) > + return false; > + > + oui = db[3] << 16 | db[2] << 8 | db[1]; > + > + return oui == HDMI_FORUM_IEEE_OUI; > +} > + > #define for_each_cea_db(cea, i, start, end) \ > for ((i) = (start); (i) < (end) && (i) + cea_db_payload_len(&(cea)[(i)]) < (end); (i) += cea_db_payload_len(&(cea)[(i)]) + 1) > > diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h > index edbb4fc..d271ff2 100644 > --- a/include/linux/hdmi.h > +++ b/include/linux/hdmi.h > @@ -35,6 +35,7 @@ enum hdmi_infoframe_type { > }; > > #define HDMI_IEEE_OUI 0x000c03 > +#define HDMI_FORUM_IEEE_OUI 0xc45dd8 > #define HDMI_INFOFRAME_HEADER_SIZE 4 > #define HDMI_AVI_INFOFRAME_SIZE 13 > #define HDMI_SPD_INFOFRAME_SIZE 25
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index baa6ccb..96d3e47 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -3239,6 +3239,21 @@ static bool cea_db_is_hdmi_vsdb(const u8 *db) return hdmi_id == HDMI_IEEE_OUI; } +static bool cea_db_is_hdmi_forum_vsdb(const u8 *db) +{ + unsigned int oui; + + if (cea_db_tag(db) != VENDOR_BLOCK) + return false; + + if (cea_db_payload_len(db) < 7) + return false; + + oui = db[3] << 16 | db[2] << 8 | db[1]; + + return oui == HDMI_FORUM_IEEE_OUI; +} + #define for_each_cea_db(cea, i, start, end) \ for ((i) = (start); (i) < (end) && (i) + cea_db_payload_len(&(cea)[(i)]) < (end); (i) += cea_db_payload_len(&(cea)[(i)]) + 1) diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h index edbb4fc..d271ff2 100644 --- a/include/linux/hdmi.h +++ b/include/linux/hdmi.h @@ -35,6 +35,7 @@ enum hdmi_infoframe_type { }; #define HDMI_IEEE_OUI 0x000c03 +#define HDMI_FORUM_IEEE_OUI 0xc45dd8 #define HDMI_INFOFRAME_HEADER_SIZE 4 #define HDMI_AVI_INFOFRAME_SIZE 13 #define HDMI_SPD_INFOFRAME_SIZE 25