Message ID | 20241019-bridge-yuv420-v1-1-d74efac9e4e6@linaro.org (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | drm/bridge: add ycbcr_420_allowed support | expand |
On 18/10/2024 23:49, Dmitry Baryshkov wrote: > Follow the interlace_allowed example and calculate drm_connector's > ycbcr_420_allowed flag as AND of all drm_bridge's ycbcr_420_allowed > flags in a chain. This is one of the gaps between several > bridge-specific connector implementations and drm_bridge_connector. > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> > --- > drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++-- > include/drm/drm_bridge.h | 5 +++++ > 2 files changed, 9 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c > index 3da5b8bf8259..320c297008aa 100644 > --- a/drivers/gpu/drm/display/drm_bridge_connector.c > +++ b/drivers/gpu/drm/display/drm_bridge_connector.c > @@ -397,11 +397,11 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > bridge_connector->encoder = encoder; > > /* > - * TODO: Handle doublescan_allowed, stereo_allowed and > - * ycbcr_420_allowed. > + * TODO: Handle doublescan_allowed and stereo_allowed. > */ > connector = &bridge_connector->base; > connector->interlace_allowed = true; > + connector->ycbcr_420_allowed = true; > > /* > * Initialise connector status handling. First locate the furthest > @@ -414,6 +414,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, > drm_for_each_bridge_in_chain(encoder, bridge) { > if (!bridge->interlace_allowed) > connector->interlace_allowed = false; > + if (!bridge->ycbcr_420_allowed) > + connector->ycbcr_420_allowed = false; > > if (bridge->ops & DRM_BRIDGE_OP_EDID) > bridge_connector->bridge_edid = bridge; > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 75019d16be64..e8d735b7f6a4 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -802,6 +802,11 @@ struct drm_bridge { > * modes. > */ > bool interlace_allowed; > + /** > + * @ycbcr_420_allowed: Indicate that the bridge can handle YCbCr 420 > + * output. > + */ > + bool ycbcr_420_allowed; > /** > * @pre_enable_prev_first: The bridge requires that the prev > * bridge @pre_enable function is called before its @pre_enable, > Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
diff --git a/drivers/gpu/drm/display/drm_bridge_connector.c b/drivers/gpu/drm/display/drm_bridge_connector.c index 3da5b8bf8259..320c297008aa 100644 --- a/drivers/gpu/drm/display/drm_bridge_connector.c +++ b/drivers/gpu/drm/display/drm_bridge_connector.c @@ -397,11 +397,11 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, bridge_connector->encoder = encoder; /* - * TODO: Handle doublescan_allowed, stereo_allowed and - * ycbcr_420_allowed. + * TODO: Handle doublescan_allowed and stereo_allowed. */ connector = &bridge_connector->base; connector->interlace_allowed = true; + connector->ycbcr_420_allowed = true; /* * Initialise connector status handling. First locate the furthest @@ -414,6 +414,8 @@ struct drm_connector *drm_bridge_connector_init(struct drm_device *drm, drm_for_each_bridge_in_chain(encoder, bridge) { if (!bridge->interlace_allowed) connector->interlace_allowed = false; + if (!bridge->ycbcr_420_allowed) + connector->ycbcr_420_allowed = false; if (bridge->ops & DRM_BRIDGE_OP_EDID) bridge_connector->bridge_edid = bridge; diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 75019d16be64..e8d735b7f6a4 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -802,6 +802,11 @@ struct drm_bridge { * modes. */ bool interlace_allowed; + /** + * @ycbcr_420_allowed: Indicate that the bridge can handle YCbCr 420 + * output. + */ + bool ycbcr_420_allowed; /** * @pre_enable_prev_first: The bridge requires that the prev * bridge @pre_enable function is called before its @pre_enable,
Follow the interlace_allowed example and calculate drm_connector's ycbcr_420_allowed flag as AND of all drm_bridge's ycbcr_420_allowed flags in a chain. This is one of the gaps between several bridge-specific connector implementations and drm_bridge_connector. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org> --- drivers/gpu/drm/display/drm_bridge_connector.c | 6 ++++-- include/drm/drm_bridge.h | 5 +++++ 2 files changed, 9 insertions(+), 2 deletions(-)