From 44a7c003faaf9bdc9c838346147ea29f0963f53a Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 5 Aug 2021 17:53:49 +0900 Subject: [PATCH] ODROID-COMMON: hdmitx: Add new hdmi resolution. 3840x1080p50hz Change-Id: I1f1deb6d2e6a45000284f7d5b150deeeb74d11fb --- .../vout/hdmitx/hdmi_common/hdmi_parameters.c | 49 +++++++++++++++++++ .../vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c | 1 + .../vout/hdmitx/hdmi_tx_20/hw/enc_cfg_hw.c | 27 ++++++++++ .../vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c | 16 ++++++ .../media/vout/hdmitx/hdmi_tx_20/hw/hw_clk.c | 3 ++ .../amlogic/media/vout/hdmi_tx/hdmi_common.h | 1 + 6 files changed, 97 insertions(+) diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_common/hdmi_parameters.c b/drivers/amlogic/media/vout/hdmitx/hdmi_common/hdmi_parameters.c index 0a95e53203b5..cbfc398fe5d6 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_common/hdmi_parameters.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_common/hdmi_parameters.c @@ -2775,6 +2775,54 @@ static struct hdmi_format_para fmt_para_vesa_3440x1440p60_43x18 = { }, }; +static struct hdmi_format_para fmt_para_vesa_3840x1080p50_32x9 = { + .vic = HDMIV_3840x1080p50hz, + .name = "3840x1080p50hz", + .sname = "3840x1080p50hz", + .pixel_repetition_factor = 0, + .progress_mode = 1, + .scrambler_en = 0, + .tmds_clk_div40 = 0, + .tmds_clk = 221000, + .timing = { + .pixel_freq = 221000, + .frac_freq = 221000, + .h_freq = 55250, + .v_freq = 50000, + .vsync_polarity = 1, /* -VSync */ + .hsync_polarity = 1, /* +HSync */ + .h_active = 3840, + .h_total = 4000, + .h_blank = 160, + .h_front = 48, + .h_sync = 10, + .h_back = 102, + .v_active = 1080, + .v_total = 1106, + .v_blank = 26, + .v_front = 3, + .v_sync = 10, + .v_back = 13, + .v_sync_ln = 1, + }, + .hdmitx_vinfo = { + .name = "3840x1080p50hz", + .mode = VMODE_HDMI, + .width = 3840, + .height = 1080, + .field_height = 1080, + .aspect_ratio_num = 32, + .aspect_ratio_den = 9, + .sync_duration_num = 50, + .sync_duration_den = 1, + .video_clk = 221000000, + .htotal = 4000, + .vtotal = 1106, + .viu_color_fmt = COLOR_FMT_YUV444, + .viu_mux = VIU_MUX_ENCP, + }, +}; + static struct hdmi_format_para fmt_para_custombuilt = { .vic = HDMI_CUSTOMBUILT, .name = "custombuilt", @@ -2901,6 +2949,7 @@ static struct hdmi_format_para *all_fmt_paras[] = { &fmt_para_vesa_2560x1600p60_8x5, &fmt_para_vesa_2560x1440p60_16x9, &fmt_para_vesa_3440x1440p60_43x18, + &fmt_para_vesa_3840x1080p50_32x9, &fmt_para_custombuilt, &fmt_para_null_hdmi_fmt, &fmt_para_non_hdmi_fmt, diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c index a1d8be618c4a..7ed154d40ef1 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hdmi_tx_edid.c @@ -2611,6 +2611,7 @@ static struct dispmode_vic dispmode_vic_tab[] = { {"2560x1440p60hz", HDMIV_2560x1440p60hz}, {"2560x1600p60hz", HDMIV_2560x1600p60hz}, {"3440x1440p60hz", HDMIV_3440x1440p60hz}, + {"3840x1080p50hz", HDMIV_3840x1080p50hz}, {"custombuilt", HDMI_CUSTOMBUILT}, }; diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/enc_cfg_hw.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/enc_cfg_hw.c index 1535267e1e7c..2ace468a185f 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/enc_cfg_hw.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/enc_cfg_hw.c @@ -1415,6 +1415,32 @@ static const struct reg_s tvregs_vesa_3440x1440p60hz[] = { {MREG_END_MARKER, 0}, }; +static const struct reg_s tvregs_vesa_3840x1080p50hz[] = { + {P_VENC_VDAC_SETTING, 0xff,}, + {P_ENCP_VIDEO_EN, 0,}, + {P_ENCI_VIDEO_EN, 0,}, + + {P_ENCP_VIDEO_MODE, 0x4040,}, + {P_ENCP_VIDEO_MODE_ADV, 0x18,}, + + {P_ENCP_VIDEO_MAX_PXCNT, 3999,}, + {P_ENCP_VIDEO_MAX_LNCNT, 1105,}, + {P_ENCP_VIDEO_HAVON_BEGIN, 102,}, + {P_ENCP_VIDEO_HAVON_END, 3941,}, + {P_ENCP_VIDEO_VAVON_BLINE, 13,}, + {P_ENCP_VIDEO_VAVON_ELINE, 1092,}, + {P_ENCP_VIDEO_HSO_BEGIN, 0,}, + {P_ENCP_VIDEO_HSO_END, 10,}, + {P_ENCP_VIDEO_VSO_BEGIN, 0x1E,}, + {P_ENCP_VIDEO_VSO_END, 0x32,}, + {P_ENCP_VIDEO_VSO_BLINE, 0x0,}, + {P_ENCP_VIDEO_VSO_ELINE, 10,}, + + {P_ENCP_VIDEO_EN, 1,}, + {P_ENCI_VIDEO_EN, 0,}, + {MREG_END_MARKER, 0}, +}; + #if 0 /* TODO */ static const struct reg_s tvregs_vesa_2560x1080p60hz[] = { {P_ENCP_VIDEO_EN, 0,}, @@ -1560,6 +1586,7 @@ static struct vic_tvregs_set tvregsTab[] = { {HDMIV_2560x1600p60hz, tvregs_vesa_2560x1600p60hz}, {HDMIV_2560x1440p60hz, tvregs_vesa_2560x1440p60hz}, {HDMIV_3440x1440p60hz, tvregs_vesa_3440x1440p60hz}, + {HDMIV_3840x1080p50hz, tvregs_vesa_3840x1080p50hz}, }; /* diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c index 8b15f9d29e06..867abd3798bf 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hdmi_tx_hw.c @@ -1773,6 +1773,22 @@ static void hdmi_tvenc_set(struct hdmitx_vidpara *param) SOF_LINES = 28; TOTAL_FRAMES = 4; break; + case HDMIV_3840x1080p50hz: + INTERLACE_MODE = 0U; + PIXEL_REPEAT_VENC = 0; + PIXEL_REPEAT_HDMI = 0; + ACTIVE_PIXELS = (3840*(1+PIXEL_REPEAT_HDMI)); + ACTIVE_LINES = (1080/(1+INTERLACE_MODE)); + LINES_F0 = 1106; + LINES_F1 = 1106; + FRONT_PORCH = 44; + HSYNC_PIXELS = 10; + BACK_PORCH = 102; + EOF_LINES = 3; + VSYNC_LINES = 10; + SOF_LINES = 13; + TOTAL_FRAMES = 4; + break; case HDMI_CUSTOMBUILT: custom_timing = get_custom_timing(); INTERLACE_MODE = 0U; diff --git a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hw_clk.c b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hw_clk.c index af92d2e25563..0a38f043102f 100644 --- a/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hw_clk.c +++ b/drivers/amlogic/media/vout/hdmitx/hdmi_tx_20/hw/hw_clk.c @@ -896,6 +896,9 @@ static struct hw_enc_clk_val_group setting_enc_clk_val_24[] = { {{HDMIV_3440x1440p60hz, HDMI_VIC_END}, 3197500, 1, 1, 2, VID_PLL_DIV_5, 1, 1, 1, -1}, + {{HDMIV_3840x1080p50hz, + HDMI_VIC_END}, + 2210000, 2, 1, 2, VID_PLL_DIV_5, 1, 1, 1, -1}, {{HDMI_CUSTOMBUILT, HDMI_VIC_END}, /* default 1080p60hz */ diff --git a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h index 5b998db6fdc4..82e19ceae5f8 100644 --- a/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h +++ b/include/linux/amlogic/media/vout/hdmi_tx/hdmi_common.h @@ -210,6 +210,7 @@ enum hdmi_vic { HDMIV_2560x1440p60hz, HDMIV_2560x1600p60hz, HDMIV_3440x1440p60hz, + HDMIV_3840x1080p50hz, HDMI_CUSTOMBUILT, HDMI_VIC_END, };