From 2588aa2aa4a4d22266e1dcd785946bc548bfa174 Mon Sep 17 00:00:00 2001 From: Dingxian Wen Date: Fri, 29 Jul 2022 11:04:10 +0800 Subject: [PATCH] media: rockchip: hdmirx: fix yuv420 hblank timings err Signed-off-by: Dingxian Wen Change-Id: I4be46b636a0f2ee81fab509c794bbdf88c06aae2 --- .../platform/rockchip/hdmirx/rk_hdmirx.c | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c b/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c index 0a09527950f0..83e72908407c 100644 --- a/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c +++ b/drivers/media/platform/rockchip/hdmirx/rk_hdmirx.c @@ -595,6 +595,7 @@ static void hdmirx_get_timings(struct rk_hdmirx_dev *hdmirx_dev, u32 val; if (from_dma) { + hfp = 0; val = hdmirx_readl(hdmirx_dev, DMA_STATUS2); hact = (val >> 16) & 0xffff; vact = val & 0xffff; @@ -607,8 +608,6 @@ static void hdmirx_get_timings(struct rk_hdmirx_dev *hdmirx_dev, val = hdmirx_readl(hdmirx_dev, DMA_STATUS5); hbp = (val >> 16) & 0xffff; vbp = val & 0xffff; - hfp = htotal - hact - hs - hbp; - vfp = vtotal - vact - vs - vbp; } else { val = hdmirx_readl(hdmirx_dev, VMON_STATUS1); hs = (val >> 16) & 0xffff; @@ -626,11 +625,22 @@ static void hdmirx_get_timings(struct rk_hdmirx_dev *hdmirx_dev, val = hdmirx_readl(hdmirx_dev, VMON_STATUS6); vtotal = (val >> 16) & 0xffff; vact = val & 0xffff; - if (hdmirx_dev->pix_fmt == HDMIRX_YUV420) + } + + if (hdmirx_dev->pix_fmt == HDMIRX_YUV420) { + htotal *= 2; + hfp *= 2; + hbp *= 2; + hs *= 2; + if (!from_dma) hact *= 2; } - if (hdmirx_dev->pix_fmt == HDMIRX_YUV420) - htotal *= 2; + + if (from_dma) { + hfp = htotal - hact - hs - hbp; + vfp = vtotal - vact - vs - vbp; + } + fps = (bt->pixelclock + (htotal * vtotal) / 2) / (htotal * vtotal); if (hdmirx_dev->pix_fmt == HDMIRX_YUV420) fps *= 2;