Browse Source

drm/bridge: cdns-mhdp: Get rid of redundant enum pixel_format

The enum pixel_format is quite redundant as its literal values are not
used as such anywhere. We can just as well use DRM_COLOR_FORMAT_*
definitions. However, the currently unsupported monochrome (Y_ONLY)
format needs to be handled separately.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Jyri Sarha 6 years ago
parent
commit
1c6f2e469b

+ 31 - 39
drivers/gpu/drm/bridge/cdns-mhdp.c

@@ -860,23 +860,27 @@ static int cdns_mhdp_link_up(struct cdns_mhdp_device *mhdp)
 	return 0;
 }
 
-u32 cdns_mhdp_get_bpp(u32 bpc, enum pixel_format pxlfmt)
+u32 cdns_mhdp_get_bpp(struct cdns_mhdp_display_fmt *fmt)
 {
 	u32 bpp;
 
-	switch (pxlfmt) {
-	case PIXEL_FORMAT_RGB:
-	case PIXEL_FORMAT_YCBCR_444:
-		bpp = bpc * 3;
+	if (fmt->y_only)
+		return fmt->bpc;
+
+	switch (fmt->color_format) {
+	case DRM_COLOR_FORMAT_RGB444:
+	case DRM_COLOR_FORMAT_YCRCB444:
+		bpp = fmt->bpc * 3;
 		break;
-	case PIXEL_FORMAT_YCBCR_422:
-		bpp = bpc * 2;
+	case DRM_COLOR_FORMAT_YCRCB422:
+		bpp = fmt->bpc * 2;
 		break;
-	case PIXEL_FORMAT_YCBCR_420:
-		bpp = bpc * 3 / 2;
+	case DRM_COLOR_FORMAT_YCRCB420:
+		bpp = fmt->bpc * 3 / 2;
 		break;
 	default:
-		bpp = bpc;
+		bpp = fmt->bpc * 3;
+		WARN_ON(1);
 	}
 	return bpp;
 }
@@ -886,12 +890,12 @@ static int cdns_mhdp_sst_enable(struct drm_bridge *bridge)
 	struct cdns_mhdp_bridge *mhdp_bridge = to_mhdp_bridge(bridge);
 	struct cdns_mhdp_device *mhdp = mhdp_bridge->mhdp;
 	u32 rate, vs, vs_f, required_bandwidth, available_bandwidth;
-	u32 bpp, bpc, tu_size = 30, line_thresh1, line_thresh2, line_thresh = 0;
+	u32 tu_size = 30, line_thresh1, line_thresh2, line_thresh = 0;
 	struct drm_display_mode *mode;
 	int pxlclock;
-	enum pixel_format pxlfmt;
+	u32 bpp, bpc, pxlfmt;
 
-	pxlfmt = cdns_mhdp_get_pxlfmt(mhdp->display_fmt.color_format);
+	pxlfmt = mhdp->display_fmt.color_format;
 	bpc = mhdp->display_fmt.bpc;
 
 	mode = &bridge->encoder->crtc->state->mode;
@@ -901,7 +905,7 @@ static int cdns_mhdp_sst_enable(struct drm_bridge *bridge)
 
 	rate = mhdp->link.rate / 1000;
 
-	bpp = cdns_mhdp_get_bpp(bpc, pxlfmt);
+	bpp = cdns_mhdp_get_bpp(&mhdp->display_fmt);
 
 	/* find optimal tu_size */
 	required_bandwidth = pxlclock * bpp / 8;
@@ -922,7 +926,6 @@ static int cdns_mhdp_sst_enable(struct drm_bridge *bridge)
 	if (vs > 64)
 		return -EINVAL;
 
-
 	cdns_mhdp_reg_write(mhdp, CDNS_DP_FRAMER_TU,
 			    CDNS_DP_FRAMER_TU_VS(vs) |
 			    CDNS_DP_FRAMER_TU_SIZE(tu_size) |
@@ -946,59 +949,47 @@ static int cdns_mhdp_sst_enable(struct drm_bridge *bridge)
 	return 0;
 }
 
-enum pixel_format cdns_mhdp_get_pxlfmt(u32 color_formats)
-{
-	/* FIXME: what about Y_ONLY? how is it handled in the kernel? */
-	if (color_formats & DRM_COLOR_FORMAT_YCRCB444)
-		return PIXEL_FORMAT_YCBCR_444;
-	if (color_formats & DRM_COLOR_FORMAT_YCRCB422)
-		return PIXEL_FORMAT_YCBCR_422;
-	if (color_formats & DRM_COLOR_FORMAT_YCRCB420)
-		return PIXEL_FORMAT_YCBCR_420;
-	return PIXEL_FORMAT_RGB;
-}
-
 void cdns_mhdp_configure_video(struct drm_bridge *bridge)
 {
 	struct cdns_mhdp_bridge *mhdp_bridge = to_mhdp_bridge(bridge);
 	struct cdns_mhdp_device *mhdp = mhdp_bridge->mhdp;
-	unsigned int bpp, bpc, dp_framer_sp = 0, msa_horizontal_1,
+	unsigned int dp_framer_sp = 0, msa_horizontal_1,
 			   msa_vertical_1, bnd_hsync2vsync, hsync2vsync_pol_ctrl,
 			   misc0 = 0, misc1 = 0, pxl_repr,
 			   front_porch, back_porch, msa_h0, msa_v0, hsync, vsync,
 			   dp_vertical_1;
 	struct drm_display_mode *mode;
-	enum pixel_format pxlfmt;
+	u32 bpp, bpc, pxlfmt;
 	u32 tmp;
 	u8 stream_id = mhdp_bridge->stream_id;
 
 	mode = &bridge->encoder->crtc->state->mode;
 
-	pxlfmt = cdns_mhdp_get_pxlfmt(mhdp->display_fmt.color_format);
+	pxlfmt = mhdp->display_fmt.color_format;
 	bpc = mhdp->display_fmt.bpc;
 
 	/* if YCBCR supported and stream not SD, use ITU709 */
 	/* FIXME: handle ITU version with YCBCR420 when supported */
-	if ((pxlfmt == PIXEL_FORMAT_YCBCR_444 ||
-	     pxlfmt == PIXEL_FORMAT_YCBCR_422) && mode->crtc_vdisplay >= 720)
+	if ((pxlfmt == DRM_COLOR_FORMAT_YCRCB444 ||
+	     pxlfmt == DRM_COLOR_FORMAT_YCRCB422) && mode->crtc_vdisplay >= 720)
 		misc0 = DP_YCBCR_COEFFICIENTS_ITU709;
 
-	bpp = cdns_mhdp_get_bpp(bpc, pxlfmt);
+	bpp = cdns_mhdp_get_bpp(&mhdp->display_fmt);
 
 	switch (pxlfmt) {
-	case PIXEL_FORMAT_RGB:
+	case DRM_COLOR_FORMAT_RGB444:
 		pxl_repr = CDNS_DP_FRAMER_RGB << CDNS_DP_FRAMER_PXL_FORMAT;
 		misc0 |= DP_COLOR_FORMAT_RGB;
 		break;
-	case PIXEL_FORMAT_YCBCR_444:
+	case DRM_COLOR_FORMAT_YCRCB444:
 		pxl_repr = CDNS_DP_FRAMER_YCBCR444 << CDNS_DP_FRAMER_PXL_FORMAT;
 		misc0 |= DP_COLOR_FORMAT_YCbCr444 | DP_TEST_DYNAMIC_RANGE_CEA;
 		break;
-	case PIXEL_FORMAT_YCBCR_422:
+	case DRM_COLOR_FORMAT_YCRCB422:
 		pxl_repr = CDNS_DP_FRAMER_YCBCR422 << CDNS_DP_FRAMER_PXL_FORMAT;
 		misc0 |= DP_COLOR_FORMAT_YCbCr422 | DP_TEST_DYNAMIC_RANGE_CEA;
 		break;
-	case PIXEL_FORMAT_YCBCR_420:
+	case DRM_COLOR_FORMAT_YCRCB420:
 		pxl_repr = CDNS_DP_FRAMER_YCBCR420 << CDNS_DP_FRAMER_PXL_FORMAT;
 		break;
 	default:
@@ -1093,11 +1084,11 @@ void cdns_mhdp_configure_video(struct drm_bridge *bridge)
 	if ((mode->flags & DRM_MODE_FLAG_INTERLACE) &&
 	    mode->crtc_vtotal % 2 == 0)
 		misc1 = DP_TEST_INTERLACED;
-	if (pxlfmt == PIXEL_FORMAT_Y_ONLY)
+	if (mhdp->display_fmt.y_only)
 		misc1 |= CDNS_DP_TEST_COLOR_FORMAT_RAW_Y_ONLY;
 	/* FIXME: use VSC SDP for Y420 */
 	/* FIXME: (CDNS) no code for Y420 in bare metal test */
-	if (pxlfmt == PIXEL_FORMAT_YCBCR_420)
+	if (pxlfmt == DRM_COLOR_FORMAT_YCRCB420)
 		misc1 = CDNS_DP_TEST_VSC_SDP;
 
 	cdns_mhdp_reg_write(mhdp, CDNS_DP_MSA_MISC(stream_id),
@@ -1386,6 +1377,7 @@ static int mhdp_probe(struct platform_device *pdev)
 	mhdp->host.enhanced = true;
 
 	/* The only currently supported format */
+	mhdp->display_fmt.y_only = false;
 	mhdp->display_fmt.color_format = DRM_COLOR_FORMAT_RGB444;
 	mhdp->display_fmt.bpc = 8;
 

+ 1 - 11
drivers/gpu/drm/bridge/cdns-mhdp.h

@@ -188,17 +188,7 @@
 
 #define CDNS_MHDP_MAX_STREAMS   4
 
-enum pixel_format {
-	PIXEL_FORMAT_RGB = 1,
-	PIXEL_FORMAT_YCBCR_444 = 2,
-	PIXEL_FORMAT_YCBCR_422 = 4,
-	PIXEL_FORMAT_YCBCR_420 = 8,
-	PIXEL_FORMAT_Y_ONLY = 16,
-};
-
-
-enum pixel_format cdns_mhdp_get_pxlfmt(u32 color_formats);
-u32 cdns_mhdp_get_bpp(u32 bpc, u32 color_formats);
+u32 cdns_mhdp_get_bpp(struct cdns_mhdp_display_fmt *fmt);
 void cdns_mhdp_configure_video(struct drm_bridge *bridge);
 void cdns_mhdp_enable(struct drm_bridge *bridge);
 

+ 1 - 0
include/drm/bridge/cdns-mhdp-common.h

@@ -517,6 +517,7 @@ struct cdns_mhdp_sink {
 struct cdns_mhdp_display_fmt {
 	u32 color_format;
 	u32 bpc;
+	bool y_only;
 };
 
 struct cdns_mhdp_bridge;