19d4fa1a1SMauro Carvalho Chehab /*
29d4fa1a1SMauro Carvalho Chehab  * Support for Intel Camera Imaging ISP subsystem.
39d4fa1a1SMauro Carvalho Chehab  * Copyright (c) 2015, Intel Corporation.
49d4fa1a1SMauro Carvalho Chehab  *
59d4fa1a1SMauro Carvalho Chehab  * This program is free software; you can redistribute it and/or modify it
69d4fa1a1SMauro Carvalho Chehab  * under the terms and conditions of the GNU General Public License,
79d4fa1a1SMauro Carvalho Chehab  * version 2, as published by the Free Software Foundation.
89d4fa1a1SMauro Carvalho Chehab  *
99d4fa1a1SMauro Carvalho Chehab  * This program is distributed in the hope it will be useful, but WITHOUT
109d4fa1a1SMauro Carvalho Chehab  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
119d4fa1a1SMauro Carvalho Chehab  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
129d4fa1a1SMauro Carvalho Chehab  * more details.
139d4fa1a1SMauro Carvalho Chehab  */
149d4fa1a1SMauro Carvalho Chehab 
159d4fa1a1SMauro Carvalho Chehab #include <type_support.h>
169d4fa1a1SMauro Carvalho Chehab #include <string_support.h> /* memcpy */
179d4fa1a1SMauro Carvalho Chehab #include "system_global.h"
189d4fa1a1SMauro Carvalho Chehab #include "vamem.h"
199d4fa1a1SMauro Carvalho Chehab #include "ia_css_types.h"
209d4fa1a1SMauro Carvalho Chehab #include "ia_css_gc2_table.host.h"
219d4fa1a1SMauro Carvalho Chehab 
229d4fa1a1SMauro Carvalho Chehab struct ia_css_rgb_gamma_table default_r_gamma_table;
239d4fa1a1SMauro Carvalho Chehab struct ia_css_rgb_gamma_table default_g_gamma_table;
249d4fa1a1SMauro Carvalho Chehab struct ia_css_rgb_gamma_table default_b_gamma_table;
259d4fa1a1SMauro Carvalho Chehab 
269d4fa1a1SMauro Carvalho Chehab /* Identical default gamma table for R, G, and B. */
279d4fa1a1SMauro Carvalho Chehab 
289d4fa1a1SMauro Carvalho Chehab #if defined(HAS_VAMEM_VERSION_2)
299d4fa1a1SMauro Carvalho Chehab 
309d4fa1a1SMauro Carvalho Chehab static const uint16_t
319d4fa1a1SMauro Carvalho Chehab default_gamma_table_data[IA_CSS_VAMEM_2_RGB_GAMMA_TABLE_SIZE] = {
329d4fa1a1SMauro Carvalho Chehab 	0,   72,  144,  216,  288,  360,  426,  486,
339d4fa1a1SMauro Carvalho Chehab 	541,  592,  641,  687,  730,  772,  812,  850,
349d4fa1a1SMauro Carvalho Chehab 	887,  923,  958,  991, 1024, 1055, 1086, 1117,
359d4fa1a1SMauro Carvalho Chehab 	1146, 1175, 1203, 1230, 1257, 1284, 1310, 1335,
369d4fa1a1SMauro Carvalho Chehab 	1360, 1385, 1409, 1433, 1457, 1480, 1502, 1525,
379d4fa1a1SMauro Carvalho Chehab 	1547, 1569, 1590, 1612, 1632, 1653, 1674, 1694,
389d4fa1a1SMauro Carvalho Chehab 	1714, 1734, 1753, 1772, 1792, 1811, 1829, 1848,
399d4fa1a1SMauro Carvalho Chehab 	1866, 1884, 1902, 1920, 1938, 1955, 1973, 1990,
409d4fa1a1SMauro Carvalho Chehab 	2007, 2024, 2040, 2057, 2074, 2090, 2106, 2122,
419d4fa1a1SMauro Carvalho Chehab 	2138, 2154, 2170, 2185, 2201, 2216, 2231, 2247,
429d4fa1a1SMauro Carvalho Chehab 	2262, 2277, 2291, 2306, 2321, 2335, 2350, 2364,
439d4fa1a1SMauro Carvalho Chehab 	2378, 2393, 2407, 2421, 2435, 2449, 2462, 2476,
449d4fa1a1SMauro Carvalho Chehab 	2490, 2503, 2517, 2530, 2543, 2557, 2570, 2583,
459d4fa1a1SMauro Carvalho Chehab 	2596, 2609, 2622, 2634, 2647, 2660, 2673, 2685,
469d4fa1a1SMauro Carvalho Chehab 	2698, 2710, 2722, 2735, 2747, 2759, 2771, 2783,
479d4fa1a1SMauro Carvalho Chehab 	2795, 2807, 2819, 2831, 2843, 2855, 2867, 2878,
489d4fa1a1SMauro Carvalho Chehab 	2890, 2901, 2913, 2924, 2936, 2947, 2958, 2970,
499d4fa1a1SMauro Carvalho Chehab 	2981, 2992, 3003, 3014, 3025, 3036, 3047, 3058,
509d4fa1a1SMauro Carvalho Chehab 	3069, 3080, 3091, 3102, 3112, 3123, 3134, 3144,
519d4fa1a1SMauro Carvalho Chehab 	3155, 3165, 3176, 3186, 3197, 3207, 3217, 3228,
529d4fa1a1SMauro Carvalho Chehab 	3238, 3248, 3258, 3268, 3279, 3289, 3299, 3309,
539d4fa1a1SMauro Carvalho Chehab 	3319, 3329, 3339, 3349, 3358, 3368, 3378, 3388,
549d4fa1a1SMauro Carvalho Chehab 	3398, 3407, 3417, 3427, 3436, 3446, 3455, 3465,
559d4fa1a1SMauro Carvalho Chehab 	3474, 3484, 3493, 3503, 3512, 3521, 3531, 3540,
569d4fa1a1SMauro Carvalho Chehab 	3549, 3559, 3568, 3577, 3586, 3595, 3605, 3614,
579d4fa1a1SMauro Carvalho Chehab 	3623, 3632, 3641, 3650, 3659, 3668, 3677, 3686,
589d4fa1a1SMauro Carvalho Chehab 	3694, 3703, 3712, 3721, 3730, 3739, 3747, 3756,
599d4fa1a1SMauro Carvalho Chehab 	3765, 3773, 3782, 3791, 3799, 3808, 3816, 3825,
609d4fa1a1SMauro Carvalho Chehab 	3833, 3842, 3850, 3859, 3867, 3876, 3884, 3893,
619d4fa1a1SMauro Carvalho Chehab 	3901, 3909, 3918, 3926, 3934, 3942, 3951, 3959,
629d4fa1a1SMauro Carvalho Chehab 	3967, 3975, 3984, 3992, 4000, 4008, 4016, 4024,
639d4fa1a1SMauro Carvalho Chehab 	4032, 4040, 4048, 4056, 4064, 4072, 4080, 4088,
649d4fa1a1SMauro Carvalho Chehab 	4095
659d4fa1a1SMauro Carvalho Chehab };
669d4fa1a1SMauro Carvalho Chehab #elif defined(HAS_VAMEM_VERSION_1)
679d4fa1a1SMauro Carvalho Chehab 
689d4fa1a1SMauro Carvalho Chehab static const uint16_t
699d4fa1a1SMauro Carvalho Chehab default_gamma_table_data[IA_CSS_VAMEM_1_RGB_GAMMA_TABLE_SIZE] = {
709d4fa1a1SMauro Carvalho Chehab 	0,   72,  144,  216,  288,  360,  426,  486,
719d4fa1a1SMauro Carvalho Chehab 	541,  592,  641,  687,  730,  772,  812,  850,
729d4fa1a1SMauro Carvalho Chehab 	887,  923,  958,  991, 1024, 1055, 1086, 1117,
739d4fa1a1SMauro Carvalho Chehab 	1146, 1175, 1203, 1230, 1257, 1284, 1310, 1335,
749d4fa1a1SMauro Carvalho Chehab 	1360, 1385, 1409, 1433, 1457, 1480, 1502, 1525,
759d4fa1a1SMauro Carvalho Chehab 	1547, 1569, 1590, 1612, 1632, 1653, 1674, 1694,
769d4fa1a1SMauro Carvalho Chehab 	1714, 1734, 1753, 1772, 1792, 1811, 1829, 1848,
779d4fa1a1SMauro Carvalho Chehab 	1866, 1884, 1902, 1920, 1938, 1955, 1973, 1990,
789d4fa1a1SMauro Carvalho Chehab 	2007, 2024, 2040, 2057, 2074, 2090, 2106, 2122,
799d4fa1a1SMauro Carvalho Chehab 	2138, 2154, 2170, 2185, 2201, 2216, 2231, 2247,
809d4fa1a1SMauro Carvalho Chehab 	2262, 2277, 2291, 2306, 2321, 2335, 2350, 2364,
819d4fa1a1SMauro Carvalho Chehab 	2378, 2393, 2407, 2421, 2435, 2449, 2462, 2476,
829d4fa1a1SMauro Carvalho Chehab 	2490, 2503, 2517, 2530, 2543, 2557, 2570, 2583,
839d4fa1a1SMauro Carvalho Chehab 	2596, 2609, 2622, 2634, 2647, 2660, 2673, 2685,
849d4fa1a1SMauro Carvalho Chehab 	2698, 2710, 2722, 2735, 2747, 2759, 2771, 2783,
859d4fa1a1SMauro Carvalho Chehab 	2795, 2807, 2819, 2831, 2843, 2855, 2867, 2878,
869d4fa1a1SMauro Carvalho Chehab 	2890, 2901, 2913, 2924, 2936, 2947, 2958, 2970,
879d4fa1a1SMauro Carvalho Chehab 	2981, 2992, 3003, 3014, 3025, 3036, 3047, 3058,
889d4fa1a1SMauro Carvalho Chehab 	3069, 3080, 3091, 3102, 3112, 3123, 3134, 3144,
899d4fa1a1SMauro Carvalho Chehab 	3155, 3165, 3176, 3186, 3197, 3207, 3217, 3228,
909d4fa1a1SMauro Carvalho Chehab 	3238, 3248, 3258, 3268, 3279, 3289, 3299, 3309,
919d4fa1a1SMauro Carvalho Chehab 	3319, 3329, 3339, 3349, 3358, 3368, 3378, 3388,
929d4fa1a1SMauro Carvalho Chehab 	3398, 3407, 3417, 3427, 3436, 3446, 3455, 3465,
939d4fa1a1SMauro Carvalho Chehab 	3474, 3484, 3493, 3503, 3512, 3521, 3531, 3540,
949d4fa1a1SMauro Carvalho Chehab 	3549, 3559, 3568, 3577, 3586, 3595, 3605, 3614,
959d4fa1a1SMauro Carvalho Chehab 	3623, 3632, 3641, 3650, 3659, 3668, 3677, 3686,
969d4fa1a1SMauro Carvalho Chehab 	3694, 3703, 3712, 3721, 3730, 3739, 3747, 3756,
979d4fa1a1SMauro Carvalho Chehab 	3765, 3773, 3782, 3791, 3799, 3808, 3816, 3825,
989d4fa1a1SMauro Carvalho Chehab 	3833, 3842, 3850, 3859, 3867, 3876, 3884, 3893,
999d4fa1a1SMauro Carvalho Chehab 	3901, 3909, 3918, 3926, 3934, 3942, 3951, 3959,
1009d4fa1a1SMauro Carvalho Chehab 	3967, 3975, 3984, 3992, 4000, 4008, 4016, 4024,
1019d4fa1a1SMauro Carvalho Chehab 	4032, 4040, 4048, 4056, 4064, 4072, 4080, 4088
1029d4fa1a1SMauro Carvalho Chehab };
1039d4fa1a1SMauro Carvalho Chehab #else
1049d4fa1a1SMauro Carvalho Chehab #error "VAMEM version must be one of {VAMEM_VERSION_1, VAMEM_VERSION_2}"
1059d4fa1a1SMauro Carvalho Chehab #endif
1069d4fa1a1SMauro Carvalho Chehab 
1079d4fa1a1SMauro Carvalho Chehab void
1089d4fa1a1SMauro Carvalho Chehab ia_css_config_rgb_gamma_tables(void)
1099d4fa1a1SMauro Carvalho Chehab {
1109d4fa1a1SMauro Carvalho Chehab #if defined(HAS_VAMEM_VERSION_2)
1119d4fa1a1SMauro Carvalho Chehab 	default_r_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_2;
1129d4fa1a1SMauro Carvalho Chehab 	default_g_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_2;
1139d4fa1a1SMauro Carvalho Chehab 	default_b_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_2;
1149d4fa1a1SMauro Carvalho Chehab 	memcpy(default_r_gamma_table.data.vamem_2, default_gamma_table_data,
1159d4fa1a1SMauro Carvalho Chehab 	       sizeof(default_gamma_table_data));
1169d4fa1a1SMauro Carvalho Chehab 	memcpy(default_g_gamma_table.data.vamem_2, default_gamma_table_data,
1179d4fa1a1SMauro Carvalho Chehab 	       sizeof(default_gamma_table_data));
1189d4fa1a1SMauro Carvalho Chehab 	memcpy(default_b_gamma_table.data.vamem_2, default_gamma_table_data,
1199d4fa1a1SMauro Carvalho Chehab 	       sizeof(default_gamma_table_data));
1209d4fa1a1SMauro Carvalho Chehab #else
1219d4fa1a1SMauro Carvalho Chehab 	memcpy(default_r_gamma_table.data.vamem_1, default_gamma_table_data,
1229d4fa1a1SMauro Carvalho Chehab 	       sizeof(default_gamma_table_data));
1239d4fa1a1SMauro Carvalho Chehab 	memcpy(default_g_gamma_table.data.vamem_1, default_gamma_table_data,
1249d4fa1a1SMauro Carvalho Chehab 	       sizeof(default_gamma_table_data));
1259d4fa1a1SMauro Carvalho Chehab 	memcpy(default_b_gamma_table.data.vamem_1, default_gamma_table_data,
1269d4fa1a1SMauro Carvalho Chehab 	       sizeof(default_gamma_table_data));
1279d4fa1a1SMauro Carvalho Chehab 	default_r_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_1;
1289d4fa1a1SMauro Carvalho Chehab 	default_g_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_1;
1299d4fa1a1SMauro Carvalho Chehab 	default_b_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_1;
1309d4fa1a1SMauro Carvalho Chehab #endif
1319d4fa1a1SMauro Carvalho Chehab }
132