void disp_bls_init(unsigned int srcWidth, unsigned int srcHeight) { DDP_DRV_DBG("disp_bls_init : srcWidth = %d, srcHeight = %d\n", srcWidth, srcHeight); struct cust_mt65xx_led *cust_led_list = get_cust_led_list(); struct cust_mt65xx_led *cust = NULL; struct PWM_config *config_data = NULL; if(cust_led_list) { cust = &cust_led_list[MT65XX_LED_TYPE_LCD]; if((strcmp(cust->name,"lcd-backlight") == 0) && (cust->mode == MT65XX_LED_MODE_CUST_BLS_PWM)) { config_data = &cust->config_data; if (config_data->clock_source >= 0 && config_data->clock_source <= 1) { unsigned int regVal = DISP_REG_GET(0xF0000000); if(config_data->clock_source == 0) clkmux_sel(MT_CLKMUX_PWM_MM_MUX_SEL, MT_CG_SYS_26M, "DISP_PWM"); else clkmux_sel(MT_CLKMUX_PWM_MM_MUX_SEL, MT_CG_UPLL_D12, "DISP_PWM"); DISP_DBG("disp_bls_init : 0xF0000000: 0x%x => 0x%x\n", regVal, DISP_REG_GET(0xF0000000)); } } } // TODO: fix register setting DISP_REG_SET(DISP_REG_BLS_SRC_SIZE, (srcHeight << 16) | srcWidth); DISP_REG_SET(DISP_REG_BLS_PWM_DUTY, DISP_REG_GET(DISP_REG_BLS_PWM_DUTY)); DISP_REG_SET(DISP_REG_BLS_PWM_CON, 0x0); DISP_REG_SET(DISP_REG_BLS_INTEN, 0xF); disp_bls_update_gamma_lut(); //disp_bls_update_pwm_lut(); // not used in 6572 #if 0 // TODO: fix Dither setting // Dithering DISP_REG_SET(DISP_REG_BLS_DITHER(0), 0x00000001); DISP_REG_SET(DISP_REG_BLS_DITHER(6), 0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(13), 0x00000222); DISP_REG_SET(DISP_REG_BLS_DITHER(14), 0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(15), 0x22220001); DISP_REG_SET(DISP_REG_BLS_DITHER(16), 0x22222222); DISP_REG_SET(DISP_REG_BLS_DITHER(17), 0x00000000); #endif DISP_REG_SET(DISP_REG_BLS_EN, 0x00010001); // enable BLS_EN disp_bls_config_full(srcWidth, srcHeight); #if 0 disp_dump_reg(DISP_MODULE_BLS); #endif }
static void process_dbg_cmd(char *cmd) { char *tok; DDP_DRV_DBG("cmd: %s\n", cmd); memset(dbg_buf, 0, sizeof(dbg_buf)); while ((tok = strsep(&cmd, " ")) != NULL) { process_dbg_opt(tok); } }
enum OVL_INPUT_FORMAT ovl_fmt_convert(DpColorFormat fmt) { enum OVL_INPUT_FORMAT ovl_fmt = OVL_INPUT_FORMAT_UNKNOWN; DDP_DRV_DBG("BOOT ovl_fmt_convert 0 fmt=%d, ovl_fmt=%d \n", fmt, ovl_fmt); switch(fmt) { case eYUY2 : ovl_fmt = OVL_INPUT_FORMAT_YUYV; break; case eUYVY : ovl_fmt = OVL_INPUT_FORMAT_UYVY; break; case eYVYU : ovl_fmt = OVL_INPUT_FORMAT_YVYU; break; case eVYUY : ovl_fmt = OVL_INPUT_FORMAT_VYUY; break; case eRGB565 : ovl_fmt = OVL_INPUT_FORMAT_RGB565; break; case eRGB888 : ovl_fmt = OVL_INPUT_FORMAT_RGB888; break; case eBGR888 : ovl_fmt = OVL_INPUT_FORMAT_BGR888; break; case eARGB8888 : ovl_fmt = OVL_INPUT_FORMAT_ARGB8888; break; case eABGR8888 : ovl_fmt = OVL_INPUT_FORMAT_ABGR8888; break; case ePARGB8888 : ovl_fmt = OVL_INPUT_FORMAT_PARGB8888; break; case ePABGR8888 : ovl_fmt = OVL_INPUT_FORMAT_PABGR8888; break; case eXARGB8888 : ovl_fmt = OVL_INPUT_FORMAT_xRGB8888; break; default: DDP_DRV_ERR("error: DDP, unknown ovl input format = %d\n", fmt); } DDP_DRV_DBG("BOOT ovl_fmt_convert 1 fmt=%d, ovl_fmt=%d \n", fmt, ovl_fmt); return ovl_fmt; }
DISPLAY_PWM_T * get_pwm_lut(void) { DDP_DRV_DBG("get_pwm_lut!\n"); return &g_pwm_lut; }
DISPLAY_GAMMA_T * get_gamma_index(void) { DDP_DRV_DBG("get_gamma_index!\n"); return &g_gamma_index; }
static void process_dbg_opt(const char *opt) { char *buf = dbg_buf + strlen(dbg_buf); if (0 == strncmp(opt, "regr:", 5)) { char *p = (char *)opt + 5; unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16); if (addr) { unsigned int regVal = DISP_REG_GET(addr); DDP_DRV_INFO("regr: 0x%08X = 0x%08X\n", addr, regVal); sprintf(buf, "regr: 0x%08X = 0x%08X\n", addr, regVal); } else { goto Error; } } else if (0 == strncmp(opt, "regw:", 5)) { char *p = (char *)opt + 5; unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16); unsigned int val = (unsigned int) simple_strtoul(p + 1, &p, 16); if (addr) { unsigned int regVal; DISP_REG_SET(addr, val); regVal = DISP_REG_GET(addr); DDP_DRV_DBG("regw: 0x%08X, 0x%08X = 0x%08X\n", addr, val, regVal); sprintf(buf, "regw: 0x%08X, 0x%08X = 0x%08X\n", addr, val, regVal); } else { goto Error; } } else if (0 == strncmp(opt, "ddp_drv_dbg_log:", 16)) { char *p = (char *)opt + 16; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if (enable) ddp_drv_dbg_log = 1; else ddp_drv_dbg_log = 0; sprintf(buf, "ddp_drv_dbg_log: %d\n", ddp_drv_dbg_log); } else if (0 == strncmp(opt, "ddp_drv_irq_log:", 16)) { char *p = (char *)opt + 16; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if (enable) ddp_drv_irq_log = 1; else ddp_drv_irq_log = 0; sprintf(buf, "ddp_drv_irq_log: %d\n", ddp_drv_irq_log); } else if (0 == strncmp(opt, "backlight:", 10)) { char *p = (char *)opt + 10; unsigned int level = (unsigned int) simple_strtoul(p, &p, 10); if (level) { disp_bls_set_backlight(level); sprintf(buf, "backlight: %d\n", level); } else { goto Error; } } else if (0 == strncmp(opt, "dump_reg:", 9)) { char *p = (char *)opt + 9; unsigned int module = (unsigned int) simple_strtoul(p, &p, 10); DDP_DRV_INFO("process_dbg_opt, module=%d \n", module); if (module<DISP_MODULE_MAX) { disp_dump_reg(module); sprintf(buf, "dump_reg: %d\n", module); } else { DDP_DRV_INFO("process_dbg_opt2, module=%d \n", module); goto Error; } } else if (0 == strncmp(opt, "dump_aal:", 9)) { char *p = (char *)opt + 9; unsigned int arg = (unsigned int) simple_strtoul(p, &p, 10); if (arg == 0) { int i; unsigned int hist[LUMA_HIST_BIN]; disp_get_hist(hist); for (i = 0; i < LUMA_HIST_BIN; i++) { DDP_DRV_DBG("LUMA_HIST_%02d: %d\n", i, hist[i]); sprintf(dbg_buf + strlen(dbg_buf), "LUMA_HIST_%2d: %d\n", i, hist[i]); } } else if (arg == 1) { int i; DISP_AAL_PARAM param; GetUpdateMutex(); memcpy(¶m, get_aal_config(), sizeof(DISP_AAL_PARAM)); ReleaseUpdateMutex(); DDP_DRV_DBG("pwmDuty: %lu\n", param.pwmDuty); sprintf(dbg_buf + strlen(dbg_buf), "pwmDuty: %lu\n", param.pwmDuty); for (i = 0; i < LUMA_CURVE_POINT; i++) { DDP_DRV_DBG("lumaCurve[%02d]: %lu\n", i, param.lumaCurve[i]); sprintf(dbg_buf + strlen(dbg_buf), "lumaCurve[%02d]: %lu\n", i, param.lumaCurve[i]); } } } else if (0 == strncmp(opt, "debug:", 6)) { char *p = (char *)opt + 6; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if(enable==1) { printk("[DDP] debug=1, trigger AEE\n"); aee_kernel_exception("DDP-TEST-ASSERT", "[DDP] DDP-TEST-ASSERT"); } else if(enable==2) { ddp_mem_test(); } else if(enable==3) { ddp_mem_test2(); } #if 0 else if(enable==4) { DDP_IRQ_ERR("test 4"); } #endif else if(enable==5) { DISP_MSG("SMI_LARB_MON_REQ0=0x%x, SMI_LARB_MON_REQ1=0x%x, SMI_0=0x%x, SMI_600=0x%x, SMI_604=0x%x, SMI_610=0x%x, SMI_614=0x%x, \ color_h_cnt=%d, color_line_cnt=%d, ovl_add_con=0x%x, ovl_ctrl_flow=0x%x \n", *(volatile unsigned int*)0xf4010450, *(volatile unsigned int*)0xf4010454, *(volatile unsigned int*)0xf4010000, *(volatile unsigned int*)0xf4010600, *(volatile unsigned int*)0xf4010604, *(volatile unsigned int*)0xf4010610, *(volatile unsigned int*)0xf4010614, *(volatile unsigned int*)0xf400b404, *(volatile unsigned int*)0xf400b408, DISP_REG_GET(DISP_REG_OVL_ADDCON_DBG), DISP_REG_GET(DISP_REG_OVL_FLOW_CTRL_DBG)); sprintf(dbg_buf + strlen(dbg_buf), "SMI_LARB_MON_REQ0=0x%x, SMI_LARB_MON_REQ1=0x%x, SMI_0=0x%x, SMI_600=0x%x, SMI_604=0x%x, SMI_610=0x%x, SMI_614=0x%x," "color_h_cnt=%d, color_line_cnt=%d, ovl_add_con=0x%x, ovl_ctrl_flow=0x%x \n", *(volatile unsigned int*)0xf4010450, *(volatile unsigned int*)0xf4010454, *(volatile unsigned int*)0xf4010000, *(volatile unsigned int*)0xf4010600, *(volatile unsigned int*)0xf4010604, *(volatile unsigned int*)0xf4010610, *(volatile unsigned int*)0xf4010614, *(volatile unsigned int*)0xf400b404, *(volatile unsigned int*)0xf400b408, DISP_REG_GET(DISP_REG_OVL_ADDCON_DBG), DISP_REG_GET(DISP_REG_OVL_FLOW_CTRL_DBG)); }
static void process_dbg_opt(const char *opt) { char *buf = dbg_buf + strlen(dbg_buf); if (0 == strncmp(opt, "regr:", 5)) { char *p = (char *)opt + 5; unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16); if (addr) { unsigned int regVal = DISP_REG_GET(addr); DDP_DRV_INFO("regr: 0x%08X = 0x%08X\n", addr, regVal); sprintf(buf, "regr: 0x%08X = 0x%08X\n", addr, regVal); } else { goto Error; } } else if (0 == strncmp(opt, "regw:", 5)) { char *p = (char *)opt + 5; unsigned int addr = (unsigned int) simple_strtoul(p, &p, 16); unsigned int val = (unsigned int) simple_strtoul(p + 1, &p, 16); if (addr) { unsigned int regVal; DISP_REG_SET(addr, val); regVal = DISP_REG_GET(addr); DDP_DRV_DBG("regw: 0x%08X, 0x%08X = 0x%08X\n", addr, val, regVal); sprintf(buf, "regw: 0x%08X, 0x%08X = 0x%08X\n", addr, val, regVal); } else { goto Error; } } else if (0 == strncmp(opt, "ddp_drv_dbg_log:", 16)) { char *p = (char *)opt + 16; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if (enable) ddp_drv_dbg_log = 1; else ddp_drv_dbg_log = 0; sprintf(buf, "ddp_drv_dbg_log: %d\n", ddp_drv_dbg_log); } else if (0 == strncmp(opt, "ddp_drv_irq_log:", 16)) { char *p = (char *)opt + 16; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if (enable) ddp_drv_irq_log = 1; else ddp_drv_irq_log = 0; sprintf(buf, "ddp_drv_irq_log: %d\n", ddp_drv_irq_log); } else if (0 == strncmp(opt, "backlight:", 10)) { char *p = (char *)opt + 10; unsigned int level = (unsigned int) simple_strtoul(p, &p, 10); if (level) { disp_bls_set_backlight(level); sprintf(buf, "backlight: %d\n", level); } else { goto Error; } } else if (0 == strncmp(opt, "dump_reg:", 9)) { char *p = (char *)opt + 9; unsigned int module = (unsigned int) simple_strtoul(p, &p, 10); DDP_DRV_INFO("process_dbg_opt, module=%d \n", module); if (module<DISP_MODULE_MAX) { disp_dump_reg(module); sprintf(buf, "dump_reg: %d\n", module); } else { DDP_DRV_INFO("process_dbg_opt2, module=%d \n", module); goto Error; } } else if (0 == strncmp(opt, "dump_aal:", 9)) { char *p = (char *)opt + 9; unsigned int arg = (unsigned int) simple_strtoul(p, &p, 10); if (arg == 0) { int i; unsigned int hist[LUMA_HIST_BIN]; disp_get_hist(hist); for (i = 0; i < LUMA_HIST_BIN; i++) { DDP_DRV_DBG("LUMA_HIST_%02d: %d\n", i, hist[i]); sprintf(dbg_buf + strlen(dbg_buf), "LUMA_HIST_%2d: %d\n", i, hist[i]); } } else if (arg == 1) { int i; DISP_AAL_PARAM param; GetUpdateMutex(); memcpy(¶m, get_aal_config(), sizeof(DISP_AAL_PARAM)); ReleaseUpdateMutex(); DDP_DRV_DBG("pwmDuty: %lu\n", param.pwmDuty); sprintf(dbg_buf + strlen(dbg_buf), "pwmDuty: %lu\n", param.pwmDuty); for (i = 0; i < LUMA_CURVE_POINT; i++) { DDP_DRV_DBG("lumaCurve[%02d]: %lu\n", i, param.lumaCurve[i]); sprintf(dbg_buf + strlen(dbg_buf), "lumaCurve[%02d]: %lu\n", i, param.lumaCurve[i]); } } } else if (0 == strncmp(opt, "debug:", 6)) { char *p = (char *)opt + 6; unsigned int enable = (unsigned int) simple_strtoul(p, &p, 10); if(enable==1) { printk("[DDP] debug=1, trigger AEE\n"); aee_kernel_exception("DDP-TEST-ASSERT", "[DDP] DDP-TEST-ASSERT"); } else if(enable==2) { ddp_mem_test(); } else if(enable==3) { ddp_mem_test2(); } } else if (0 == strncmp(opt, "mmp", 3)) { init_ddp_mmp_events(); } else if (0 == strncmp(opt, "dpfd_ut1:", 9)) { #if 0 char *p = (char *)opt + 9; unsigned int channel = (unsigned int) simple_strtoul(p, &p, 10); //ddpk_testfunc_1(channel); #endif } else if (0 == strncmp(opt, "dpfd_ut2:", 9)) { #if 0 char *p = (char *)opt + 9; unsigned int channel = (unsigned int) simple_strtoul(p, &p, 10); //ddpk_testfunc_2(channel); #endif } else if (0 == strncmp(opt, "dpfd:log", 8)) { } else if (0 == strncmp(opt, "pqon", 4)) { pq_debug_flag=0; sprintf(buf, "Turn on PQ %d\n", pq_debug_flag); } else if (0 == strncmp(opt, "pqoff", 5)) { pq_debug_flag=1; sprintf(buf, "Turn off PQ %d\n", pq_debug_flag); } else if (0 == strncmp(opt, "pqdemo", 6)) { pq_debug_flag=2; sprintf(buf, "Turn on PQ (demo) %d\n", pq_debug_flag); } else if (0 == strncmp(opt, "pqstop", 6)) { pq_debug_flag=3; sprintf(buf, "Stop mutex update %d\n", pq_debug_flag); } else if (0 == strncmp(opt, "aalon", 5)) { aal_debug_flag=0; sprintf(buf, "resume aal update %d\n", aal_debug_flag); } else if (0 == strncmp(opt, "aaloff", 6)) { aal_debug_flag=1; sprintf(buf, "suspend aal update %d\n", aal_debug_flag); } else if (0 == strncmp(opt, "color_win:", 10)) { char *p = (char *)opt + 10; unsigned int sat_upper, sat_lower, hue_upper, hue_lower; sat_upper = (unsigned int) simple_strtoul(p, &p, 10); p++; sat_lower = (unsigned int) simple_strtoul(p, &p, 10); p++; hue_upper = (unsigned int) simple_strtoul(p, &p, 10); p++; hue_lower = (unsigned int) simple_strtoul(p, &p, 10); DDP_DRV_INFO("Set color_win: %u, %u, %u, %u\n", sat_upper, sat_lower, hue_upper, hue_lower); disp_pq_set_window(sat_upper, sat_lower, hue_upper, hue_lower); } else if (0 == strncmp(opt, "dpx", 3)) { ddp_debug_flag = ddp_debug_flag ^ 1; DDP_DRV_INFO("ddp_debug_flag: %d\n", ddp_debug_flag); } else if (0 == strncmp(opt, "ovl_reg:", 8)) { char *p = (char *)opt + 8; unsigned int offset = (unsigned int) simple_strtoul(p, &p, 16); unsigned int value = (unsigned int) simple_strtoul(p + 1, &p, 16); disp_path_get_mutex_(gMutexID); DISP_REG_SET(DISP_OVL_BASE+offset, value); disp_path_release_mutex_(gMutexID); DDP_DRV_INFO("ovl_reg: 0x%08X = 0x%08X\n", DISP_OVL_BASE+offset, value); } else if (0 == strncmp(opt, "rdma_reg:", 9)) { char *p = (char *)opt + 9; unsigned int offset = (unsigned int) simple_strtoul(p, &p, 16); unsigned int value = (unsigned int) simple_strtoul(p + 1, &p, 16); disp_path_get_mutex_(gMutexID); DISP_REG_SET(DISP_RDMA_BASE+offset, value); disp_path_release_mutex_(gMutexID); DDP_DRV_INFO("rdma_reg: 0x%08X = 0x%08X\n", DISP_RDMA_BASE+offset, value); } else if (0 == strncmp(opt, "bls_reg:", 8)) { char *p = (char *)opt + 8; unsigned int offset = (unsigned int) simple_strtoul(p, &p, 16); unsigned int value = (unsigned int) simple_strtoul(p + 1, &p, 16); disp_path_get_mutex_(gMutexID); DISP_REG_SET(DISP_BLS_BASE+offset, value); disp_path_release_mutex_(gMutexID); DDP_DRV_INFO("bls_reg: 0x%08X = 0x%08X\n", DISP_BLS_BASE+offset, value); } else if (0 == strncmp(opt, "pq_reg:", 7)) { char *p = (char *)opt + 7; unsigned int offset = (unsigned int) simple_strtoul(p, &p, 16); unsigned int value = (unsigned int) simple_strtoul(p + 1, &p, 16); disp_path_get_mutex_(gMutexID); DISP_REG_SET(DISP_PQ_BASE+offset, value); disp_path_release_mutex_(gMutexID); DDP_DRV_INFO("pq_reg: 0x%08X = 0x%08X\n", DISP_PQ_BASE+offset, value); } else { goto Error; } return; Error: DDP_DRV_ERR("parse command error!\n%s\n\n%s", opt, STR_HELP); }
void disp_bls_config_full(unsigned int width, unsigned int height) { unsigned int dither_bpp = DISP_GetOutputBPPforDithering(); DDP_DRV_DBG("dispsys_bypass_bls, width=%d, height=%d, reg=0x%x \n", width, height, ((height<<16) + width)); DISP_REG_SET(DISP_REG_BLS_DEBUG ,0x00000003); // DISP_REG_SET(DISP_REG_BLS_PWM_DUTY ,0x000003ff); #if defined(DDP_GAMMA_SUPPORT) DISP_REG_SET(DISP_REG_BLS_BLS_SETTING ,0x00100007); // remove gain setting here #else DISP_REG_SET(DISP_REG_BLS_BLS_SETTING ,0x00100000); // remove gain setting here #endif // DISP_REG_SET(DISP_REG_BLS_FANA_SETTING ,0x00000000); DISP_REG_SET(DISP_REG_BLS_SRC_SIZE ,((height<<16) + width)); // DISP_REG_SET(DISP_REG_BLS_GAIN_SETTING ,0x00010001); DISP_REG_SET(DISP_REG_BLS_GAMMA_SETTING ,0x00000001); DISP_REG_SET(DISP_REG_BLS_GAMMA_BOUNDARY ,0x3fffffff); #if 0 DISP_REG_SET(DISP_REG_BLS_MAXCLR_THD ,0x00002328); DISP_REG_SET(DISP_REG_BLS_DISTPT_THD ,0x00006f54); DISP_REG_SET(DISP_REG_BLS_MAXCLR_LIMIT ,0x00fa00b0); DISP_REG_SET(DISP_REG_BLS_DISTPT_LIMIT ,0x00800020); DISP_REG_SET(DISP_REG_BLS_AVE_SETTING ,0x00000010); DISP_REG_SET(DISP_REG_BLS_AVE_LIMIT ,0x00f00060); DISP_REG_SET(DISP_REG_BLS_DISTPT_SETTING ,0x00000000); DISP_REG_SET(DISP_REG_BLS_SC_DIFF_THD ,0x00001770); DISP_REG_SET(DISP_REG_BLS_SC_BIN_THD ,0x00000008); DISP_REG_SET(DISP_REG_BLS_MAXCLR_GRADUAL ,0x00020001); DISP_REG_SET(DISP_REG_BLS_DISTPT_GRADUAL ,0x00040001); DISP_REG_SET(DISP_REG_BLS_FAST_IIR_XCOEFF ,0x01a201a2); DISP_REG_SET(DISP_REG_BLS_FAST_IIR_YCOEFF ,0x00003cbc); DISP_REG_SET(DISP_REG_BLS_SLOW_IIR_XCOEFF ,0x01500150); DISP_REG_SET(DISP_REG_BLS_SLOW_IIR_YCOEFF ,0x00003d60); DISP_REG_SET(DISP_REG_BLS_PWM_DUTY ,0x000003ff); DISP_REG_SET(DISP_REG_BLS_PWM_GRADUAL ,0x00000000); // default 0x80001 DISP_REG_SET(DISP_REG_BLS_PWM_CON ,0x00000000); // default 0x00001 #endif /* BLS Luminance LUT */ DISP_REG_SET(DISP_REG_BLS_LUMINANCE(0) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(1) ,0x00000004); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(2) ,0x00000010); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(3) ,0x00000024); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(4) ,0x00000040); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(5) ,0x00000064); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(6) ,0x00000090); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(7) ,0x000000C4); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(8) ,0x00000100); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(9) ,0x00000144); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(10) ,0x00000190); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(11) ,0x000001E4); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(12) ,0x00000240); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(13) ,0x00000244); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(14) ,0x00000310); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(15) ,0x00000384); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(16) ,0x00000400); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(17) ,0x00000484); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(18) ,0x00000510); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(19) ,0x000005A4); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(20) ,0x00000640); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(21) ,0x000006E4); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(22) ,0x00000790); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(23) ,0x00000843); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(24) ,0x000008FF); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(25) ,0x000009C3); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(26) ,0x00000A8F); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(27) ,0x00000B63); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(28) ,0x00000C3F); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(29) ,0x00000D23); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(30) ,0x00000E0F); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(31) ,0x00000F03); DISP_REG_SET(DISP_REG_BLS_LUMINANCE(32) ,0x00000FFF); /* BLS Luminance 255 */ DISP_REG_SET(DISP_REG_BLS_LUMINANCE_255 ,0x00000FDF); /* Dither */ DISP_REG_SET(DISP_REG_BLS_DITHER(5) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(6) ,0x00003004); DISP_REG_SET(DISP_REG_BLS_DITHER(7) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(8) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(9) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(10) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(11) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(12) ,0x00000011); DISP_REG_SET(DISP_REG_BLS_DITHER(13) ,0x00000000); DISP_REG_SET(DISP_REG_BLS_DITHER(14) ,0x00000000); /* output RGB888 */ if (dither_bpp == 16) // 565 { DISP_REG_SET(DISP_REG_BLS_DITHER(15), 0x50500001); DISP_REG_SET(DISP_REG_BLS_DITHER(16), 0x50504040); DISP_REG_SET(DISP_REG_BLS_DITHER(0), 0x00000001); } else if (dither_bpp == 18) // 666 { DISP_REG_SET(DISP_REG_BLS_DITHER(15), 0x40400001); DISP_REG_SET(DISP_REG_BLS_DITHER(16), 0x40404040); DISP_REG_SET(DISP_REG_BLS_DITHER(0), 0x00000001); } else if (dither_bpp == 24) // 888 { DISP_REG_SET(DISP_REG_BLS_DITHER(15), 0x20200001); DISP_REG_SET(DISP_REG_BLS_DITHER(16), 0x20202020); DISP_REG_SET(DISP_REG_BLS_DITHER(0), 0x00000001); } else { DISP_MSG("error diter bpp = %d\n", dither_bpp); DISP_REG_SET(DISP_REG_BLS_DITHER(0), 0x00000000); } DISP_REG_SET(DISP_REG_BLS_INTEN ,0x0000000f); // no scene change DISP_REG_SET(DISP_REG_BLS_EN ,0x00010001); DISP_REG_SET(DISP_REG_BLS_DEBUG ,0x00000000); }