mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
display/hdmi: add 480x320p60hz
Change-Id: I88e3e254650c63630c36d2c523ae82e9ea905967
This commit is contained in:
@@ -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},
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 ,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ,
|
||||
|
||||
Reference in New Issue
Block a user