On Tue, Feb 05, 2019 at 09:33:36PM +0530, Uma Shankar wrote: > This adds colorspace information to HDMI AVI infoframe. > A helper function is added to program the same. > > v2: Moved this to drm core instead of i915 driver. > > Signed-off-by: Uma Shankar <uma.shankar@xxxxxxxxx> > --- > drivers/gpu/drm/drm_connector.c | 2 +- > drivers/gpu/drm/drm_edid.c | 28 ++++++++++++++++++++++++++++ > include/drm/drm_edid.h | 6 ++++++ > 3 files changed, 35 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c > index 86b368bf..086085d 100644 > --- a/drivers/gpu/drm/drm_connector.c > +++ b/drivers/gpu/drm/drm_connector.c > @@ -862,7 +862,7 @@ int drm_display_info_set_bus_formats(struct drm_display_info *info, > { DRM_MODE_COLORIMETRY_XVYCC_709, "XVYCC_709" }, > /* Colorimetry based on IEC 61966-2-5 */ > { DRM_MODE_COLORIMETRY_OPRGB, "opRGB" }, > - { DRM_MODE_COLORIMETRY_DCI_P3, "DCI-P3" }, > + { DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65, "DCI-P3_RGB_D65" }, > /* DP MSA Colorimetry */ > { DRM_MODE_DP_COLORIMETRY_YCBCR_ITU_601, "YCBCR_ITU_601" }, > { DRM_MODE_DP_COLORIMETRY_YCBCR_ITU_709, "YCBCR_ITU_709" }, > diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c > index 990b190..1fc0978 100644 > --- a/drivers/gpu/drm/drm_edid.c > +++ b/drivers/gpu/drm/drm_edid.c > @@ -4925,6 +4925,34 @@ static bool is_hdmi2_sink(struct drm_connector *connector) > EXPORT_SYMBOL(drm_hdmi_avi_infoframe_from_display_mode); > > /** > + * drm_hdmi_avi_infoframe_colorspace() - fill the HDMI AVI infoframe > + * colorspace information > + * @frame: HDMI AVI infoframe > + * @conn_state: connector state > + */ > +void > +drm_hdmi_avi_infoframe_colorspace(struct hdmi_avi_infoframe *frame, > + const struct drm_connector_state *conn_state) > +{ > + if (conn_state->colorspace == DRM_MODE_COLORIMETRY_DEFAULT) { > + /* Set No Data as default for HDMI */ > + frame->colorimetry = DRM_MODE_COLORIMETRY_NO_DATA; > + } else if (conn_state->colorspace < DRM_MODE_COLORIMETRY_XVYCC_601) { > + frame->colorimetry = conn_state->colorspace; > + } else { > + frame->colorimetry = HDMI_COLORIMETRY_EXTENDED; > + /* > + * Starting from extended list where COLORIMETRY_XV_YCC_601 > + * is the first extended mode and its value is 0 as per HDMI > + * specification. > + * ToDO: Extend to support ACE formats defined in CTA 861.G > + */ > + frame->extended_colorimetry = conn_state->colorspace - > + DRM_MODE_COLORIMETRY_XVYCC_601; IMO if you don't want to make the numbers based on the spec, then this sould become a proper lookup table. > + } > +} > + > +/** > * drm_hdmi_avi_infoframe_quant_range() - fill the HDMI AVI infoframe > * quantization range information > * @frame: HDMI AVI infoframe > diff --git a/include/drm/drm_edid.h b/include/drm/drm_edid.h > index 8dc1a08..9d3b5b9 100644 > --- a/include/drm/drm_edid.h > +++ b/include/drm/drm_edid.h > @@ -331,6 +331,7 @@ struct cea_sad { > > struct drm_encoder; > struct drm_connector; > +struct drm_connector_state; > struct drm_display_mode; > > int drm_edid_to_sad(struct edid *edid, struct cea_sad **sads); > @@ -358,6 +359,11 @@ int drm_av_sync_delay(struct drm_connector *connector, > drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame, > struct drm_connector *connector, > const struct drm_display_mode *mode); > + > +void > +drm_hdmi_avi_infoframe_colorspace(struct hdmi_avi_infoframe *frame, > + const struct drm_connector_state *conn_state); > + > void > drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, > struct drm_connector *connector, > -- > 1.9.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel