blob: 613c6a7285073f2dbcc2ef1994b2ef858a6dbcd2 [file] [log] [blame]
/*
* drivers/amlogic/media/vout/backlight/aml_ldim/ldim_func.c
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#include <linux/version.h>
#include <linux/string.h>
#include <linux/io.h>
#include <linux/mm.h>
#include <linux/mutex.h>
#include <linux/timer.h>
#include <linux/delay.h>
#include <linux/major.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/timer.h>
#include <linux/amlogic/media/vout/lcd/aml_ldim.h>
#include "ldim_drv.h"
#include "ldim_reg.h"
#ifndef MIN
#define MIN(a, b) ((a < b) ? a:b)
#endif
static int LD_BLK_Hidx[33] = {
/* S14* 33 */
-1920, -1440, -960, -480, 0, 480,
960, 1440, 1920, 2400, 2880, 3360,
3840, 4320, 4800, 5280, 5760, 6240,
6720, 7200, 7680, 8160, 8191, 8191,
8191, 8191, 8191, 8191, 8191, 8191,
8191, 8191, 8191
};
static int LD_BLK_Vidx[25] = {
/* S14* 25 */
-8192, -8192, -8192, -4320, 0, 4320,
8191, 8191, 8191, 8191, 8191, 8191,
8191, 8191, 8191, 8191, 8191, 8191,
8191, 8191, 8191, 8191, 8191, 8191, 8191
};
static int LD_LUT_Hdg1[32] = {
/* u10 */
503, 501, 494, 481, 465, 447, 430, 409, 388, 369, 354,
343, 334, 326, 318, 311, 305, 299, 293, 286, 279, 272,
266, 261, 257, 252, 245, 235, 226, 218, 214, 213
};
static int LD_LUT_Vdg1[32] = {
/* u10 */
373, 371, 367, 364, 359, 353, 346, 337, 328, 318, 308,
297, 286, 274, 261, 247, 232, 218, 204, 191, 180, 169,
158, 148, 138, 130, 122, 115, 108, 104, 100, 97
};
static int LD_LUT_VHk1[32] = {
/* u10 */
492, 492, 492, 492, 427, 356, 328, 298, 272, 251, 229,
206, 191, 175, 162, 151, 144, 139, 131, 127, 119, 110,
105, 101, 99, 98, 94, 85, 83, 77, 74, 73
};
static int LD_LUT_VHo_pos[] = {
104, 75, 50, 20, -15, -25, -25, -25, -25, -25, -25,
-25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
-25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25
};
static int LD_LUT_VHo_neg[] = {
104, 75, 50, 20, -15, -25, -25, -25, -25, -25, -25,
-25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
-25, -25, -25, -25, -25, -25, -25, -25, -25, -25, -25
};
static int LD_LUT_Hdg1_TXLX[32] = {
455, 487, 498, 505, 506, 509, 503, 494,
493, 483, 484, 480, 478, 476, 472, 472,
468, 465, 459, 449, 448, 439, 436, 432,
430, 413, 402, 386, 361, 343, 317, 307
};
static int LD_LUT_Vdg1_TXLX[32] = {
485, 483, 474, 465, 451, 435, 406, 381,
350, 320, 283, 251, 211, 178, 147, 113,
88, 65, 52, 37, 27, 20, 16, 8,
3, 2, 0, 0, 0, 0, 0, 0
};
static int LD_LUT_VHk1_TXLX[32] = {
490, 410, 356, 317, 288, 272, 266, 260,
258, 253, 249, 246, 242, 240, 236, 236,
232, 229, 226, 224, 224, 222, 221, 221,
221, 219, 219, 221, 219, 225, 228, 237
};
static int reg_LD_LUT_Hdg_TXLX[8][32] = {
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
};
static int reg_LD_LUT_Vdg_TXLX[8][32] = {
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
{254, 248, 239, 226, 211, 194, 176, 156,
137, 119, 101, 85, 70, 57, 45, 36,
28, 21, 16, 12, 9, 6, 4, 3,
2, 1, 1, 1, 0, 0, 0, 0},
};
static int reg_LD_LUT_VHk_TXLX[8][32] = {
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
{128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128},
};
static int reg_LD_LUT_VHo_pos_TXLX[32] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
static int reg_LD_LUT_VHo_neg_TXLX[32] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
static int reg_LD_LUT_Hdg_LEXT_TXLX[8] = {
260, 260, 260, 260, 260, 260, 260, 260
};
static int reg_LD_LUT_Vdg_LEXT_TXLX[8] = {
260, 260, 260, 260, 260, 260, 260, 260
};
static int reg_LD_LUT_VHk_LEXT_TXLX[8] = {
128, 128, 128, 128, 128, 128, 128, 128
};
/* public function */
int ldim_round(int ix, int ib)
{
int ld_rst = 0;
if (ix == 0)
ld_rst = 0;
else if (ix > 0)
ld_rst = (ix + ib / 2) / ib;
else
ld_rst = (ix - ib / 2) / ib;
return ld_rst;
}
int Round(int iX, int iB)
{
int Rst = 0;
if (iX == 0)
Rst = 0;
else if (iX > 0)
Rst = (iX + iB / 2) / iB;
else
Rst = (iX - iB / 2) / iB;
return Rst;
}
void LD_IntialData(int pData[], int size, int val)
{
int i;
for (i = 0; i < size; i++)
pData[i] = val;
}
int LD_GetBLMtxAvg(int pMtx[], int size, int mode)
{
int i;
int da;
if (mode == 0)
da = 0;
else if (mode == 1) {
da = 0;
for (i = 0; i < size; i++)
da += pMtx[i];
da = da / size;
} else if (mode == 2) {
da = pMtx[0];
for (i = 1; i < size; i++) {
if (da > pMtx[i])
da = pMtx[i];
}
} else {
da = pMtx[0];
for (i = 1; i < size; i++) {
if (da < pMtx[i])
da = pMtx[i];
}
}
return da;
}
void LD_MtxInv(int *oDat, int *iDat, int nRow, int nCol)
{
int nT1 = 0;
int nT2 = 0;
int nY = 0;
int nX = 0;
for (nY = 0; nY < nRow; nY++) {
for (nX = 0; nX < nCol; nX++) {
nT1 = nY * nCol + nX;
nT2 = nX * nRow + nY;
oDat[nT2] = iDat[nT1];
}
}
}
int LD_remap_lut[16][32] = {
{
128, 258, 387, 517, 646, 776, 905, 1034,
1163, 1291, 1420, 1548, 1676, 1804, 1932, 2059,
2187, 2314, 2441, 2569, 2696, 2823, 2950, 3077,
3204, 3331, 3458, 3586, 3713, 3840, 3968, 4095,
},
{
114, 230, 345, 461, 577, 693, 808, 923,
1038, 1153, 1267, 1382, 1496, 1610, 1724, 1844,
1987, 2130, 2272, 2415, 2557, 2700, 2842, 2985,
3127, 3270, 3412, 3555, 3697, 3840, 3981, 4095,
},
{
114, 230, 345, 461, 577, 692, 808, 923,
1038, 1152, 1267, 1381, 1496, 1610, 1731, 1874,
2017, 2160, 2303, 2445, 2588, 2731, 2873, 3015,
3158, 3300, 3443, 3585, 3728, 3868, 3981, 4095,
},
{
115, 230, 346, 462, 579, 694, 810, 926,
1041, 1155, 1270, 1384, 1499, 1637, 1781, 1923,
2066, 2209, 2351, 2494, 2636, 2778, 2921, 3063,
3205, 3347, 3490, 3632, 3754, 3868, 3982, 4095,
},
{
119, 243, 367, 493, 620, 744, 867, 988,
1106, 1224, 1340, 1456, 1596, 1739, 1881, 2021,
2161, 2300, 2438, 2576, 2713, 2850, 2987, 3124,
3261, 3399, 3536, 3652, 3761, 3871, 3982, 4095,
},
{
116, 240, 364, 490, 619, 742, 863, 982,
1096, 1208, 1319, 1469, 1620, 1769, 1917, 2063,
2208, 2352, 2494, 2636, 2777, 2918, 3059, 3200,
3341, 3482, 3589, 3687, 3786, 3887, 3990, 4095,
},
{
114, 237, 361, 487, 615, 737, 857, 973,
1085, 1221, 1380, 1536, 1691, 1844, 1994, 2144,
2291, 2438, 2583, 2727, 2870, 3014, 3157, 3300,
3424, 3518, 3610, 3704, 3798, 3894, 3994, 4095,
},
{
113, 238, 363, 490, 620, 744, 863, 978,
1091, 1256, 1419, 1579, 1737, 1893, 2046, 2198,
2348, 2496, 2642, 2788, 2933, 3077, 3222, 3366,
3459, 3547, 3633, 3722, 3811, 3903, 3997, 4095,
},
{
120, 255, 390, 528, 669, 801, 928, 1050,
1194, 1356, 1515, 1671, 1825, 1975, 2123, 2268,
2412, 2553, 2693, 2832, 2970, 3107, 3244, 3361,
3448, 3536, 3623, 3713, 3804, 3897, 3994, 4095,
},
{
134, 292, 449, 611, 775, 924, 1063, 1193,
1340, 1503, 1661, 1814, 1963, 2108, 2249, 2387,
2522, 2654, 2785, 2914, 3042, 3169, 3297, 3405,
3484, 3565, 3644, 3727, 3813, 3901, 3996, 4095,
},
{
160, 358, 550, 746, 943, 1113, 1266, 1406,
1552, 1708, 1858, 2000, 2138, 2269, 2397, 2520,
2640, 2757, 2872, 2985, 3098, 3211, 3325, 3422,
3496, 3572, 3647, 3727, 3811, 3898, 3993, 4095,
},
{
201, 456, 693, 929, 1162, 1354, 1520, 1671,
1822, 1963, 2095, 2220, 2339, 2451, 2559, 2662,
2762, 2859, 2955, 3049, 3143, 3239, 3335, 3407,
3479, 3556, 3630, 3712, 3797, 3887, 3987, 4095,
},
{
243, 546, 815, 1079, 1334, 1536, 1707, 1857,
1996, 2125, 2245, 2357, 2462, 2561, 2655, 2746,
2833, 2917, 3000, 3083, 3166, 3250, 3336, 3405,
3476, 3551, 3624, 3706, 3791, 3882, 3984, 4095,
},
{
280, 622, 914, 1195, 1465, 1672, 1844, 1993,
2122, 2240, 2349, 2450, 2545, 2634, 2718, 2798,
2875, 2950, 3023, 3097, 3171, 3247, 3325, 3393,
3464, 3540, 3614, 3697, 3784, 3876, 3981, 4095,
},
{
308, 675, 979, 1268, 1544, 1752, 1922, 2067,
2191, 2304, 2408, 2505, 2595, 2679, 2758, 2834,
2907, 2978, 3048, 3118, 3189, 3262, 3338, 3404,
3473, 3546, 3618, 3700, 3785, 3877, 3981, 4095,
},
{
342, 738, 1058, 1360, 1648, 1862, 2037, 2184,
2295, 2396, 2488, 2573, 2651, 2724, 2792, 2857,
2919, 2979, 3038, 3098, 3158, 3221, 3287, 3357,
3431, 3510, 3588, 3674, 3766, 3864, 3975, 4095,
},
};
static int Remap_lut2[16][16] = {};
void LD_LUTInit(struct LDReg_s *Reg)
{
int i, j, k, t;
struct aml_bl_drv_s *bl_drv = aml_bl_get_driver();
switch (bl_drv->data->chip_type) {
case BL_CHIP_TXLX:
for (i = 0; i < 16; i++) {
for (j = 0; j < 16; j++)
Remap_lut2[i][j] = LD_remap_lut[i][j * 2] |
(LD_remap_lut[i][j * 2 + 1] << 16);
}
/* Emulate the FW to set the LUTs */
for (k = 0; k < 16; k++) {
/*set the LUT to be inverse of the Lit_value,*/
/* lit_idx distribute equal space, set by FW */
Reg->X_idx[0][k] = 4095 - 256 * k;
Reg->X_nrm[0][k] = 8;
for (t = 0; t < 16; t++) {
Reg->X_lut2[0][k][t] = Remap_lut2[k][t];
Reg->X_lut2[1][k][t] = Remap_lut2[k][t];
Reg->X_lut2[2][k][t] = Remap_lut2[k][t];
}
}
break;
default:
break;
}
}
static void ConLDReg_TXLX(struct LDReg_s *Reg)
{
int i, j;
unsigned int T = 0;
unsigned int Vnum = 0;
unsigned int Hnum = 0;
unsigned int BSIZE = 0;
/* General registers; */
Reg->reg_LD_pic_RowMax = 2160;/* setting default */
Reg->reg_LD_pic_ColMax = 3840;
LD_IntialData(Reg->reg_LD_pic_YUVsum, 3, 0);
/* only output u16*3, (internal ACC will be u32x3)*/
LD_IntialData(Reg->reg_LD_pic_RGBsum, 3, 0);
/* set same region division for statistics */
Reg->reg_LD_STA_Vnum = 1;
Reg->reg_LD_STA_Hnum = 8;
/*Image Statistic options */
Reg->reg_LD_BLK_Vnum = 1;/*u5: Maximum to BLKVMAX */
Reg->reg_LD_BLK_Hnum = 8;/*u5: Maximum to BLKHMAX */
Reg->reg_LD_STA1max_LPF = 1;
/*u1: STA1max statistics on [1 2 1]/4 filtered results */
Reg->reg_LD_STA2max_LPF = 1;
/*u1: STA2max statistics on [1 2 1]/4 filtered results*/
Reg->reg_LD_STAhist_LPF = 1;
/*u1: STAhist statistics on [1 2 1]/4 filtered results*/
Reg->reg_LD_STA1max_Hdlt = 0;
/*u2: (2^x) extra pixels into Max calculation*/
Reg->reg_LD_STA1max_Vdlt = 0;
/*u4: extra pixels into Max calculation vertically*/
Reg->reg_LD_STA2max_Hdlt = 0;
/*u2: (2^x) extra pixels into Max calculation*/
Reg->reg_LD_STA2max_Vdlt = 0;
/*u4: extra pixels into Max calculation vertically*/
Reg->reg_LD_STAhist_mode = 3;
/* u3: histogram statistics on XX separately 20bits*16bins:
* 0:R-only,1:G-only 2:B-only 3:Y-only; 4:MAX(R,G,B),5/6/7:R&G&B
*/
/****** FBC3 fw_hw_alg_frm *******/
Reg->reg_ldfw_blest_acmode = 0;
/* u3: 0: est on BLmatrix; 1: est on (BL-DC);
* 2: est on (BL-MIN); 3: est on (BL-MAX) 4: 2048; 5:1024
*/
Reg->reg_ldfw_blk_norm = 128;
/* u8: normalization gain for blk number,
* 1/blk_num= norm>>(rs+8), norm = (1<<(rs+8))/blk_num
*/
Reg->reg_ldfw_blk_norm_rs = 2;
/*u3: 0~7, 1/blk_num= norm>>(rs+8)*/
Reg->reg_ldfw_BLmax = 4095; /*maximum BL value*/
Reg->reg_ldfw_boost_enable = 1;
/* u1: enable signal for Boost filter on the tbl_matrix */
Reg->reg_ldfw_boost_gain = 64;
/* u8: boost gain for the region that is
* larger than the average, norm to 16 as "1"
*/
Reg->reg_ldfw_enable = 1;
Reg->reg_ldfw_hist_valid_ofst = 63;/* u8, hist valid bin upward offset*/
Reg->reg_ldfw_hist_valid_rate = 64;
/* u8, norm to 512 as "1", if hist_matrix[i]>(rate*histavg)>>9 */
Reg->reg_ldfw_sedglit_RL = 1;/*u1: single edge lit right/bottom mode*/
Reg->reg_ldfw_sf_enable = 1;
/* u1: enable signal for spatial filter on the tbl_matrix */
Reg->reg_ldfw_sf_thrd = 1600;
/*u12: threshold of difference to enable the sf;*/
Reg->reg_ldfw_sta_hdg_vflt = 1;
for (T = 0; T < 8; T++)
Reg->reg_ldfw_sta_hdg_weight[T] = 64;
Reg->reg_ldfw_sta_max_hist_mode = 0;
/* u2: mode of reference max/hist mode:
* 0: MIN(max, hist), 1: MAX(max, hist) 2: (max+hist)/2,
* 3: (max(a,b)*3 + min(a,b))/4
*/
Reg->reg_ldfw_sta_max_mode = 3;
/* u2: maximum selection for components:
* 0: r_max, 1: g_max, 2: b_max; 3: max(r,g,b)
*/
Reg->reg_ldfw_sta_norm = 128;
Reg->reg_ldfw_sta_norm_rs = 5;
Reg->reg_ldfw_tf_alpha_ofst = 32;
/* u8: ofset to alpha SFB_BL_matrix from last frame difference;*/
Reg->reg_ldfw_tf_alpha_rate = 16;
/*u8: rate to SFB_BL_matrix from last frame difference;*/
Reg->reg_ldfw_tf_disable_th = 255;
/* u8: 4x is the threshod to disable tf to the alpha
* (SFB_BL_matrix from last frame difference;
*/
Reg->reg_ldfw_tf_enable = 1;
Vnum = Reg->reg_LD_BLK_Vnum;
Hnum = Reg->reg_LD_BLK_Hnum;
BSIZE = Vnum*Hnum;
/*Initialization */
LD_IntialData(Reg->BL_matrix, BSIZE, 4095);
/* BackLight Modeling control register setting*/
Reg->reg_LD_BackLit_Xtlk = 1;
/* u1: 0 no block to block Xtalk model needed; 1: Xtalk model needed*/
Reg->reg_LD_BackLit_mode = 1;
/* u2: 0- LEFT/RIGHT Edge Lit;
* 1- Top/Bot Edge Lit; 2 - DirectLit modeled
* H/V independent; 3- DirectLit modeled HV Circle distribution
*/
Reg->reg_LD_Reflect_Hnum = 3;
/*u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
Reg->reg_LD_Reflect_Vnum = 0;
/*u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
Reg->reg_LD_BkLit_curmod = 0;
/*u1: 0: H/V separately, 1 Circle distribution*/
Reg->reg_LD_BkLUT_Intmod = 1;
/*u1: 0: linear interpolation, 1 cubical interpolation*/
Reg->reg_LD_BkLit_Intmod = 1;
/*u1: 0: linear interpolation, 1 cubical interpolation*/
Reg->reg_LD_BkLit_LPFmod = 7;
/*u3: 0: no LPF, 1:[1 14 1]/16;2:[1 6 1]/8; 3: [1 2 1]/4;
* 4:[9 14 9]/32 5/6/7: [5 6 5]/16;
*/
Reg->reg_LD_BkLit_Celnum = 121;
/*u8:0:1920~61####((Reg->reg_LD_pic_ColMax+1)/32)+1;*/
Reg->reg_BL_matrix_AVG = 3167;
/* u12: DC of whole picture BL to be subtract from BL_matrix
* during modeling (Set by FW daynamically)
*/
Reg->reg_BL_matrix_Compensate = 3167;
/* u12: DC of whole picture BL to be compensated back to
* Litfull after the model (Set by FW dynamically);
*/
LD_IntialData(Reg->reg_LD_Reflect_Hdgr, 20, 32);
/*20*u6: cells 1~20 for H Gains of different dist of Left/Right;*/
LD_IntialData(Reg->reg_LD_Reflect_Vdgr, 20, 32);
/*20*u6: cells 1~20 for V Gains of different dist of Top/Bot; */
LD_IntialData(Reg->reg_LD_Reflect_Xdgr, 4, 32);/* 4*u6: */
Reg->reg_LD_Vgain = 256;/* u12 */
Reg->reg_LD_Hgain = 128;/* u12 */
Reg->reg_LD_Litgain = 230;/* u12 */
Reg->reg_LD_Litshft = 3;
/* u3 right shif of bits for the all Lit's sum */
LD_IntialData(Reg->reg_LD_BkLit_valid, 32, 1);
/*u1x32: valid bits for the 32 cell Bklit to contribut to current
* position (refer to the backlit padding pattern)
* region division index 1 2 3 4 5(0) 6(1) 7(2) 8(3) 9(4)
* 10(5)11(6)12(7)13(8) 14(9)15(10) 16 17 18 19
*/
for (T = 0; T < LD_BLK_LEN_H; T++)
Reg->reg_LD_BLK_Hidx[T] = LD_BLK_Hidx[T];/* S14* BLK_LEN_H */
for (T = 0; T < LD_BLK_LEN_V; T++)
Reg->reg_LD_BLK_Vidx[T] = LD_BLK_Vidx[T];/* S14x BLK_LEN_V */
for (j = 0; j < 8; j++) {
for (i = 0; i < 32; i++) {
Reg->reg_LD_LUT_Hdg_TXLX[j][i] =
reg_LD_LUT_Hdg_TXLX[j][i];
}
}
for (j = 0; j < 8; j++) {
for (i = 0; i < 32; i++) {
Reg->reg_LD_LUT_Vdg_TXLX[j][i] =
reg_LD_LUT_Vdg_TXLX[j][i];
}
}
for (j = 0; j < 8; j++) {
for (i = 0; i < 32; i++) {
Reg->reg_LD_LUT_VHk_TXLX[j][i] =
reg_LD_LUT_VHk_TXLX[j][i];
}
}
/* led LUT only choose fist one */
for (i = 0; i < 16*24; i++)
Reg->reg_LD_LUT_Id[i] = 0;
/* set the VHk_pos and VHk_neg value ,normalized to
* 128 as "1" 20150428
*/
for (T = 0; T < 32; T++) {
Reg->reg_LD_LUT_VHk_pos[T] = 128;/* vdist>=0 */
Reg->reg_LD_LUT_VHk_neg[T] = 128;/* vdist<0 */
Reg->reg_LD_LUT_HHk[T] = 128;/* hdist gain */
Reg->reg_LD_LUT_VHo_pos[T] = reg_LD_LUT_VHo_pos_TXLX[T];
Reg->reg_LD_LUT_VHo_neg[T] = reg_LD_LUT_VHo_neg_TXLX[T];
}
Reg->reg_LD_LUT_VHo_LS = 0;
for (i = 0; i < 8; i++) {
Reg->reg_LD_LUT_Hdg_LEXT_TXLX[i] = reg_LD_LUT_Hdg_LEXT_TXLX[i];
Reg->reg_LD_LUT_Vdg_LEXT_TXLX[i] = reg_LD_LUT_Vdg_LEXT_TXLX[i];
Reg->reg_LD_LUT_VHk_LEXT_TXLX[i] = reg_LD_LUT_VHk_LEXT_TXLX[i];
}
/* set the demo window */
Reg->reg_LD_xlut_demo_roi_xstart = (Reg->reg_LD_pic_ColMax / 4);
/* u14 start col index of the region of interest */
Reg->reg_LD_xlut_demo_roi_xend = (Reg->reg_LD_pic_ColMax * 3 / 4);
/* u14 end col index of the region of interest */
Reg->reg_LD_xlut_demo_roi_ystart = (Reg->reg_LD_pic_RowMax / 4);
/* u14 start row index of the region of interest */
Reg->reg_LD_xlut_demo_roi_yend = (Reg->reg_LD_pic_RowMax * 3 / 4);
/* u14 end row index of the region of interest */
Reg->reg_LD_xlut_iroi_enable = 1;
/* u1: enable rgb LUT remapping inside regon of interest:
* 0: no rgb remapping; 1: enable rgb remapping
*/
Reg->reg_LD_xlut_oroi_enable = 1;
/* u1: enable rgb LUT remapping outside regon of interest:
* 0: no rgb remapping; 1: enable rgb remapping
*/
/* Registers used in LD_RGB_LUT for RGB remaping */
Reg->reg_LD_RGBmapping_demo = 0;
/* u2: 0 no demo mode 1: display BL_fulpel on RGB */
Reg->reg_LD_X_LUT_interp_mode[0] = 0;
/* U1 0: using linear interpolation between to neighbour LUT;
* 1: use the nearest LUT results
*/
Reg->reg_LD_X_LUT_interp_mode[1] = 0;
/* U1 0: using linear interpolation between to neighbour LUT;
* 1: use the nearest LUT results
*/
Reg->reg_LD_X_LUT_interp_mode[2] = 0;
/* U1 0: using linear interpolation between to neighbour LUT;
* 1: use the nearest LUT results
*/
LD_LUTInit(Reg);
}
#if 1
void LD_ConLDReg(struct LDReg_s *Reg)
{
struct aml_bl_drv_s *bl_drv = aml_bl_get_driver();
switch (bl_drv->data->chip_type) {
case BL_CHIP_TXLX:
ConLDReg_TXLX(Reg);
break;
default:
break;
}
}
#define LD_ONESIDE 1
/* 0: left/top side,
* 1: right/bot side, others: non-one-side
*/
void ld_fw_cfg_once(struct LDReg_s *nPRM)
{
int k, dlt, j, i;
int hofst = 4;
int vofst = 4;
int Hnrm = 256;/* Hgain norm (256: for Hlen==2048) */
int Vnrm = 256;/* Vgain norm (256: for Vlen==2048),related to VHk */
int drt_LD_LUT_dg[] = {254, 248, 239, 226, 211, 194, 176, 156, 137,
119, 101, 85, 70, 57, 45, 36, 28, 21, 16,
12, 9, 6, 4, 3, 2, 1, 1, 1, 0, 0, 0, 0};
/* demo mode to show the Lit map */
nPRM->reg_LD_RGBmapping_demo = 0;
/* set Reg->reg_LD_BkLit_Celnum */
nPRM->reg_LD_BkLit_Celnum = (nPRM->reg_LD_pic_ColMax + 63) / 32;
/* set same region division for statistics */
/*nPRM->reg_LD_STA_Vnum = nPRM->reg_LD_BLK_Vnum;*/
/*nPRM->reg_LD_STA_Hnum = nPRM->reg_LD_BLK_Hnum;*/
/* STA1max_Hidx */
nPRM->reg_LD_STA1max_Hidx[0] = 0;
for (k = 1; k < LD_STA_LEN_H; k++) {
nPRM->reg_LD_STA1max_Hidx[k] = ((nPRM->reg_LD_pic_ColMax +
(nPRM->reg_LD_STA_Hnum) - 1) /
(nPRM->reg_LD_STA_Hnum)) * k;
if (nPRM->reg_LD_STA1max_Hidx[k] > 4095)
nPRM->reg_LD_STA1max_Hidx[k] = 4095;/* clip U12 */
}
/* STA1max_Vidx */
nPRM->reg_LD_STA1max_Vidx[0] = 0;
for (k = 1; k < LD_STA_LEN_V; k++) {
nPRM->reg_LD_STA1max_Vidx[k] = ((nPRM->reg_LD_pic_RowMax +
(nPRM->reg_LD_STA_Vnum) - 1) /
(nPRM->reg_LD_STA_Vnum)) * k;
if (nPRM->reg_LD_STA1max_Vidx[k] > 4095)
nPRM->reg_LD_STA1max_Vidx[k] = 4095;/* clip to U12 */
}
/* config LD_STA2max_H/Vidx/LD_STAhist_H/Vidx */
for (k = 0; k < LD_STA_LEN_H; k++) {
nPRM->reg_LD_STA2max_Hidx[k] = nPRM->reg_LD_STA1max_Hidx[k];
nPRM->reg_LD_STAhist_Hidx[k] = nPRM->reg_LD_STA1max_Hidx[k];
}
for (k = 0; k < LD_STA_LEN_V; k++) {
nPRM->reg_LD_STA2max_Vidx[k] = nPRM->reg_LD_STA1max_Vidx[k];
nPRM->reg_LD_STAhist_Vidx[k] = nPRM->reg_LD_STA1max_Vidx[k];
}
if (nPRM->reg_LD_BackLit_mode == 0) {/* Left/right EdgeLit */
/* set reflect num */
nPRM->reg_LD_Reflect_Hnum = 0;
/* u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
nPRM->reg_LD_Reflect_Vnum = 3;
/* u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
/* config reg_LD_BLK_Hidx */
for (k = 0; k < LD_BLK_LEN_H; k++) {
dlt = nPRM->reg_LD_pic_ColMax /
(nPRM->reg_LD_BLK_Hnum) * 2;
#if (LD_ONESIDE == 1) /* bot/right one side */
nPRM->reg_LD_BLK_Hidx[k] = 0 + (k-hofst) * dlt;
#else
nPRM->reg_LD_BLK_Hidx[k] = (-1) * (dlt / 2) +
(k - hofst) * dlt;
#endif
nPRM->reg_LD_BLK_Hidx[k] = (nPRM->reg_LD_BLK_Hidx[k] >
8191) ? 8191 : ((nPRM->reg_LD_BLK_Hidx[k] <
(-8192)) ? (-8192) :
(nPRM->reg_LD_BLK_Hidx[k]));/* Clip to S14 */
}
/* config reg_LD_BLK_Vidx */
for (k = 0; k < LD_BLK_LEN_V; k++) {
dlt = (nPRM->reg_LD_pic_RowMax) /
(nPRM->reg_LD_BLK_Vnum);
nPRM->reg_LD_BLK_Vidx[k] = 0 + (k - vofst) * dlt;
nPRM->reg_LD_BLK_Vidx[k] = (nPRM->reg_LD_BLK_Vidx[k] >
8191) ? 8191 : ((nPRM->reg_LD_BLK_Vidx[k] <
(-8192)) ? (-8192) :
(nPRM->reg_LD_BLK_Vidx[k]));/*Clip to S14*/
}
/* configure Hgain/Vgain */
nPRM->reg_LD_Hgain = (Hnrm*2048 / (nPRM->reg_LD_pic_ColMax));
nPRM->reg_LD_Vgain = (Vnrm*2048 / (nPRM->reg_LD_pic_RowMax));
nPRM->reg_LD_Hgain = (nPRM->reg_LD_Hgain >
4095) ? 4095 : (nPRM->reg_LD_Hgain);
nPRM->reg_LD_Vgain = (nPRM->reg_LD_Vgain >
4095) ? 4095 : (nPRM->reg_LD_Vgain);
/* if one side led, set the Hdg/Vdg/VHk differently */
if (nPRM->reg_LD_BLK_Hnum == 1) {
for (k = 0; k < LD_LUT_LEN; k++) {
nPRM->reg_LD_LUT_Hdg[k] = LD_LUT_Hdg1[k];
nPRM->reg_LD_LUT_Vdg[k] = LD_LUT_Vdg1[k];
nPRM->reg_LD_LUT_VHk[k] = LD_LUT_VHk1[k];
nPRM->reg_LD_LUT_VHo_neg[k] = LD_LUT_VHo_neg[k];
nPRM->reg_LD_LUT_VHo_pos[k] = LD_LUT_VHo_pos[k];
}
nPRM->reg_LD_LUT_Hdg_LEXT = 2 * nPRM->reg_LD_LUT_Hdg[0]
- nPRM->reg_LD_LUT_Hdg[1];
nPRM->reg_LD_LUT_Vdg_LEXT = 2 * nPRM->reg_LD_LUT_Vdg[0]
- nPRM->reg_LD_LUT_Vdg[1];
nPRM->reg_LD_LUT_VHk_LEXT = 2 * nPRM->reg_LD_LUT_VHk[0]
- nPRM->reg_LD_LUT_VHk[1];
nPRM->reg_LD_Litgain = 230;
/* u12 will be adjust according to pannel */
/* specially for TXLX config of one
* side led mode(mode=1)--kite1023
*/
for (k = 0; k < LD_LUT_LEN; k++) {
/* group 2 as one led lut--kite1023 */
nPRM->reg_LD_LUT_Hdg_TXLX[1][k] =
LD_LUT_Hdg1_TXLX[k];
nPRM->reg_LD_LUT_Vdg_TXLX[1][k] =
LD_LUT_Vdg1_TXLX[k];
nPRM->reg_LD_LUT_VHk_TXLX[1][k] =
LD_LUT_VHk1_TXLX[k];
/* same with gxtvbb,default is ok */
nPRM->reg_LD_LUT_VHo_neg[k] = LD_LUT_VHo_neg[k];
nPRM->reg_LD_LUT_VHo_pos[k] = LD_LUT_VHo_pos[k];
}
for (j = 0; j < 8; j++) {
nPRM->reg_LD_LUT_Hdg_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_Hdg_TXLX[1][0]) -
(nPRM->reg_LD_LUT_Hdg_TXLX[1][1]);
nPRM->reg_LD_LUT_Vdg_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_Vdg_TXLX[1][0]) -
(nPRM->reg_LD_LUT_Vdg_TXLX[1][1]);
nPRM->reg_LD_LUT_VHk_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_VHk_TXLX[1][0]) -
(nPRM->reg_LD_LUT_VHk_TXLX[1][1]);
}
nPRM->reg_LD_Litgain = 230;
/* led LUT only choose group 2--kite1023 */
for (i = 0; i < 16*24; i++)
nPRM->reg_LD_LUT_Id[i] = 1;
}
} else if (nPRM->reg_LD_BackLit_mode == 1) {/* Top/Bot EdgeLit */
/* set reflect num */
nPRM->reg_LD_Reflect_Hnum = 3;
/* u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
nPRM->reg_LD_Reflect_Vnum = 0;
/* u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
/* config reg_LD_BLK_Hidx */
for (k = 0; k < LD_BLK_LEN_H; k++) {
dlt = nPRM->reg_LD_pic_ColMax / nPRM->reg_LD_BLK_Hnum;
nPRM->reg_LD_BLK_Hidx[k] = 0 + (k - hofst) * dlt;
nPRM->reg_LD_BLK_Hidx[k] = (nPRM->reg_LD_BLK_Hidx[k] >
8191) ? 8191 : ((nPRM->reg_LD_BLK_Hidx[k] <
(-8192)) ? (-8192) :
(nPRM->reg_LD_BLK_Hidx[k]));/*Clip to S14*/
}
/* config reg_LD_BLK_Vidx */
for (k = 0; k < LD_BLK_LEN_V; k++) {
dlt = nPRM->reg_LD_pic_RowMax /
(nPRM->reg_LD_BLK_Vnum) * 2;
#if (LD_ONESIDE == 1) /* bot/right one side */
nPRM->reg_LD_BLK_Vidx[k] = 0 + (k-vofst) * dlt;
#else
nPRM->reg_LD_BLK_Vidx[k] = (-1) * (dlt / 2) +
(k - vofst) * dlt;
#endif
nPRM->reg_LD_BLK_Vidx[k] = (nPRM->reg_LD_BLK_Vidx[k] >
8191) ? 8191 : ((nPRM->reg_LD_BLK_Vidx[k] <
(-8192)) ? (-8192) :
(nPRM->reg_LD_BLK_Vidx[k])); /* Clip to S14*/
}
/* configure Hgain/Vgain */
nPRM->reg_LD_Hgain = (Hnrm*2048 / (nPRM->reg_LD_pic_RowMax));
nPRM->reg_LD_Vgain = (Vnrm*2048 / (nPRM->reg_LD_pic_ColMax));
nPRM->reg_LD_Hgain = (nPRM->reg_LD_Hgain >
4095) ? 4095 : (nPRM->reg_LD_Hgain);
nPRM->reg_LD_Vgain = (nPRM->reg_LD_Vgain >
4095) ? 4095 : (nPRM->reg_LD_Vgain);
/* if one side led, set the Hdg/Vdg/VHk differently */
if (nPRM->reg_LD_BLK_Vnum == 1) {
for (k = 0; k < LD_LUT_LEN; k++) {
nPRM->reg_LD_LUT_Hdg[k] = LD_LUT_Hdg1[k];
nPRM->reg_LD_LUT_Vdg[k] = LD_LUT_Vdg1[k];
nPRM->reg_LD_LUT_VHk[k] = LD_LUT_VHk1[k];
nPRM->reg_LD_LUT_VHo_neg[k] = LD_LUT_VHo_neg[k];
nPRM->reg_LD_LUT_VHo_pos[k] = LD_LUT_VHo_pos[k];
}
nPRM->reg_LD_LUT_Hdg_LEXT = 2 * nPRM->reg_LD_LUT_Hdg[0]
- nPRM->reg_LD_LUT_Hdg[1];
nPRM->reg_LD_LUT_Vdg_LEXT = 2 * nPRM->reg_LD_LUT_Vdg[0]
- nPRM->reg_LD_LUT_Vdg[1];
nPRM->reg_LD_LUT_VHk_LEXT = 2 * nPRM->reg_LD_LUT_VHk[0]
- nPRM->reg_LD_LUT_VHk[1];
/* specially for TXLX config--kite1023 */
for (k = 0; k < LD_LUT_LEN; k++) {
/* group 2 as one led lut--kite1023 */
nPRM->reg_LD_LUT_Hdg_TXLX[1][k] =
LD_LUT_Hdg1_TXLX[k];
nPRM->reg_LD_LUT_Vdg_TXLX[1][k] =
LD_LUT_Vdg1_TXLX[k];
nPRM->reg_LD_LUT_VHk_TXLX[1][k] =
LD_LUT_VHk1_TXLX[k];
/* same with gxtvbb,default is ok */
nPRM->reg_LD_LUT_VHo_neg[k] = LD_LUT_VHo_neg[k];
nPRM->reg_LD_LUT_VHo_pos[k] = LD_LUT_VHo_pos[k];
}
/* 8 led lut */
for (j = 0; j < 8; j++) {
nPRM->reg_LD_LUT_Hdg_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_Hdg_TXLX[1][0]) -
(nPRM->reg_LD_LUT_Hdg_TXLX[1][1]);
nPRM->reg_LD_LUT_Vdg_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_Vdg_TXLX[1][0]) -
(nPRM->reg_LD_LUT_Vdg_TXLX[1][1]);
nPRM->reg_LD_LUT_VHk_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_VHk_TXLX[1][0]) -
(nPRM->reg_LD_LUT_VHk_TXLX[1][1]);
}
/*led LUT only choose group */
for (i = 0; i < 16*24; i++)
nPRM->reg_LD_LUT_Id[i] = 1;
nPRM->reg_LD_Litgain = 256;
}
} else {/* DirectLit */
/* set reflect num */
nPRM->reg_LD_Reflect_Hnum = 2;
/* u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
nPRM->reg_LD_Reflect_Vnum = 2;
/* u3: numbers of band reflection considered in Horizontal
* direction; 0~4
*/
/* config reg_LD_BLK_Hidx */
for (k = 0; k < LD_BLK_LEN_H; k++) {
dlt = nPRM->reg_LD_pic_ColMax / nPRM->reg_LD_BLK_Hnum;
nPRM->reg_LD_BLK_Hidx[k] = 0 + (k - hofst) * dlt;
nPRM->reg_LD_BLK_Hidx[k] = (nPRM->reg_LD_BLK_Hidx[k] >
8191) ? 8191 : ((nPRM->reg_LD_BLK_Hidx[k] <
(-8192)) ? (-8192) :
(nPRM->reg_LD_BLK_Hidx[k]));/*Clip to S14*/
}
/* config reg_LD_BLK_Vidx */
for (k = 0; k < LD_BLK_LEN_V; k++) {
dlt = nPRM->reg_LD_pic_RowMax / nPRM->reg_LD_BLK_Vnum;
nPRM->reg_LD_BLK_Vidx[k] = 0 + (k - vofst) * dlt;
nPRM->reg_LD_BLK_Vidx[k] = (nPRM->reg_LD_BLK_Vidx[k] >
8191) ? 8191 : ((nPRM->reg_LD_BLK_Vidx[k] <
(-8192)) ? (-8192) :
(nPRM->reg_LD_BLK_Vidx[k]));/*Clip to S14*/
}
/* configure Hgain/Vgain */
nPRM->reg_LD_Hgain = ((nPRM->reg_LD_BLK_Hnum) * 73 * 2048 /
(nPRM->reg_LD_pic_ColMax));
nPRM->reg_LD_Vgain = ((nPRM->reg_LD_BLK_Vnum) * 73 * 2048 /
(nPRM->reg_LD_pic_RowMax));
nPRM->reg_LD_Hgain = (nPRM->reg_LD_Hgain >
4095) ? 4095 : (nPRM->reg_LD_Hgain);
nPRM->reg_LD_Vgain = (nPRM->reg_LD_Vgain >
4095) ? 4095 : (nPRM->reg_LD_Vgain);
/* configure */
for (k = 0; k < LD_LUT_LEN; k++) {
nPRM->reg_LD_LUT_Hdg[k] = drt_LD_LUT_dg[k];
nPRM->reg_LD_LUT_Vdg[k] = drt_LD_LUT_dg[k];
nPRM->reg_LD_LUT_VHk[k] = 128;
/*config once to make sure */
nPRM->reg_LD_LUT_VHk_neg[k] = 128;
nPRM->reg_LD_LUT_VHk_pos[k] = 128;
/* nPRM->reg_LD_LUT_VHo_neg =
* nPRM->reg_LD_LUT_VHo_neg_TXLX
* register same with gxtvbb
*/
nPRM->reg_LD_LUT_VHo_neg[k] = 0;
/* nPRM->reg_LD_LUT_VHo_pos_TXLX */
nPRM->reg_LD_LUT_VHo_pos[k] = 0;
}
/* just for confirm--kite1023 */
for (j = 0; j < 8; j++) {
for (k = 0; k < LD_LUT_LEN; k++) {
nPRM->reg_LD_LUT_Hdg_TXLX[j][k] =
reg_LD_LUT_Hdg_TXLX[j][k];
nPRM->reg_LD_LUT_Vdg_TXLX[j][k] =
reg_LD_LUT_Vdg_TXLX[j][k];
nPRM->reg_LD_LUT_VHk_TXLX[j][k] =
reg_LD_LUT_VHk_TXLX[j][k];
}
}
nPRM->reg_LD_LUT_VHo_LS = 0;
nPRM->reg_LD_LUT_Hdg_LEXT = 2 * (nPRM->reg_LD_LUT_Hdg[0])
- (nPRM->reg_LD_LUT_Hdg[1]);
nPRM->reg_LD_LUT_Vdg_LEXT = 2 * (nPRM->reg_LD_LUT_Vdg[0])
- (nPRM->reg_LD_LUT_Vdg[1]);
nPRM->reg_LD_LUT_VHk_LEXT = 2 * (nPRM->reg_LD_LUT_VHk[0])
- (nPRM->reg_LD_LUT_VHk[1]);
/*led LUT only choose fist one-- make confirm --kite1023 */
for (i = 0; i < 16*24; i++)
nPRM->reg_LD_LUT_Id[i] = 0;
for (j = 0; j < 8; j++) { /*8 led lut */
nPRM->reg_LD_LUT_Hdg_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_Hdg_TXLX[0][0]) -
(nPRM->reg_LD_LUT_Hdg_TXLX[0][1]);/*260*/
nPRM->reg_LD_LUT_Vdg_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_Vdg_TXLX[0][0]) -
(nPRM->reg_LD_LUT_Vdg_TXLX[0][1]);/*260*/
nPRM->reg_LD_LUT_VHk_LEXT_TXLX[j] =
2*(nPRM->reg_LD_LUT_VHk_TXLX[0][0]) -
(nPRM->reg_LD_LUT_VHk_TXLX[0][1]);/*128*/
}
nPRM->reg_LD_Litgain = 256;
nPRM->reg_LD_BkLit_curmod = 0;
}
/* set one time nPRM here */
nPRM->reg_LD_STA1max_LPF = 1;
/* u1: STA1max statistics on [1 2 1]/4 filtered results */
nPRM->reg_LD_STA2max_LPF = 1;
/* u1: STA2max statistics on [1 2 1]/4 filtered results */
nPRM->reg_LD_STAhist_LPF = 1;
/*u1: STAhist statistics on [1 2 1]/4 filtered results */
nPRM->reg_LD_X_LUT_interp_mode[0] = 0;
nPRM->reg_LD_X_LUT_interp_mode[1] = 0;
nPRM->reg_LD_X_LUT_interp_mode[2] = 0;
/* set the demo window*/
nPRM->reg_LD_xlut_demo_roi_xstart = (nPRM->reg_LD_pic_ColMax / 4);
/* u14 start col index of the region of interest */
nPRM->reg_LD_xlut_demo_roi_xend = (nPRM->reg_LD_pic_ColMax * 3 / 4);
/* u14 end col index of the region of interest */
nPRM->reg_LD_xlut_demo_roi_ystart = (nPRM->reg_LD_pic_RowMax / 4);
/* u14 start row index of the region of interest */
nPRM->reg_LD_xlut_demo_roi_yend = (nPRM->reg_LD_pic_RowMax * 3 / 4);
/* u14 end row index of the region of interest */
nPRM->reg_LD_xlut_iroi_enable = 1;
/* u1: enable rgb LUT remapping inside regon of interest:
* 0: no rgb remapping; 1: enable rgb remapping
*/
nPRM->reg_LD_xlut_oroi_enable = 1;
/* u1: enable rgb LUT remapping outside regon of interest:
* 0: no rgb remapping; 1: enable rgb remapping
*/
}
#endif