1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Support for Intel Camera Imaging ISP subsystem.
4  * Copyright (c) 2015, Intel Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  */
15 
16 #include <linux/string.h> /* for memcpy() */
17 
18 #include <type_support.h>
19 #include "system_global.h"
20 #include "vamem.h"
21 #include "ia_css_types.h"
22 #include "ia_css_gc_table.host.h"
23 
24 #if defined(HAS_VAMEM_VERSION_2)
25 
26 struct ia_css_gamma_table default_gamma_table;
27 
28 static const uint16_t
29 default_gamma_table_data[IA_CSS_VAMEM_2_GAMMA_TABLE_SIZE] = {
30 	0,   4,   8,  12,  17,  21,  27,  32,
31 	38,  44,  49,  55,  61,  66,  71,  76,
32 	80,  84,  88,  92,  95,  98, 102, 105,
33 	108, 110, 113, 116, 118, 121, 123, 126,
34 	128, 130, 132, 135, 137, 139, 141, 143,
35 	145, 146, 148, 150, 152, 153, 155, 156,
36 	158, 160, 161, 162, 164, 165, 166, 168,
37 	169, 170, 171, 172, 174, 175, 176, 177,
38 	178, 179, 180, 181, 182, 183, 184, 184,
39 	185, 186, 187, 188, 189, 189, 190, 191,
40 	192, 192, 193, 194, 195, 195, 196, 197,
41 	197, 198, 198, 199, 200, 200, 201, 201,
42 	202, 203, 203, 204, 204, 205, 205, 206,
43 	206, 207, 207, 208, 208, 209, 209, 210,
44 	210, 210, 211, 211, 212, 212, 213, 213,
45 	214, 214, 214, 215, 215, 216, 216, 216,
46 	217, 217, 218, 218, 218, 219, 219, 220,
47 	220, 220, 221, 221, 222, 222, 222, 223,
48 	223, 223, 224, 224, 225, 225, 225, 226,
49 	226, 226, 227, 227, 227, 228, 228, 228,
50 	229, 229, 229, 230, 230, 230, 231, 231,
51 	231, 232, 232, 232, 233, 233, 233, 234,
52 	234, 234, 234, 235, 235, 235, 236, 236,
53 	236, 237, 237, 237, 237, 238, 238, 238,
54 	239, 239, 239, 239, 240, 240, 240, 241,
55 	241, 241, 241, 242, 242, 242, 242, 243,
56 	243, 243, 243, 244, 244, 244, 245, 245,
57 	245, 245, 246, 246, 246, 246, 247, 247,
58 	247, 247, 248, 248, 248, 248, 249, 249,
59 	249, 249, 250, 250, 250, 250, 251, 251,
60 	251, 251, 252, 252, 252, 252, 253, 253,
61 	253, 253, 254, 254, 254, 254, 255, 255,
62 	255
63 };
64 
65 #elif defined(HAS_VAMEM_VERSION_1)
66 
67 static const uint16_t
68 default_gamma_table_data[IA_CSS_VAMEM_1_GAMMA_TABLE_SIZE] = {
69 	0, 1, 2, 3, 4, 5, 6, 7,
70 	8, 9, 10, 11, 12, 13, 14, 16,
71 	17, 18, 19, 20, 21, 23, 24, 25,
72 	27, 28, 29, 31, 32, 33, 35, 36,
73 	38, 39, 41, 42, 44, 45, 47, 48,
74 	49, 51, 52, 54, 55, 57, 58, 60,
75 	61, 62, 64, 65, 66, 68, 69, 70,
76 	71, 72, 74, 75, 76, 77, 78, 79,
77 	80, 81, 82, 83, 84, 85, 86, 87,
78 	88, 89, 90, 91, 92, 93, 93, 94,
79 	95, 96, 97, 98, 98, 99, 100, 101,
80 	102, 102, 103, 104, 105, 105, 106, 107,
81 	108, 108, 109, 110, 110, 111, 112, 112,
82 	113, 114, 114, 115, 116, 116, 117, 118,
83 	118, 119, 120, 120, 121, 121, 122, 123,
84 	123, 124, 125, 125, 126, 126, 127, 127,	/* 128 */
85 	128, 129, 129, 130, 130, 131, 131, 132,
86 	132, 133, 134, 134, 135, 135, 136, 136,
87 	137, 137, 138, 138, 139, 139, 140, 140,
88 	141, 141, 142, 142, 143, 143, 144, 144,
89 	145, 145, 145, 146, 146, 147, 147, 148,
90 	148, 149, 149, 150, 150, 150, 151, 151,
91 	152, 152, 152, 153, 153, 154, 154, 155,
92 	155, 155, 156, 156, 156, 157, 157, 158,
93 	158, 158, 159, 159, 160, 160, 160, 161,
94 	161, 161, 162, 162, 162, 163, 163, 163,
95 	164, 164, 164, 165, 165, 165, 166, 166,
96 	166, 167, 167, 167, 168, 168, 168, 169,
97 	169, 169, 170, 170, 170, 170, 171, 171,
98 	171, 172, 172, 172, 172, 173, 173, 173,
99 	174, 174, 174, 174, 175, 175, 175, 176,
100 	176, 176, 176, 177, 177, 177, 177, 178,	/* 256 */
101 	178, 178, 178, 179, 179, 179, 179, 180,
102 	180, 180, 180, 181, 181, 181, 181, 182,
103 	182, 182, 182, 182, 183, 183, 183, 183,
104 	184, 184, 184, 184, 184, 185, 185, 185,
105 	185, 186, 186, 186, 186, 186, 187, 187,
106 	187, 187, 187, 188, 188, 188, 188, 188,
107 	189, 189, 189, 189, 189, 190, 190, 190,
108 	190, 190, 191, 191, 191, 191, 191, 192,
109 	192, 192, 192, 192, 192, 193, 193, 193,
110 	193, 193, 194, 194, 194, 194, 194, 194,
111 	195, 195, 195, 195, 195, 195, 196, 196,
112 	196, 196, 196, 196, 197, 197, 197, 197,
113 	197, 197, 198, 198, 198, 198, 198, 198,
114 	198, 199, 199, 199, 199, 199, 199, 200,
115 	200, 200, 200, 200, 200, 200, 201, 201,
116 	201, 201, 201, 201, 201, 202, 202, 202,	/* 384 */
117 	202, 202, 202, 202, 203, 203, 203, 203,
118 	203, 203, 203, 204, 204, 204, 204, 204,
119 	204, 204, 204, 205, 205, 205, 205, 205,
120 	205, 205, 205, 206, 206, 206, 206, 206,
121 	206, 206, 206, 207, 207, 207, 207, 207,
122 	207, 207, 207, 208, 208, 208, 208, 208,
123 	208, 208, 208, 209, 209, 209, 209, 209,
124 	209, 209, 209, 209, 210, 210, 210, 210,
125 	210, 210, 210, 210, 210, 211, 211, 211,
126 	211, 211, 211, 211, 211, 211, 212, 212,
127 	212, 212, 212, 212, 212, 212, 212, 213,
128 	213, 213, 213, 213, 213, 213, 213, 213,
129 	214, 214, 214, 214, 214, 214, 214, 214,
130 	214, 214, 215, 215, 215, 215, 215, 215,
131 	215, 215, 215, 216, 216, 216, 216, 216,
132 	216, 216, 216, 216, 216, 217, 217, 217,	/* 512 */
133 	217, 217, 217, 217, 217, 217, 217, 218,
134 	218, 218, 218, 218, 218, 218, 218, 218,
135 	218, 219, 219, 219, 219, 219, 219, 219,
136 	219, 219, 219, 220, 220, 220, 220, 220,
137 	220, 220, 220, 220, 220, 221, 221, 221,
138 	221, 221, 221, 221, 221, 221, 221, 221,
139 	222, 222, 222, 222, 222, 222, 222, 222,
140 	222, 222, 223, 223, 223, 223, 223, 223,
141 	223, 223, 223, 223, 223, 224, 224, 224,
142 	224, 224, 224, 224, 224, 224, 224, 224,
143 	225, 225, 225, 225, 225, 225, 225, 225,
144 	225, 225, 225, 226, 226, 226, 226, 226,
145 	226, 226, 226, 226, 226, 226, 226, 227,
146 	227, 227, 227, 227, 227, 227, 227, 227,
147 	227, 227, 228, 228, 228, 228, 228, 228,
148 	228, 228, 228, 228, 228, 228, 229, 229,
149 	229, 229, 229, 229, 229, 229, 229, 229,
150 	229, 229, 230, 230, 230, 230, 230, 230,
151 	230, 230, 230, 230, 230, 230, 231, 231,
152 	231, 231, 231, 231, 231, 231, 231, 231,
153 	231, 231, 231, 232, 232, 232, 232, 232,
154 	232, 232, 232, 232, 232, 232, 232, 233,
155 	233, 233, 233, 233, 233, 233, 233, 233,
156 	233, 233, 233, 233, 234, 234, 234, 234,
157 	234, 234, 234, 234, 234, 234, 234, 234,
158 	234, 235, 235, 235, 235, 235, 235, 235,
159 	235, 235, 235, 235, 235, 235, 236, 236,
160 	236, 236, 236, 236, 236, 236, 236, 236,
161 	236, 236, 236, 236, 237, 237, 237, 237,
162 	237, 237, 237, 237, 237, 237, 237, 237,
163 	237, 237, 238, 238, 238, 238, 238, 238,
164 	238, 238, 238, 238, 238, 238, 238, 238,
165 	239, 239, 239, 239, 239, 239, 239, 239,
166 	239, 239, 239, 239, 239, 239, 240, 240,
167 	240, 240, 240, 240, 240, 240, 240, 240,
168 	240, 240, 240, 240, 241, 241, 241, 241,
169 	241, 241, 241, 241, 241, 241, 241, 241,
170 	241, 241, 241, 242, 242, 242, 242, 242,
171 	242, 242, 242, 242, 242, 242, 242, 242,
172 	242, 242, 243, 243, 243, 243, 243, 243,
173 	243, 243, 243, 243, 243, 243, 243, 243,
174 	243, 244, 244, 244, 244, 244, 244, 244,
175 	244, 244, 244, 244, 244, 244, 244, 244,
176 	245, 245, 245, 245, 245, 245, 245, 245,
177 	245, 245, 245, 245, 245, 245, 245, 246,
178 	246, 246, 246, 246, 246, 246, 246, 246,
179 	246, 246, 246, 246, 246, 246, 246, 247,
180 	247, 247, 247, 247, 247, 247, 247, 247,
181 	247, 247, 247, 247, 247, 247, 247, 248,
182 	248, 248, 248, 248, 248, 248, 248, 248,
183 	248, 248, 248, 248, 248, 248, 248, 249,
184 	249, 249, 249, 249, 249, 249, 249, 249,
185 	249, 249, 249, 249, 249, 249, 249, 250,
186 	250, 250, 250, 250, 250, 250, 250, 250,
187 	250, 250, 250, 250, 250, 250, 250, 251,
188 	251, 251, 251, 251, 251, 251, 251, 251,
189 	251, 251, 251, 251, 251, 251, 251, 252,
190 	252, 252, 252, 252, 252, 252, 252, 252,
191 	252, 252, 252, 252, 252, 252, 252, 253,
192 	253, 253, 253, 253, 253, 253, 253, 253,
193 	253, 253, 253, 253, 253, 253, 253, 253,
194 	254, 254, 254, 254, 254, 254, 254, 254,
195 	254, 254, 254, 254, 254, 254, 254, 254,
196 	255, 255, 255, 255, 255, 255, 255, 255
197 };
198 
199 #else
200 #error "VAMEM version must be one of {VAMEM_VERSION_1, VAMEM_VERSION_2}"
201 #endif
202 
203 void
204 ia_css_config_gamma_table(void)
205 {
206 #if defined(HAS_VAMEM_VERSION_2)
207 	memcpy(default_gamma_table.data.vamem_2, default_gamma_table_data,
208 	       sizeof(default_gamma_table_data));
209 	default_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_2;
210 #else
211 	memcpy(default_gamma_table.data.vamem_1, default_gamma_table_data,
212 	       sizeof(default_gamma_table_data));
213 	default_gamma_table.vamem_type   = IA_CSS_VAMEM_TYPE_1;
214 #endif
215 }
216