diff --git a/software/sys_controller/av_controller.c b/software/sys_controller/av_controller.c index 5a679c3..ded48b0 100755 --- a/software/sys_controller/av_controller.c +++ b/software/sys_controller/av_controller.c @@ -131,6 +131,7 @@ typedef enum { VIDEO_LPF, LINETRIPLE_ENABLE, LINETRIPLE_MODE, + EN_ALC, TX_MODE, #ifndef DEBUG FW_UPDATE, @@ -166,6 +167,7 @@ typedef struct { alt_8 sync_thold; alt_u8 sync_lpf; alt_u8 video_lpf; + alt_u8 en_alc; } avconfig_t; // Target configuration @@ -208,6 +210,7 @@ const menuitem_t menu[] = { { VIDEO_LPF, "Video LPF" }, { LINETRIPLE_ENABLE, "240p/288p lineX3" }, { LINETRIPLE_MODE, "Linetriple mode" }, + { EN_ALC, "Auto Lev. Contr." }, { TX_MODE, "TX mode" }, #ifndef DEBUG { FW_UPDATE, "Firmware update" }, @@ -828,6 +831,11 @@ void display_menu(alt_u8 forcedisp) tc.l3_mode = tc.l3_mode < L3_MODE_MAX ? tc.l3_mode+1 : 0; strncpy(menu_row2, l3_mode_desc[tc.l3_mode], LCD_ROW_LEN+1); break; + case EN_ALC: + if ((code == VAL_MINUS) || (code == VAL_PLUS)) + tc.en_alc = !tc.en_alc; + sniprintf(menu_row2, LCD_ROW_LEN+1, tc.en_alc ? "Enabled" : "Disabled"); + break; case TX_MODE: if (!(IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE) & HDMITX_MODE_MASK) && ((code == VAL_MINUS) || (code == VAL_PLUS))) { tc.tx_mode = !tc.tx_mode; @@ -1046,10 +1054,10 @@ status_t get_status(tvp_input_t input) status = (status < MODE_CHANGE) ? MODE_CHANGE : status; } - if ((tc.linemult_target != cm.cc.linemult_target) || (tc.l3_mode != cm.cc.l3_mode)) - status = (status < MODE_CHANGE) ? MODE_CHANGE : status; - - if ((tc.s480p_mode != cm.cc.s480p_mode) && (video_modes[cm.id].flags & (MODE_DTV480P|MODE_VGA480P))) + if ((tc.linemult_target != cm.cc.linemult_target) || + (tc.l3_mode != cm.cc.l3_mode) || + ((tc.s480p_mode != cm.cc.s480p_mode) && (video_modes[cm.id].flags & (MODE_DTV480P|MODE_VGA480P))) || + (tc.en_alc != cm.cc.en_alc)) status = (status < MODE_CHANGE) ? MODE_CHANGE : status; cm.totlines = totlines; @@ -1152,7 +1160,7 @@ void program_mode() printf("Mode %s selected\n", video_modes[cm.id].name); - tvp_source_setup(cm.id, target_type, (cm.progressive ? cm.totlines : cm.totlines/2), v_hz_x100/100, cm.refclk); + tvp_source_setup(cm.id, target_type, cm.cc.en_alc, (cm.progressive ? cm.totlines : cm.totlines/2), v_hz_x100/100, cm.refclk); set_lpf(cm.cc.video_lpf); set_videoinfo(); } diff --git a/software/sys_controller/tvp7002/tvp7002.c b/software/sys_controller/tvp7002/tvp7002.c index 2dc5897..1255139 100755 --- a/software/sys_controller/tvp7002/tvp7002.c +++ b/software/sys_controller/tvp7002/tvp7002.c @@ -91,29 +91,28 @@ static void tvp_set_clamp_position(video_type type) } } -static void tvp_set_alc(video_type type) +static void tvp_set_alc(alt_u8 en_alc, video_type type) { - //disable ALC - //tvp_writereg(TVP_ALCEN, 0x00); - //tvp_writereg(TVP_ALCEN, 0x80); - - - - //select ALC placement - switch (type) { - case VIDEO_LDTV: - tvp_writereg(TVP_ALCPLACE, 0x9); - break; - case VIDEO_SDTV: - case VIDEO_EDTV: - case VIDEO_PC: - tvp_writereg(TVP_ALCPLACE, 0x18); - break; - case VIDEO_HDTV: - tvp_writereg(TVP_ALCPLACE, 0x5A); - break; - default: - break; + if (en_alc) { + tvp_writereg(TVP_ALCEN, 0x80); //enable ALC + //select ALC placement + switch (type) { + case VIDEO_LDTV: + tvp_writereg(TVP_ALCPLACE, 0x9); + break; + case VIDEO_SDTV: + case VIDEO_EDTV: + case VIDEO_PC: + tvp_writereg(TVP_ALCPLACE, 0x18); + break; + case VIDEO_HDTV: + tvp_writereg(TVP_ALCPLACE, 0x5A); + break; + default: + break; + } + } else { + tvp_writereg(TVP_ALCEN, 0x00); //disable ALC } } @@ -304,14 +303,14 @@ void tvp_set_sog_thold(alt_u8 val) printf("SOG thold set to 0x%x\n", val); } -void tvp_source_setup(alt_8 modeid, video_type type, alt_u32 vlines, alt_u8 hz, alt_u8 refclk) +void tvp_source_setup(alt_8 modeid, video_type type, alt_u8 en_alc, alt_u32 vlines, alt_u8 hz, alt_u8 refclk) { // Configure clock settings tvp_sel_clk(refclk); // Clamp position and ALC tvp_set_clamp_position(type); - tvp_set_alc(type); + tvp_set_alc(en_alc, type); //set analog (coarse) gain to max recommended value (-> 91% of the ADC range with 0.7Vpp input) tvp_writereg(TVP_BG_CGAIN, 0x88); diff --git a/software/sys_controller/tvp7002/tvp7002.h b/software/sys_controller/tvp7002/tvp7002.h old mode 100644 new mode 100755 index 405ced6..68e0ea9 --- a/software/sys_controller/tvp7002/tvp7002.h +++ b/software/sys_controller/tvp7002/tvp7002.h @@ -83,7 +83,7 @@ void tvp_set_hpll_phase(alt_u8 val); void tvp_set_sog_thold(alt_u8 val); -void tvp_source_setup(alt_8 modeid, video_type type, alt_u32 vlines, alt_u8 hz, alt_u8 refclk); +void tvp_source_setup(alt_8 modeid, video_type type, alt_u8 en_alc, alt_u32 vlines, alt_u8 hz, alt_u8 refclk); void tvp_source_sel(tvp_input_t input, video_format fmt, alt_u8 refclk);