display/hdmi: add 480x320p60hz

Change-Id: I88e3e254650c63630c36d2c523ae82e9ea905967
This commit is contained in:
JeongHwaCho
2017-11-17 17:57:27 +09:00
committed by Joy Cho
parent 5b156f6a0d
commit cab32d1fd8
14 changed files with 108 additions and 6 deletions

View File

@@ -792,6 +792,22 @@ static void hdmi_tvenc_set(Hdmi_tx_video_para_t *param)
SOF_LINES = 10;
TOTAL_FRAMES = 4;
}
else if(param->VIC==HDMI_480x320p60hz){
INTERLACE_MODE = 0;
PIXEL_REPEAT_VENC = 0;
PIXEL_REPEAT_HDMI = 0;
ACTIVE_PIXELS = 480;
ACTIVE_LINES = 320;
LINES_F0 = 263;
LINES_F1 = 263;
FRONT_PORCH = 120;
HSYNC_PIXELS = 100;
BACK_PORCH = 100;
EOF_LINES = 8;
VSYNC_LINES = 4;
SOF_LINES = 95;
TOTAL_FRAMES = 4;
}
else if(param->VIC==HDMI_480x800p60hz){
INTERLACE_MODE = 0;
PIXEL_REPEAT_VENC = 0;
@@ -1113,6 +1129,7 @@ static void hdmi_tvenc_set(Hdmi_tx_video_para_t *param)
case HDMI_640x480p60:
case HDMI_800x480p60hz:
case HDMI_480x800p60hz:
case HDMI_480x320p60hz:
aml_write_reg32(P_VPU_HDMI_SETTING, 2);
break;
case HDMI_1366x768p60hz:
@@ -2042,6 +2059,9 @@ static void hdmitx_set_pll(Hdmi_tx_video_para_t *param)
case HDMI_800x480p60hz:
set_vmode_clk(VMODE_800X480P_60HZ);
break;
case HDMI_480x320p60hz:
set_vmode_clk(VMODE_480X320P_60HZ);
break;
case HDMI_480x800p60hz:
set_vmode_clk(VMODE_480X800P_60HZ);
break;
@@ -2129,6 +2149,7 @@ static int hdmitx_set_dispmode(hdmitx_dev_t* hdmitx_device, Hdmi_tx_video_para_t
&&(param->VIC!=HDMI_1080p24)
&&(param->VIC!=HDMI_1080p60)&&(param->VIC!=HDMI_1080p50)
&&(param->VIC!=HDMI_720p60)&&(param->VIC!=HDMI_720p50)
&&(param->VIC!=HDMI_480x320p60hz)
&&(param->VIC!=HDMI_800x480p60hz)&&(param->VIC!=HDMI_480x800p60hz)
&&(param->VIC!=HDMI_1366x768p60hz)&&(param->VIC!=HDMI_1600x900p60hz)
&&(param->VIC!=HDMI_800x600p60hz)&&(param->VIC!=HDMI_1024x600p60hz)&&(param->VIC!=HDMI_1024x768p60hz)
@@ -2432,6 +2453,7 @@ static Vic_attr_map vic_attr_map_table[] = {
{HDMI_720p60, 74250 },
{HDMI_800p, 71000 },
{HDMI_800x480p60hz, 29760 },
{HDMI_480x320p60hz, 25175 },
{HDMI_480x800p60hz, 32000 },
{HDMI_1366x768p60hz, 85500 },
{HDMI_1600x900p60hz, 108000},

View File

@@ -3,6 +3,10 @@ typedef struct reg_s {
uint val;
} reg_t;
static reg_t hdmi_tvenc_regs_480x320p60[] = {
{ 0, 0 }
};
static reg_t hdmi_tvenc_regs_480i[] = {
/*1st col: recommmended, but eof/sof/vs_lines +/- 1 from spec; 2nd col: from simu */
{ENCP_VIDEO_MODE, 0 /*0 */ },
@@ -259,6 +263,7 @@ typedef struct hdmi_tvenc_config_
}hdmi_tvenc_config_t;
static const hdmi_tvenc_config_t hdmi_tvenc_configs[] = {
{HDMI_480x320p60hz, hdmi_tvenc_regs_480x320p60},
{HDMI_640x480p60 , hdmi_tvenc_regs_640x480p60},
{HDMI_480p60, hdmi_tvenc_regs_480p},
{HDMI_480p60_16x9, hdmi_tvenc_regs_480p},

View File

@@ -533,6 +533,49 @@ static const reg_t tvregs_720p_50hz[] = {
{MREG_END_MARKER, 0 }
};
static const reg_t tvregs_480x320p60hz[] = {
{P_ENCP_VIDEO_EN, 0},
{P_ENCI_VIDEO_EN, 0},
{P_VENC_VDAC_SETTING, 0xff},
{P_ENCP_VIDEO_MODE, 0x4040},
{P_ENCP_VIDEO_MODE_ADV, 0x18},
{P_ENCP_VIDEO_MAX_PXCNT, 0x31F},
{P_ENCP_VIDEO_MAX_LNCNT, 0x20C},
{P_ENCP_VIDEO_HAVON_BEGIN, 0x64},
{P_ENCP_VIDEO_HAVON_END, 0x243},
{P_ENCP_VIDEO_VAVON_BLINE, 0xBD},
{P_ENCP_VIDEO_VAVON_ELINE, 0x1FC},
{P_ENCP_VIDEO_HSO_BEGIN, 0x0},
{P_ENCP_VIDEO_HSO_END, 0x64},
{P_ENCP_VIDEO_VSO_BEGIN, 0x1E},
{P_ENCP_VIDEO_VSO_END, 0x32},
{P_ENCP_VIDEO_VSO_BLINE, 0x0},
{P_ENCP_VIDEO_VSO_ELINE, 0x8},
/* DVI configs */
{P_ENCP_DVI_HSO_BEGIN, 0x2},
{P_ENCP_DVI_HSO_END, 0x4A},
{P_ENCP_DVI_VSO_BLINE_EVN, 0x0},
{P_ENCP_DVI_VSO_BLINE_ODD, 0x0},
{P_ENCP_DVI_VSO_ELINE_EVN, 0x7},
{P_ENCP_DVI_VSO_ELINE_ODD, 0x0},
{P_ENCP_DVI_VSO_BEGIN_EVN, 0x2},
{P_ENCP_DVI_VSO_BEGIN_ODD, 0x0},
{P_ENCP_DVI_VSO_END_EVN, 0x2},
{P_ENCP_DVI_VSO_END_ODD, 0x0},
{P_ENCP_DE_H_BEGIN, 0xAA},
{P_ENCP_DE_H_END, 0x3CA},
{P_ENCP_DE_V_BEGIN_EVEN, 0x11},
{P_ENCP_DE_V_END_EVEN, 0x1F1},
{P_ENCP_DE_V_BEGIN_ODD, 0x0},
{P_ENCP_DE_V_END_ODD, 0x0},
{P_ENCP_VIDEO_EN, 1},
{P_ENCI_VIDEO_EN, 0},
{MREG_END_MARKER, 0},
};
static const reg_t tvregs_480i[] = {
{P_ENCP_VIDEO_EN, 0, },
{P_ENCI_VIDEO_EN, 0, },
@@ -1852,6 +1895,7 @@ static const reg_t tvregs_1920x1200[] = {
/* The sequence of register tables items must match the enum define in tvmode.h */
static const reg_t *tvregsTab[] = {
tvregs_480x320p60hz,
tvregs_480i,
tvregs_480i, // For REPEAT MODE use, ENC setting is same
tvregs_480cvbs,
@@ -1913,6 +1957,7 @@ static const reg_t *tvregsTab[] = {
};
static const tvinfo_t tvinfoTab[] = {
{.xres = 480, .yres = 320, .id = "480x320p60hz"},
{.xres = 720, .yres = 480, .id = "480i"},
{.xres = 720, .yres = 480, .id = "480i_rpt"},
{.xres = 720, .yres = 480, .id = "480cvbs"},

View File

@@ -38,6 +38,7 @@ static logo_output_dev_t output_osd1={
#ifdef CONFIG_AM_HDMI_ONLY
static hdmi_only_info_t hdmi_only_info[PARA_HDMI_ONLY]={
{"480x320p60hz", VMODE_480X320P_60HZ},
{"480i",VMODE_480I},
{"480p",VMODE_480P},
{"576i",VMODE_576I},

View File

@@ -758,8 +758,8 @@ static enc_clk_val_t setting_enc_clk_val_m8m2[] = {
{VMODE_XGA, 1085, 1, 1, 1, VIU_ENCP, 5, 1, 1, 1, -1, -1, -1, 1, 1},
};
static enc_clk_val_t setting_enc_clk_val[] = {
#if MESON_CPU_TYPE == MESON_CPU_TYPE_MESON8B
{VMODE_480X320P_60HZ, 2014, 8, 1, 1, VIU_ENCP, 10, 4, 1, 1, -1, -1, -1, 1, -1},
{VMODE_480I, 2160, 8, 1, 1, VIU_ENCI, 5, 4, 2,-1, 2, -1, -1, 2, -1},
{VMODE_480CVBS, 1296, 4, 1, 1, VIU_ENCI, 6, 4, 2,-1, 2, -1, -1, 2, -1},
{VMODE_480P, 2160, 8, 1, 1, VIU_ENCP, 5, 4, 2, 1, -1, -1, -1, 1, -1},

View File

@@ -84,7 +84,7 @@ SET_TV_CLASS_ATTR(policy_fr_auto, policy_framerate_automation_store)
static const tvmode_t vmode_tvmode_tab[] =
{
TVMODE_480I, TVMODE_480I_RPT, TVMODE_480CVBS, TVMODE_480P,
TVMODE_480X320P_60HZ, TVMODE_480I, TVMODE_480I_RPT, TVMODE_480CVBS, TVMODE_480P,
#ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION
TVMODE_480P_59HZ,
#endif
@@ -124,6 +124,18 @@ static const tvmode_t vmode_tvmode_tab[] =
static const vinfo_t tv_info[] =
{
{ /* VMODE_480X320P_60HZ */
.name = "480x320p60hz",
.mode = VMODE_480X320P_60HZ,
.width = 480,
.height = 320,
.field_height = 320,
.aspect_ratio_num = 3,
.aspect_ratio_den = 2,
.sync_duration_num = 60,
.sync_duration_den = 1,
.video_clk = 25175000,
},
{ /* VMODE_480I */
.name = "480i",
.mode = VMODE_480I,

View File

@@ -26,7 +26,8 @@
#define TVMODE_H
typedef enum {
TVMODE_480I = 0,
TVMODE_480X320P_60HZ = 0,
TVMODE_480I,
TVMODE_480I_RPT ,
TVMODE_480CVBS,
TVMODE_480P ,

View File

@@ -227,6 +227,7 @@ int tvoutc_setclk(tvmode_t mode)
case TVMODE_576P:
setreg(&sd[xtal]);
break;
case TVMODE_480X320P_60HZ:
case TVMODE_720P:
case TVMODE_800P:
case TVMODE_800X480P_60HZ:

View File

@@ -745,6 +745,7 @@ static ssize_t store_debug(struct device * dev, struct device_attribute *attr, c
// support format lists
const char* disp_mode_t[]={
"480x320p60hz",
"480i",
"480i_rpt",
"480p",

View File

@@ -1285,6 +1285,7 @@ typedef struct{
static dispmode_vic_t dispmode_VIC_tab[]=
{
{"480x320p60hz", HDMI_480x320p60hz},
{"480i_4_3", HDMI_480i60},
{"480i_rpt", HDMI_480i60_16x9_rpt},
{"480i", HDMI_480i60_16x9},

View File

@@ -22,6 +22,17 @@ extern int dvi_mode;
static Hdmi_tx_video_para_t hdmi_tx_video_params[] =
{
{
.VIC = HDMI_480x320p60hz,
.color_prefer = COLOR_SPACE_RGB444,
.color_depth = COLOR_24BIT,
.bar_info = B_BAR_VERT_HORIZ,
.repeat_time = NO_REPEAT,
.aspect_ratio = TV_ASPECT_RATIO_4_3,
.cc = CC_ITU709,
.ss = SS_SCAN_UNDER,
.sc = SC_SCALE_HORIZ_VERT,
},
{
.VIC = HDMI_640x480p60,
.color_prefer = COLOR_SPACE_RGB444,

View File

@@ -3,7 +3,8 @@
typedef enum HDMI_Video_Type_ {
HDMI_Unkown = 0 ,
HDMI_640x480p60 = 1 ,
HDMI_480x320p60hz = 1,
HDMI_640x480p60,
HDMI_480p60,
HDMI_480p60_16x9,
HDMI_720p60,

View File

@@ -7,7 +7,7 @@
} while (0)
#ifdef CONFIG_AM_HDMI_ONLY
#define PARA_HDMI_ONLY 30
#define PARA_HDMI_ONLY 31
typedef struct {
char *name;

View File

@@ -28,7 +28,8 @@
#define VMODE_LOGO_BIT_MASK 0x8000
#define VMODE_MODE_BIT_MASK 0xff
typedef enum {
VMODE_480I = 0,
VMODE_480X320P_60HZ = 0,
VMODE_480I,
VMODE_480I_RPT ,
VMODE_480CVBS,
VMODE_480P ,