Message ID | 1549382617-8951-4-git-send-email-uma.shankar@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add Colorspace connector property interface | expand |
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@intel.com> > --- > 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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx
>-----Original Message----- >From: Ville Syrjälä [mailto:ville.syrjala@linux.intel.com] >Sent: Tuesday, February 5, 2019 10:03 PM >To: Shankar, Uma <uma.shankar@intel.com> >Cc: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org; Syrjala, Ville ><ville.syrjala@intel.com>; Lankhorst, Maarten <maarten.lankhorst@intel.com> >Subject: Re: [Intel-gfx] [v11 3/4] drm: Add colorspace info to AVI Infoframe > >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@intel.com> >> --- >> 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. Ok seems good, will define the values separately and use them here. >> + } >> +} >> + >> +/** >> * 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@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/intel-gfx > >-- >Ville Syrjälä >Intel
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; + } +} + +/** * 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,
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@intel.com> --- 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(-)