static int do_osd_close(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { gdev = NULL; osd_enable_hw(0, 0); osd_enable_hw(1, 0); osd_set_free_scale_enable_hw(0, 0); osd_set_free_scale_enable_hw(1, 0); return 0; }
// change tv mode and show logo immediatly when hdmi pluged int set_mode_and_show_logo(int hpd_state) { int value; logo_object_t* plogo = get_current_logo_obj(); if((plogo->para.vout_mode & VMODE_MODE_BIT_MASK) > VMODE_4K2K_SMPTE) { return 0; // MID } printk("hdmi detect: %s.\n", (hpd_state==1)?"plug":"unplug"); // osd2 freescale enable, the logo is shown on osd2, reset freescale. value = aml_read_reg32(P_VPP_OSD_SC_CTRL0) & 0xb; if(value == 0x9) { vmode_t cur_mode; if (hpd_state == 0){ cur_mode = cvbsmode_hdmionly; } else{ cur_mode = hdmimode_hdmionly; } if(tvmode != cur_mode) { tvmode = cur_mode; osd_enable_hw(0, plogo->para.output_dev_type); set_current_vmode(cur_mode); vout_notifier_call_chain(VOUT_EVENT_MODE_CHANGE,&cur_mode) ; set_osd_freescaler(plogo->para.output_dev_type, plogo, cur_mode); } } return 1; }
static int do_osd_enable(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { ulong index = 0; index = simple_strtoul(getenv("display_layer"), NULL, 0); osd_enable_hw(index, 0); return 0; }
static void osd_reset(void) { osd_set_free_scale_enable_hw(0, 0); osd_enable_hw(0, 1); }
void set_osd_freescaler(int index, logo_object_t *plogo, vmode_t new_mode) { vmode_t old_mode = plogo->para.vout_mode & VMODE_MODE_BIT_MASK; printk("aml_logo: outputmode changed(%d->%d), reset osd%d scaler.\n", old_mode, new_mode, index); osd_free_scale_mode_hw(index, 1); osd_free_scale_enable_hw(index, 0); osd_set_color_mode(index, &default_color_format_array[plogo->dev->output_dev.osd.color_depth]); switch(old_mode) { case VMODE_480I: case VMODE_480CVBS: case VMODE_480P: case VMODE_576I: case VMODE_576CVBS: case VMODE_576P: case VMODE_720P: case VMODE_720P_50HZ: osd_set_free_scale_axis_hw(index, 0, 0, 1279, 719); osddev_update_disp_axis_hw(0, 1279, 0, 719, 0, 0, 0, index); break; case VMODE_1080I: case VMODE_1080I_50HZ: case VMODE_1080P: case VMODE_1080P_50HZ: case VMODE_1080P_24HZ: case VMODE_4K2K_24HZ: case VMODE_4K2K_25HZ: case VMODE_4K2K_30HZ: case VMODE_4K2K_SMPTE: osd_set_free_scale_axis_hw(index, 0, 0, 1919, 1079); osddev_update_disp_axis_hw(0, 1919, 0, 1079, 0, 0, 0, index); break; default: break; } switch(new_mode) { case VMODE_480I: case VMODE_480CVBS: case VMODE_480P: osd_set_window_axis_hw(index, 0, 0, 719, 479); break; case VMODE_576I: case VMODE_576CVBS: case VMODE_576P: osd_set_window_axis_hw(index, 0, 0, 719, 575); break; case VMODE_720P: case VMODE_720P_50HZ: osd_set_window_axis_hw(index, 0, 0, 1279, 719); break; case VMODE_1080I: case VMODE_1080I_50HZ: case VMODE_1080P: case VMODE_1080P_50HZ: case VMODE_1080P_24HZ: osd_set_window_axis_hw(index, 0, 0, 1919, 1079); break; case VMODE_4K2K_24HZ: case VMODE_4K2K_25HZ: case VMODE_4K2K_30HZ: osd_set_window_axis_hw(index, 0, 0, 3839, 2159); break; case VMODE_4K2K_SMPTE: osd_set_window_axis_hw(index, 0, 0, 4095, 2159); break; default: break; } osd_free_scale_enable_hw(index, 0x10001); osd_enable_hw(1, index); }