AMLOGIC: add 800x480 60hz support

Change-Id: I0d0c16d6186ad4a06a7a57c31c81c9104561bca0

Signed-off-by: Dongjin Kim <tobetter@gmail.com>
This commit is contained in:
Mauro Ribeiro
2014-12-02 17:17:38 -02:00
committed by Dongjin Kim
parent 3c1e714e39
commit 8818f815d2
12 changed files with 107 additions and 5 deletions

View File

@@ -748,6 +748,22 @@ static void hdmi_tvenc_set(Hdmi_tx_video_para_t *param)
SOF_LINES = 14;
TOTAL_FRAMES = 4;
}
else if(param->VIC==HDMI_800x480p60hz){
INTERLACE_MODE = 0;
PIXEL_REPEAT_VENC = 0; //MDRJR
PIXEL_REPEAT_HDMI = 0;
ACTIVE_PIXELS = 800;
ACTIVE_LINES = 480;
LINES_F0 = 500;
LINES_F1 = 500;
FRONT_PORCH = 24;
HSYNC_PIXELS = 72;
BACK_PORCH = 96;
EOF_LINES = 3;
VSYNC_LINES = 7;
SOF_LINES = 10;
TOTAL_FRAMES = 4;
}
else if(param->VIC==HDMI_1280x1024){
INTERLACE_MODE = 0;
PIXEL_REPEAT_VENC = 0;
@@ -923,6 +939,7 @@ static void hdmi_tvenc_set(Hdmi_tx_video_para_t *param)
);
break;
case HDMI_640x480p60:
case HDMI_800x480p60hz:
aml_write_reg32(P_VPU_HDMI_SETTING, 2);
break;
case HDMI_720p60:
@@ -1829,6 +1846,9 @@ static void hdmitx_set_pll(Hdmi_tx_video_para_t *param)
case HDMI_800p:
set_vmode_clk(VMODE_800P);
break;
case HDMI_800x480p60hz:
set_vmode_clk(VMODE_800X480P_60HZ);
break;
case HDMI_1080i60:
case HDMI_1080i50:
set_vmode_clk(VMODE_1080I);
@@ -1888,7 +1908,7 @@ static int hdmitx_set_dispmode(hdmitx_dev_t* hdmitx_device, Hdmi_tx_video_para_t
&&(param->VIC!=HDMI_1080p30)
&&(param->VIC!=HDMI_1080p24)
&&(param->VIC!=HDMI_1080p60)&&(param->VIC!=HDMI_1080p50)
&&(param->VIC!=HDMI_720p60)&&(param->VIC!=HDMI_720p50)
&&(param->VIC!=HDMI_720p60)&&(param->VIC!=HDMI_720p50) &&(param->VIC!=HDMI_800x480p60hz)
&&(param->VIC!=HDMI_640x480p60) &&(param->VIC!=HDMI_1280x1024) &&(param->VIC!=HDMI_1920x1200) && (param->VIC!=HDMI_800p)
&&(param->VIC!=HDMI_4k2k_30)&&(param->VIC!=HDMI_4k2k_25)&&(param->VIC!=HDMI_4k2k_24)&&(param->VIC!=HDMI_4k2k_smpte_24)
&&(param->VIC!=HDMI_1080i60)&&(param->VIC!=HDMI_1080i50)){
@@ -2187,6 +2207,7 @@ static Vic_attr_map vic_attr_map_table[] = {
{HDMI_480p60_16x9, 27000 },
{HDMI_720p60, 74250 },
{HDMI_800p, 71000 },
{HDMI_800x480p60hz, 29760 },
{HDMI_1080i60, 74250 },
{HDMI_480i60, 27000 },
{HDMI_480i60_16x9, 27000 },
@@ -2330,6 +2351,7 @@ static int hdmitx_set_audmode(struct hdmi_tx_dev_s* hdmitx_device, Hdmi_tx_audio
break;
//TMDS Clock:74.176MHz
case HDMI_800p:
case HDMI_800x480p60hz:
case HDMI_720p60:
case HDMI_720p50:
case HDMI_1280x1024:

View File

@@ -152,6 +152,45 @@ static const reg_t tvregs_800p[] = { // MDRJR verify
{MREG_END_MARKER, 0 }
};
static const reg_t tvregs_800x480p60hz[] = {
{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, 0x3DF},
{P_ENCP_VIDEO_MAX_LNCNT, 0x1F3},
{P_ENCP_VIDEO_HAVON_BEGIN, 0xA8},
{P_ENCP_VIDEO_HAVON_END, 0x3C7},
{P_ENCP_VIDEO_VAVON_BLINE, 0x11},
{P_ENCP_VIDEO_VAVON_ELINE, 0x1F0},
{P_ENCP_VIDEO_HSO_BEGIN, 0x0},
{P_ENCP_VIDEO_HSO_END, 0x48},
{P_ENCP_VIDEO_VSO_BEGIN, 0x1E},
{P_ENCP_VIDEO_VSO_END, 0x32},
{P_ENCP_VIDEO_VSO_BLINE, 0x0},
{P_ENCP_VIDEO_VSO_ELINE, 0x7},
{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_720p_50hz[] = {
{P_VENC_VDAC_SETTING, 0xff, },
{P_HHI_VID_CLK_CNTL, 0x0,},
@@ -1533,6 +1572,7 @@ static const reg_t *tvregsTab[] = {
tvregs_576p, // For REPEAT MODE use, ENC setting is same
tvregs_720p,
tvregs_800p,
tvregs_800x480p60hz,
tvregs_1080i, //Adjust tvregs_* sequences and match the enum define in tvmode.h
tvregs_1080p,
tvregs_720p_50hz,
@@ -1563,6 +1603,7 @@ static const tvinfo_t tvinfoTab[] = {
{.xres = 720, .yres = 576, .id = "576p_prt"},
{.xres = 1280, .yres = 720, .id = "720p"},
{.xres = 1280, .yres = 800, .id = "800p"},
{.xres = 800, .yres = 480, .id = "800x480p60hz"},
{.xres = 1920, .yres = 1080, .id = "1080i"},
{.xres = 1920, .yres = 1080, .id = "1080p"},
{.xres = 1280, .yres = 720, .id = "720p50hz"},

View File

@@ -144,6 +144,16 @@ static void set_hpll_clk_out(unsigned clk)
aml_write_reg32(P_HHI_VID_PLL_CNTL, 0x4001042d);
WAIT_FOR_PLL_LOCKED(P_HHI_VID_PLL_CNTL);
break;
case 2380:
aml_write_reg32(P_HHI_VID_PLL_CNTL2, 0x59c80000);
aml_write_reg32(P_HHI_VID_PLL_CNTL3, 0x0a563823);
aml_write_reg32(P_HHI_VID_PLL_CNTL4, 0x0123b100);
aml_write_reg32(P_HHI_VID_PLL_CNTL5, 0x12385);
aml_write_reg32(P_HHI_VID_PLL_CNTL, 0x60010431);
aml_write_reg32(P_HHI_VID_PLL_CNTL, 0x40010431);
WAIT_FOR_PLL_LOCKED(P_HHI_VID_PLL_CNTL);
aml_write_reg32(P_HHI_VID_PLL_CNTL2, 0x69c8c994);
break;
case 2014:
aml_write_reg32(P_HHI_VID_PLL_CNTL2, 0x59c8cf55);
aml_write_reg32(P_HHI_VID_PLL_CNTL3, 0x0a563823);
@@ -545,6 +555,7 @@ static enc_clk_val_t setting_enc_clk_val[] = {
{VMODE_576P, 2160, 8, 1, 1, VIU_ENCP, 5, 4, 2, 1, -1, -1, -1, 1, -1},
{VMODE_720P, 1488, 2, 1, 1, VIU_ENCP, 10, 1, 2, 1, -1, -1, -1, 1, -1},
{VMODE_800P, 1422, 2, 2, 1, VIU_ENCP, 10, 1, 1, 1, -1, -1, -1, 1, -1}, // MDRJR Verify
{VMODE_800X480P_60HZ, 2380, 8, 4, 1, VIU_ENCP, 10, 4, 1, 1, -1, -1, -1, 1, -1},
{VMODE_1080I, 1488, 2, 1, 1, VIU_ENCP, 10, 1, 2, 1, -1, -1, -1, 1, -1},
{VMODE_1080P, 1488, 1, 1, 1, VIU_ENCP, 10, 1, 1, 1, -1, -1, -1, 1, -1},
{VMODE_1080P, 1488, 1, 1, 1, VIU_ENCP, 10, 1, 1, 1, -1, -1, -1, 1, -1},

View File

@@ -72,7 +72,7 @@ SET_TV_CLASS_ATTR(vdac_setting,parse_vdac_setting)
static const tvmode_t vmode_tvmode_tab[] =
{
TVMODE_480I, TVMODE_480I_RPT, TVMODE_480CVBS, TVMODE_480P, TVMODE_480P_RPT, TVMODE_576I, TVMODE_576I_RPT, TVMODE_576CVBS, TVMODE_576P, TVMODE_576P_RPT, TVMODE_720P, TVMODE_800P, TVMODE_1080I, TVMODE_1080P,
TVMODE_480I, TVMODE_480I_RPT, TVMODE_480CVBS, TVMODE_480P, TVMODE_480P_RPT, TVMODE_576I, TVMODE_576I_RPT, TVMODE_576CVBS, TVMODE_576P, TVMODE_576P_RPT, TVMODE_720P, TVMODE_800P, TVMODE_800X480P_60HZ, TVMODE_1080I, TVMODE_1080P,
TVMODE_720P_50HZ, TVMODE_1080I_50HZ, TVMODE_1080P_50HZ,TVMODE_1080P_24HZ, TVMODE_4K2K_30HZ, TVMODE_4K2K_25HZ, TVMODE_4K2K_24HZ, TVMODE_4K2K_SMPTE,
VMODE_1920x1200, TVMODE_VGA, TVMODE_SVGA, TVMODE_XGA, TVMODE_SXGA, TVMODE_WSXGA, TVMODE_FHDVGA,
};
@@ -224,6 +224,18 @@ static const vinfo_t tv_info[] =
.sync_duration_den = 1,
.video_clk = 71000000,
},
{ /* VMODE_800X480P_60HZ */
.name = "800x480p60hz",
.mode = VMODE_800X480P_60HZ,
.width = 800,
.height = 480,
.field_height = 480,
.aspect_ratio_num = 5,
.aspect_ratio_den = 3,
.sync_duration_num = 60,
.sync_duration_den = 1,
.video_clk = 29760000,
},
{ /* VMODE_1080I */
.name = "1080i",
.mode = VMODE_1080I,

View File

@@ -38,6 +38,7 @@ typedef enum {
TVMODE_576P_RPT ,
TVMODE_720P ,
TVMODE_800P ,
TVMODE_800X480P_60HZ,
TVMODE_1080I ,
TVMODE_1080P ,
TVMODE_720P_50HZ ,

View File

@@ -228,6 +228,7 @@ int tvoutc_setclk(tvmode_t mode)
break;
case TVMODE_720P:
case TVMODE_800P:
case TVMODE_800X480P_60HZ:
case TVMODE_720P_50HZ:
case TVMODE_1080I:
case TVMODE_1080I_50HZ:
@@ -491,6 +492,7 @@ int tvoutc_setmode(tvmode_t mode)
case TVMODE_480P_RPT:
case TVMODE_576P:
case TVMODE_576P_RPT:
case TVMODE_800X480P_60HZ:
case TVMODE_720P:
case TVMODE_720P_50HZ:
case TVMODE_1080I: //??

View File

@@ -684,6 +684,7 @@ const char* disp_mode_t[]={
"576p_rpt",
"720p",
"800p",
"800x480p60hz",
"1080i",
"1080p",
"720p50hz",

View File

@@ -1300,6 +1300,7 @@ static dispmode_vic_t dispmode_VIC_tab[]=
{"720p50hz", HDMI_720p50},
{"720p", HDMI_720p60},
{"800p", HDMI_800p},
{"800x480p60hz", HDMI_800x480p60hz},
{"vga", HDMI_640x480p60},
{"sxga", HDMI_1280x1024},
{"1920x1200", HDMI_1920x1200},

View File

@@ -91,6 +91,17 @@ static Hdmi_tx_video_para_t hdmi_tx_video_params[] =
.ss = SS_SCAN_UNDER,
.sc = SC_SCALE_HORIZ_VERT,
},
{
.VIC = HDMI_800x480p60hz,
.color_prefer = COLOR_SPACE_RGB444,
.color_depth = COLOR_24BIT,
.bar_info = B_BAR_VERT_HORIZ,
.repeat_time = NO_REPEAT,
.aspect_ratio = TV_ASPECT_RATIO_16_9,
.cc = CC_ITU709,
.ss = SS_SCAN_UNDER,
.sc = SC_SCALE_HORIZ_VERT,
},
{
.VIC = HDMI_1080i60,
.color_prefer = COLOR_SPACE_RGB444,

View File

@@ -127,11 +127,9 @@ int aml_dvfs_do_voltage_change(struct aml_dvfs_master *master, uint32_t new_freq
int ret = 0;
if (master->table == NULL) {
DVFS_WARN("%s, no dvfs table\n", __func__);
goto error;
}
if (master->driver == NULL) {
DVFS_WARN("%s, no dvfs driver\n", __func__);
goto error;
}
/*

3
include/linux/amlogic/hdmi_tx/hdmi_info_global.h Executable file → Normal file
View File

@@ -28,8 +28,9 @@ typedef enum HDMI_Video_Type_ {
HDMI_480p60_16x9_rpt = 36,
HDMI_576p50_16x9_rpt = 38,
HDMI_1280x1024 = 71,
HDMI_1920x1200 = 100,
HDMI_800p = 72,
HDMI_800x480p60hz = 73,
HDMI_1920x1200 = 100,
HDMI_4k2k_24 = 93, // CEA-861-F
HDMI_4k2k_25,
HDMI_4k2k_30,

View File

@@ -40,6 +40,7 @@ typedef enum {
VMODE_576P_RPT ,
VMODE_720P ,
VMODE_800P ,
VMODE_800X480P_60HZ,
VMODE_1080I ,
VMODE_1080P ,
VMODE_720P_50HZ ,