From 2a7ea49a403faae7a888ff2987b0e046cab3e77b Mon Sep 17 00:00:00 2001 From: Lei Qian Date: Thu, 17 Oct 2019 11:34:55 +0800 Subject: [PATCH] vdin: merge from mainline PD#SWPL-15312 Change-Id: I39e4ed6014292a32f04f3e08724093ff0751757a Signed-off-by: Lei Qian --- .../media/vin/tvin/hdmirx/hdmi_rx_drv.h | 1 + .../media/vin/tvin/hdmirx/hdmi_rx_hw.c | 4 +- .../media/vin/tvin/hdmirx/hdmi_rx_wrapper.c | 10 +++ .../amlogic/media/vin/tvin/tvafe/tvafe_cvd.c | 5 ++ .../amlogic/media/vin/tvin/vdin/vdin_ctl.c | 84 ++++++++++++++----- .../amlogic/media/vin/tvin/vdin/vdin_ctl.h | 1 + 6 files changed, 82 insertions(+), 23 deletions(-) diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h index 999a6602bd4d..7d261727608e 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_drv.h @@ -454,6 +454,7 @@ struct rx_s { struct emp_buff empbuff; uint32_t arc_port; enum edid_ver_e edid_ver; + bool arc_5vsts; }; struct _hdcp_ksv { diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c index be7ea6cda6d5..3f1f29da29ee 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_hw.c @@ -3637,8 +3637,8 @@ void aml_phy_init(void) { uint32_t idx = rx.phy.phy_bw; uint32_t data32; - uint32_t term_value = - hdmirx_rd_top(TOP_HPD_PWR5V) & 0x7; + uint32_t term_value = + hdmirx_rd_top(TOP_HPD_PWR5V) & 0x7; data32 = phy_misci[idx][0]; data32 = (data32 & (~0x7)); diff --git a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c index 905fd79eb2c3..9dc04ac3d4c7 100644 --- a/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c +++ b/drivers/amlogic/media/vin/tvin/hdmirx/hdmi_rx_wrapper.c @@ -35,6 +35,7 @@ #include #include #include +#include /* Local include */ #include "hdmi_rx_repeater.h" @@ -1964,6 +1965,7 @@ static void rx_cable_clk_monitor(void) pre_sts = sts; } } + /* ---------------------------------------------------------- */ /* func: port A,B,C,D hdmitx-5v monitor & HPD control */ /* note: G9TV portD no used */ @@ -1972,6 +1974,7 @@ void rx_5v_monitor(void) { static uint8_t check_cnt; uint8_t tmp_5v = rx_get_hdmi5v_sts(); + bool tmp_arc_5v; if (auto_switch_off) tmp_5v = 0x0f; @@ -2000,6 +2003,13 @@ void rx_5v_monitor(void) else pwr_sts_to_esm = false; } + if (rx.chip_id == CHIP_ID_TM2) { + tmp_arc_5v = (pwr_sts >> rx.arc_port) & 1; + if (rx.arc_5vsts != tmp_arc_5v) { + rx.arc_5vsts = tmp_arc_5v; + earc_hdmirx_hpdst(rx.arc_port, rx.arc_5vsts); + } + } } /* diff --git a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c index 5c3d3f544b8d..003888700f72 100644 --- a/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c +++ b/drivers/amlogic/media/vin/tvin/tvafe/tvafe_cvd.c @@ -2316,6 +2316,11 @@ inline void tvafe_cvd2_adj_hs(struct tvafe_cvd2_s *cvd2, W_APB_BIT(CVD2_ACTIVE_VIDEO_HSTART, temp, HACTIVE_START_BIT, HACTIVE_START_WID); /* 0x12d */ + if (tvafe_cpu_type() == CPU_TYPE_TL1 || + tvafe_cpu_type() == CPU_TYPE_TM2) { + temp = 0x20 * cvd2->info.hs_adj_level; + delta = temp / 4; + } temp = delta << 16; temp = temp | delta; temp = acd_h_back - temp; diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c b/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c index 5d5f8b540926..4edd7ad97dcb 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.c @@ -498,6 +498,12 @@ static struct vdin_matrix_lup_s vdin_matrix_lup[] = { /* 0 0 0 0.859 16 */ {0x00000000, 0x00000000, 0x03700000, 0x00000000, 0x03700000, 0x00000000, 0x00000370, 0x00400040, 0x00000040,}, + /* VDIN_MATRIX_2020RGB_YUV2020 */ + /* 0 0.224732 0.580008 0.050729 16 */ + /* 0 -0.122176 -0.315324 0.437500 128 */ + /* 0 0.437500 -0.402312 -0.035188 128 */ + {0x00000000, 0x00000000, 0x00e60252, 0x00341f84, 0x1ebe01c0, 0x01c01e65, + 0x00001fdd, 0x00400200, 0x00000200,}, }; /***************************Local function**********************************/ @@ -1095,9 +1101,14 @@ static inline void vdin_set_color_matrix1(unsigned int offset, VDIN_MATRIX_RGBS_YUV709; } } else { - if (color_fmt_range == TVIN_RGB_FULL) - matrix_csc = VDIN_MATRIX_RGB_YUV709; - else + if (color_fmt_range == TVIN_RGB_FULL) { + if (vdin_hdr_flag == 1) + matrix_csc = + VDIN_MATRIX_RGB2020_YUV2020; + else + matrix_csc = + VDIN_MATRIX_RGB_YUV709; + } else matrix_csc = VDIN_MATRIX_RGBS_YUV709; } } else { @@ -1129,9 +1140,14 @@ static inline void vdin_set_color_matrix1(unsigned int offset, VDIN_MATRIX_RGBS_YUV709; } } else { - if (color_fmt_range == TVIN_RGB_FULL) - matrix_csc = VDIN_MATRIX_RGB_YUV709; - else + if (color_fmt_range == TVIN_RGB_FULL) { + if (vdin_hdr_flag == 1) + matrix_csc = + VDIN_MATRIX_RGB2020_YUV2020; + else + matrix_csc = + VDIN_MATRIX_RGB_YUV709; + } else matrix_csc = VDIN_MATRIX_RGBS_YUV709; } } else { @@ -1274,9 +1290,14 @@ static inline void vdin_set_color_matrix0(unsigned int offset, VDIN_MATRIX_RGBS_YUV709; } } else { - if (color_fmt_range == TVIN_RGB_FULL) - matrix_csc = VDIN_MATRIX_RGB_YUV709; - else + if (color_fmt_range == TVIN_RGB_FULL) { + if (vdin_hdr_flag == 1) + matrix_csc = + VDIN_MATRIX_RGB2020_YUV2020; + else + matrix_csc = + VDIN_MATRIX_RGB_YUV709; + } else matrix_csc = VDIN_MATRIX_RGBS_YUV709; } } else { @@ -1308,9 +1329,14 @@ static inline void vdin_set_color_matrix0(unsigned int offset, VDIN_MATRIX_RGBS_YUV709; } } else { - if (color_fmt_range == TVIN_RGB_FULL) - matrix_csc = VDIN_MATRIX_RGB_YUV709; - else + if (color_fmt_range == TVIN_RGB_FULL) { + if (vdin_hdr_flag == 1) + matrix_csc = + VDIN_MATRIX_RGB2020_YUV2020; + else + matrix_csc = + VDIN_MATRIX_RGB_YUV709; + } else matrix_csc = VDIN_MATRIX_RGBS_YUV709; } } else { @@ -1449,9 +1475,14 @@ static void vdin_set_color_matrix0_g12a(unsigned int offset, VDIN_MATRIX_RGBS_YUV709; } } else { - if (color_fmt_range == TVIN_RGB_FULL) - matrix_csc = VDIN_MATRIX_RGB_YUV709; - else + if (color_fmt_range == TVIN_RGB_FULL) { + if (vdin_hdr_flag == 1) + matrix_csc = + VDIN_MATRIX_RGB2020_YUV2020; + else + matrix_csc = + VDIN_MATRIX_RGB_YUV709; + } else matrix_csc = VDIN_MATRIX_RGBS_YUV709; } } else { @@ -1483,9 +1514,14 @@ static void vdin_set_color_matrix0_g12a(unsigned int offset, VDIN_MATRIX_RGBS_YUV709; } } else { - if (color_fmt_range == TVIN_RGB_FULL) - matrix_csc = VDIN_MATRIX_RGB_YUV709; - else + if (color_fmt_range == TVIN_RGB_FULL) { + if (vdin_hdr_flag == 1) + matrix_csc = + VDIN_MATRIX_RGB2020_YUV2020; + else + matrix_csc = + VDIN_MATRIX_RGB_YUV709; + } else matrix_csc = VDIN_MATRIX_RGBS_YUV709; } } else { @@ -1562,9 +1598,14 @@ static void vdin_set_color_matrix0_g12a(unsigned int offset, break; } - if (matrix_csc == VDIN_MATRIX_NULL) { + if (matrix_csc == VDIN_MATRIX_NULL) { wr_bits(offset, VDIN_MATRIX_CTRL, 0, VDIN_MATRIX_EN_BIT, VDIN_MATRIX_EN_WID); + + if (is_meson_tm2_cpu()) + wr_bits(offset, VDIN_HDR2_MATRIXI_EN_CTRL, 0, + VDIN_MATRIX_EN_BIT, + VDIN_MATRIX_EN_WID); } else { matrix_tbl = &vdin_matrix_lup[matrix_csc - 1]; @@ -2786,9 +2827,10 @@ void vdin_set_default_regmap(unsigned int offset) is_meson_gxtvbb_cpu() || is_meson_txl_cpu() || is_meson_txlx_cpu() || is_meson_tl1_cpu()) wr(offset, VDIN_LFIFO_CTRL, 0x00000f00); - else if (is_meson_tm2_cpu()) + else if (is_meson_tm2_cpu()) { wr(offset, VDIN_LFIFO_CTRL, 0xc0020f00); - else + wr(offset, VDIN_HDR2_MATRIXI_EN_CTRL, 0); + } else wr(offset, VDIN_LFIFO_CTRL, 0x00000780); /* [15:14] clkgate.bbar = 0/(auto, off, on, on) */ /* [13:12] clkgate.bbar = 0/(auto, off, on, on) */ diff --git a/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.h b/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.h index 0d7abf6c0593..cc5e97aadfbb 100644 --- a/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.h +++ b/drivers/amlogic/media/vin/tvin/vdin/vdin_ctl.h @@ -87,6 +87,7 @@ enum vdin_matrix_csc_e { VDIN_MATRIX_YUV709F_YUV601F, VDIN_MATRIX_RGBS_RGB, VDIN_MATRIX_RGB_RGBS, + VDIN_MATRIX_RGB2020_YUV2020, }; /* *************************************************** */