From mboxrd@z Thu Jan 1 00:00:00 1970 From: laurent.pinchart@ideasonboard.com (Laurent Pinchart) Date: Thu, 02 Mar 2017 17:45:09 +0200 Subject: [PATCH v2 1/2] drm: bridge: dw-hdmi: Take input format from plat_data In-Reply-To: <1488468572-31971-2-git-send-email-narmstrong@baylibre.com> References: <1488468572-31971-1-git-send-email-narmstrong@baylibre.com> <1488468572-31971-2-git-send-email-narmstrong@baylibre.com> Message-ID: <2768953.c6tz7qsbuQ@avalon> To: linus-amlogic@lists.infradead.org List-Id: linus-amlogic.lists.infradead.org Hi Neil, Thank you for the patch. On Thursday 02 Mar 2017 16:29:31 Neil Armstrong wrote: > Some display pipelines can only provide non-RBG input pixels to the HDMI TX > Controller, this patch takes the pixel format from the plat_data if > provided. > > Signed-off-by: Neil Armstrong > --- > drivers/gpu/drm/bridge/dw-hdmi.c | 59 ++++++++++++++++++------------------- > include/drm/bridge/dw_hdmi.h | 9 ++++++ > 2 files changed, 39 insertions(+), 29 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c > b/drivers/gpu/drm/bridge/dw-hdmi.c index 026a0dc..653ecd7 100644 > --- a/drivers/gpu/drm/bridge/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/dw-hdmi.c > @@ -35,12 +35,6 @@ > > #define HDMI_EDID_LEN 512 > > -#define RGB 0 > -#define YCBCR444 1 > -#define YCBCR422_16BITS 2 > -#define YCBCR422_8BITS 3 > -#define XVYCC444 4 > - > enum hdmi_datamap { > RGB444_8B = 0x01, > RGB444_10B = 0x03, > @@ -94,8 +88,8 @@ struct hdmi_vmode { > }; > > struct hdmi_data_info { > - unsigned int enc_in_format; > - unsigned int enc_out_format; > + enum dw_hdmi_color_enc_format enc_in_format; > + enum dw_hdmi_color_enc_format enc_out_format; > unsigned int enc_color_depth; > unsigned int colorimetry; > unsigned int pix_repet_factor; > @@ -569,7 +563,7 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > int color_format = 0; > u8 val; > > - if (hdmi->hdmi_data.enc_in_format == RGB) { > + if (hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_RGB) { > if (hdmi->hdmi_data.enc_color_depth == 8) > color_format = 0x01; > else if (hdmi->hdmi_data.enc_color_depth == 10) > @@ -580,7 +574,7 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > color_format = 0x07; > else > return; > - } else if (hdmi->hdmi_data.enc_in_format == YCBCR444) { > + } else if (hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_YCBCR444) { > if (hdmi->hdmi_data.enc_color_depth == 8) > color_format = 0x09; > else if (hdmi->hdmi_data.enc_color_depth == 10) > @@ -591,7 +585,8 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > color_format = 0x0F; > else > return; > - } else if (hdmi->hdmi_data.enc_in_format == YCBCR422_8BITS) { > + } else if (hdmi->hdmi_data.enc_in_format == > + DW_HDMI_ENC_FMT_YCBCR422_8BITS) { > if (hdmi->hdmi_data.enc_color_depth == 8) > color_format = 0x16; > else if (hdmi->hdmi_data.enc_color_depth == 10) > @@ -627,20 +622,20 @@ static int is_color_space_conversion(struct dw_hdmi > *hdmi) > > static int is_color_space_decimation(struct dw_hdmi *hdmi) > { > - if (hdmi->hdmi_data.enc_out_format != YCBCR422_8BITS) > + if (hdmi->hdmi_data.enc_out_format != DW_HDMI_ENC_FMT_YCBCR422_8BITS) > return 0; > - if (hdmi->hdmi_data.enc_in_format == RGB || > - hdmi->hdmi_data.enc_in_format == YCBCR444) > + if (hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_RGB || > + hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_YCBCR444) > return 1; > return 0; > } > > static int is_color_space_interpolation(struct dw_hdmi *hdmi) > { > - if (hdmi->hdmi_data.enc_in_format != YCBCR422_8BITS) > + if (hdmi->hdmi_data.enc_in_format != DW_HDMI_ENC_FMT_YCBCR422_8BITS) > return 0; > - if (hdmi->hdmi_data.enc_out_format == RGB || > - hdmi->hdmi_data.enc_out_format == YCBCR444) > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_RGB || > + hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_YCBCR444) > return 1; > return 0; > } > @@ -652,13 +647,14 @@ static void dw_hdmi_update_csc_coeffs(struct dw_hdmi > *hdmi) u32 csc_scale = 1; > > if (is_color_space_conversion(hdmi)) { > - if (hdmi->hdmi_data.enc_out_format == RGB) { > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_RGB) { > if (hdmi->hdmi_data.colorimetry == > HDMI_COLORIMETRY_ITU_601) > csc_coeff = &csc_coeff_rgb_out_eitu601; > else > csc_coeff = &csc_coeff_rgb_out_eitu709; > - } else if (hdmi->hdmi_data.enc_in_format == RGB) { > + } else if (hdmi->hdmi_data.enc_in_format == > + DW_HDMI_ENC_FMT_RGB) { > if (hdmi->hdmi_data.colorimetry == > HDMI_COLORIMETRY_ITU_601) > csc_coeff = &csc_coeff_rgb_in_eitu601; > @@ -730,8 +726,8 @@ static void hdmi_video_packetize(struct dw_hdmi *hdmi) > struct hdmi_data_info *hdmi_data = &hdmi->hdmi_data; > u8 val, vp_conf; > > - if (hdmi_data->enc_out_format == RGB || > - hdmi_data->enc_out_format == YCBCR444) { > + if (hdmi_data->enc_out_format == DW_HDMI_ENC_FMT_RGB || > + hdmi_data->enc_out_format == DW_HDMI_ENC_FMT_YCBCR444) { > if (!hdmi_data->enc_color_depth) { > output_select = HDMI_VP_CONF_OUTPUT_SELECTOR_BYPASS; > } else if (hdmi_data->enc_color_depth == 8) { > @@ -746,7 +742,8 @@ static void hdmi_video_packetize(struct dw_hdmi *hdmi) > } else { > return; > } > - } else if (hdmi_data->enc_out_format == YCBCR422_8BITS) { > + } else if (hdmi_data->enc_out_format == > + DW_HDMI_ENC_FMT_YCBCR422_8BITS) { > if (!hdmi_data->enc_color_depth || > hdmi_data->enc_color_depth == 8) > remap_size = HDMI_VP_REMAP_YCC422_16bit; > @@ -1138,15 +1135,16 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, > struct drm_display_mode *mode) /* Initialise info frame from DRM mode */ > drm_hdmi_avi_infoframe_from_display_mode(&frame, mode); > > - if (hdmi->hdmi_data.enc_out_format == YCBCR444) > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_YCBCR444) > frame.colorspace = HDMI_COLORSPACE_YUV444; > - else if (hdmi->hdmi_data.enc_out_format == YCBCR422_8BITS) > + else if (hdmi->hdmi_data.enc_out_format == > + DW_HDMI_ENC_FMT_YCBCR422_8BITS) > frame.colorspace = HDMI_COLORSPACE_YUV422; > else > frame.colorspace = HDMI_COLORSPACE_RGB; > > /* Set up colorimetry */ > - if (hdmi->hdmi_data.enc_out_format == XVYCC444) { > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_XVYCC444) { > frame.colorimetry = HDMI_COLORIMETRY_EXTENDED; > if (hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_601) > frame.extended_colorimetry = > @@ -1154,7 +1152,7 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, > struct drm_display_mode *mode) else /*hdmi->hdmi_data.colorimetry == > HDMI_COLORIMETRY_ITU_709*/ frame.extended_colorimetry = > HDMI_EXTENDED_COLORIMETRY_XV_YCC_709; > - } else if (hdmi->hdmi_data.enc_out_format != RGB) { > + } else if (hdmi->hdmi_data.enc_out_format != DW_HDMI_ENC_FMT_RGB) { > frame.colorimetry = hdmi->hdmi_data.colorimetry; > frame.extended_colorimetry = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601; > } else { /* Carries no data */ > @@ -1443,10 +1441,13 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, > struct drm_display_mode *mode) > hdmi->hdmi_data.video_mode.mpixelrepetitionoutput = 0; > hdmi->hdmi_data.video_mode.mpixelrepetitioninput = 0; > > - /* TODO: Get input format from IPU (via FB driver interface) */ > - hdmi->hdmi_data.enc_in_format = RGB; > + /* Get input format from plat data or fallback to RGB */ > + if (hdmi->plat_data->input_fmt >= 0) > + hdmi->hdmi_data.enc_in_format = hdmi->plat_data->input_fmt; > + else > + hdmi->hdmi_data.enc_in_format = DW_HDMI_ENC_FMT_RGB; > > - hdmi->hdmi_data.enc_out_format = RGB; > + hdmi->hdmi_data.enc_out_format = DW_HDMI_ENC_FMT_RGB; > > hdmi->hdmi_data.enc_color_depth = 8; > hdmi->hdmi_data.pix_repet_factor = 0; > diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h > index bcceee8..8c0cc13 100644 > --- a/include/drm/bridge/dw_hdmi.h > +++ b/include/drm/bridge/dw_hdmi.h > @@ -21,6 +21,14 @@ enum { > DW_HDMI_RES_MAX, > }; > > +enum dw_hdmi_color_enc_format { > + DW_HDMI_ENC_FMT_RGB = 0, > + DW_HDMI_ENC_FMT_YCBCR444, > + DW_HDMI_ENC_FMT_YCBCR422_16BITS, > + DW_HDMI_ENC_FMT_YCBCR422_8BITS, > + DW_HDMI_ENC_FMT_XVYCC444, > +}; > + > enum dw_hdmi_phy_type { > DW_HDMI_PHY_DWC_HDMI_TX_PHY = 0x00, > DW_HDMI_PHY_DWC_MHL_PHY_HEAC = 0xb2, > @@ -62,6 +70,7 @@ struct dw_hdmi_plat_data { > struct regmap *regm; > enum drm_mode_status (*mode_valid)(struct drm_connector *connector, > struct drm_display_mode *mode); > + enum dw_hdmi_color_enc_format input_fmt; As reported before, I think we should use a combination of media bus format and color space information instead of a custom enum. Ideally this should also be queried at runtime, but that could be done in a second step. > > /* Vendor PHY support */ > const struct dw_hdmi_phy_ops *phy_ops; -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 1/2] drm: bridge: dw-hdmi: Take input format from plat_data Date: Thu, 02 Mar 2017 17:45:09 +0200 Message-ID: <2768953.c6tz7qsbuQ@avalon> References: <1488468572-31971-1-git-send-email-narmstrong@baylibre.com> <1488468572-31971-2-git-send-email-narmstrong@baylibre.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [185.26.127.97]) by gabe.freedesktop.org (Postfix) with ESMTPS id D2B216EBA0 for ; Thu, 2 Mar 2017 15:44:35 +0000 (UTC) In-Reply-To: <1488468572-31971-2-git-send-email-narmstrong@baylibre.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Neil Armstrong Cc: Jose.Abreu@synopsys.com, laurent.pinchart+renesas@ideasonboard.com, kieran.bingham@ideasonboard.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-amlogic@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgTmVpbCwKClRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgoKT24gVGh1cnNkYXkgMDIgTWFyIDIw MTcgMTY6Mjk6MzEgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4gU29tZSBkaXNwbGF5IHBpcGVsaW5l cyBjYW4gb25seSBwcm92aWRlIG5vbi1SQkcgaW5wdXQgcGl4ZWxzIHRvIHRoZSBIRE1JIFRYCj4g Q29udHJvbGxlciwgdGhpcyBwYXRjaCB0YWtlcyB0aGUgcGl4ZWwgZm9ybWF0IGZyb20gdGhlIHBs YXRfZGF0YSBpZgo+IHByb3ZpZGVkLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE5laWwgQXJtc3Ryb25n IDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9kdy1oZG1pLmMgfCA1OSArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCj4g IGluY2x1ZGUvZHJtL2JyaWRnZS9kd19oZG1pLmggICAgIHwgIDkgKysrKysrCj4gIDIgZmlsZXMg Y2hhbmdlZCwgMzkgaW5zZXJ0aW9ucygrKSwgMjkgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvZHctaGRtaS5jCj4gYi9kcml2ZXJzL2dwdS9kcm0v YnJpZGdlL2R3LWhkbWkuYyBpbmRleCAwMjZhMGRjLi42NTNlY2Q3IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvZHctaGRtaS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9kdy1oZG1pLmMKPiBAQCAtMzUsMTIgKzM1LDYgQEAKPiAKPiAgI2RlZmluZSBIRE1JX0VE SURfTEVOCQk1MTIKPiAKPiAtI2RlZmluZSBSR0IJCQkwCj4gLSNkZWZpbmUgWUNCQ1I0NDQJCTEK PiAtI2RlZmluZSBZQ0JDUjQyMl8xNkJJVFMJCTIKPiAtI2RlZmluZSBZQ0JDUjQyMl84QklUUwkJ Mwo+IC0jZGVmaW5lIFhWWUNDNDQ0CQk0Cj4gLQo+ICBlbnVtIGhkbWlfZGF0YW1hcCB7Cj4gIAlS R0I0NDRfOEIgPSAweDAxLAo+ICAJUkdCNDQ0XzEwQiA9IDB4MDMsCj4gQEAgLTk0LDggKzg4LDgg QEAgc3RydWN0IGhkbWlfdm1vZGUgewo+ICB9Owo+IAo+ICBzdHJ1Y3QgaGRtaV9kYXRhX2luZm8g ewo+IC0JdW5zaWduZWQgaW50IGVuY19pbl9mb3JtYXQ7Cj4gLQl1bnNpZ25lZCBpbnQgZW5jX291 dF9mb3JtYXQ7Cj4gKwllbnVtIGR3X2hkbWlfY29sb3JfZW5jX2Zvcm1hdCBlbmNfaW5fZm9ybWF0 Owo+ICsJZW51bSBkd19oZG1pX2NvbG9yX2VuY19mb3JtYXQgZW5jX291dF9mb3JtYXQ7Cj4gIAl1 bnNpZ25lZCBpbnQgZW5jX2NvbG9yX2RlcHRoOwo+ICAJdW5zaWduZWQgaW50IGNvbG9yaW1ldHJ5 Owo+ICAJdW5zaWduZWQgaW50IHBpeF9yZXBldF9mYWN0b3I7Cj4gQEAgLTU2OSw3ICs1NjMsNyBA QCBzdGF0aWMgdm9pZCBoZG1pX3ZpZGVvX3NhbXBsZShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSkKPiAg CWludCBjb2xvcl9mb3JtYXQgPSAwOwo+ICAJdTggdmFsOwo+IAo+IC0JaWYgKGhkbWktPmhkbWlf ZGF0YS5lbmNfaW5fZm9ybWF0ID09IFJHQikgewo+ICsJaWYgKGhkbWktPmhkbWlfZGF0YS5lbmNf aW5fZm9ybWF0ID09IERXX0hETUlfRU5DX0ZNVF9SR0IpIHsKPiAgCQlpZiAoaGRtaS0+aGRtaV9k YXRhLmVuY19jb2xvcl9kZXB0aCA9PSA4KQo+ICAJCQljb2xvcl9mb3JtYXQgPSAweDAxOwo+ICAJ CWVsc2UgaWYgKGhkbWktPmhkbWlfZGF0YS5lbmNfY29sb3JfZGVwdGggPT0gMTApCj4gQEAgLTU4 MCw3ICs1NzQsNyBAQCBzdGF0aWMgdm9pZCBoZG1pX3ZpZGVvX3NhbXBsZShzdHJ1Y3QgZHdfaGRt aSAqaGRtaSkKPiAgCQkJY29sb3JfZm9ybWF0ID0gMHgwNzsKPiAgCQllbHNlCj4gIAkJCXJldHVy bjsKPiAtCX0gZWxzZSBpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19pbl9mb3JtYXQgPT0gWUNCQ1I0 NDQpIHsKPiArCX0gZWxzZSBpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19pbl9mb3JtYXQgPT0gRFdf SERNSV9FTkNfRk1UX1lDQkNSNDQ0KSAKewo+ICAJCWlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX2Nv bG9yX2RlcHRoID09IDgpCj4gIAkJCWNvbG9yX2Zvcm1hdCA9IDB4MDk7Cj4gIAkJZWxzZSBpZiAo aGRtaS0+aGRtaV9kYXRhLmVuY19jb2xvcl9kZXB0aCA9PSAxMCkKPiBAQCAtNTkxLDcgKzU4NSw4 IEBAIHN0YXRpYyB2b2lkIGhkbWlfdmlkZW9fc2FtcGxlKHN0cnVjdCBkd19oZG1pICpoZG1pKQo+ ICAJCQljb2xvcl9mb3JtYXQgPSAweDBGOwo+ICAJCWVsc2UKPiAgCQkJcmV0dXJuOwo+IC0JfSBl bHNlIGlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9PSBZQ0JDUjQyMl84QklUUykg ewo+ICsJfSBlbHNlIGlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9PQo+ICsJCQkJ CURXX0hETUlfRU5DX0ZNVF9ZQ0JDUjQyMl84QklUUykgewo+ICAJCWlmIChoZG1pLT5oZG1pX2Rh dGEuZW5jX2NvbG9yX2RlcHRoID09IDgpCj4gIAkJCWNvbG9yX2Zvcm1hdCA9IDB4MTY7Cj4gIAkJ ZWxzZSBpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19jb2xvcl9kZXB0aCA9PSAxMCkKPiBAQCAtNjI3 LDIwICs2MjIsMjAgQEAgc3RhdGljIGludCBpc19jb2xvcl9zcGFjZV9jb252ZXJzaW9uKHN0cnVj dCBkd19oZG1pCj4gKmhkbWkpCj4gCj4gIHN0YXRpYyBpbnQgaXNfY29sb3Jfc3BhY2VfZGVjaW1h dGlvbihzdHJ1Y3QgZHdfaGRtaSAqaGRtaSkKPiAgewo+IC0JaWYgKGhkbWktPmhkbWlfZGF0YS5l bmNfb3V0X2Zvcm1hdCAhPSBZQ0JDUjQyMl84QklUUykKPiArCWlmIChoZG1pLT5oZG1pX2RhdGEu ZW5jX291dF9mb3JtYXQgIT0gRFdfSERNSV9FTkNfRk1UX1lDQkNSNDIyXzhCSVRTKQo+ICAJCXJl dHVybiAwOwo+IC0JaWYgKGhkbWktPmhkbWlfZGF0YS5lbmNfaW5fZm9ybWF0ID09IFJHQiB8fAo+ IC0JICAgIGhkbWktPmhkbWlfZGF0YS5lbmNfaW5fZm9ybWF0ID09IFlDQkNSNDQ0KQo+ICsJaWYg KGhkbWktPmhkbWlfZGF0YS5lbmNfaW5fZm9ybWF0ID09IERXX0hETUlfRU5DX0ZNVF9SR0IgfHwK PiArCSAgICBoZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9PSBEV19IRE1JX0VOQ19GTVRf WUNCQ1I0NDQpCj4gIAkJcmV0dXJuIDE7Cj4gIAlyZXR1cm4gMDsKPiAgfQo+IAo+ICBzdGF0aWMg aW50IGlzX2NvbG9yX3NwYWNlX2ludGVycG9sYXRpb24oc3RydWN0IGR3X2hkbWkgKmhkbWkpCj4g IHsKPiAtCWlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCAhPSBZQ0JDUjQyMl84QklU UykKPiArCWlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCAhPSBEV19IRE1JX0VOQ19G TVRfWUNCQ1I0MjJfOEJJVFMpCj4gIAkJcmV0dXJuIDA7Cj4gLQlpZiAoaGRtaS0+aGRtaV9kYXRh LmVuY19vdXRfZm9ybWF0ID09IFJHQiB8fAo+IC0JICAgIGhkbWktPmhkbWlfZGF0YS5lbmNfb3V0 X2Zvcm1hdCA9PSBZQ0JDUjQ0NCkKPiArCWlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX291dF9mb3Jt YXQgPT0gRFdfSERNSV9FTkNfRk1UX1JHQiB8fAo+ICsJICAgIGhkbWktPmhkbWlfZGF0YS5lbmNf b3V0X2Zvcm1hdCA9PSBEV19IRE1JX0VOQ19GTVRfWUNCQ1I0NDQpCj4gIAkJcmV0dXJuIDE7Cj4g IAlyZXR1cm4gMDsKPiAgfQo+IEBAIC02NTIsMTMgKzY0NywxNCBAQCBzdGF0aWMgdm9pZCBkd19o ZG1pX3VwZGF0ZV9jc2NfY29lZmZzKHN0cnVjdCBkd19oZG1pCj4gKmhkbWkpIHUzMiBjc2Nfc2Nh bGUgPSAxOwo+IAo+ICAJaWYgKGlzX2NvbG9yX3NwYWNlX2NvbnZlcnNpb24oaGRtaSkpIHsKPiAt CQlpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19vdXRfZm9ybWF0ID09IFJHQikgewo+ICsJCWlmICho ZG1pLT5oZG1pX2RhdGEuZW5jX291dF9mb3JtYXQgPT0gRFdfSERNSV9FTkNfRk1UX1JHQikgewo+ ICAJCQlpZiAoaGRtaS0+aGRtaV9kYXRhLmNvbG9yaW1ldHJ5ID09Cj4gIAkJCQkJSERNSV9DT0xP UklNRVRSWV9JVFVfNjAxKQo+ICAJCQkJY3NjX2NvZWZmID0gJmNzY19jb2VmZl9yZ2Jfb3V0X2Vp dHU2MDE7Cj4gIAkJCWVsc2UKPiAgCQkJCWNzY19jb2VmZiA9ICZjc2NfY29lZmZfcmdiX291dF9l aXR1NzA5Owo+IC0JCX0gZWxzZSBpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19pbl9mb3JtYXQgPT0g UkdCKSB7Cj4gKwkJfSBlbHNlIGlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9PQo+ ICsJCQkJCURXX0hETUlfRU5DX0ZNVF9SR0IpIHsKPiAgCQkJaWYgKGhkbWktPmhkbWlfZGF0YS5j b2xvcmltZXRyeSA9PQo+ICAJCQkJCUhETUlfQ09MT1JJTUVUUllfSVRVXzYwMSkKPiAgCQkJCWNz Y19jb2VmZiA9ICZjc2NfY29lZmZfcmdiX2luX2VpdHU2MDE7Cj4gQEAgLTczMCw4ICs3MjYsOCBA QCBzdGF0aWMgdm9pZCBoZG1pX3ZpZGVvX3BhY2tldGl6ZShzdHJ1Y3QgZHdfaGRtaSAqaGRtaSkK PiAgCXN0cnVjdCBoZG1pX2RhdGFfaW5mbyAqaGRtaV9kYXRhID0gJmhkbWktPmhkbWlfZGF0YTsK PiAgCXU4IHZhbCwgdnBfY29uZjsKPiAKPiAtCWlmIChoZG1pX2RhdGEtPmVuY19vdXRfZm9ybWF0 ID09IFJHQiB8fAo+IC0JICAgIGhkbWlfZGF0YS0+ZW5jX291dF9mb3JtYXQgPT0gWUNCQ1I0NDQp IHsKPiArCWlmIChoZG1pX2RhdGEtPmVuY19vdXRfZm9ybWF0ID09IERXX0hETUlfRU5DX0ZNVF9S R0IgfHwKPiArCSAgICBoZG1pX2RhdGEtPmVuY19vdXRfZm9ybWF0ID09IERXX0hETUlfRU5DX0ZN VF9ZQ0JDUjQ0NCkgewo+ICAJCWlmICghaGRtaV9kYXRhLT5lbmNfY29sb3JfZGVwdGgpIHsKPiAg CQkJb3V0cHV0X3NlbGVjdCA9IEhETUlfVlBfQ09ORl9PVVRQVVRfU0VMRUNUT1JfQllQQVNTOwo+ ICAJCX0gZWxzZSBpZiAoaGRtaV9kYXRhLT5lbmNfY29sb3JfZGVwdGggPT0gOCkgewo+IEBAIC03 NDYsNyArNzQyLDggQEAgc3RhdGljIHZvaWQgaGRtaV92aWRlb19wYWNrZXRpemUoc3RydWN0IGR3 X2hkbWkgKmhkbWkpCj4gIAkJfSBlbHNlIHsKPiAgCQkJcmV0dXJuOwo+ICAJCX0KPiAtCX0gZWxz ZSBpZiAoaGRtaV9kYXRhLT5lbmNfb3V0X2Zvcm1hdCA9PSBZQ0JDUjQyMl84QklUUykgewo+ICsJ fSBlbHNlIGlmIChoZG1pX2RhdGEtPmVuY19vdXRfZm9ybWF0ID09Cj4gKwkJCQkJRFdfSERNSV9F TkNfRk1UX1lDQkNSNDIyXzhCSVRTKSB7Cj4gIAkJaWYgKCFoZG1pX2RhdGEtPmVuY19jb2xvcl9k ZXB0aCB8fAo+ICAJCSAgICBoZG1pX2RhdGEtPmVuY19jb2xvcl9kZXB0aCA9PSA4KQo+ICAJCQly ZW1hcF9zaXplID0gSERNSV9WUF9SRU1BUF9ZQ0M0MjJfMTZiaXQ7Cj4gQEAgLTExMzgsMTUgKzEx MzUsMTYgQEAgc3RhdGljIHZvaWQgaGRtaV9jb25maWdfQVZJKHN0cnVjdCBkd19oZG1pICpoZG1p LAo+IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKSAvKiBJbml0aWFsaXNlIGluZm8gZnJh bWUgZnJvbSBEUk0gbW9kZSAqLwo+ICAJZHJtX2hkbWlfYXZpX2luZm9mcmFtZV9mcm9tX2Rpc3Bs YXlfbW9kZSgmZnJhbWUsIG1vZGUpOwo+IAo+IC0JaWYgKGhkbWktPmhkbWlfZGF0YS5lbmNfb3V0 X2Zvcm1hdCA9PSBZQ0JDUjQ0NCkKPiArCWlmIChoZG1pLT5oZG1pX2RhdGEuZW5jX291dF9mb3Jt YXQgPT0gRFdfSERNSV9FTkNfRk1UX1lDQkNSNDQ0KQo+ICAJCWZyYW1lLmNvbG9yc3BhY2UgPSBI RE1JX0NPTE9SU1BBQ0VfWVVWNDQ0Owo+IC0JZWxzZSBpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19v dXRfZm9ybWF0ID09IFlDQkNSNDIyXzhCSVRTKQo+ICsJZWxzZSBpZiAoaGRtaS0+aGRtaV9kYXRh LmVuY19vdXRfZm9ybWF0ID09Cj4gKwkJCQkJRFdfSERNSV9FTkNfRk1UX1lDQkNSNDIyXzhCSVRT KQo+ICAJCWZyYW1lLmNvbG9yc3BhY2UgPSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDIyOwo+ICAJZWxz ZQo+ICAJCWZyYW1lLmNvbG9yc3BhY2UgPSBIRE1JX0NPTE9SU1BBQ0VfUkdCOwo+IAo+ICAJLyog U2V0IHVwIGNvbG9yaW1ldHJ5ICovCj4gLQlpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19vdXRfZm9y bWF0ID09IFhWWUNDNDQ0KSB7Cj4gKwlpZiAoaGRtaS0+aGRtaV9kYXRhLmVuY19vdXRfZm9ybWF0 ID09IERXX0hETUlfRU5DX0ZNVF9YVllDQzQ0NCkgewo+ICAJCWZyYW1lLmNvbG9yaW1ldHJ5ID0g SERNSV9DT0xPUklNRVRSWV9FWFRFTkRFRDsKPiAgCQlpZiAoaGRtaS0+aGRtaV9kYXRhLmNvbG9y aW1ldHJ5ID09IEhETUlfQ09MT1JJTUVUUllfSVRVXzYwMSkKPiAgCQkJZnJhbWUuZXh0ZW5kZWRf Y29sb3JpbWV0cnkgPQo+IEBAIC0xMTU0LDcgKzExNTIsNyBAQCBzdGF0aWMgdm9pZCBoZG1pX2Nv bmZpZ19BVkkoc3RydWN0IGR3X2hkbWkgKmhkbWksCj4gc3RydWN0IGRybV9kaXNwbGF5X21vZGUg Km1vZGUpIGVsc2UgLypoZG1pLT5oZG1pX2RhdGEuY29sb3JpbWV0cnkgPT0KPiBIRE1JX0NPTE9S SU1FVFJZX0lUVV83MDkqLyBmcmFtZS5leHRlbmRlZF9jb2xvcmltZXRyeSA9Cj4gIAkJCQlIRE1J X0VYVEVOREVEX0NPTE9SSU1FVFJZX1hWX1lDQ183MDk7Cj4gLQl9IGVsc2UgaWYgKGhkbWktPmhk bWlfZGF0YS5lbmNfb3V0X2Zvcm1hdCAhPSBSR0IpIHsKPiArCX0gZWxzZSBpZiAoaGRtaS0+aGRt aV9kYXRhLmVuY19vdXRfZm9ybWF0ICE9IERXX0hETUlfRU5DX0ZNVF9SR0IpIHsKPiAgCQlmcmFt ZS5jb2xvcmltZXRyeSA9IGhkbWktPmhkbWlfZGF0YS5jb2xvcmltZXRyeTsKPiAgCQlmcmFtZS5l eHRlbmRlZF9jb2xvcmltZXRyeSA9IApIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX1hWX1lDQ182 MDE7Cj4gIAl9IGVsc2UgeyAvKiBDYXJyaWVzIG5vIGRhdGEgKi8KPiBAQCAtMTQ0MywxMCArMTQ0 MSwxMyBAQCBzdGF0aWMgaW50IGR3X2hkbWlfc2V0dXAoc3RydWN0IGR3X2hkbWkgKmhkbWksCj4g c3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCj4gaGRtaS0+aGRtaV9kYXRhLnZpZGVvX21v ZGUubXBpeGVscmVwZXRpdGlvbm91dHB1dCA9IDA7Cj4gIAloZG1pLT5oZG1pX2RhdGEudmlkZW9f bW9kZS5tcGl4ZWxyZXBldGl0aW9uaW5wdXQgPSAwOwo+IAo+IC0JLyogVE9ETzogR2V0IGlucHV0 IGZvcm1hdCBmcm9tIElQVSAodmlhIEZCIGRyaXZlciBpbnRlcmZhY2UpICovCj4gLQloZG1pLT5o ZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9IFJHQjsKPiArCS8qIEdldCBpbnB1dCBmb3JtYXQgZnJv bSBwbGF0IGRhdGEgb3IgZmFsbGJhY2sgdG8gUkdCICovCj4gKwlpZiAoaGRtaS0+cGxhdF9kYXRh LT5pbnB1dF9mbXQgPj0gMCkKPiArCQloZG1pLT5oZG1pX2RhdGEuZW5jX2luX2Zvcm1hdCA9IGhk bWktPnBsYXRfZGF0YS0+aW5wdXRfZm10Owo+ICsJZWxzZQo+ICsJCWhkbWktPmhkbWlfZGF0YS5l bmNfaW5fZm9ybWF0ID0gRFdfSERNSV9FTkNfRk1UX1JHQjsKPiAKPiAtCWhkbWktPmhkbWlfZGF0 YS5lbmNfb3V0X2Zvcm1hdCA9IFJHQjsKPiArCWhkbWktPmhkbWlfZGF0YS5lbmNfb3V0X2Zvcm1h dCA9IERXX0hETUlfRU5DX0ZNVF9SR0I7Cj4gCj4gIAloZG1pLT5oZG1pX2RhdGEuZW5jX2NvbG9y X2RlcHRoID0gODsKPiAgCWhkbWktPmhkbWlfZGF0YS5waXhfcmVwZXRfZmFjdG9yID0gMDsKPiBk aWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vYnJpZGdlL2R3X2hkbWkuaCBiL2luY2x1ZGUvZHJtL2Jy aWRnZS9kd19oZG1pLmgKPiBpbmRleCBiY2NlZWU4Li44YzBjYzEzIDEwMDY0NAo+IC0tLSBhL2lu Y2x1ZGUvZHJtL2JyaWRnZS9kd19oZG1pLmgKPiArKysgYi9pbmNsdWRlL2RybS9icmlkZ2UvZHdf aGRtaS5oCj4gQEAgLTIxLDYgKzIxLDE0IEBAIGVudW0gewo+ICAJRFdfSERNSV9SRVNfTUFYLAo+ ICB9Owo+IAo+ICtlbnVtIGR3X2hkbWlfY29sb3JfZW5jX2Zvcm1hdCB7Cj4gKwlEV19IRE1JX0VO Q19GTVRfUkdCID0gMCwKPiArCURXX0hETUlfRU5DX0ZNVF9ZQ0JDUjQ0NCwKPiArCURXX0hETUlf RU5DX0ZNVF9ZQ0JDUjQyMl8xNkJJVFMsCj4gKwlEV19IRE1JX0VOQ19GTVRfWUNCQ1I0MjJfOEJJ VFMsCj4gKwlEV19IRE1JX0VOQ19GTVRfWFZZQ0M0NDQsCj4gK307Cj4gKwo+ICBlbnVtIGR3X2hk bWlfcGh5X3R5cGUgewo+ICAJRFdfSERNSV9QSFlfRFdDX0hETUlfVFhfUEhZID0gMHgwMCwKPiAg CURXX0hETUlfUEhZX0RXQ19NSExfUEhZX0hFQUMgPSAweGIyLAo+IEBAIC02Miw2ICs3MCw3IEBA IHN0cnVjdCBkd19oZG1pX3BsYXRfZGF0YSB7Cj4gIAlzdHJ1Y3QgcmVnbWFwICpyZWdtOwo+ICAJ ZW51bSBkcm1fbW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAq Y29ubmVjdG9yLAo+ICAJCQkJCSAgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKPiAr CWVudW0gZHdfaGRtaV9jb2xvcl9lbmNfZm9ybWF0IGlucHV0X2ZtdDsKCkFzIHJlcG9ydGVkIGJl Zm9yZSwgSSB0aGluayB3ZSBzaG91bGQgdXNlIGEgY29tYmluYXRpb24gb2YgbWVkaWEgYnVzIGZv cm1hdCAKYW5kIGNvbG9yIHNwYWNlIGluZm9ybWF0aW9uIGluc3RlYWQgb2YgYSBjdXN0b20gZW51 bS4gSWRlYWxseSB0aGlzIHNob3VsZCBhbHNvIApiZSBxdWVyaWVkIGF0IHJ1bnRpbWUsIGJ1dCB0 aGF0IGNvdWxkIGJlIGRvbmUgaW4gYSBzZWNvbmQgc3RlcC4KCj4gCj4gIAkvKiBWZW5kb3IgUEhZ IHN1cHBvcnQgKi8KPiAgCWNvbnN0IHN0cnVjdCBkd19oZG1pX3BoeV9vcHMgKnBoeV9vcHM7Cgot LSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751485AbdCBWTO (ORCPT ); Thu, 2 Mar 2017 17:19:14 -0500 Received: from galahad.ideasonboard.com ([185.26.127.97]:34847 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751229AbdCBWTM (ORCPT ); Thu, 2 Mar 2017 17:19:12 -0500 From: Laurent Pinchart To: Neil Armstrong Cc: dri-devel@lists.freedesktop.org, laurent.pinchart+renesas@ideasonboard.com, Jose.Abreu@synopsys.com, kieran.bingham@ideasonboard.com, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 1/2] drm: bridge: dw-hdmi: Take input format from plat_data Date: Thu, 02 Mar 2017 17:45:09 +0200 Message-ID: <2768953.c6tz7qsbuQ@avalon> User-Agent: KMail/4.14.10 (Linux/4.9.6-gentoo-r1; KDE/4.14.28; x86_64; ; ) In-Reply-To: <1488468572-31971-2-git-send-email-narmstrong@baylibre.com> References: <1488468572-31971-1-git-send-email-narmstrong@baylibre.com> <1488468572-31971-2-git-send-email-narmstrong@baylibre.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Neil, Thank you for the patch. On Thursday 02 Mar 2017 16:29:31 Neil Armstrong wrote: > Some display pipelines can only provide non-RBG input pixels to the HDMI TX > Controller, this patch takes the pixel format from the plat_data if > provided. > > Signed-off-by: Neil Armstrong > --- > drivers/gpu/drm/bridge/dw-hdmi.c | 59 ++++++++++++++++++------------------- > include/drm/bridge/dw_hdmi.h | 9 ++++++ > 2 files changed, 39 insertions(+), 29 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/dw-hdmi.c > b/drivers/gpu/drm/bridge/dw-hdmi.c index 026a0dc..653ecd7 100644 > --- a/drivers/gpu/drm/bridge/dw-hdmi.c > +++ b/drivers/gpu/drm/bridge/dw-hdmi.c > @@ -35,12 +35,6 @@ > > #define HDMI_EDID_LEN 512 > > -#define RGB 0 > -#define YCBCR444 1 > -#define YCBCR422_16BITS 2 > -#define YCBCR422_8BITS 3 > -#define XVYCC444 4 > - > enum hdmi_datamap { > RGB444_8B = 0x01, > RGB444_10B = 0x03, > @@ -94,8 +88,8 @@ struct hdmi_vmode { > }; > > struct hdmi_data_info { > - unsigned int enc_in_format; > - unsigned int enc_out_format; > + enum dw_hdmi_color_enc_format enc_in_format; > + enum dw_hdmi_color_enc_format enc_out_format; > unsigned int enc_color_depth; > unsigned int colorimetry; > unsigned int pix_repet_factor; > @@ -569,7 +563,7 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > int color_format = 0; > u8 val; > > - if (hdmi->hdmi_data.enc_in_format == RGB) { > + if (hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_RGB) { > if (hdmi->hdmi_data.enc_color_depth == 8) > color_format = 0x01; > else if (hdmi->hdmi_data.enc_color_depth == 10) > @@ -580,7 +574,7 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > color_format = 0x07; > else > return; > - } else if (hdmi->hdmi_data.enc_in_format == YCBCR444) { > + } else if (hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_YCBCR444) { > if (hdmi->hdmi_data.enc_color_depth == 8) > color_format = 0x09; > else if (hdmi->hdmi_data.enc_color_depth == 10) > @@ -591,7 +585,8 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) > color_format = 0x0F; > else > return; > - } else if (hdmi->hdmi_data.enc_in_format == YCBCR422_8BITS) { > + } else if (hdmi->hdmi_data.enc_in_format == > + DW_HDMI_ENC_FMT_YCBCR422_8BITS) { > if (hdmi->hdmi_data.enc_color_depth == 8) > color_format = 0x16; > else if (hdmi->hdmi_data.enc_color_depth == 10) > @@ -627,20 +622,20 @@ static int is_color_space_conversion(struct dw_hdmi > *hdmi) > > static int is_color_space_decimation(struct dw_hdmi *hdmi) > { > - if (hdmi->hdmi_data.enc_out_format != YCBCR422_8BITS) > + if (hdmi->hdmi_data.enc_out_format != DW_HDMI_ENC_FMT_YCBCR422_8BITS) > return 0; > - if (hdmi->hdmi_data.enc_in_format == RGB || > - hdmi->hdmi_data.enc_in_format == YCBCR444) > + if (hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_RGB || > + hdmi->hdmi_data.enc_in_format == DW_HDMI_ENC_FMT_YCBCR444) > return 1; > return 0; > } > > static int is_color_space_interpolation(struct dw_hdmi *hdmi) > { > - if (hdmi->hdmi_data.enc_in_format != YCBCR422_8BITS) > + if (hdmi->hdmi_data.enc_in_format != DW_HDMI_ENC_FMT_YCBCR422_8BITS) > return 0; > - if (hdmi->hdmi_data.enc_out_format == RGB || > - hdmi->hdmi_data.enc_out_format == YCBCR444) > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_RGB || > + hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_YCBCR444) > return 1; > return 0; > } > @@ -652,13 +647,14 @@ static void dw_hdmi_update_csc_coeffs(struct dw_hdmi > *hdmi) u32 csc_scale = 1; > > if (is_color_space_conversion(hdmi)) { > - if (hdmi->hdmi_data.enc_out_format == RGB) { > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_RGB) { > if (hdmi->hdmi_data.colorimetry == > HDMI_COLORIMETRY_ITU_601) > csc_coeff = &csc_coeff_rgb_out_eitu601; > else > csc_coeff = &csc_coeff_rgb_out_eitu709; > - } else if (hdmi->hdmi_data.enc_in_format == RGB) { > + } else if (hdmi->hdmi_data.enc_in_format == > + DW_HDMI_ENC_FMT_RGB) { > if (hdmi->hdmi_data.colorimetry == > HDMI_COLORIMETRY_ITU_601) > csc_coeff = &csc_coeff_rgb_in_eitu601; > @@ -730,8 +726,8 @@ static void hdmi_video_packetize(struct dw_hdmi *hdmi) > struct hdmi_data_info *hdmi_data = &hdmi->hdmi_data; > u8 val, vp_conf; > > - if (hdmi_data->enc_out_format == RGB || > - hdmi_data->enc_out_format == YCBCR444) { > + if (hdmi_data->enc_out_format == DW_HDMI_ENC_FMT_RGB || > + hdmi_data->enc_out_format == DW_HDMI_ENC_FMT_YCBCR444) { > if (!hdmi_data->enc_color_depth) { > output_select = HDMI_VP_CONF_OUTPUT_SELECTOR_BYPASS; > } else if (hdmi_data->enc_color_depth == 8) { > @@ -746,7 +742,8 @@ static void hdmi_video_packetize(struct dw_hdmi *hdmi) > } else { > return; > } > - } else if (hdmi_data->enc_out_format == YCBCR422_8BITS) { > + } else if (hdmi_data->enc_out_format == > + DW_HDMI_ENC_FMT_YCBCR422_8BITS) { > if (!hdmi_data->enc_color_depth || > hdmi_data->enc_color_depth == 8) > remap_size = HDMI_VP_REMAP_YCC422_16bit; > @@ -1138,15 +1135,16 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, > struct drm_display_mode *mode) /* Initialise info frame from DRM mode */ > drm_hdmi_avi_infoframe_from_display_mode(&frame, mode); > > - if (hdmi->hdmi_data.enc_out_format == YCBCR444) > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_YCBCR444) > frame.colorspace = HDMI_COLORSPACE_YUV444; > - else if (hdmi->hdmi_data.enc_out_format == YCBCR422_8BITS) > + else if (hdmi->hdmi_data.enc_out_format == > + DW_HDMI_ENC_FMT_YCBCR422_8BITS) > frame.colorspace = HDMI_COLORSPACE_YUV422; > else > frame.colorspace = HDMI_COLORSPACE_RGB; > > /* Set up colorimetry */ > - if (hdmi->hdmi_data.enc_out_format == XVYCC444) { > + if (hdmi->hdmi_data.enc_out_format == DW_HDMI_ENC_FMT_XVYCC444) { > frame.colorimetry = HDMI_COLORIMETRY_EXTENDED; > if (hdmi->hdmi_data.colorimetry == HDMI_COLORIMETRY_ITU_601) > frame.extended_colorimetry = > @@ -1154,7 +1152,7 @@ static void hdmi_config_AVI(struct dw_hdmi *hdmi, > struct drm_display_mode *mode) else /*hdmi->hdmi_data.colorimetry == > HDMI_COLORIMETRY_ITU_709*/ frame.extended_colorimetry = > HDMI_EXTENDED_COLORIMETRY_XV_YCC_709; > - } else if (hdmi->hdmi_data.enc_out_format != RGB) { > + } else if (hdmi->hdmi_data.enc_out_format != DW_HDMI_ENC_FMT_RGB) { > frame.colorimetry = hdmi->hdmi_data.colorimetry; > frame.extended_colorimetry = HDMI_EXTENDED_COLORIMETRY_XV_YCC_601; > } else { /* Carries no data */ > @@ -1443,10 +1441,13 @@ static int dw_hdmi_setup(struct dw_hdmi *hdmi, > struct drm_display_mode *mode) > hdmi->hdmi_data.video_mode.mpixelrepetitionoutput = 0; > hdmi->hdmi_data.video_mode.mpixelrepetitioninput = 0; > > - /* TODO: Get input format from IPU (via FB driver interface) */ > - hdmi->hdmi_data.enc_in_format = RGB; > + /* Get input format from plat data or fallback to RGB */ > + if (hdmi->plat_data->input_fmt >= 0) > + hdmi->hdmi_data.enc_in_format = hdmi->plat_data->input_fmt; > + else > + hdmi->hdmi_data.enc_in_format = DW_HDMI_ENC_FMT_RGB; > > - hdmi->hdmi_data.enc_out_format = RGB; > + hdmi->hdmi_data.enc_out_format = DW_HDMI_ENC_FMT_RGB; > > hdmi->hdmi_data.enc_color_depth = 8; > hdmi->hdmi_data.pix_repet_factor = 0; > diff --git a/include/drm/bridge/dw_hdmi.h b/include/drm/bridge/dw_hdmi.h > index bcceee8..8c0cc13 100644 > --- a/include/drm/bridge/dw_hdmi.h > +++ b/include/drm/bridge/dw_hdmi.h > @@ -21,6 +21,14 @@ enum { > DW_HDMI_RES_MAX, > }; > > +enum dw_hdmi_color_enc_format { > + DW_HDMI_ENC_FMT_RGB = 0, > + DW_HDMI_ENC_FMT_YCBCR444, > + DW_HDMI_ENC_FMT_YCBCR422_16BITS, > + DW_HDMI_ENC_FMT_YCBCR422_8BITS, > + DW_HDMI_ENC_FMT_XVYCC444, > +}; > + > enum dw_hdmi_phy_type { > DW_HDMI_PHY_DWC_HDMI_TX_PHY = 0x00, > DW_HDMI_PHY_DWC_MHL_PHY_HEAC = 0xb2, > @@ -62,6 +70,7 @@ struct dw_hdmi_plat_data { > struct regmap *regm; > enum drm_mode_status (*mode_valid)(struct drm_connector *connector, > struct drm_display_mode *mode); > + enum dw_hdmi_color_enc_format input_fmt; As reported before, I think we should use a combination of media bus format and color space information instead of a custom enum. Ideally this should also be queried at runtime, but that could be done in a second step. > > /* Vendor PHY support */ > const struct dw_hdmi_phy_ops *phy_ops; -- Regards, Laurent Pinchart