From 082752cd5c678e276fa568a40796cdf3d524c0d5 Mon Sep 17 00:00:00 2001 From: Mauro Ribeiro Date: Tue, 2 Dec 2014 17:17:38 -0200 Subject: [PATCH] AMLOGIC: add 800x480 60hz support Change-Id: I0d0c16d6186ad4a06a7a57c31c81c9104561bca0 Signed-off-by: Dongjin Kim --- arch/arm/mach-meson8b/hdmi_tx_hw/hdmi_tx_hw.c | 24 ++++++++++- arch/arm/mach-meson8b/include/mach/tvregs.h | 41 +++++++++++++++++++ drivers/amlogic/display/vout/enc_clk_config.c | 11 +++++ drivers/amlogic/display/vout/tvconf.c | 14 ++++++- drivers/amlogic/display/vout/tvmode.h | 1 + drivers/amlogic/display/vout/tvoutc.c | 2 + drivers/amlogic/hdmi/hdmi_tx/hdmi_tx.c | 1 + drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_edid.c | 1 + drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_video.c | 11 +++++ drivers/amlogic/power/aml_dvfs/aml_dvfs.c | 2 - .../linux/amlogic/hdmi_tx/hdmi_info_global.h | 3 +- include/linux/amlogic/vout/vinfo.h | 1 + 12 files changed, 107 insertions(+), 5 deletions(-) mode change 100755 => 100644 include/linux/amlogic/hdmi_tx/hdmi_info_global.h diff --git a/arch/arm/mach-meson8b/hdmi_tx_hw/hdmi_tx_hw.c b/arch/arm/mach-meson8b/hdmi_tx_hw/hdmi_tx_hw.c index 4ce29be5df1f..8ef8859dfb6c 100755 --- a/arch/arm/mach-meson8b/hdmi_tx_hw/hdmi_tx_hw.c +++ b/arch/arm/mach-meson8b/hdmi_tx_hw/hdmi_tx_hw.c @@ -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: diff --git a/arch/arm/mach-meson8b/include/mach/tvregs.h b/arch/arm/mach-meson8b/include/mach/tvregs.h index 7c939a17583d..8f72c51abbe8 100755 --- a/arch/arm/mach-meson8b/include/mach/tvregs.h +++ b/arch/arm/mach-meson8b/include/mach/tvregs.h @@ -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"}, diff --git a/drivers/amlogic/display/vout/enc_clk_config.c b/drivers/amlogic/display/vout/enc_clk_config.c index fb23d36d62c7..6c4f189d363a 100755 --- a/drivers/amlogic/display/vout/enc_clk_config.c +++ b/drivers/amlogic/display/vout/enc_clk_config.c @@ -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); @@ -546,6 +556,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}, diff --git a/drivers/amlogic/display/vout/tvconf.c b/drivers/amlogic/display/vout/tvconf.c index 44af7f2869da..16ff6e8da0c8 100755 --- a/drivers/amlogic/display/vout/tvconf.c +++ b/drivers/amlogic/display/vout/tvconf.c @@ -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, diff --git a/drivers/amlogic/display/vout/tvmode.h b/drivers/amlogic/display/vout/tvmode.h index 0ba019bf3bcb..cc1ed6252f04 100755 --- a/drivers/amlogic/display/vout/tvmode.h +++ b/drivers/amlogic/display/vout/tvmode.h @@ -38,6 +38,7 @@ typedef enum { TVMODE_576P_RPT , TVMODE_720P , TVMODE_800P , + TVMODE_800X480P_60HZ, TVMODE_1080I , TVMODE_1080P , TVMODE_720P_50HZ , diff --git a/drivers/amlogic/display/vout/tvoutc.c b/drivers/amlogic/display/vout/tvoutc.c index 0f78f7c7e1fa..31b4698f0f4c 100755 --- a/drivers/amlogic/display/vout/tvoutc.c +++ b/drivers/amlogic/display/vout/tvoutc.c @@ -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: //?? diff --git a/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx.c b/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx.c index bbf1537c4396..f805a229499c 100755 --- a/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx.c +++ b/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx.c @@ -675,6 +675,7 @@ const char* disp_mode_t[]={ "576p_rpt", "720p", "800p", + "800x480p60hz", "1080i", "1080p", "720p50hz", diff --git a/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_edid.c b/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_edid.c index 745b560e0187..14395a3e57be 100755 --- a/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_edid.c +++ b/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_edid.c @@ -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}, diff --git a/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_video.c b/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_video.c index c052421ca30e..5a62000a75d3 100755 --- a/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_video.c +++ b/drivers/amlogic/hdmi/hdmi_tx/hdmi_tx_video.c @@ -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, diff --git a/drivers/amlogic/power/aml_dvfs/aml_dvfs.c b/drivers/amlogic/power/aml_dvfs/aml_dvfs.c index 7623f340784c..ca0b58a239dc 100755 --- a/drivers/amlogic/power/aml_dvfs/aml_dvfs.c +++ b/drivers/amlogic/power/aml_dvfs/aml_dvfs.c @@ -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; } /* diff --git a/include/linux/amlogic/hdmi_tx/hdmi_info_global.h b/include/linux/amlogic/hdmi_tx/hdmi_info_global.h old mode 100755 new mode 100644 index 3bd4e3ea5d50..f6e8acfde5ec --- a/include/linux/amlogic/hdmi_tx/hdmi_info_global.h +++ b/include/linux/amlogic/hdmi_tx/hdmi_info_global.h @@ -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, diff --git a/include/linux/amlogic/vout/vinfo.h b/include/linux/amlogic/vout/vinfo.h index 97379a11dc28..5c614f7477f6 100755 --- a/include/linux/amlogic/vout/vinfo.h +++ b/include/linux/amlogic/vout/vinfo.h @@ -40,6 +40,7 @@ typedef enum { VMODE_576P_RPT , VMODE_720P , VMODE_800P , + VMODE_800X480P_60HZ, VMODE_1080I , VMODE_1080P , VMODE_720P_50HZ ,