void disp_bls_init(unsigned int srcWidth, unsigned int srcHeight) { DISP_MSG("disp_bls_init : srcWidth = %d, srcHeight = %d\n", srcWidth, srcHeight); // 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 }
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 }
void disp_bls_config_full(unsigned int width, unsigned int height) { unsigned int regVal; unsigned int dither_bpp = DISP_GetOutputBPPforDithering(); BLS_DBG("disp_bls_config_full, width=%d, height=%d, reg=0x%x \n", width, height, ((height<<16) + width)); //DISP_REG_SET(DISP_REG_BLS_DEBUG ,0x00000003); #if defined(DDP_GAMMA_SUPPORT) DISP_REG_SET(DISP_REG_BLS_BLS_SETTING ,0x00100007); #else DISP_REG_SET(DISP_REG_BLS_BLS_SETTING ,0x00100000); #endif DISP_REG_SET(DISP_REG_BLS_SRC_SIZE ,((height<<16) + width)); DISP_REG_SET(DISP_REG_BLS_GAMMA_SETTING ,0x00000001); DISP_REG_SET(DISP_REG_BLS_GAMMA_BOUNDARY ,0x3fffffff); /* 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 { BLS_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 regVal = DISP_REG_GET(DISP_REG_BLS_EN); if (regVal & 0x10000) // PWM_EN has been enabled DISP_REG_SET(DISP_REG_BLS_EN ,0x00010001); else // on resume DISP_REG_SET(DISP_REG_BLS_EN ,0x00000001); //DISP_REG_SET(DISP_REG_BLS_EN ,0x00000001); //DISP_REG_SET(DISP_REG_BLS_DEBUG ,0x00000000); }
void disp_bls_config_full(unsigned int width, unsigned int height) { printk("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); DISP_REG_SET(DISP_REG_BLS_BLS_SETTING ,0x00100007); // remove gain setting here // 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(0) ,0x00000000); // dither not enabled 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 */ DISP_REG_SET(DISP_REG_BLS_DITHER(15) ,0x20200001); DISP_REG_SET(DISP_REG_BLS_DITHER(16) ,0x20202020); 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); }