static int create_tv_attr(disp_module_info_t* info) { //create base class for display int i; info->base_class=class_create(THIS_MODULE,info->name); if(IS_ERR(info->base_class)) { amlog_mask_level(LOG_MASK_INIT,LOG_LEVEL_HIGH,"create tv display class fail\n"); return -1 ; } //create class attr for(i=0;i<ARRAY_SIZE(tv_attr);i++) { if ( class_create_file(info->base_class,tv_attr[i])) { amlog_mask_level(LOG_MASK_INIT,LOG_LEVEL_HIGH,"create disp attribute %s fail\n",tv_attr[i]->attr.name); } } sprintf(vdac_setting,"%x",get_current_vdac_setting()); #ifdef CONFIG_AML_VOUT_FRAMERATE_AUTOMATION sprintf(policy_fr_auto, "%d", DEFAULT_POLICY_FR_AUTO); #endif return 0; }
static int tv_set_current_vmode(vmode_t mod) { vmode_t mode = mod&VMODE_MODE_BIT_MASK; //if (mode > VMODE_1080P_50HZ) { if (mode >= TVMODE_MAX) { amlog_mask_level(LOG_MASK_PARA, LOG_LEVEL_HIGH,"Invalid vmode: %d\n", mod); return -EINVAL; } info->vinfo = &tv_info[mode]; if (mod & VMODE_LOGO_BIT_MASK) return 0; tvoutc_setmode(vmode_tvmode_tab[mode]); change_vdac_setting(get_current_vdac_setting(),mode); return 0; }
static int create_tv_attr(disp_module_info_t* info) { //create base class for display int i; info->base_class=class_create(THIS_MODULE,info->name); if(IS_ERR(info->base_class)) { amlog_mask_level(LOG_MASK_INIT,LOG_LEVEL_HIGH,"create tv display class fail\r\n"); return -1 ; } //create class attr for(i=0;i<ARRAY_SIZE(tv_attr);i++) { if ( class_create_file(info->base_class,tv_attr[i])) { amlog_mask_level(LOG_MASK_INIT,LOG_LEVEL_HIGH,"create disp attribute %s fail\r\n",tv_attr[i]->attr.name); } } sprintf(vdac_setting,"%x",get_current_vdac_setting()); return 0; }
/*************************************************** ** ** The first digit control component Y output DAC number ** The 2nd digit control component U output DAC number ** The 3rd digit control component V output DAC number ** The 4th digit control composite CVBS output DAC number ** The 5th digit control s-video Luma output DAC number ** The 6th digit control s-video chroma output DAC number ** examble : ** echo 120120 > /sys/class/display/vdac_setting ** the first digit from the left side . ******************************************************/ static void parse_vdac_setting(char *para) { int i; char *pt=strstrip(para); int len=strlen(pt); u32 vdac_sequence=get_current_vdac_setting(); amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_LOW,"origin vdac setting:0x%x,strlen:%d\n",vdac_sequence,len); if(len!=6) { amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_HIGH,"can't parse vdac settings\n"); return ; } vdac_sequence=0; for(i=0;i<6;i++) { vdac_sequence<<=4; vdac_sequence|=*pt -'0'; pt++; } amlog_mask_level(LOG_MASK_PARA,LOG_LEVEL_LOW,"current vdac setting:0x%x\n",vdac_sequence); change_vdac_setting(vdac_sequence,get_current_vmode()); }