From 797ce37d8cc1727d627b0bf5fd7882133a85e96a Mon Sep 17 00:00:00 2001 From: Dingxian Wen Date: Sat, 24 Sep 2022 18:06:22 +0800 Subject: [PATCH] media: rockchip: hdmirx: enhance the stability of reading resolution sometimes the signal is locked, but the resolution is not stable. Signed-off-by: Dingxian Wen Change-Id: I4088690c58159dbdc6a36a1f3fe1db4dada4bfbb --- .../media/platform/rockchip/hdmirx/rk_hdmirx.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c b/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c index 1579bcdf8e38..5148727c52a2 100644 --- a/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c +++ b/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c @@ -881,11 +881,21 @@ static int hdmirx_try_to_get_timings(struct rk_hdmirx_dev *hdmirx_dev, int i, cnt = 0, fail_cnt = 0, ret = 0; bool from_dma = false; struct v4l2_device *v4l2_dev = &hdmirx_dev->v4l2_dev; + u32 last_w, last_h; + struct v4l2_bt_timings *bt = &timings->bt; + last_w = 0; + last_h = 0; hdmirx_set_negative_pol(hdmirx_dev, false); for (i = 0; i < try_cnt; i++) { ret = hdmirx_get_detected_timings(hdmirx_dev, timings, from_dma); - if (ret) { + + if ((last_w == 0) && (last_h == 0)) { + last_w = bt->width; + last_h = bt->height; + } + + if (ret || (last_w != bt->width) || (last_h != bt->height)) { cnt = 0; fail_cnt++; if (fail_cnt > 3) { @@ -896,9 +906,11 @@ static int hdmirx_try_to_get_timings(struct rk_hdmirx_dev *hdmirx_dev, cnt++; } - if (cnt >= 5) + if (cnt >= 8) break; + last_w = bt->width; + last_h = bt->height; usleep_range(10*1000, 10*1100); }