video/drm: rockchip_display: support get display mode from edid if client is not present
Change-Id: Ib8956972b7bbb6aaaac2e3c8a93e0d38d98abf6a Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
This commit is contained in:
parent
bdeba27611
commit
005d29a79d
|
|
@ -465,8 +465,6 @@ bool drm_mode_is_420(const struct drm_display_info *display,
|
|||
static int display_get_timing(struct display_state *state)
|
||||
{
|
||||
struct connector_state *conn_state = &state->conn_state;
|
||||
const struct rockchip_connector *conn = conn_state->connector;
|
||||
const struct rockchip_connector_funcs *conn_funcs = conn->funcs;
|
||||
struct drm_display_mode *mode = &conn_state->mode;
|
||||
const struct drm_display_mode *m;
|
||||
struct panel_state *panel_state = &state->panel_state;
|
||||
|
|
@ -485,18 +483,6 @@ static int display_get_timing(struct display_state *state)
|
|||
goto done;
|
||||
}
|
||||
|
||||
if (conn_funcs->get_edid && !conn_funcs->get_edid(state)) {
|
||||
int panel_bits_per_colourp;
|
||||
|
||||
if (!edid_get_drm_mode((void *)&conn_state->edid,
|
||||
sizeof(conn_state->edid), mode,
|
||||
&panel_bits_per_colourp)) {
|
||||
printf("Using display timing from edid\n");
|
||||
edid_print_info((void *)&conn_state->edid);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
printf("failed to find display timing\n");
|
||||
return -ENODEV;
|
||||
done:
|
||||
|
|
@ -524,6 +510,7 @@ static int display_init(struct display_state *state)
|
|||
struct rockchip_crtc *crtc = crtc_state->crtc;
|
||||
const struct rockchip_crtc_funcs *crtc_funcs = crtc->funcs;
|
||||
struct drm_display_mode *mode = &conn_state->mode;
|
||||
int bpc;
|
||||
int ret = 0;
|
||||
static bool __print_once = false;
|
||||
|
||||
|
|
@ -576,13 +563,9 @@ static int display_init(struct display_state *state)
|
|||
goto deinit;
|
||||
}
|
||||
|
||||
if (conn_funcs->get_timing) {
|
||||
ret = conn_funcs->get_timing(state);
|
||||
} else if (panel_state->panel) {
|
||||
if (panel_state->panel) {
|
||||
ret = display_get_timing(state);
|
||||
} else if (conn_state->bridge) {
|
||||
int bpc;
|
||||
|
||||
ret = video_bridge_read_edid(conn_state->bridge->dev,
|
||||
conn_state->edid, EDID_SIZE);
|
||||
if (ret > 0) {
|
||||
|
|
@ -591,6 +574,17 @@ static int display_init(struct display_state *state)
|
|||
if (!ret)
|
||||
edid_print_info((void *)&conn_state->edid);
|
||||
}
|
||||
} else if (conn_funcs->get_timing) {
|
||||
ret = conn_funcs->get_timing(state);
|
||||
} else if (conn_funcs->get_edid) {
|
||||
ret = conn_funcs->get_edid(state);
|
||||
if (!ret) {
|
||||
ret = edid_get_drm_mode((void *)&conn_state->edid,
|
||||
sizeof(conn_state->edid), mode,
|
||||
&bpc);
|
||||
if (!ret)
|
||||
edid_print_info((void *)&conn_state->edid);
|
||||
}
|
||||
}
|
||||
|
||||
if (ret)
|
||||
|
|
|
|||
Loading…
Reference in New Issue