void disp_bls_update_gamma_lut(void) { int index, i; unsigned long regValue; unsigned long CurVal, Count; #ifndef NEW_GAMMA_ARRAY_ARRANGEMENT // make it build fail for EPC rule after MP DISP_MSG("disp_bls_update_gamma_lut!\n"); #endif DISP_MSG("disp_bls_update_gamma_lut!\n"); // init gamma table for(index = 0; index < 3; index++) { for(Count = 0; Count < 257 ; Count++) { g_gamma_lut.entry[index][Count] = g_gamma_index.entry[index][Count]; } } // disable BLS_EN first DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x00000003); regValue = DISP_REG_GET(DISP_REG_BLS_EN); DISP_REG_SET(DISP_REG_BLS_EN, regValue & 0x00010000); DISP_MSG("ready to modify gamma lut, set BLS_EN=%x\n", DISP_REG_GET(DISP_REG_BLS_EN)); DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x00000000); DISP_REG_SET(DISP_REG_BLS_LUT_UPDATE, 0x1); for (i = 0; i < 256 ; i++) { CurVal = (((g_gamma_lut.entry[0][i]&0x3FF)<<20) | ((g_gamma_lut.entry[1][i]&0x3FF)<<10) | (g_gamma_lut.entry[2][i]&0x3FF)); DISP_REG_SET(DISP_REG_BLS_GAMMA_LUT(i), CurVal); DISP_DBG("[%d] GAMMA LUT = 0x%x, (%lu, %lu, %lu)\n", i, DISP_REG_GET(DISP_REG_BLS_GAMMA_LUT(i)), g_gamma_lut.entry[0][i], g_gamma_lut.entry[1][i], g_gamma_lut.entry[2][i]); } /* Set Gamma Last point*/ DISP_REG_SET(DISP_REG_BLS_GAMMA_SETTING, 0x00000001); // set gamma last index CurVal = (((g_gamma_lut.entry[0][256]&0x3FF)<<20) | ((g_gamma_lut.entry[1][256]&0x3FF)<<10) | (g_gamma_lut.entry[2][256]&0x3FF)); DISP_REG_SET(DISP_REG_BLS_GAMMA_BOUNDARY, CurVal); DISP_REG_SET(DISP_REG_BLS_LUT_UPDATE, 0); //DISP_REG_SET(DISP_REG_BLS_EN, regValue); //set BLS_EN to oringinal value DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x00000003); DISP_REG_SET(DISP_REG_BLS_EN, regValue); DISP_MSG("end modifying gamma lut, set BLS_EN=%x\n", DISP_REG_GET(DISP_REG_BLS_EN)); DISP_REG_SET(DISP_REG_BLS_DEBUG, 0x00000000); }
void disp_bls_update_gamma_lut(void) { #if defined(DDP_GAMMA_SUPPORT) int index, i; unsigned long regValue; unsigned long CurVal, Count; DISP_MSG("disp_bls_update_gamma_lut!\n"); if (DISP_REG_GET(DISP_REG_BLS_EN) & 0x1) { DISP_ERR("try to update gamma lut while BLS is active\n"); return; } // init gamma table for(index = 0; index < 3; index++) { for(Count = 0; Count < 257 ; Count++) { g_gamma_lut.entry[index][Count] = g_gamma_index.entry[index][Count]; } } DISP_REG_SET(DISP_REG_BLS_LUT_UPDATE, 0x1); for (i = 0; i < 256 ; i++) { CurVal = (((g_gamma_lut.entry[0][i]&0x3FF)<<20) | ((g_gamma_lut.entry[1][i]&0x3FF)<<10) | (g_gamma_lut.entry[2][i]&0x3FF)); DISP_REG_SET(DISP_REG_BLS_GAMMA_LUT(i), CurVal); DISP_DBG("[%d] GAMMA LUT = 0x%x, (%lu, %lu, %lu)\n", i, DISP_REG_GET(DISP_REG_BLS_GAMMA_LUT(i)), g_gamma_lut.entry[0][i], g_gamma_lut.entry[1][i], g_gamma_lut.entry[2][i]); } /* Set Gamma Last point*/ DISP_REG_SET(DISP_REG_BLS_GAMMA_SETTING, 0x00000001); // set gamma last index CurVal = (((g_gamma_lut.entry[0][256]&0x3FF)<<20) | ((g_gamma_lut.entry[1][256]&0x3FF)<<10) | (g_gamma_lut.entry[2][256]&0x3FF)); DISP_REG_SET(DISP_REG_BLS_GAMMA_BOUNDARY, CurVal); DISP_REG_SET(DISP_REG_BLS_LUT_UPDATE, 0); #endif }