import PULS_20160108
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / input / touchscreen / mediatek / tpd_calibrate.c
1 #include "tpd.h"
2 /* #ifdef TPD_HAVE_CALIBRATION */
3
4 /* #ifndef TPD_CUSTOM_CALIBRATION */
5
6 /* #if (defined(TPD_WARP_START) && defined(TPD_WARP_END)) */
7 /* #define TPD_DO_WARP */
8 int TPD_DO_WARP = 0;
9 int tpd_wb_start[TPD_WARP_CNT] = { 0 };
10 int tpd_wb_end[TPD_WARP_CNT] = { 0 };
11
12 void tpd_warp_calibrate(int *x, int *y)
13 {
14 int wx = *x, wy = *y;
15 if (wx < tpd_wb_start[0] && tpd_wb_start[0] > 0) {
16 wx = tpd_wb_start[0] -
17 ((tpd_wb_start[0] - wx) * (tpd_wb_start[0] -
18 tpd_wb_end[0]) / (tpd_wb_start[0]));
19 /* wx = wx*(tpd_wb_start[0]-tpd_wb_end[0])/tpd_wb_start[0]+tpd_wb_end[0]; */
20 } else if (wx > tpd_wb_start[2])
21 wx = (wx - tpd_wb_start[2]) * (tpd_wb_end[2] - tpd_wb_start[2]) / (TPD_RES_X -
22 tpd_wb_start[2])
23 + tpd_wb_start[2];
24
25 if (wy < tpd_wb_start[1] && tpd_wb_start[1] > 0)
26 wy = tpd_wb_start[1] -
27 ((tpd_wb_start[1] - wy) * (tpd_wb_start[1] -
28 tpd_wb_end[1]) / (tpd_wb_start[1]));
29 /* wy = wy*(tpd_wb_start[1]-tpd_wb_end[1])/tpd_wb_start[1]+tpd_wb_end[1]; */
30 else if (wy > tpd_wb_start[3] && wy <= TPD_RES_Y)
31 wy = (wy - tpd_wb_start[3]) * (tpd_wb_end[3] - tpd_wb_start[3]) / (TPD_RES_Y -
32 tpd_wb_start[3])
33 + tpd_wb_start[3];
34 if (wy < 0)
35 wy = 0;
36 if (wx < 0)
37 wx = 0;
38 *x = wx, *y = wy;
39 }
40
41 /* #else */
42 /* #define tpd_warp_calibrate(x,y) */
43 /* #endif */
44
45 void tpd_calibrate(int *x, int *y)
46 {
47 int tx, i;
48 if (tpd_calmat[0] == 0)
49 for (i = 0; i < 6; i++)
50 tpd_calmat[i] = tpd_def_calmat[i];
51 /* ================ calibrating ================ */
52 tx = ((tpd_calmat[0] * (*x)) + (tpd_calmat[1] * (*y)) + (tpd_calmat[2])) >> 12;
53 *y = ((tpd_calmat[3] * (*x)) + (tpd_calmat[4] * (*y)) + (tpd_calmat[5])) >> 12;
54 *x = tx;
55
56 if (TPD_DO_WARP == 1)
57 tpd_warp_calibrate(x, y);
58 *x = (*x) + ((*y) * (*x) * tpd_calmat[6] / TPD_RES_X) / TPD_RES_Y;
59 *y = (*y) + ((*y) * (*x) * tpd_calmat[7] / TPD_RES_X) / TPD_RES_Y;
60 }
61
62 /* #endif */
63
64 /* #endif */