Skip to content

Commit ee2fcc0

Browse files
Paloma Arellanolumag
authored andcommitted
drm/msm/dp: allow YUV420 mode for DP connector when CDM available
All the components of YUV420 over DP are added. Therefore, let's mark the connector property as true for DP connector when the DP type is not eDP and when there is a CDM block available. Changes in v3: - Move setting the connector's ycbcr_420_allowed parameter so that it is not dependent on if the dp_display is not eDP Changes in v2: - Check for if dp_catalog has a CDM block available instead of checking if VSC SDP is allowed when setting the dp connector's ycbcr_420_allowed parameter Signed-off-by: Paloma Arellano <quic_parellan@quicinc.com> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> Patchwork: https://patchwork.freedesktop.org/patch/579628/ Link: https://lore.kernel.org/r/20240222194025.25329-20-quic_parellan@quicinc.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
1 parent 984809d commit ee2fcc0

File tree

5 files changed

+15
-7
lines changed

5 files changed

+15
-7
lines changed

drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,7 @@ static int _dpu_kms_initialize_displayport(struct drm_device *dev,
563563
{
564564
struct drm_encoder *encoder = NULL;
565565
struct msm_display_info info;
566+
bool yuv_supported;
566567
int rc;
567568
int i;
568569

@@ -581,7 +582,8 @@ static int _dpu_kms_initialize_displayport(struct drm_device *dev,
581582
return PTR_ERR(encoder);
582583
}
583584

584-
rc = msm_dp_modeset_init(priv->dp[i], dev, encoder);
585+
yuv_supported = !!dpu_kms->catalog->cdm;
586+
rc = msm_dp_modeset_init(priv->dp[i], dev, encoder, yuv_supported);
585587
if (rc) {
586588
DPU_ERROR("modeset_init failed for DP, rc = %d\n", rc);
587589
return rc;

drivers/gpu/drm/msm/dp/dp_display.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1426,7 +1426,7 @@ void dp_display_debugfs_init(struct msm_dp *dp_display, struct dentry *root, boo
14261426
}
14271427

14281428
int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
1429-
struct drm_encoder *encoder)
1429+
struct drm_encoder *encoder, bool yuv_supported)
14301430
{
14311431
struct dp_display_private *dp_priv;
14321432
int ret;
@@ -1442,7 +1442,7 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
14421442
return ret;
14431443
}
14441444

1445-
dp_display->connector = dp_drm_connector_init(dp_display, encoder);
1445+
dp_display->connector = dp_drm_connector_init(dp_display, encoder, yuv_supported);
14461446
if (IS_ERR(dp_display->connector)) {
14471447
ret = PTR_ERR(dp_display->connector);
14481448
DRM_DEV_ERROR(dev->dev,

drivers/gpu/drm/msm/dp/dp_drm.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,8 @@ int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
353353
}
354354

355355
/* connector initialization */
356-
struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder)
356+
struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
357+
bool yuv_supported)
357358
{
358359
struct drm_connector *connector = NULL;
359360

@@ -364,6 +365,9 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct dr
364365
if (!dp_display->is_edp)
365366
drm_connector_attach_dp_subconnector_property(connector);
366367

368+
if (yuv_supported)
369+
connector->ycbcr_420_allowed = true;
370+
367371
drm_connector_attach_encoder(connector, encoder);
368372

369373
return connector;

drivers/gpu/drm/msm/dp/dp_drm.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ struct msm_dp_bridge {
1919

2020
#define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge)
2121

22-
struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder);
22+
struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder,
23+
bool yuv_supported);
2324
int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
2425
struct drm_encoder *encoder);
2526

drivers/gpu/drm/msm/msm_drv.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ static inline struct drm_dsc_config *msm_dsi_get_dsc_config(struct msm_dsi *msm_
385385
int __init msm_dp_register(void);
386386
void __exit msm_dp_unregister(void);
387387
int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,
388-
struct drm_encoder *encoder);
388+
struct drm_encoder *encoder, bool yuv_supported);
389389
void msm_dp_snapshot(struct msm_disp_state *disp_state, struct msm_dp *dp_display);
390390
bool msm_dp_is_yuv_420_enabled(const struct msm_dp *dp_display,
391391
const struct drm_display_mode *mode);
@@ -403,7 +403,8 @@ static inline void __exit msm_dp_unregister(void)
403403
}
404404
static inline int msm_dp_modeset_init(struct msm_dp *dp_display,
405405
struct drm_device *dev,
406-
struct drm_encoder *encoder)
406+
struct drm_encoder *encoder,
407+
bool yuv_supported)
407408
{
408409
return -EINVAL;
409410
}

0 commit comments

Comments
 (0)