s32 bsp_disp_print_reg(bool b_force_on, disp_mod_id id, char* buf) { u32 base = 0, size = 0; u32 i = 0; unsigned char str[20]; u32 count = 0; base = ((id == DISP_MOD_BE0) || (id == DISP_MOD_BE1))? (gdisp.init_para.reg_base[id] + 0x800):gdisp.init_para.reg_base[id]; size = gdisp.init_para.reg_size[id]; if(b_force_on) { if(buf == NULL) { OSAL_PRINTF("%s", str); } else { count += sprintf(buf + count, "%s", str); } } else { DE_INF("%s", str); } for(i=0; i<size; i+=16) { u32 reg[4]; reg[0] = sys_get_wvalue(base + i); reg[1] = sys_get_wvalue(base + i + 4); reg[2] = sys_get_wvalue(base + i + 8); reg[3] = sys_get_wvalue(base + i + 12); #if defined(__LINUX_PLAT__) if(b_force_on) { if(buf == NULL) { OSAL_PRINTF("0x%08x:%08x,%08x:%08x,%08x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } else { count += sprintf(buf + count, "0x%08x:%08x,%08x:%08x,%08x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } } else { DE_INF("0x%08x:%08x,%08x:%08x,%08x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } #endif #ifdef __BOOT_OSAL__ if(b_force_on) { OSAL_PRINTF("0x%x:%x,%x,%x,%x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } else { DE_INF("0x%x:%x,%x:%x,%x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } #endif } return count; }
__s32 fb_draw_gray_pictures(__u32 base, __u32 width, __u32 height, struct fb_var_screeninfo *var) { __u32 time = 0; for(time = 0; time<18; time++) { __u32 i=0, j=0; for(i = 0; i<height; i++) { for(j = 0; j<width; j++) { __u32 addr = base + (i*width+ j)*4; __u32 value = (0xff<<24) | ((time*15)<<16) | ((time*15)<<8) | (time*15); sys_put_wvalue(addr, value); } } OSAL_PRINTF("----%d\n", time*15); msleep(1000 * 5); } return 0; }
__s32 BSP_disp_print_reg(__bool b_force_on, __u32 id) { __u32 base = 0, size = 0; __u32 i = 0; unsigned char str[20]; switch(id) { case DISP_REG_SCALER0: base = gdisp.init_para.base_scaler0; size = 0xa18; sprintf(str, "scaler0:\n"); break; case DISP_REG_SCALER1: base = gdisp.init_para.base_scaler1; size = 0xa18; sprintf(str, "scaler1:\n"); break; case DISP_REG_IMAGE0: base = gdisp.init_para.base_image0 + 0x800; size = 0xdff - 0x800; sprintf(str, "image0:\n"); break; case DISP_REG_IMAGE1: base = gdisp.init_para.base_image1 + 0x800; size = 0xdff - 0x800; sprintf(str, "image1:\n"); break; case DISP_REG_LCDC0: base = gdisp.init_para.base_lcdc0; size = 0x800; sprintf(str, "lcdc0:\n"); break; case DISP_REG_LCDC1: base = gdisp.init_para.base_lcdc1; size = 0x800; sprintf(str, "lcdc1:\n"); break; case DISP_REG_TVEC0: base = gdisp.init_para.base_tvec0; size = 0x20c; sprintf(str, "tvec0:\n"); break; case DISP_REG_TVEC1: base = gdisp.init_para.base_tvec1; size = 0x20c; sprintf(str, "tvec1:\n"); break; case DISP_REG_CCMU: base = gdisp.init_para.base_ccmu; size = 0x158; sprintf(str, "ccmu:\n"); break; case DISP_REG_PIOC: base = gdisp.init_para.base_pioc; size = 0x228; sprintf(str, "pioc:\n"); break; case DISP_REG_PWM: base = gdisp.init_para.base_pwm + 0x200; size = 0x0c; sprintf(str, "pwm:\n"); break; default: return DIS_FAIL; } if(b_force_on) { OSAL_PRINTF("%s", str); } else { DE_INF("%s", str); } for(i=0; i<size; i+=16) { __u32 reg[4]; reg[0] = sys_get_wvalue(base + i); reg[1] = sys_get_wvalue(base + i + 4); reg[2] = sys_get_wvalue(base + i + 8); reg[3] = sys_get_wvalue(base + i + 12); #ifdef __LINUX_OSAL__ if(b_force_on) { OSAL_PRINTF("0x%08x:%08x,%08x:%08x,%08x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } else { DE_INF("0x%08x:%08x,%08x:%08x,%08x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } #endif #ifdef __BOOT_OSAL__ if(b_force_on) { OSAL_PRINTF("0x%x:%x,%x,%x,%x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } else { DE_INF("0x%x:%x,%x:%x,%x\n", base + i, reg[0], reg[1], reg[2], reg[3]); } #endif } return DIS_SUCCESS; }
void anx9804_init(__panel_para_t * info) { __u8 c; __s32 i; __u32 count = 0; __u32 lanes; __u32 data_rate; __u32 colordepth; lanes = info->lcd_edp_tx_lane; data_rate = 0x06; if(info->lcd_edp_tx_rate == 1) { data_rate = 0x06;//1.62G } else if(info->lcd_edp_tx_rate == 2) { data_rate = 0x0a;//2.7G } colordepth = (info->lcd_edp_colordepth == 1)? 0x00:0x10;//0x00: 6bit; 0x10:8bit //HW reset lcd_iic_write(0x72, DP_TX_RST_CTRL_REG, DP_TX_RST_HW_RST); LCD_delay_ms(10); lcd_iic_write(0x72, DP_TX_RST_CTRL_REG, 0x00); //Power on total and select DP mode lcd_iic_write(0x72, DP_POWERD_CTRL_REG, 0x00 ); //get chip ID. Make sure I2C is OK lcd_iic_read(0x72, DP_TX_DEV_IDH_REG , &c); if(c==0x98) { OSAL_PRINTF("ANX9804 Chip found\n"); } else { OSAL_PRINTF("ANX9804 Chip not found\n"); } #if 0 //for clock detect for(i=0;i<50;i++) { lcd_iic_read(0x70, DP_TX_SYS_CTRL1_REG, &c); lcd_iic_write(0x70, DP_TX_SYS_CTRL1_REG, c); lcd_iic_read(0x70, DP_TX_SYS_CTRL1_REG, &c); if((c&DP_TX_SYS_CTRL1_DET_STA)!=0) { OSAL_PRINTF("ANX9804 clock is detected.\n"); break; } LCD_delay_ms(10); } #endif //check whether clock is stable for(i=0;i<50;i++) { lcd_iic_read(0x70, DP_TX_SYS_CTRL2_REG, &c); lcd_iic_write(0x70, DP_TX_SYS_CTRL2_REG, c); lcd_iic_read(0x70, DP_TX_SYS_CTRL2_REG, &c); if((c&DP_TX_SYS_CTRL2_CHA_STA)==0) { OSAL_PRINTF("ANX9804 clock is stable.\n"); break; } LCD_delay_ms(10); } //VESA range, 8bits BPC, RGB lcd_iic_write(0x72, DP_TX_VID_CTRL2_REG, colordepth); //ANX9804 chip analog setting lcd_iic_write(0x70, DP_TX_PLL_CTRL_REG, 0x07); lcd_iic_write(0x72, DP_TX_PLL_FILTER_CTRL3, 0x19); lcd_iic_write(0x72, DP_TX_PLL_CTRL3, 0xd9); //lcd_iic_write(0x7a, 0x38, 0x10); //lcd_iic_write(0x7a, 0x39, 0x20); //lcd_iic_write(0x7a, 0x65, 0x00); //Select AC mode lcd_iic_write(0x72, DP_TX_RST_CTRL2_REG, 0x40); //lcd_iic_write(0x7a, 0x61, 0x10); //lcd_iic_write(0x7a, 0x62, 0x10); //lcd_iic_write(0x7a, 0x63, 0x10); //lcd_iic_write(0x7a, 0x64, 0x10); //ANX9804 chip analog setting lcd_iic_write(0x72, ANALOG_DEBUG_REG1, 0xf0); lcd_iic_write(0x72, ANALOG_DEBUG_REG3, 0x99); lcd_iic_write(0x72, DP_TX_PLL_FILTER_CTRL1, 0x7b); lcd_iic_write(0x70, DP_TX_LINK_DEBUG_REG, 0x30); lcd_iic_write(0x72, DP_TX_PLL_FILTER_CTRL, 0x06); //force HPD lcd_iic_write(0x70, DP_TX_SYS_CTRL3_REG, 0x30); //power on 4 lanes lcd_iic_write(0x70, 0xc8, 0x00); //lanes setting lcd_iic_write(0x70, 0xa3, 0x00); lcd_iic_write(0x70, 0xa4, 0x00); lcd_iic_write(0x70, 0xa5, 0x00); lcd_iic_write(0x70, 0xa6, 0x00); #if 0 //step 1: read DPCD 0x00001, the correct value should be 0x0a, or 0x06 lcd_iic_write(0x70, 0xE4, 0x80); //set read cmd and count, read 2 __u8s data, get downstream max_bandwidth and max_lanes lcd_iic_write(0x70, 0xE5, 0x19); //set aux address19:0 lcd_iic_write(0x70, 0xE6, 0x01); lcd_iic_write(0x70, 0xE7, 0x00); lcd_iic_write(0x70, 0xE8, 0x00); //Enable Aux lcd_iic_write(0x70, 0xE9, 0x01); //wait aux finished for(i=0; i<50; i++) { lcd_iic_read(0x70, 0xE9, &c); if(c==0x00) { break; } } //read data from buffer lcd_iic_write( 0x70, 0xF0, &max_bandwidth); lcd_iic_write( 0x70, 0xF1, &max_lanes); debug_pr__s32f("max_bandwidth = %.2x, max_lanes = %.2x\n", (WORD)max_bandwidth, (WORD)max_lanes); #endif //reset AUX CH lcd_iic_write(0x72, DP_TX_RST_CTRL2_REG, 0x44); lcd_iic_write(0x72, DP_TX_RST_CTRL2_REG, 0x40); //to save power lcd_iic_write(0x72, DP_POWERD_CTRL_REG, 0x10 );//audio power down lcd_iic_write(0x70, DP_TX_HDCP_CONTROL_0_REG, 0x00 ); lcd_iic_write(0x70, 0xA7, 0x00 );//Spread spectrum 30 kHz //end /* enable ssc function */ lcd_iic_write(0x70, 0xa7, 0x00); // disable SSC first lcd_iic_write(0x70, 0xa0, 0x00); //disable speed first lcd_iic_write(0x72, 0xde, 0x99); //set duty cycle lcd_iic_read(0x70, 0xc7, &c); //reset DP PLL lcd_iic_write(0x70, 0xc7, c & (~0x40)); lcd_iic_read(0x70, 0xd8, &c); //M value select, select clock with downspreading lcd_iic_write(0x70, 0xd8, (c | 0x01)); lcd_iic_write(0x70, 0xc7, 0x02); //PLL power 1.7V lcd_iic_write(0x70, 0xd0, 0xb8); // ssc d 0.5% lcd_iic_write(0x70, 0xd1, 0x6D); // ctrl_th 30.4237K lcd_iic_write(0x70, 0xa7, 0x10); // enable SSC lcd_iic_read(0x72, 0x07, &c); //ssc reset lcd_iic_write(0x72, 0x07, c | 0x80); lcd_iic_write(0x72, 0x07, c & (~0x80)); //Select 2.7G //lcd_iic_write(0x70, DP_TX_LINK_BW_SET_REG, 0x0a); lcd_iic_write(0x70, DP_TX_LINK_BW_SET_REG, data_rate); //0x06: Select 1.62G //Select 4 lanes lcd_iic_write(0x70, DP_TX_LANE_COUNT_SET_REG, lanes); //strart link traing //DP_TX_LINK_TRAINING_CTRL_EN is self clear. If link training is OK, it will self cleared. lcd_iic_write(0x70, DP_TX_LINK_TRAINING_CTRL_REG, DP_TX_LINK_TRAINING_CTRL_EN); LCD_delay_ms(5); lcd_iic_read(0x70, DP_TX_LINK_TRAINING_CTRL_REG, &c); while((c&0x01)!=0) { OSAL_PRINTF("ANX9804 Waiting...\n"); LCD_delay_ms(5); count ++; if(count > 100) { OSAL_PRINTF("ANX9804 Link training fail\n"); break; } lcd_iic_read(0x70, DP_TX_LINK_TRAINING_CTRL_REG, &c); } //lcd_iic_write(0x7a, 0x7c, 0x02); //BIST MODE: video format. In normal mode, don't need to config these reg from 0x12~0x21 //lcd_iic_write(0x72, 0x12, 0x2c); //lcd_iic_write(0x72, 0x13, 0x06); //lcd_iic_write(0x72, 0x14, 0x00); //lcd_iic_write(0x72, 0x15, 0x06); //lcd_iic_write(0x72, 0x16, 0x02); //lcd_iic_write(0x72, 0x17, 0x04); //lcd_iic_write(0x72, 0x18, 0x26); //lcd_iic_write(0x72, 0x19, 0x50); //lcd_iic_write(0x72, 0x1a, 0x04); //lcd_iic_write(0x72, 0x1b, 0x00); //lcd_iic_write(0x72, 0x1c, 0x04); //lcd_iic_write(0x72, 0x1d, 0x18); //lcd_iic_write(0x72, 0x1e, 0x00); //lcd_iic_write(0x72, 0x1f, 0x10); //lcd_iic_write(0x72, 0x20, 0x00); //lcd_iic_write(0x72, 0x21, 0x28); //lcd_iic_write(0x72, 0x11, 0x03); //enable BIST. In normal mode, don't need to config this reg //lcd_iic_write(0x72, 0x0b, 0x08); //enable video input, set DDR mode, the input DCLK should be 102.5MHz; //In normal mode, set this reg to 0x81, SDR mode, the input DCLK should be 205MHz //lcd_iic_write(0x72, 0x08, 0x8d); //lcd_iic_write(0x72, 0x08, 0x81); lcd_iic_write(0x72, 0x08, 0x81); //force HPD and stream valid lcd_iic_write(0x70, 0x82, 0x33); }
void Lcd_Panel_Parameter_Check(__u32 sel) { __panel_para_t* info; __u32 cycle_num = 1; __u32 Lcd_Panel_Err_Flag = 0; __u32 Lcd_Panel_Wrn_Flag = 0; __u32 Disp_Driver_Bug_Flag = 0; __u32 lcd_fclk_frq; __u32 lcd_clk_div; info = &(gpanel_info[sel]); if(info->lcd_if==0 && info->lcd_hv_if==1 && info->lcd_hv_smode==0) cycle_num = 3; else if(info->lcd_if==0 && info->lcd_hv_if==1 && info->lcd_hv_smode==1) cycle_num = 2; else if(info->lcd_if==1 && info->lcd_cpu_if==1) cycle_num = 3; else if(info->lcd_if==1 && info->lcd_cpu_if==2) cycle_num = 2; else if(info->lcd_if==1 && info->lcd_cpu_if==3) cycle_num = 2; else if(info->lcd_if==1 && info->lcd_cpu_if==5) cycle_num = 2; else if(info->lcd_if==1 && info->lcd_cpu_if==6) cycle_num = 3; else if(info->lcd_if==1 && info->lcd_cpu_if==7) cycle_num = 2; else cycle_num = 1; if(info->lcd_hbp > info->lcd_hv_hspw) { ; } else { Lcd_Panel_Err_Flag |= BIT0; } if(info->lcd_vbp > info->lcd_hv_vspw) { ; } else { Lcd_Panel_Err_Flag |= BIT1; } if(info->lcd_ht >= (info->lcd_hbp+info->lcd_x*cycle_num+4)) { ; } else { Lcd_Panel_Err_Flag |= BIT2; } if((info->lcd_vt/2) >= (info->lcd_vbp+info->lcd_y+2)) { ; } else { Lcd_Panel_Err_Flag |= BIT3; } lcd_clk_div = TCON0_get_dclk_div(sel); if(lcd_clk_div >= 6) { ; } else if((lcd_clk_div ==5) || (lcd_clk_div ==4) || (lcd_clk_div ==2)) { if((info->lcd_io_cfg0 != 0x00000000) && (info->lcd_io_cfg0 != 0x04000000)) { Lcd_Panel_Err_Flag |= BIT10; } } else { Disp_Driver_Bug_Flag |= 1; } if((info->lcd_if==1 && info->lcd_cpu_if==0) ||(info->lcd_if==3 && info->lcd_lvds_bitwidth==1)) { if(info->lcd_frm != 1) Lcd_Panel_Wrn_Flag |= BIT0; } else if(info->lcd_if==1 && info->lcd_cpu_if==4) { if(info->lcd_frm != 2) Lcd_Panel_Wrn_Flag |= BIT1; } lcd_fclk_frq = (info->lcd_dclk_freq * 1000*1000)/((info->lcd_vt/2) * info->lcd_ht); if(lcd_fclk_frq<50 || lcd_fclk_frq>70) { Lcd_Panel_Wrn_Flag |= BIT2; } if(Lcd_Panel_Err_Flag != 0 || Lcd_Panel_Wrn_Flag != 0) { if(Lcd_Panel_Err_Flag != 0) { __u32 i; for(i=0;i<200;i++) { OSAL_PRINTF("*** Lcd in danger...\n"); } } OSAL_PRINTF("*****************************************************************\n"); OSAL_PRINTF("***\n"); OSAL_PRINTF("*** LCD Panel Parameter Check\n"); OSAL_PRINTF("***\n"); OSAL_PRINTF("*** by dulianping\n"); OSAL_PRINTF("***\n"); OSAL_PRINTF("*****************************************************************\n"); OSAL_PRINTF("*** \n"); OSAL_PRINTF("*** Interface:"); if(info->lcd_if==0 && info->lcd_hv_if==0) {OSAL_PRINTF("*** Parallel HV Panel\n");} else if(info->lcd_if==0 && info->lcd_hv_if==1) {OSAL_PRINTF("*** Serial HV Panel\n");} else if(info->lcd_if==0 && info->lcd_hv_if==2) {OSAL_PRINTF("*** Serial YUV Panel\n");} else if(info->lcd_if==3 && info->lcd_lvds_bitwidth==0) {OSAL_PRINTF("*** 24Bit LVDS Panel\n");} else if(info->lcd_if==3 && info->lcd_lvds_bitwidth==1) {OSAL_PRINTF("*** 18Bit LVDS Panel\n");} else if(info->lcd_if==1 && info->lcd_cpu_if==0) {OSAL_PRINTF("*** 18Bit CPU Panel\n");} else if(info->lcd_if==1 && info->lcd_cpu_if==4) {OSAL_PRINTF("*** 16Bit CPU Panel\n");} else { OSAL_PRINTF("\n"); OSAL_PRINTF("*** lcd_if: %d\n",info->lcd_if); OSAL_PRINTF("*** lcd_hv_if: %d\n",info->lcd_hv_if); OSAL_PRINTF("*** lcd_cpu_if: %d\n",info->lcd_cpu_if); } if(info->lcd_frm==0) {OSAL_PRINTF("*** Lcd Frm Disable\n");} else if(info->lcd_frm==1) {OSAL_PRINTF("*** Lcd Frm to RGB666\n");} else if(info->lcd_frm==2) {OSAL_PRINTF("*** Lcd Frm to RGB565\n");} OSAL_PRINTF("*** \n"); OSAL_PRINTF("*** Timing:\n"); OSAL_PRINTF("*** lcd_x: %d\n",info->lcd_x); OSAL_PRINTF("*** lcd_y: %d\n",info->lcd_y); OSAL_PRINTF("*** lcd_ht: %d\n",info->lcd_ht); OSAL_PRINTF("*** lcd_hbp: %d\n",info->lcd_hbp); OSAL_PRINTF("*** lcd_vt: %d\n",info->lcd_vt); OSAL_PRINTF("*** lcd_vbp: %d\n",info->lcd_vbp); OSAL_PRINTF("*** lcd_hspw: %d\n",info->lcd_hv_hspw); OSAL_PRINTF("*** lcd_vspw: %d\n",info->lcd_hv_vspw); OSAL_PRINTF("*** lcd_frame_frq: %dHz\n",lcd_fclk_frq); //打印错误提示 OSAL_PRINTF("*** \n"); if(Lcd_Panel_Err_Flag & BIT0) {OSAL_PRINTF("*** Err01: Violate \"lcd_hbp > lcd_hspw\"\n");} if(Lcd_Panel_Err_Flag & BIT1) {OSAL_PRINTF("*** Err02: Violate \"lcd_vbp > lcd_vspw\"\n");} if(Lcd_Panel_Err_Flag & BIT2) {OSAL_PRINTF("*** Err03: Violate \"lcd_ht >= (lcd_hbp+lcd_x*%d+4)\"\n", cycle_num);} if(Lcd_Panel_Err_Flag & BIT3) {OSAL_PRINTF("*** Err04: Violate \"(lcd_vt/2) >= (lcd_vbp+lcd_y+2)\"\n");} if(Lcd_Panel_Err_Flag & BIT10) {OSAL_PRINTF("*** Err10: Violate \"lcd_io_cfg0\",use \"0x00000000\" or \"0x04000000\"");} if(Lcd_Panel_Wrn_Flag & BIT0) {OSAL_PRINTF("*** WRN01: Recommend \"lcd_frm = 1\"\n");} if(Lcd_Panel_Wrn_Flag & BIT1) {OSAL_PRINTF("*** WRN02: Recommend \"lcd_frm = 2\"\n");} if(Lcd_Panel_Wrn_Flag & BIT2) {OSAL_PRINTF("*** WRN03: Recommend \"lcd_dclk_frq = %d\"\n",((info->lcd_vt/2) * info->lcd_ht)*60/(1000*1000));} OSAL_PRINTF("*** \n"); if(Lcd_Panel_Err_Flag != 0) { __u32 image_base_addr; __u32 reg_value = 0; image_base_addr = DE_Get_Reg_Base(sel); sys_put_wvalue(image_base_addr+0x804,0xffff00ff);//set background color reg_value = sys_get_wvalue(image_base_addr+0x800); sys_put_wvalue(image_base_addr+0x800,reg_value & 0xfffff0ff);//close all layer #ifdef __LINUX_OSAL__ LCD_delay_ms(2000); sys_put_wvalue(image_base_addr+0x804,0x00000000);//set background color sys_put_wvalue(image_base_addr+0x800,reg_value);//open layer #endif OSAL_PRINTF("*** Try new parameters,you can make it pass!\n"); } OSAL_PRINTF("*** LCD Panel Parameter Check End\n"); OSAL_PRINTF("*****************************************************************\n"); } }
long disp_ioctl(void *hd, unsigned int cmd, void *arg) { unsigned long karg[4]; unsigned long ubuffer[4] = {0}; __s32 ret = 0; if(!display_opens) { printf("de not open\n"); return -1; } if (copy_from_user((void*)karg,(void __user*)arg,4*sizeof(unsigned long))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ubuffer[0] = *(unsigned long*)karg; ubuffer[1] = (*(unsigned long*)(karg+1)); ubuffer[2] = (*(unsigned long*)(karg+2)); ubuffer[3] = (*(unsigned long*)(karg+3)); if(cmd < DISP_CMD_FB_REQUEST) { if((ubuffer[0] != 0) && (ubuffer[0] != 1)) { __wrn("para err in disp_ioctl, cmd = 0x%x,screen id = %d\n", cmd, (int)ubuffer[0]); return -1; } } if(suspend_status & 2) { __wrn("ioctl:%x fail when in suspend!\n", cmd); return -1; } #if 0 if(cmd!=DISP_CMD_TV_GET_INTERFACE && cmd!=DISP_CMD_HDMI_GET_HPD_STATUS && cmd!=DISP_CMD_GET_OUTPUT_TYPE && cmd!=DISP_CMD_SCN_GET_WIDTH && cmd!=DISP_CMD_SCN_GET_HEIGHT && cmd!=DISP_CMD_VIDEO_SET_FB && cmd!=DISP_CMD_VIDEO_GET_FRAME_ID) { OSAL_PRINTF("cmd:0x%x,%ld,%ld\n",cmd, ubuffer[0], ubuffer[1]); } #endif switch(cmd) { //----disp global---- case DISP_CMD_SET_BKCOLOR: { __disp_color_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_color_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_set_bk_color(ubuffer[0], ¶); break; } case DISP_CMD_SET_COLORKEY: { __disp_colorkey_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_colorkey_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_set_color_key(ubuffer[0], ¶); break; } case DISP_CMD_SET_PALETTE_TBL: if((ubuffer[1] == 0) || ((int)ubuffer[3] <= 0)) { __wrn("para invalid in disp ioctrl DISP_CMD_SET_PALETTE_TBL,buffer:0x%x, size:0x%x\n", (unsigned int)ubuffer[1], (unsigned int)ubuffer[3]); return -1; } if(copy_from_user(gbuffer, (void __user *)ubuffer[1],ubuffer[3])) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_set_palette_table(ubuffer[0], (__u32 *)gbuffer, ubuffer[2], ubuffer[3]); break; case DISP_CMD_GET_PALETTE_TBL: if((ubuffer[1] == 0) || ((int)ubuffer[3] <= 0)) { __wrn("para invalid in disp ioctrl DISP_CMD_GET_PALETTE_TBL,buffer:0x%x, size:0x%x\n", (unsigned int)ubuffer[1], (unsigned int)ubuffer[3]); return -1; } ret = bsp_disp_get_palette_table(ubuffer[0], (__u32 *)gbuffer, ubuffer[2], ubuffer[3]); if(copy_to_user((void __user *)ubuffer[1], gbuffer,ubuffer[3])) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; case DISP_CMD_START_CMD_CACHE: ret = bsp_disp_cmd_cache(ubuffer[0]); break; case DISP_CMD_EXECUTE_CMD_AND_STOP_CACHE: ret = bsp_disp_cmd_submit(ubuffer[0]); break; case DISP_CMD_GET_OUTPUT_TYPE: ret = bsp_disp_get_output_type(ubuffer[0]); break; case DISP_CMD_SCN_GET_WIDTH: ret = bsp_disp_get_screen_width(ubuffer[0]); break; case DISP_CMD_SCN_GET_HEIGHT: ret = bsp_disp_get_screen_height(ubuffer[0]); break; case DISP_CMD_SET_GAMMA_TABLE: if((ubuffer[1] == 0) || ((int)ubuffer[2] <= 0)) { __wrn("para invalid in disp ioctrl DISP_CMD_SET_GAMMA_TABLE,buffer:0x%x, size:0x%x\n", (unsigned int)ubuffer[1], (unsigned int)ubuffer[2]); return -1; } if(copy_from_user(gbuffer, (void __user *)ubuffer[1],ubuffer[2])) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_set_gamma_table(ubuffer[0], (__u32 *)gbuffer, ubuffer[2]); break; case DISP_CMD_GAMMA_CORRECTION_ON: ret = bsp_disp_gamma_correction_enable(ubuffer[0]); break; case DISP_CMD_GAMMA_CORRECTION_OFF: ret = bsp_disp_gamma_correction_disable(ubuffer[0]); break; case DISP_CMD_SET_BRIGHT: ret = bsp_disp_cmu_set_bright(ubuffer[0], ubuffer[1]); break; case DISP_CMD_GET_BRIGHT: ret = bsp_disp_cmu_get_bright(ubuffer[0]); break; case DISP_CMD_SET_CONTRAST: ret = bsp_disp_cmu_set_contrast(ubuffer[0], ubuffer[1]); break; case DISP_CMD_GET_CONTRAST: ret = bsp_disp_cmu_get_contrast(ubuffer[0]); break; case DISP_CMD_SET_SATURATION: ret = bsp_disp_cmu_set_saturation(ubuffer[0], ubuffer[1]); break; case DISP_CMD_GET_SATURATION: ret = bsp_disp_cmu_get_saturation(ubuffer[0]); break; case DISP_CMD_SET_HUE: ret = bsp_disp_cmu_set_hue(ubuffer[0], ubuffer[1]); break; case DISP_CMD_GET_HUE: ret = bsp_disp_cmu_get_hue(ubuffer[0]); break; case DISP_CMD_ENHANCE_ON: ret = bsp_disp_cmu_enable(ubuffer[0], 1); break; case DISP_CMD_ENHANCE_OFF: ret = bsp_disp_cmu_enable(ubuffer[0], 0); break; case DISP_CMD_GET_ENHANCE_EN: ret = bsp_disp_cmu_get_enable(ubuffer[0]); break; case DISP_CMD_SET_ENHANCE_MODE: ret = bsp_disp_cmu_set_mode(ubuffer[0], ubuffer[1]); break; case DISP_CMD_GET_ENHANCE_MODE: ret = bsp_disp_cmu_get_mode(ubuffer[0]); break; case DISP_CMD_SET_ENHANCE_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_cmu_set_window(ubuffer[0], ¶); break; } case DISP_CMD_GET_ENHANCE_WINDOW: { __disp_rect_t para; ret = bsp_disp_cmu_get_window(ubuffer[0], ¶); if(copy_to_user((void __user *)ubuffer[1],¶, sizeof(__disp_layer_info_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_CAPTURE_SCREEN: ret = bsp_disp_capture_screen(ubuffer[0], (__disp_capture_screen_para_t *)ubuffer[1]); break; case DISP_CMD_SET_SCREEN_SIZE: ret = bsp_disp_set_screen_size(ubuffer[0], (__disp_rectsz_t*)ubuffer[1]); break; case DISP_CMD_DE_FLICKER_ON: ret = bsp_disp_de_flicker_enable(ubuffer[0], 1); break; case DISP_CMD_DE_FLICKER_OFF: ret = bsp_disp_de_flicker_enable(ubuffer[0], 0); break; case DISP_CMD_DRC_ON: ret = bsp_disp_drc_enable(ubuffer[0], 1); break; case DISP_CMD_DRC_OFF: ret = bsp_disp_drc_enable(ubuffer[0], 0); break; case DISP_CMD_GET_DRC_EN: ret = bsp_disp_drc_get_enable(ubuffer[0]); break; case DISP_CMD_DRC_SET_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_drc_set_window(ubuffer[0], ¶); break; } case DISP_CMD_DRC_GET_WINDOW: { __disp_rect_t para; ret = bsp_disp_drc_get_window(ubuffer[0], ¶); if(copy_to_user((void __user *)ubuffer[1], ¶,sizeof(__disp_rect_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } return ret; break; } //----layer---- case DISP_CMD_LAYER_REQUEST: ret = bsp_disp_layer_request(ubuffer[0], (__disp_layer_work_mode_t)ubuffer[1]); break; case DISP_CMD_LAYER_RELEASE: ret = bsp_disp_layer_release(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_OPEN: ret = bsp_disp_layer_open(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_CLOSE: ret = bsp_disp_layer_close(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_FB: { __disp_fb_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_fb_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_layer_set_framebuffer(ubuffer[0], ubuffer[1], ¶); //DRV_disp_wait_cmd_finish(ubuffer[0]); break; } case DISP_CMD_LAYER_GET_FB: { __disp_fb_t para; ret = bsp_disp_layer_get_framebuffer(ubuffer[0], ubuffer[1], ¶); if(copy_to_user((void __user *)ubuffer[2], ¶,sizeof(__disp_fb_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_LAYER_SET_SRC_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_layer_set_src_window(ubuffer[0],ubuffer[1], ¶); //DRV_disp_wait_cmd_finish(ubuffer[0]); break; } case DISP_CMD_LAYER_GET_SRC_WINDOW: { __disp_rect_t para; ret = bsp_disp_layer_get_src_window(ubuffer[0],ubuffer[1], ¶); if(copy_to_user((void __user *)ubuffer[2], ¶, sizeof(__disp_rect_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_LAYER_SET_SCN_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_layer_set_screen_window(ubuffer[0],ubuffer[1], ¶); //DRV_disp_wait_cmd_finish(ubuffer[0]); break; } case DISP_CMD_LAYER_GET_SCN_WINDOW: { __disp_rect_t para; ret = bsp_disp_layer_get_screen_window(ubuffer[0],ubuffer[1], ¶); if(copy_to_user((void __user *)ubuffer[2], ¶, sizeof(__disp_rect_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_LAYER_SET_PARA: { __disp_layer_info_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_layer_info_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_layer_set_para(ubuffer[0], ubuffer[1], ¶); //DRV_disp_wait_cmd_finish(ubuffer[0]); break; } case DISP_CMD_LAYER_GET_PARA: { __disp_layer_info_t para; ret = bsp_disp_layer_get_para(ubuffer[0], ubuffer[1], ¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_layer_info_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_LAYER_TOP: ret = bsp_disp_layer_set_top(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_BOTTOM: ret = bsp_disp_layer_set_bottom(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_ALPHA_ON: ret = bsp_disp_layer_alpha_enable(ubuffer[0], ubuffer[1], 1); break; case DISP_CMD_LAYER_ALPHA_OFF: ret = bsp_disp_layer_alpha_enable(ubuffer[0], ubuffer[1], 0); break; case DISP_CMD_LAYER_SET_ALPHA_VALUE: ret = bsp_disp_layer_set_alpha_value(ubuffer[0], ubuffer[1], ubuffer[2]); //DRV_disp_wait_cmd_finish(ubuffer[0]); break; case DISP_CMD_LAYER_CK_ON: ret = bsp_disp_layer_colorkey_enable(ubuffer[0], ubuffer[1], 1); break; case DISP_CMD_LAYER_CK_OFF: ret = bsp_disp_layer_colorkey_enable(ubuffer[0], ubuffer[1], 0); break; case DISP_CMD_LAYER_SET_PIPE: ret = bsp_disp_layer_set_pipe(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_ALPHA_VALUE: ret = bsp_disp_layer_get_alpha_value(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_GET_ALPHA_EN: ret = bsp_disp_layer_get_alpha_enable(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_GET_CK_EN: ret = bsp_disp_layer_get_colorkey_enable(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_GET_PRIO: ret = bsp_disp_layer_get_piro(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_GET_PIPE: ret = bsp_disp_layer_get_pipe(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_SMOOTH: ret = bsp_disp_layer_set_smooth(ubuffer[0], ubuffer[1],(__disp_video_smooth_t) ubuffer[2]); break; case DISP_CMD_LAYER_GET_SMOOTH: ret = bsp_disp_layer_get_smooth(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_BRIGHT: ret = bsp_disp_cmu_layer_set_bright(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_BRIGHT: ret = bsp_disp_cmu_layer_get_bright(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_CONTRAST: ret = bsp_disp_cmu_layer_set_contrast(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_CONTRAST: ret = bsp_disp_cmu_layer_get_contrast(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_SATURATION: ret = bsp_disp_cmu_layer_set_saturation(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_SATURATION: ret = bsp_disp_cmu_layer_get_saturation(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_HUE: ret = bsp_disp_cmu_layer_set_hue(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_HUE: ret = bsp_disp_cmu_layer_get_hue(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_ENHANCE_ON: ret = bsp_disp_cmu_layer_enable(ubuffer[0], ubuffer[1], 1); break; case DISP_CMD_LAYER_ENHANCE_OFF: ret = bsp_disp_cmu_layer_enable(ubuffer[0], ubuffer[1], 0); break; case DISP_CMD_LAYER_GET_ENHANCE_EN: ret = bsp_disp_cmu_layer_get_enable(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_ENHANCE_MODE: ret = bsp_disp_cmu_layer_set_mode(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_ENHANCE_MODE: ret = bsp_disp_cmu_layer_get_mode(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_ENHANCE_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_cmu_layer_set_window(ubuffer[0], ubuffer[1], ¶); break; } case DISP_CMD_LAYER_GET_ENHANCE_WINDOW: { __disp_rect_t para; ret = bsp_disp_cmu_layer_get_window(ubuffer[0], ubuffer[1], ¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_layer_info_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_LAYER_VPP_ON: ret = bsp_disp_deu_enable(ubuffer[0], ubuffer[1], 1); break; case DISP_CMD_LAYER_VPP_OFF: ret = bsp_disp_deu_enable(ubuffer[0], ubuffer[1], 0); break; case DISP_CMD_LAYER_GET_VPP_EN: ret = bsp_disp_deu_get_enable(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_LUMA_SHARP_LEVEL: ret = bsp_disp_deu_set_luma_sharp_level(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_LUMA_SHARP_LEVEL: ret = bsp_disp_deu_get_luma_sharp_level(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_CHROMA_SHARP_LEVEL: ret = bsp_disp_deu_set_chroma_sharp_level(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_CHROMA_SHARP_LEVEL: ret = bsp_disp_deu_get_chroma_sharp_level(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_WHITE_EXTEN_LEVEL: ret = bsp_disp_deu_set_white_exten_level(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_WHITE_EXTEN_LEVEL: ret = bsp_disp_deu_get_white_exten_level(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_SET_BLACK_EXTEN_LEVEL: ret = bsp_disp_deu_set_black_exten_level(ubuffer[0], ubuffer[1], ubuffer[2]); break; case DISP_CMD_LAYER_GET_BLACK_EXTEN_LEVEL: ret = bsp_disp_deu_get_black_exten_level(ubuffer[0], ubuffer[1]); break; case DISP_CMD_LAYER_VPP_SET_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_deu_set_window(ubuffer[0], ubuffer[1], ¶); break; } case DISP_CMD_LAYER_VPP_GET_WINDOW: { __disp_rect_t para; ret = bsp_disp_deu_get_window(ubuffer[0], ubuffer[1], ¶); if(copy_to_user((void __user *)ubuffer[2], ¶,sizeof(__disp_rect_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } return ret; break; } //----scaler---- case DISP_CMD_SCALER_REQUEST: ret = bsp_disp_scaler_request(); break; case DISP_CMD_SCALER_RELEASE: ret = bsp_disp_scaler_release(ubuffer[1]); break; case DISP_CMD_SCALER_EXECUTE: { __disp_scaler_para_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_scaler_para_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_scaler_start(ubuffer[1],¶); break; } case DISP_CMD_SCALER_EXECUTE_EX: { __disp_scaler_para_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_scaler_para_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_scaler_start_ex(ubuffer[1],¶); break; } //----hwc---- case DISP_CMD_HWC_OPEN: ret = bsp_disp_hwc_enable(ubuffer[0], 1); break; case DISP_CMD_HWC_CLOSE: ret = bsp_disp_hwc_enable(ubuffer[0], 0); break; case DISP_CMD_HWC_SET_POS: { __disp_pos_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_pos_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_hwc_set_pos(ubuffer[0], ¶); break; } case DISP_CMD_HWC_GET_POS: { __disp_pos_t para; ret = bsp_disp_hwc_get_pos(ubuffer[0], ¶); if(copy_to_user((void __user *)ubuffer[1],¶, sizeof(__disp_pos_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_HWC_SET_FB: { __disp_hwc_pattern_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_hwc_pattern_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_hwc_set_framebuffer(ubuffer[0], ¶); break; } case DISP_CMD_HWC_SET_PALETTE_TABLE: if((ubuffer[1] == 0) || ((int)ubuffer[3] <= 0)) { __wrn("para invalid in display ioctrl DISP_CMD_HWC_SET_PALETTE_TABLE,buffer:0x%x, size:0x%x\n", (unsigned int)ubuffer[1], (unsigned int)ubuffer[3]); return -1; } if(copy_from_user(gbuffer, (void __user *)ubuffer[1],ubuffer[3])) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_hwc_set_palette(ubuffer[0], (void*)gbuffer, ubuffer[2], ubuffer[3]); break; //----video---- case DISP_CMD_VIDEO_START: ret = bsp_disp_video_start(ubuffer[0], ubuffer[1]); break; case DISP_CMD_VIDEO_STOP: ret = bsp_disp_video_stop(ubuffer[0], ubuffer[1]); break; case DISP_CMD_VIDEO_SET_FB: { __disp_video_fb_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_video_fb_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = bsp_disp_video_set_fb(ubuffer[0], ubuffer[1], ¶); break; } case DISP_CMD_VIDEO_GET_FRAME_ID: ret = bsp_disp_video_get_frame_id(ubuffer[0], ubuffer[1]); break; case DISP_CMD_VIDEO_GET_DIT_INFO: { __disp_dit_info_t para; ret = bsp_disp_video_get_dit_info(ubuffer[0], ubuffer[1],¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_dit_info_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } //----lcd---- case DISP_CMD_LCD_ON: ret = DRV_lcd_open(ubuffer[0]); output_type = DISP_OUTPUT_TYPE_LCD; if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_LCD; } break; case DISP_CMD_LCD_OFF: ret = DRV_lcd_close(ubuffer[0]); if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_NONE; } break; case DISP_CMD_LCD_SET_BRIGHTNESS: ret = bsp_disp_lcd_set_bright(ubuffer[0], ubuffer[1], 0); break; case DISP_CMD_LCD_GET_BRIGHTNESS: ret = bsp_disp_lcd_get_bright(ubuffer[0]); break; // case DISP_CMD_LCD_CPUIF_XY_SWITCH: // ret = bsp_disp_lcd_xy_switch(ubuffer[0], ubuffer[1]); // break; case DISP_CMD_LCD_SET_SRC: ret = bsp_disp_lcd_set_src(ubuffer[0], (__disp_lcdc_src_t)ubuffer[1]); break; case DISP_CMD_LCD_USER_DEFINED_FUNC: ret = bsp_disp_lcd_user_defined_func(ubuffer[0], ubuffer[1], ubuffer[2], ubuffer[3]); break; //----tv---- case DISP_CMD_TV_ON: ret = bsp_disp_tv_open(ubuffer[0]); if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_TV; } break; case DISP_CMD_TV_OFF: ret = bsp_disp_tv_close(ubuffer[0]); if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_NONE; } break; case DISP_CMD_TV_SET_MODE: ret = bsp_disp_tv_set_mode(ubuffer[0], (__disp_tv_mode_t)ubuffer[1]); break; case DISP_CMD_TV_GET_MODE: ret = bsp_disp_tv_get_mode(ubuffer[0]); break; case DISP_CMD_TV_AUTOCHECK_ON: ret = bsp_disp_tv_auto_check_enable(ubuffer[0]); break; case DISP_CMD_TV_AUTOCHECK_OFF: ret = bsp_disp_tv_auto_check_disable(ubuffer[0]); break; case DISP_CMD_TV_GET_INTERFACE: if(suspend_status != 0) { ret = DISP_TV_NONE; } else { ret = bsp_disp_tv_get_interface(ubuffer[0]); } break; case DISP_CMD_TV_SET_SRC: ret = bsp_disp_tv_set_src(ubuffer[0], (__disp_lcdc_src_t)ubuffer[1]); break; case DISP_CMD_TV_GET_DAC_STATUS: if(suspend_status != 0) { ret = 0; } else { ret = bsp_disp_tv_get_dac_status(ubuffer[0], ubuffer[1]); } break; case DISP_CMD_TV_SET_DAC_SOURCE: ret = bsp_disp_tv_set_dac_source(ubuffer[0], ubuffer[1], (__disp_tv_dac_source)ubuffer[2]); break; case DISP_CMD_TV_GET_DAC_SOURCE: ret = bsp_disp_tv_get_dac_source(ubuffer[0], ubuffer[1]); break; //----hdmi---- case DISP_CMD_HDMI_ON: ret = bsp_disp_hdmi_open(ubuffer[0]); output_type = DISP_OUTPUT_TYPE_HDMI; if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_HDMI; } break; case DISP_CMD_HDMI_OFF: ret = bsp_disp_hdmi_close(ubuffer[0]); if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_NONE; } break; case DISP_CMD_HDMI_SET_MODE: ret = bsp_disp_hdmi_set_mode(ubuffer[0], ubuffer[1]); break; case DISP_CMD_HDMI_GET_MODE: ret = bsp_disp_hdmi_get_mode(ubuffer[0]); break; case DISP_CMD_HDMI_GET_HPD_STATUS: if(suspend_status != 0) { ret = 0; } else { ret = bsp_disp_hdmi_get_hpd_status(ubuffer[0]); } break; case DISP_CMD_HDMI_SUPPORT_MODE: ret = bsp_disp_hdmi_check_support_mode(ubuffer[0], ubuffer[1]); break; case DISP_CMD_HDMI_SET_SRC: ret = bsp_disp_hdmi_set_src(ubuffer[0], (__disp_lcdc_src_t)ubuffer[1]); break; //----vga---- case DISP_CMD_VGA_ON: ret = bsp_disp_vga_open(ubuffer[0]); if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_VGA; } break; case DISP_CMD_VGA_OFF: ret = bsp_disp_vga_close(ubuffer[0]); if(suspend_status != 0) { suspend_output_type[ubuffer[0]] = DISP_OUTPUT_TYPE_NONE; } break; case DISP_CMD_VGA_SET_MODE: ret = bsp_disp_vga_set_mode(ubuffer[0], (__disp_vga_mode_t)ubuffer[1]); break; case DISP_CMD_VGA_GET_MODE: ret = bsp_disp_vga_get_mode(ubuffer[0]); break; case DISP_CMD_VGA_SET_SRC: ret = bsp_disp_vga_set_src(ubuffer[0], (__disp_lcdc_src_t)ubuffer[1]); break; //----sprite---- /* case DISP_CMD_SPRITE_OPEN: ret = bsp_disp_sprite_open(ubuffer[0]); break; case DISP_CMD_SPRITE_CLOSE: ret = bsp_disp_sprite_close(ubuffer[0]); break; case DISP_CMD_SPRITE_SET_FORMAT: ret = bsp_disp_sprite_set_format(ubuffer[0], (__disp_pixel_fmt_t)ubuffer[1], (__disp_pixel_seq_t)ubuffer[2]); break; case DISP_CMD_SPRITE_GLOBAL_ALPHA_ENABLE: ret = bsp_disp_sprite_alpha_enable(ubuffer[0]); break; case DISP_CMD_SPRITE_GLOBAL_ALPHA_DISABLE: ret = bsp_disp_sprite_alpha_disable(ubuffer[0]); break; case DISP_CMD_SPRITE_GET_GLOBAL_ALPHA_ENABLE: ret = bsp_disp_sprite_get_alpha_enable(ubuffer[0]); break; case DISP_CMD_SPRITE_SET_GLOBAL_ALPHA_VALUE: ret = bsp_disp_sprite_set_alpha_vale(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_GET_GLOBAL_ALPHA_VALUE: ret = bsp_disp_sprite_get_alpha_value(ubuffer[0]); break; case DISP_CMD_SPRITE_SET_ORDER: ret = bsp_disp_sprite_set_order(ubuffer[0], ubuffer[1],ubuffer[2]); break; case DISP_CMD_SPRITE_GET_TOP_BLOCK: ret = bsp_disp_sprite_get_top_block(ubuffer[0]); break; case DISP_CMD_SPRITE_GET_BOTTOM_BLOCK: ret = bsp_disp_sprite_get_bottom_block(ubuffer[0]); break; case DISP_CMD_SPRITE_SET_PALETTE_TBL: if((ubuffer[1] == 0) || ((int)ubuffer[3] <= 0)) { __wrn("para invalid in display ioctrl DISP_CMD_SPRITE_SET_PALETTE_TBL,buffer:0x%x, size:0x%x\n", (unsigned int)ubuffer[1], (unsigned int)ubuffer[3]); return -1; } if(copy_from_user(gbuffer, (void __user *)ubuffer[1],ubuffer[3])) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_sprite_set_palette_table(ubuffer[0], (__u32 * )gbuffer,ubuffer[2],ubuffer[3]); break; case DISP_CMD_SPRITE_GET_BLOCK_NUM: ret = bsp_disp_sprite_get_block_number(ubuffer[0]); break; case DISP_CMD_SPRITE_BLOCK_REQUEST: { __disp_sprite_block_para_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_sprite_block_para_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_sprite_block_request(ubuffer[0], ¶); break; } case DISP_CMD_SPRITE_BLOCK_RELEASE: ret = bsp_disp_sprite_block_release(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_SET_SCREEN_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_sprite_block_set_screen_win(ubuffer[0], ubuffer[1],¶); break; } case DISP_CMD_SPRITE_BLOCK_GET_SCREEN_WINDOW: { __disp_rect_t para; ret = bsp_disp_sprite_block_get_srceen_win(ubuffer[0], ubuffer[1],¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_rect_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_SPRITE_BLOCK_SET_SOURCE_WINDOW: { __disp_rect_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_rect_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_sprite_block_set_src_win(ubuffer[0], ubuffer[1],¶); break; } case DISP_CMD_SPRITE_BLOCK_GET_SOURCE_WINDOW: { __disp_rect_t para; ret = bsp_disp_sprite_block_get_src_win(ubuffer[0], ubuffer[1],¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_rect_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_SPRITE_BLOCK_SET_FB: { __disp_fb_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_fb_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_sprite_block_set_framebuffer(ubuffer[0], ubuffer[1],¶); break; } case DISP_CMD_SPRITE_BLOCK_GET_FB: { __disp_fb_t para; ret = bsp_disp_sprite_block_get_framebufer(ubuffer[0], ubuffer[1],¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_fb_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_SPRITE_BLOCK_SET_TOP: ret = bsp_disp_sprite_block_set_top(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_SET_BOTTOM: ret = bsp_disp_sprite_block_set_bottom(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_GET_PREV_BLOCK: ret = bsp_disp_sprite_block_get_pre_block(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_GET_NEXT_BLOCK: ret = bsp_disp_sprite_block_get_next_block(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_GET_PRIO: ret = bsp_disp_sprite_block_get_prio(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_OPEN: ret = bsp_disp_sprite_block_open(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_CLOSE: ret = bsp_disp_sprite_block_close(ubuffer[0], ubuffer[1]); break; case DISP_CMD_SPRITE_BLOCK_SET_PARA: { __disp_sprite_block_para_t para; if(copy_from_user(¶, (void __user *)ubuffer[2],sizeof(__disp_sprite_block_para_t))) { __wrn("copy_from_user fail\n"); return -EFAULT; } ret = bsp_disp_sprite_block_set_para(ubuffer[0], ubuffer[1],¶); break; } case DISP_CMD_SPRITE_BLOCK_GET_PARA: { __disp_sprite_block_para_t para; ret = bsp_disp_sprite_block_get_para(ubuffer[0], ubuffer[1],¶); if(copy_to_user((void __user *)ubuffer[2],¶, sizeof(__disp_sprite_block_para_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } */ #ifdef __LINUX_OSAL__ //----framebuffer---- case DISP_CMD_FB_REQUEST: { __disp_fb_create_para_t para; if(copy_from_user(¶, (void __user *)ubuffer[1],sizeof(__disp_fb_create_para_t))) { __wrn("copy_from_user fail %d \n",__LINE__); return -EFAULT; } ret = Display_Fb_Request(ubuffer[0], ¶); break; } case DISP_CMD_FB_RELEASE: ret = Display_Fb_Release(ubuffer[0]); break; case DISP_CMD_FB_GET_PARA: { __disp_fb_create_para_t para; ret = Display_Fb_get_para(ubuffer[0], ¶); if(copy_to_user((void __user *)ubuffer[1],¶, sizeof(__disp_fb_create_para_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_GET_DISP_INIT_PARA: { __disp_init_t para; ret = Display_get_disp_init_para(¶); if(copy_to_user((void __user *)ubuffer[0],¶, sizeof(__disp_init_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } //----for test---- case DISP_CMD_MEM_REQUEST: ret = disp_mem_request(ubuffer[0]); break; case DISP_CMD_MEM_RELASE: ret = disp_mem_release(ubuffer[0]); break; case DISP_CMD_MEM_SELIDX: g_disp_mm_sel = ubuffer[0]; break; case DISP_CMD_MEM_GETADR: ret = g_disp_mm[ubuffer[0]].mem_start; break; case DISP_CMD_MEM_GET_INFO: { __disp_mm_t para; ret = disp_mem_get_info(ubuffer[0], ¶); if(copy_to_user((void __user *)ubuffer[1],¶, sizeof(__disp_mm_t))) { __wrn("copy_to_user fail\n"); return -EFAULT; } break; } case DISP_CMD_SUSPEND: { pm_message_t state; ret = disp_suspend(0, state); break; } case DISP_CMD_RESUME: ret = disp_resume(0); break; #endif case DISP_CMD_SET_EXIT_MODE: ret = g_disp_drv.exit_mode = ubuffer[0]; break; case DISP_CMD_LCD_CHECK_OPEN_FINISH: ret = DRV_lcd_check_open_finished(ubuffer[0]); break; case DISP_CMD_LCD_CHECK_CLOSE_FINISH: ret = DRV_lcd_check_close_finished(ubuffer[0]); break; case DISP_CMD_PRINT_REG: ret = bsp_disp_print_reg(1, ubuffer[0]); break; default: break; } return ret; }