[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1607004191-22294-4-git-send-email-yamonkar@cadence.com>
Date: Thu, 3 Dec 2020 15:03:11 +0100
From: Yuti Amonkar <yamonkar@...ence.com>
To: <linux-kernel@...r.kernel.org>, <dri-devel@...ts.freedesktop.org>,
<maxime@...no.tech>, <airlied@...ux.ie>, <daniel@...ll.ch>,
<mark.rutland@....com>, <a.hajda@...sung.com>,
<narmstrong@...libre.com>, <Laurent.pinchart@...asonboard.com>,
<jonas@...boo.se>, <jernej.skrabec@...l.net>
CC: <nsekhar@...com>, <jsarha@...com>, <tomi.valkeinen@...com>,
<nikhil.nd@...com>, <mparab@...ence.com>, <sjakhade@...ence.com>,
<yamonkar@...ence.com>
Subject: [PATCH v3 3/3] drm: bridge: cdns-mhdp8546: Retrieve the pixel format and bpc based on bus format
Get the pixel format and bpc based on the output bus format
negotiated instead of hardcoding the values.
Signed-off-by: Yuti Amonkar <yamonkar@...ence.com>
---
.../drm/bridge/cadence/cdns-mhdp8546-core.c | 82 +++++++++++++++----
1 file changed, 64 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
index d9f7eb8249e8..2ad5cad46599 100644
--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c
@@ -1530,24 +1530,8 @@ static int cdns_mhdp_get_modes(struct drm_connector *connector)
drm_connector_update_edid_property(connector, edid);
num_modes = drm_add_edid_modes(connector, edid);
- kfree(edid);
- /*
- * HACK: Warn about unsupported display formats until we deal
- * with them correctly.
- */
- if (connector->display_info.color_formats &&
- !(connector->display_info.color_formats &
- mhdp->display_fmt.color_format))
- dev_warn(mhdp->dev,
- "%s: No supported color_format found (0x%08x)\n",
- __func__, connector->display_info.color_formats);
-
- if (connector->display_info.bpc &&
- connector->display_info.bpc < mhdp->display_fmt.bpc)
- dev_warn(mhdp->dev, "%s: Display bpc only %d < %d\n",
- __func__, connector->display_info.bpc,
- mhdp->display_fmt.bpc);
+ kfree(edid);
return num_modes;
}
@@ -1706,6 +1690,66 @@ static int cdns_mhdp_attach(struct drm_bridge *bridge,
return 0;
}
+static void cdns_mhdp_get_display_fmt(struct cdns_mhdp_device *mhdp,
+ struct drm_bridge_state *state)
+{
+ u32 bus_fmt, bpc, pxlfmt;
+
+ bus_fmt = state->output_bus_cfg.format;
+ switch (bus_fmt) {
+ case MEDIA_BUS_FMT_RGB161616_1X48:
+ pxlfmt = DRM_COLOR_FORMAT_RGB444;
+ bpc = 16;
+ break;
+ case MEDIA_BUS_FMT_YUV16_1X48:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB444;
+ bpc = 16;
+ break;
+ case MEDIA_BUS_FMT_RGB121212_1X36:
+ pxlfmt = DRM_COLOR_FORMAT_RGB444;
+ bpc = 12;
+ break;
+ case MEDIA_BUS_FMT_UYVY12_1X24:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB422;
+ bpc = 12;
+ break;
+ case MEDIA_BUS_FMT_YUV12_1X36:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB444;
+ bpc = 12;
+ break;
+ case MEDIA_BUS_FMT_RGB101010_1X30:
+ pxlfmt = DRM_COLOR_FORMAT_RGB444;
+ bpc = 10;
+ break;
+ case MEDIA_BUS_FMT_UYVY10_1X20:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB422;
+ bpc = 10;
+ break;
+ case MEDIA_BUS_FMT_YUV10_1X30:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB444;
+ bpc = 10;
+ break;
+ case MEDIA_BUS_FMT_RGB888_1X24:
+ pxlfmt = DRM_COLOR_FORMAT_RGB444;
+ bpc = 8;
+ break;
+ case MEDIA_BUS_FMT_UYVY8_1X16:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB422;
+ bpc = 8;
+ break;
+ case MEDIA_BUS_FMT_YUV8_1X24:
+ pxlfmt = DRM_COLOR_FORMAT_YCRCB444;
+ bpc = 8;
+ break;
+ default:
+ pxlfmt = DRM_COLOR_FORMAT_RGB444;
+ bpc = 8;
+ }
+
+ mhdp->display_fmt.color_format = pxlfmt;
+ mhdp->display_fmt.bpc = bpc;
+}
+
static void cdns_mhdp_configure_video(struct cdns_mhdp_device *mhdp,
const struct drm_display_mode *mode)
{
@@ -2186,6 +2230,8 @@ static int cdns_mhdp_atomic_check(struct drm_bridge *bridge,
struct cdns_mhdp_device *mhdp = bridge_to_mhdp(bridge);
const struct drm_display_mode *mode = &crtc_state->adjusted_mode;
+ cdns_mhdp_get_display_fmt(mhdp, bridge_state);
+
mutex_lock(&mhdp->link_mutex);
if (!cdns_mhdp_bandwidth_ok(mhdp, mode, mhdp->link.num_lanes,
@@ -2499,7 +2545,7 @@ static int cdns_mhdp_probe(struct platform_device *pdev)
mhdp->link.rate = mhdp->host.link_rate;
mhdp->link.num_lanes = mhdp->host.lanes_cnt;
- /* The only currently supported format */
+ /* Initialize color format bpc and y_only to default values*/
mhdp->display_fmt.y_only = false;
mhdp->display_fmt.color_format = DRM_COLOR_FORMAT_RGB444;
mhdp->display_fmt.bpc = 8;
--
2.17.1
Powered by blists - more mailing lists