Hi Sascha, Thanks for your comments! On 12/7/22 07:45, Sascha Hauer wrote: > On Wed, Nov 30, 2022 at 03:02:13PM +0100, Michael Riesch wrote: >> Commit 540b8f271e53 ("drm/rockchip: Embed drm_encoder into >> rockchip_decoder") provides the means to pass the endpoint ID to the >> VOP2 driver, which sets the interface MUX accordingly. However, this >> step has not yet been carried out for the RGB output block. Embed the >> drm_encoder structure into the rockchip_encoder structure and set the >> endpoint ID correctly. >> >> Signed-off-by: Michael Riesch <michael.riesch@xxxxxxxxxxxxxx> >> --- >> drivers/gpu/drm/rockchip/rockchip_rgb.c | 12 +++++++----- >> 1 file changed, 7 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/gpu/drm/rockchip/rockchip_rgb.c b/drivers/gpu/drm/rockchip/rockchip_rgb.c >> index 75eb7cca3d82..16201a5cf1e8 100644 >> --- a/drivers/gpu/drm/rockchip/rockchip_rgb.c >> +++ b/drivers/gpu/drm/rockchip/rockchip_rgb.c >> @@ -18,17 +18,17 @@ >> #include <drm/drm_probe_helper.h> >> #include <drm/drm_simple_kms_helper.h> >> >> +#include <dt-bindings/soc/rockchip,vop2.h> >> + >> #include "rockchip_drm_drv.h" >> #include "rockchip_drm_vop.h" >> #include "rockchip_rgb.h" >> >> -#define encoder_to_rgb(c) container_of(c, struct rockchip_rgb, encoder) >> - >> struct rockchip_rgb { >> struct device *dev; >> struct drm_device *drm_dev; >> struct drm_bridge *bridge; >> - struct drm_encoder encoder; >> + struct rockchip_encoder encoder; >> struct drm_connector connector; >> int output_mode; >> }; >> @@ -125,7 +125,7 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev, >> return ERR_PTR(ret); >> } >> >> - encoder = &rgb->encoder; >> + encoder = &rgb->encoder.encoder; >> encoder->possible_crtcs = drm_crtc_mask(crtc); >> >> ret = drm_simple_encoder_init(drm_dev, encoder, DRM_MODE_ENCODER_NONE); >> @@ -161,6 +161,8 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev, >> goto err_free_encoder; >> } >> >> + rgb->encoder.crtc_endpoint_id = ROCKCHIP_VOP2_EP_RGB0; > > This is vop2 specific. This code is used with the vop1 as well, so it > doesn't look like it belongs here, at least not hidden in a patch titled > "embed drm_encoder into rockchip_encoder". OK, the very least I can do is to create an extra patch that sets the crtc_endpoint_id. > Normally the crtc_endpoint_id is set by the encoder, coming from the > encoder node, asking the question "To which port on the VOP am I > connected to?" > > Here the situation is different. We are called from the VOP and the > question instead is: "Is there something connected to VPx endpoint id > ROCKCHIP_VOP2_EP_RGB0?" > > You might need a vop2 specific entry to this code. I just realized that rockchip_rgb_init parses the endpoint ID. If I am not mistaken, we can directly store it in the crtc_endpoint_id member. Seeing that this would be pretty generic, can it be included in one patch (or should I still split this into a separate patch)? Best regards, Michael