diff --git a/drivers/video/bridge/video-bridge-uclass.c b/drivers/video/bridge/video-bridge-uclass.c index 29f5b7e9a4..f9ef6f9ad9 100644 --- a/drivers/video/bridge/video-bridge-uclass.c +++ b/drivers/video/bridge/video-bridge-uclass.c @@ -55,6 +55,15 @@ int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size) return ops->read_edid(dev, buf, buf_size); } +int video_bridge_get_timing(struct udevice *dev) +{ + struct video_bridge_ops *ops = video_bridge_get_ops(dev); + + if (!ops || !ops->get_timing) + return -ENOSYS; + return ops->get_timing(dev); +} + static int video_bridge_pre_probe(struct udevice *dev) { struct video_bridge_priv *uc_priv = dev_get_uclass_priv(dev); diff --git a/drivers/video/drm/rockchip_display.c b/drivers/video/drm/rockchip_display.c index eadcd601ac..f6a5588845 100644 --- a/drivers/video/drm/rockchip_display.c +++ b/drivers/video/drm/rockchip_display.c @@ -586,6 +586,8 @@ static int display_init(struct display_state *state) &bpc); if (!ret) edid_print_info((void *)&conn_state->edid); + } else { + ret = video_bridge_get_timing(conn_state->bridge->dev); } } else if (conn_funcs->get_timing) { ret = conn_funcs->get_timing(state); diff --git a/include/video_bridge.h b/include/video_bridge.h index 0699a8dda8..7c86c5997c 100644 --- a/include/video_bridge.h +++ b/include/video_bridge.h @@ -63,6 +63,14 @@ struct video_bridge_ops { * @return number of bytes read, <=0 for error */ int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); + + /** + * get_timing() - Get timing from bridge + * + * @dev: Device to get timing + * @return 0 if OK, -ve on error + */ + int (*get_timing)(struct udevice *dev); }; #define video_bridge_get_ops(dev) \ @@ -109,4 +117,11 @@ int video_bridge_check_attached(struct udevice *dev); */ int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size); +/** + * video_bridge_get_timing() - Get timing from bridge + * + * @dev: Device to get timing + * @return 0 if OK, -ve on error + */ +int video_bridge_get_timing(struct udevice *dev); #endif