// sii9233a utility void dump_input_video_info(void) { int height,width,h_total,v_total; int hs_fp,hs_width,hs_bp; int vs_fp,vs_de; //int clk,frame_rate; height = sii_get_h_active(); width = sii_get_v_active(); h_total = sii_get_h_total(); v_total = sii_get_v_total(); hs_fp = sii_get_hs_frontporch(); hs_width = sii_get_hs_width(); hs_bp = sii_get_hs_backporch(); vs_fp = sii_get_vs_frontporch(); vs_de = sii_get_vs_to_de(); //clk = sii_get_video_pixel_clock(); //frame_rate = sii_get_frame_rate(); printk("sii9223a hdmi-in video info:\n\n\ height * width = %4d x %4d, ( %4d x %4d )\n\ h sync = %4d, %4d, %4d\n\ v sync = %4d, %4d\n", height,width,h_total,v_total, hs_fp,hs_width,hs_bp, vs_fp,vs_de); }
int sii_get_hs_backporch(void) { int backporch = 0; backporch = sii_get_h_total() - sii_get_h_active() - sii_get_hs_frontporch() - sii_get_hs_width(); return backporch; }
int sii_get_frame_rate(void) { unsigned int h_total, v_total, f_xtal = 27000000, clk; unsigned int t_framerate; h_total = sii_get_h_total(); v_total = sii_get_v_total(); clk = sii_get_video_pixel_clock(); t_framerate = h_total*clk*v_total/2048/f_xtal; return (int)t_framerate; }
void sii5293_start_vdin(sii5293_vdin *info, int width, int height, int frame_rate, int field_flag) { vdin_parm_t para; printk("[%s]-%.3d, width = %d, height = %d, frame_rate = %d, field_flag = %d\n", __FUNCTION__, __LINE__, width,height,frame_rate,field_flag); // printk("[%s]-%.3d, info = 0x%x\n",__FUNCTION__, __LINE__, info); if(info->vdin_started) { //printk("[%s]-%.3d, info->vdin_info = 0x%x\n",__FUNCTION__, __LINE__, &(info->vdin_info) ); if( (info->vdin_info.cur_width != width) || (info->vdin_info.cur_height != height) || (info->vdin_info.cur_frame_rate != frame_rate) ) { stop_tvin_service(0); CLK_GATE_OFF(MISC_DVIN); info->vdin_started=0; printk("%s: stop vdin\n", __func__); } } CLK_GATE_ON(MISC_DVIN); if( (info->vdin_started==0) && (width>0) && (height>0) && (frame_rate>0) ) { int start_pix=138, start_line_o=22, start_line_e=23, h_total=1728, v_total=625; info->vdin_info.cur_width = width; info->vdin_info.cur_height = height; info->vdin_info.cur_frame_rate = frame_rate; if(field_flag && height <= 576 ) { // for rgb 576i signal from 9233, it's 720/864, not 1440/1728 if( (width==720)&&(height==288) ) { start_pix = 138; start_line_o = 22; start_line_e = 23; h_total = 1728; v_total = 625; } // for rgb 480i signal from 9233, it's 720/858, not 1440/1716 else if( (width==720)&&(height==240) ) { start_pix = 114; start_line_o = 18; start_line_e = 19; h_total = 1716; v_total = 525; } sii5293_config_dvin(1, //hs_pol_inv, 1, //vs_pol_inv, 0, //de_pol_inv, 0, //field_pol_inv, 0, //ext_field_sel, 3, //de_mode, 0, //data_comp_map, 0, //mode_422to444, 0, //dvin_clk_inv, 0, //vs_hs_tim_ctrl, 400, //hs_lead_vs_odd_min, 1200, //hs_lead_vs_odd_max, start_pix,//sii_get_hs_backporch()*2,//0xdc, //active_start_pix_fe, start_pix,//sii_get_hs_backporch()*2,//0xdc, //active_start_pix_fo, start_line_e,//sii_get_vs_backporch(), //0x19, //active_start_line_fe, start_line_o,//sii_get_vs_backporch(),//0x19, //active_start_line_fo, h_total,//sii_get_h_total(), //0x672, //line_width, v_total//sii_get_v_total()*2 //0x2ee //field_height ); } else { sii5293_config_dvin(height>576?0:1, //hs_pol_inv, height>576?0:1, //vs_pol_inv, 0, //de_pol_inv, (field_flag && height>=540)?1:0, //field_pol_inv, set to 1 for 1080i 0, //ext_field_sel, 3, //de_mode, 0, //data_comp_map, 0, //mode_422to444, 0, //dvin_clk_inv, 0, //vs_hs_tim_ctrl, 0, //hs_lead_vs_odd_min, 0, //hs_lead_vs_odd_max, sii_get_hs_backporch(),//0xdc, //active_start_pix_fe, sii_get_hs_backporch(),//0xdc, //active_start_pix_fo, sii_get_vs_backporch(), //0x19, //active_start_line_fe, sii_get_vs_backporch(),//0x19, //active_start_line_fo, sii_get_h_total(), //0x672, //line_width, sii_get_v_total() //0x2ee //field_height ); } memset( ¶, 0, sizeof(para)); para.port = TVIN_PORT_DVIN0; para.frame_rate = frame_rate; para.h_active = info->vdin_info.cur_width; para.v_active = info->vdin_info.cur_height; if(field_flag){ if(info->vdin_info.cur_width == 1920 && (info->vdin_info.cur_height == 1080 || info->vdin_info.cur_height == 540)){ if( frame_rate == 60 ) para.fmt = TVIN_SIG_FMT_HDMI_1920X1080I_60HZ; else if( frame_rate == 50 ) para.fmt = TVIN_SIG_FMT_HDMI_1920X1080I_50HZ_A; para.v_active = 1080; } /* else if( info->vdin_info.cur_width == 720 && (info->vdin_info.cur_height == 576 || info->vdin_info.cur_height == 288)){ para.fmt = TVIN_SIG_FMT_HDMI_720X576I_50HZ; para.v_active = 576; set_invert_top_bot(true); } */ else if(info->vdin_info.cur_width == 720 && (info->vdin_info.cur_height == 576 || info->vdin_info.cur_height == 288)){ para.fmt = TVIN_SIG_FMT_MAX;//TVIN_SIG_FMT_HDMI_1440X576I_50HZ; para.v_active = 288; set_invert_top_bot(true); } /* else if( info->vdin_info.cur_width == 720 && (info->vdin_info.cur_height == 480 || info->vdin_info.cur_height == 240)){ para.fmt = TVIN_SIG_FMT_HDMI_720X480I_60HZ; para.v_active = 480; set_invert_top_bot(true); } */ else if(info->vdin_info.cur_width == 720 && (info->vdin_info.cur_height == 480 || info->vdin_info.cur_height == 240)){ para.fmt = TVIN_SIG_FMT_MAX;//TVIN_SIG_FMT_HDMI_1440X480I_60HZ; para.v_active = 240; set_invert_top_bot(true); } else{ para.fmt = TVIN_SIG_FMT_MAX+1; set_invert_top_bot(true); } para.scan_mode = TVIN_SCAN_MODE_INTERLACED; } else{ if(info->vdin_info.cur_width == 1920 && info->vdin_info.cur_height == 1080){ if( info->vdin_info.cur_frame_rate == 60 ) para.fmt = TVIN_SIG_FMT_HDMI_1920X1080P_60HZ; else if( info->vdin_info.cur_frame_rate == 30 ) para.fmt = TVIN_SIG_FMT_MAX;//TVIN_SIG_FMT_HDMI_1920X1080P_30HZ; } else if(info->vdin_info.cur_width == 1280 && info->vdin_info.cur_height == 720){ para.fmt = TVIN_SIG_FMT_HDMI_1280X720P_60HZ; } else if((info->vdin_info.cur_width == 1440 || info->vdin_info.cur_width == 720) && info->vdin_info.cur_height == 576){ para.fmt = TVIN_SIG_FMT_HDMI_720X576P_50HZ; } else if((info->vdin_info.cur_width == 1440 || info->vdin_info.cur_width == 720) && info->vdin_info.cur_height == 480){ para.fmt = TVIN_SIG_FMT_HDMI_720X480P_60HZ; } else{ para.fmt = TVIN_SIG_FMT_MAX+1; } para.scan_mode = TVIN_SCAN_MODE_PROGRESSIVE; } para.hsync_phase = 1; para.vsync_phase = 0; //para.hs_bp = 0; //para.vs_bp = 2; para.cfmt = TVIN_RGB444; para.dfmt = TVIN_YUV422; para.reserved = 0; //skip_num printk("[%s] begin start_tvin_service() !\n",__FUNCTION__); #ifdef HDMIIN_FRAME_SKIP_MECHANISM if( (SKIP_STATUS_NORMAL==flag_skip_status) || (SKIP_STATUS_STANDBY==flag_skip_status) || (SKIP_STATUS_CABLE==flag_skip_status) ) flag_skip_enable = 1; #endif start_tvin_service(0,¶); info->vdin_started = 1; //printk("%s: %dx%d %d %d/s\n", __func__, width, height, frame_rate, field_flag); } return ; }