Hi Jernej, Thank you for the patch. On Thu, Mar 05, 2020 at 12:25:12AM +0100, Jernej Skrabec wrote: > is_color_space_conversion() is a misnomer. It checks not only if color > space conversion is needed, but also if format conversion is needed. > This is actually desired behaviour because result of this function > determines if CSC block should be enabled or not (CSC block can also do > format conversion). > > In order to clear misunderstandings, let's rework > is_color_space_conversion() to do exactly what is supposed to do and add > another function which will determine if CSC block must be enabled or > not. > > Signed-off-by: Jernej Skrabec <jernej.skrabec@xxxxxxxx> > --- > drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 31 +++++++++++++++-------- > 1 file changed, 21 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > index c8a02e5b5e1b..7724191e0a8b 100644 > --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c > @@ -963,11 +963,14 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > > static int is_color_space_conversion(struct dw_hdmi *hdmi) > { > - return (hdmi->hdmi_data.enc_in_bus_format != > - hdmi->hdmi_data.enc_out_bus_format) || > - (hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_in_bus_format) && > - hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format) && > - hdmi->hdmi_data.rgb_limited_range); > + struct hdmi_data_info *hdmi_data = &hdmi->hdmi_data; > + bool is_input_rgb, is_output_rgb; > + > + is_input_rgb = hdmi_bus_fmt_is_rgb(hdmi_data->enc_in_bus_format); > + is_output_rgb = hdmi_bus_fmt_is_rgb(hdmi_data->enc_out_bus_format); > + > + return (is_input_rgb != is_output_rgb) || > + (is_input_rgb && is_output_rgb && hdmi_data->rgb_limited_range); > } > > static int is_color_space_decimation(struct dw_hdmi *hdmi) > @@ -994,6 +997,13 @@ static int is_color_space_interpolation(struct dw_hdmi *hdmi) > return 0; > } > > +static bool is_conversion_needed(struct dw_hdmi *hdmi) Maybe is_csc_needed ? Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > +{ > + return is_color_space_conversion(hdmi) || > + is_color_space_decimation(hdmi) || > + is_color_space_interpolation(hdmi); > +} > + > static void dw_hdmi_update_csc_coeffs(struct dw_hdmi *hdmi) > { > const u16 (*csc_coeff)[3][4] = &csc_coeff_default; > @@ -2014,18 +2024,19 @@ static void dw_hdmi_enable_video_path(struct dw_hdmi *hdmi) > hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS); > > /* Enable csc path */ > - if (is_color_space_conversion(hdmi)) { > + if (is_conversion_needed(hdmi)) { > hdmi->mc_clkdis &= ~HDMI_MC_CLKDIS_CSCCLK_DISABLE; > hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS); > - } > > - /* Enable color space conversion if needed */ > - if (is_color_space_conversion(hdmi)) > hdmi_writeb(hdmi, HDMI_MC_FLOWCTRL_FEED_THROUGH_OFF_CSC_IN_PATH, > HDMI_MC_FLOWCTRL); > - else > + } else { > + hdmi->mc_clkdis |= HDMI_MC_CLKDIS_CSCCLK_DISABLE; > + hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS); > + > hdmi_writeb(hdmi, HDMI_MC_FLOWCTRL_FEED_THROUGH_OFF_CSC_BYPASS, > HDMI_MC_FLOWCTRL); > + } > } > > /* Workaround to clear the overflow condition */ -- Regards, Laurent Pinchart _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel