static int generate_gray_scale(struct SMART_DIM *pSmart) { int cnt = 0, cal_cnt = 0; int array_index = 0; for (cnt = 0; cnt < S6E63M0_MAX; cnt++) { pSmart->GRAY.TABLE[S6E63M0_ARRAY[cnt]].R_Gray = ((int *)&(pSmart->RGB_OUTPUT.R_VOLTAGE))[cnt]; pSmart->GRAY.TABLE[S6E63M0_ARRAY[cnt]].G_Gray = ((int *)&(pSmart->RGB_OUTPUT.G_VOLTAGE))[cnt]; pSmart->GRAY.TABLE[S6E63M0_ARRAY[cnt]].B_Gray = ((int *)&(pSmart->RGB_OUTPUT.B_VOLTAGE))[cnt]; } /* below codes use hard coded value. So it is possible to modify on each model. V0, V1,V19,V43,V87,V171,V255 */ for (cnt = 0; cnt < S6E63M0_GRAY_SCALE_MAX; cnt++) { if (cnt == S6E63M0_ARRAY[0]) { /* 0 */ array_index = 0; } else if (cnt == S6E63M0_ARRAY[1]) { /* 1 */ cal_cnt = 0; } else if ((cnt > S6E63M0_ARRAY[1]) && (cnt < S6E63M0_ARRAY[2])) { /* 2 ~ 18 */ array_index = 2; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_non_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].R_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].R_Gray, non_linear_V1toV19, V1TOV19_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_non_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].G_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].G_Gray, non_linear_V1toV19, V1TOV19_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_non_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].B_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].B_Gray, non_linear_V1toV19, V1TOV19_DENOMTR, cal_cnt); cal_cnt++; } else if (cnt == S6E63M0_ARRAY[2]) { /* 19 */ cal_cnt = 0; } else if ((cnt > S6E63M0_ARRAY[2]) && (cnt < S6E63M0_ARRAY[3])) { /* 20 ~ 42 */ array_index = 3; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_non_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].R_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].R_Gray, non_linear_V19toV43, V19TOV43_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_non_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].G_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].G_Gray, non_linear_V19toV43, V19TOV43_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_non_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].B_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].B_Gray, non_linear_V19toV43, V19TOV43_DENOMTR, cal_cnt); cal_cnt++; } else if (cnt == S6E63M0_ARRAY[3]) { /* 43 */ cal_cnt = 0; } else if ((cnt > S6E63M0_ARRAY[3]) && (cnt < S6E63M0_ARRAY[4])) { /* 44 ~ 86 */ array_index = 4; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].R_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].R_Gray, V43TOV87_COEFF, V43TOV87_MULITPLE, V43TOV87_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].G_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].G_Gray, V43TOV87_COEFF, V43TOV87_MULITPLE, V43TOV87_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].B_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].B_Gray, V43TOV87_COEFF, V43TOV87_MULITPLE, V43TOV87_DENOMTR , cal_cnt); cal_cnt++; } else if (cnt == S6E63M0_ARRAY[4]) { /* 87 */ cal_cnt = 0; } else if ((cnt > S6E63M0_ARRAY[4]) && (cnt < S6E63M0_ARRAY[5])) { /* 88 ~ 170 */ array_index = 5; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].R_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].R_Gray, V87TOV171_COEFF, V87TOV171_MULITPLE, V87TOV171_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].G_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].G_Gray, V87TOV171_COEFF, V87TOV171_MULITPLE, V87TOV171_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].B_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].B_Gray, V87TOV171_COEFF, V87TOV171_MULITPLE, V87TOV171_DENOMTR, cal_cnt); cal_cnt++; } else if (cnt == S6E63M0_ARRAY[5]) { /* 171 */ cal_cnt = 0; } else if ((cnt > S6E63M0_ARRAY[5]) && (cnt < S6E63M0_ARRAY[6])) { /* 172 ~ 254 */ array_index = 6; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].R_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].R_Gray, V171TOV255_COEFF, V171TOV255_MULITPLE, V171TOV255_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].G_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].G_Gray, V171TOV255_COEFF, V171TOV255_MULITPLE, V171TOV255_DENOMTR, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index-1]].B_Gray, pSmart->GRAY.TABLE[S6E63M0_ARRAY [array_index]].B_Gray, V171TOV255_COEFF, V171TOV255_MULITPLE, V171TOV255_DENOMTR, cal_cnt); cal_cnt++; } else { if (cnt == S6E63M0_ARRAY[6]) { pr_debug("%s end\n", __func__); } else { pr_info(KERN_ERR "%s fail cnt:%d\n", __func__, cnt); return -1; } } } #ifdef SMART_DIMMING_DEBUG for (cnt = 0; cnt < S6E63M0_GRAY_SCALE_MAX; cnt++) { pr_info("%s %d R:%d G:%d B:%d\n", __func__, cnt, pSmart->GRAY.TABLE[cnt].R_Gray, pSmart->GRAY.TABLE[cnt].G_Gray, pSmart->GRAY.TABLE[cnt].B_Gray); } #endif return 0; }
static int generate_gray_scale(struct SMART_DIM *pSmart) { int cnt = 0, cal_cnt = 0; int array_index = 0; struct GRAY_VOLTAGE *ptable = (struct GRAY_VOLTAGE *)&(pSmart->GRAY.TABLE); for (cnt = 0; cnt < EA8868_MAX; cnt++) { pSmart->GRAY.TABLE[EA8868_ARRAY[cnt]].R_Gray = ((int *)&(pSmart->RGB_OUTPUT.R_VOLTAGE))[cnt]; pSmart->GRAY.TABLE[EA8868_ARRAY[cnt]].G_Gray = ((int *)&(pSmart->RGB_OUTPUT.G_VOLTAGE))[cnt]; pSmart->GRAY.TABLE[EA8868_ARRAY[cnt]].B_Gray = ((int *)&(pSmart->RGB_OUTPUT.B_VOLTAGE))[cnt]; } /* below codes use hard coded value. So it is possible to modify on each model. V0, V1, V15, V35, V59, V87, V171, V255 */ for (cnt = 0; cnt < EA8868_GRAY_SCALE_MAX; cnt++) { if (cnt == EA8868_ARRAY[0]) { /* 0 */ array_index = 0; } else if (cnt == EA8868_ARRAY[1]) { /* 1 */ cal_cnt = 0; } else if ((cnt > EA8868_ARRAY[1]) && (cnt < EA8868_ARRAY[2])) { /* 2 ~ 14 */ array_index = 2; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_non_linear( ptable[EA8868_ARRAY[array_index-1]].R_Gray, ptable[EA8868_ARRAY[array_index]].R_Gray, non_linear_V1toV15, V1toV15_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_non_linear( ptable[EA8868_ARRAY[array_index-1]].G_Gray, ptable[EA8868_ARRAY[array_index]].G_Gray, non_linear_V1toV15, V1toV15_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_non_linear( ptable[EA8868_ARRAY[array_index-1]].B_Gray, ptable[EA8868_ARRAY[array_index]].B_Gray, non_linear_V1toV15, V1toV15_denominator, cal_cnt); cal_cnt++; } else if (cnt == EA8868_ARRAY[2]) { /* 15 */ cal_cnt = 0; } else if ((cnt > EA8868_ARRAY[2]) && (cnt < EA8868_ARRAY[3])) { /* 16 ~ 34 */ array_index = 3; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_non_linear( ptable[EA8868_ARRAY[array_index-1]].R_Gray, ptable[EA8868_ARRAY[array_index]].R_Gray, non_linear_V15toV35, V15toV35_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_non_linear( ptable[EA8868_ARRAY[array_index-1]].G_Gray, ptable[EA8868_ARRAY[array_index]].G_Gray, non_linear_V15toV35, V15toV35_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_non_linear( ptable[EA8868_ARRAY[array_index-1]].B_Gray, ptable[EA8868_ARRAY[array_index]].B_Gray, non_linear_V15toV35, V15toV35_denominator, cal_cnt); cal_cnt++; } else if (cnt == EA8868_ARRAY[3]) { /* 35 */ cal_cnt = 0; } else if ((cnt > EA8868_ARRAY[3]) && (cnt < EA8868_ARRAY[4])) { /* 35 ~ 58 */ array_index = 4; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].R_Gray, ptable[EA8868_ARRAY[array_index]].R_Gray, V35toV59_Coefficient, V35toV59_Multiple, V35toV59_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].G_Gray, ptable[EA8868_ARRAY[array_index]].G_Gray, V35toV59_Coefficient, V35toV59_Multiple, V35toV59_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].B_Gray, ptable[EA8868_ARRAY[array_index]].B_Gray, V35toV59_Coefficient, V35toV59_Multiple, V35toV59_denominator , cal_cnt); cal_cnt++; } else if (cnt == EA8868_ARRAY[4]) { /* 59 */ cal_cnt = 0; } else if ((cnt > EA8868_ARRAY[4]) && (cnt < EA8868_ARRAY[5])) { /* 60 ~ 86 */ array_index = 5; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].R_Gray, ptable[EA8868_ARRAY[array_index]].R_Gray, V59toV87_Coefficient, V59toV87_Multiple, V59toV87_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].G_Gray, ptable[EA8868_ARRAY[array_index]].G_Gray, V59toV87_Coefficient, V59toV87_Multiple, V59toV87_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].B_Gray, ptable[EA8868_ARRAY[array_index]].B_Gray, V59toV87_Coefficient, V59toV87_Multiple, V59toV87_denominator, cal_cnt); cal_cnt++; } else if (cnt == EA8868_ARRAY[5]) { /* 87 */ cal_cnt = 0; } else if ((cnt > EA8868_ARRAY[5]) && (cnt < EA8868_ARRAY[6])) { /* 88 ~ 170 */ array_index = 6; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].R_Gray, ptable[EA8868_ARRAY[array_index]].R_Gray, V87toV171_Coefficient, V87toV171_Multiple, V87toV171_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].G_Gray, ptable[EA8868_ARRAY[array_index]].G_Gray, V87toV171_Coefficient, V87toV171_Multiple, V87toV171_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].B_Gray, ptable[EA8868_ARRAY[array_index]].B_Gray, V87toV171_Coefficient, V87toV171_Multiple, V87toV171_denominator, cal_cnt); cal_cnt++; } else if (cnt == EA8868_ARRAY[6]) { /* 171 */ cal_cnt = 0; } else if ((cnt > EA8868_ARRAY[6]) && (cnt < EA8868_ARRAY[7])) { /* 172 ~ 254 */ array_index = 7; pSmart->GRAY.TABLE[cnt].R_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].R_Gray, ptable[EA8868_ARRAY[array_index]].R_Gray, V171toV255_Coefficient, V171toV255_Multiple, V171toV255_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].G_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].G_Gray, ptable[EA8868_ARRAY[array_index]].G_Gray, V171toV255_Coefficient, V171toV255_Multiple, V171toV255_denominator, cal_cnt); pSmart->GRAY.TABLE[cnt].B_Gray = cal_gray_scale_linear( ptable[EA8868_ARRAY[array_index-1]].B_Gray, ptable[EA8868_ARRAY[array_index]].B_Gray, V171toV255_Coefficient, V171toV255_Multiple, V171toV255_denominator, cal_cnt); cal_cnt++; } else { if (cnt == EA8868_ARRAY[7]) { pr_info("%s end\n", __func__); } else { pr_err("%s fail cnt:%d\n", __func__, cnt); return -1; } } } #ifdef SMART_DIMMING_DEBUG for (cnt = 0; cnt < EA8868_GRAY_SCALE_MAX; cnt++) { printk("%s %d R:%d G:%d B:%d\n", __func__, cnt, pSmart->GRAY.TABLE[cnt].R_Gray, pSmart->GRAY.TABLE[cnt].G_Gray, pSmart->GRAY.TABLE[cnt].B_Gray); } #endif return 0; }