diff --git a/software/sys_controller/av_controller.c b/software/sys_controller/av_controller.c index 0636c5c..c1b33df 100644 --- a/software/sys_controller/av_controller.c +++ b/software/sys_controller/av_controller.c @@ -152,6 +152,7 @@ typedef enum { VIDEO_LPF, LINETRIPLE_ENABLE, LINETRIPLE_MODE, + EN_ALC, TX_MODE, #ifndef DEBUG FW_UPDATE, @@ -190,6 +191,7 @@ typedef struct { alt_8 vsync_thold; alt_u8 sync_lpf; alt_u8 video_lpf; + alt_u8 en_alc; alt_u8 pre_coast; alt_u8 post_coast; } avconfig_t; @@ -236,6 +238,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, "" }, @@ -632,6 +635,7 @@ void set_default_avconfig() tc.pre_coast = DEFAULT_PRE_COAST; tc.post_coast = DEFAULT_POST_COAST; tc.vsync_thold = DEFAULT_VSYNC_THOLD; + tc.en_alc = 1; } int read_userdata() @@ -887,6 +891,11 @@ void display_menu(alt_u8 forcedisp) tc.l3_mode++; 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; @@ -1167,6 +1176,9 @@ status_t get_status(tvp_input_t input, video_format format) if (tc.sync_lpf != cm.cc.sync_lpf) tvp_set_sync_lpf(tc.sync_lpf); + if (tc.en_alc != cm.cc.en_alc) + tvp_set_alc(tc.en_alc, target_type); + // use memcpy instead? cm.cc = tc; @@ -1241,7 +1253,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.cc.pre_coast, cm.cc.post_coast, cm.cc.vsync_thold); + tvp_source_setup(cm.id, target_type, cm.cc.en_alc, (cm.progressive ? cm.totlines : cm.totlines/2), v_hz_x100/100, cm.cc.pre_coast, cm.cc.post_coast, cm.cc.vsync_thold); 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 7abbc50..fe2a2f6 100755 --- a/software/sys_controller/tvp7002/tvp7002.c +++ b/software/sys_controller/tvp7002/tvp7002.c @@ -80,31 +80,6 @@ static void tvp_set_clamp_position(video_type type) } } -static void tvp_set_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; - } -} - - inline alt_u32 tvp_readreg(alt_u32 regaddr) { I2C_start(I2CA_BASE, TVP_BASE, 0); @@ -314,11 +289,37 @@ 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 pre_coast, alt_u8 post_coast, alt_u8 vsync_thold) +void tvp_set_alc(alt_u8 en_alc, video_type type) +{ + 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 + } +} + +void tvp_source_setup(alt_8 modeid, video_type type, alt_u8 en_alc, alt_u32 vlines, alt_u8 hz, alt_u8 pre_coast, alt_u8 post_coast, alt_u8 vsync_thold) { // Clamp position and ALC tvp_set_clamp_position(type); - tvp_set_alc(type); + tvp_set_alc(en_alc, type); tvp_set_ssthold(vsync_thold); diff --git a/software/sys_controller/tvp7002/tvp7002.h b/software/sys_controller/tvp7002/tvp7002.h old mode 100644 new mode 100755 index 4df62cf..1261313 --- a/software/sys_controller/tvp7002/tvp7002.h +++ b/software/sys_controller/tvp7002/tvp7002.h @@ -89,7 +89,9 @@ 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 pre_coast, alt_u8 post_coast, alt_u8 vsync_thold); +void tvp_set_alc(alt_u8 en_alc, video_type type); + +void tvp_source_setup(alt_8 modeid, video_type type, alt_u8 en_alc, alt_u32 vlines, alt_u8 hz, alt_u8 pre_coast, alt_u8 post_coast, alt_u8 vsync_thold); void tvp_source_sel(tvp_input_t input, video_format fmt); diff --git a/software/sys_controller_bsp/settings.bsp b/software/sys_controller_bsp/settings.bsp index 9a27ded..4291c0a 100644 --- a/software/sys_controller_bsp/settings.bsp +++ b/software/sys_controller_bsp/settings.bsp @@ -2,9 +2,9 @@ hal default - May 22, 2016 8:28:30 PM - 1463938110913 - ./ + May 24, 2016 1:04:38 AM + 1464041078241 + /home/markus/Code/ossc/software/sys_controller_bsp settings.bsp ../../sys.sopcinfo default