From 4081d8076edd2ad85789463c9e45a72b9863db8b Mon Sep 17 00:00:00 2001 From: Joy Cho Date: Thu, 2 Jan 2020 15:35:16 +0900 Subject: [PATCH] media: osd: Adjust osd scaler setting to fix osd shift issue Change-Id: I5987a49de58db8e40cd7a21475353ecde34512c1 --- drivers/amlogic/media/osd/osd_hw.c | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/amlogic/media/osd/osd_hw.c b/drivers/amlogic/media/osd/osd_hw.c index dd9c968b5944..fa5d35611e96 100644 --- a/drivers/amlogic/media/osd/osd_hw.c +++ b/drivers/amlogic/media/osd/osd_hw.c @@ -6701,6 +6701,9 @@ static void osd_set_freescale(u32 index, struct layer_blend_reg_s *blend_reg; u32 width, height; u32 src_height; +#ifdef CONFIG_ARCH_MESON64_ODROID_COMMON + u32 dst_width, dst_height; +#endif u32 workaround_line = osd_hw.workaround_line; u32 output_index = 0; @@ -6835,6 +6838,35 @@ static void osd_set_freescale(u32 index, osd_set_dummy_data(index, 0); else osd_set_dummy_data(index, 0xff); + +#ifdef CONFIG_ARCH_MESON64_ODROID_COMMON + /* Adjust free_scale option based on dst axis */ + dst_width = osd_hw.free_dst_data[index].x_end - + osd_hw.free_dst_data[index].x_start + 1; + dst_height = osd_hw.free_dst_data[index].y_end - + osd_hw.free_dst_data[index].y_start + 1; + + if (dst_width > 1920) + osd_hw.free_scale[index].h_enable = 1; + else + osd_hw.free_scale[index].h_enable = 0; + + if (dst_height < 2160) + osd_hw.free_scale[index].v_enable = 0; + else + osd_hw.free_scale[index].v_enable = 1; + + osd_hw.free_scale_enable[index] = + (((osd_hw.free_scale[index].h_enable << 16) & 0xffff0000) + | (osd_hw.free_scale[index].v_enable & 0xffff)); + osd_hw.free_scale_mode[index] = 1; + + osd_log_dbg2(MODULE_BLEND, "h_enable %d v_enable %d, free_scale 0x%x\n", + osd_hw.free_scale[index].h_enable, + osd_hw.free_scale[index].v_enable, + osd_hw.free_scale_enable[index]); +#endif /* CONFIG_ARCH_MESON64_ODROID_COMMON */ + osd_log_dbg2(MODULE_BLEND, "osd%d:free_src_data:%d,%d,%d,%d\n", index, osd_hw.free_src_data[index].x_start,