hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
....@@ -202,20 +202,36 @@
202202 case V4L2_PIX_FMT_SGBRG12:
203203 case V4L2_PIX_FMT_SGRBG12:
204204 case V4L2_PIX_FMT_SRGGB12:
205
+ case V4L2_PIX_FMT_SBGGR16:
206
+ case V4L2_PIX_FMT_SGBRG16:
207
+ case V4L2_PIX_FMT_SGRBG16:
208
+ case V4L2_PIX_FMT_SRGGB16:
205209 tpg->interleaved = true;
206210 tpg->vdownsampling[1] = 1;
207211 tpg->hdownsampling[1] = 1;
208212 tpg->planes = 2;
209
- /* fall through */
213
+ fallthrough;
210214 case V4L2_PIX_FMT_RGB332:
211215 case V4L2_PIX_FMT_RGB565:
212216 case V4L2_PIX_FMT_RGB565X:
213217 case V4L2_PIX_FMT_RGB444:
214218 case V4L2_PIX_FMT_XRGB444:
215219 case V4L2_PIX_FMT_ARGB444:
220
+ case V4L2_PIX_FMT_RGBX444:
221
+ case V4L2_PIX_FMT_RGBA444:
222
+ case V4L2_PIX_FMT_XBGR444:
223
+ case V4L2_PIX_FMT_ABGR444:
224
+ case V4L2_PIX_FMT_BGRX444:
225
+ case V4L2_PIX_FMT_BGRA444:
216226 case V4L2_PIX_FMT_RGB555:
217227 case V4L2_PIX_FMT_XRGB555:
218228 case V4L2_PIX_FMT_ARGB555:
229
+ case V4L2_PIX_FMT_RGBX555:
230
+ case V4L2_PIX_FMT_RGBA555:
231
+ case V4L2_PIX_FMT_XBGR555:
232
+ case V4L2_PIX_FMT_ABGR555:
233
+ case V4L2_PIX_FMT_BGRX555:
234
+ case V4L2_PIX_FMT_BGRA555:
219235 case V4L2_PIX_FMT_RGB555X:
220236 case V4L2_PIX_FMT_XRGB555X:
221237 case V4L2_PIX_FMT_ARGB555X:
....@@ -228,6 +244,10 @@
228244 case V4L2_PIX_FMT_XBGR32:
229245 case V4L2_PIX_FMT_ARGB32:
230246 case V4L2_PIX_FMT_ABGR32:
247
+ case V4L2_PIX_FMT_RGBX32:
248
+ case V4L2_PIX_FMT_BGRX32:
249
+ case V4L2_PIX_FMT_RGBA32:
250
+ case V4L2_PIX_FMT_BGRA32:
231251 tpg->color_enc = TGP_COLOR_ENC_RGB;
232252 break;
233253 case V4L2_PIX_FMT_GREY:
....@@ -235,18 +255,23 @@
235255 case V4L2_PIX_FMT_Y12:
236256 case V4L2_PIX_FMT_Y16:
237257 case V4L2_PIX_FMT_Y16_BE:
258
+ case V4L2_PIX_FMT_Z16:
238259 tpg->color_enc = TGP_COLOR_ENC_LUMA;
239260 break;
240261 case V4L2_PIX_FMT_YUV444:
241262 case V4L2_PIX_FMT_YUV555:
242263 case V4L2_PIX_FMT_YUV565:
243264 case V4L2_PIX_FMT_YUV32:
265
+ case V4L2_PIX_FMT_AYUV32:
266
+ case V4L2_PIX_FMT_XYUV32:
267
+ case V4L2_PIX_FMT_VUYA32:
268
+ case V4L2_PIX_FMT_VUYX32:
244269 tpg->color_enc = TGP_COLOR_ENC_YCBCR;
245270 break;
246271 case V4L2_PIX_FMT_YUV420M:
247272 case V4L2_PIX_FMT_YVU420M:
248273 tpg->buffers = 3;
249
- /* fall through */
274
+ fallthrough;
250275 case V4L2_PIX_FMT_YUV420:
251276 case V4L2_PIX_FMT_YVU420:
252277 tpg->vdownsampling[1] = 2;
....@@ -259,7 +284,7 @@
259284 case V4L2_PIX_FMT_YUV422M:
260285 case V4L2_PIX_FMT_YVU422M:
261286 tpg->buffers = 3;
262
- /* fall through */
287
+ fallthrough;
263288 case V4L2_PIX_FMT_YUV422P:
264289 tpg->vdownsampling[1] = 1;
265290 tpg->vdownsampling[2] = 1;
....@@ -271,7 +296,7 @@
271296 case V4L2_PIX_FMT_NV16M:
272297 case V4L2_PIX_FMT_NV61M:
273298 tpg->buffers = 2;
274
- /* fall through */
299
+ fallthrough;
275300 case V4L2_PIX_FMT_NV16:
276301 case V4L2_PIX_FMT_NV61:
277302 tpg->vdownsampling[1] = 1;
....@@ -283,7 +308,7 @@
283308 case V4L2_PIX_FMT_NV12M:
284309 case V4L2_PIX_FMT_NV21M:
285310 tpg->buffers = 2;
286
- /* fall through */
311
+ fallthrough;
287312 case V4L2_PIX_FMT_NV12:
288313 case V4L2_PIX_FMT_NV21:
289314 tpg->vdownsampling[1] = 2;
....@@ -334,9 +359,21 @@
334359 case V4L2_PIX_FMT_RGB444:
335360 case V4L2_PIX_FMT_XRGB444:
336361 case V4L2_PIX_FMT_ARGB444:
362
+ case V4L2_PIX_FMT_RGBX444:
363
+ case V4L2_PIX_FMT_RGBA444:
364
+ case V4L2_PIX_FMT_XBGR444:
365
+ case V4L2_PIX_FMT_ABGR444:
366
+ case V4L2_PIX_FMT_BGRX444:
367
+ case V4L2_PIX_FMT_BGRA444:
337368 case V4L2_PIX_FMT_RGB555:
338369 case V4L2_PIX_FMT_XRGB555:
339370 case V4L2_PIX_FMT_ARGB555:
371
+ case V4L2_PIX_FMT_RGBX555:
372
+ case V4L2_PIX_FMT_RGBA555:
373
+ case V4L2_PIX_FMT_XBGR555:
374
+ case V4L2_PIX_FMT_ABGR555:
375
+ case V4L2_PIX_FMT_BGRX555:
376
+ case V4L2_PIX_FMT_BGRA555:
340377 case V4L2_PIX_FMT_RGB555X:
341378 case V4L2_PIX_FMT_XRGB555X:
342379 case V4L2_PIX_FMT_ARGB555X:
....@@ -351,6 +388,7 @@
351388 case V4L2_PIX_FMT_Y12:
352389 case V4L2_PIX_FMT_Y16:
353390 case V4L2_PIX_FMT_Y16_BE:
391
+ case V4L2_PIX_FMT_Z16:
354392 tpg->twopixelsize[0] = 2 * 2;
355393 break;
356394 case V4L2_PIX_FMT_RGB24:
....@@ -365,7 +403,15 @@
365403 case V4L2_PIX_FMT_XBGR32:
366404 case V4L2_PIX_FMT_ARGB32:
367405 case V4L2_PIX_FMT_ABGR32:
406
+ case V4L2_PIX_FMT_RGBX32:
407
+ case V4L2_PIX_FMT_BGRX32:
408
+ case V4L2_PIX_FMT_RGBA32:
409
+ case V4L2_PIX_FMT_BGRA32:
368410 case V4L2_PIX_FMT_YUV32:
411
+ case V4L2_PIX_FMT_AYUV32:
412
+ case V4L2_PIX_FMT_XYUV32:
413
+ case V4L2_PIX_FMT_VUYA32:
414
+ case V4L2_PIX_FMT_VUYX32:
369415 case V4L2_PIX_FMT_HSV32:
370416 tpg->twopixelsize[0] = 2 * 4;
371417 break;
....@@ -392,6 +438,10 @@
392438 case V4L2_PIX_FMT_SGRBG12:
393439 case V4L2_PIX_FMT_SGBRG12:
394440 case V4L2_PIX_FMT_SBGGR12:
441
+ case V4L2_PIX_FMT_SRGGB16:
442
+ case V4L2_PIX_FMT_SGRBG16:
443
+ case V4L2_PIX_FMT_SGBRG16:
444
+ case V4L2_PIX_FMT_SBGGR16:
395445 tpg->twopixelsize[0] = 4;
396446 tpg->twopixelsize[1] = 4;
397447 break;
....@@ -989,6 +1039,12 @@
9891039 case V4L2_PIX_FMT_RGB444:
9901040 case V4L2_PIX_FMT_XRGB444:
9911041 case V4L2_PIX_FMT_ARGB444:
1042
+ case V4L2_PIX_FMT_RGBX444:
1043
+ case V4L2_PIX_FMT_RGBA444:
1044
+ case V4L2_PIX_FMT_XBGR444:
1045
+ case V4L2_PIX_FMT_ABGR444:
1046
+ case V4L2_PIX_FMT_BGRX444:
1047
+ case V4L2_PIX_FMT_BGRA444:
9921048 r >>= 8;
9931049 g >>= 8;
9941050 b >>= 8;
....@@ -996,6 +1052,12 @@
9961052 case V4L2_PIX_FMT_RGB555:
9971053 case V4L2_PIX_FMT_XRGB555:
9981054 case V4L2_PIX_FMT_ARGB555:
1055
+ case V4L2_PIX_FMT_RGBX555:
1056
+ case V4L2_PIX_FMT_RGBA555:
1057
+ case V4L2_PIX_FMT_XBGR555:
1058
+ case V4L2_PIX_FMT_ABGR555:
1059
+ case V4L2_PIX_FMT_BGRX555:
1060
+ case V4L2_PIX_FMT_BGRA555:
9991061 case V4L2_PIX_FMT_RGB555X:
10001062 case V4L2_PIX_FMT_XRGB555X:
10011063 case V4L2_PIX_FMT_ARGB555X:
....@@ -1062,6 +1124,7 @@
10621124 buf[0][offset+1] = r_y_h >> 4;
10631125 break;
10641126 case V4L2_PIX_FMT_Y16:
1127
+ case V4L2_PIX_FMT_Z16:
10651128 /*
10661129 * Ideally both bytes should be set to r_y_h, but then you won't
10671130 * be able to detect endian problems. So keep it 0 except for
....@@ -1212,26 +1275,71 @@
12121275 case V4L2_PIX_FMT_RGB444:
12131276 case V4L2_PIX_FMT_XRGB444:
12141277 alpha = 0;
1215
- /* fall through */
1278
+ fallthrough;
12161279 case V4L2_PIX_FMT_YUV444:
12171280 case V4L2_PIX_FMT_ARGB444:
12181281 buf[0][offset] = (g_u_s << 4) | b_v;
12191282 buf[0][offset + 1] = (alpha & 0xf0) | r_y_h;
12201283 break;
1284
+ case V4L2_PIX_FMT_RGBX444:
1285
+ alpha = 0;
1286
+ fallthrough;
1287
+ case V4L2_PIX_FMT_RGBA444:
1288
+ buf[0][offset] = (b_v << 4) | (alpha >> 4);
1289
+ buf[0][offset + 1] = (r_y_h << 4) | g_u_s;
1290
+ break;
1291
+ case V4L2_PIX_FMT_XBGR444:
1292
+ alpha = 0;
1293
+ fallthrough;
1294
+ case V4L2_PIX_FMT_ABGR444:
1295
+ buf[0][offset] = (g_u_s << 4) | r_y_h;
1296
+ buf[0][offset + 1] = (alpha & 0xf0) | b_v;
1297
+ break;
1298
+ case V4L2_PIX_FMT_BGRX444:
1299
+ alpha = 0;
1300
+ fallthrough;
1301
+ case V4L2_PIX_FMT_BGRA444:
1302
+ buf[0][offset] = (r_y_h << 4) | (alpha >> 4);
1303
+ buf[0][offset + 1] = (b_v << 4) | g_u_s;
1304
+ break;
12211305 case V4L2_PIX_FMT_RGB555:
12221306 case V4L2_PIX_FMT_XRGB555:
12231307 alpha = 0;
1224
- /* fall through */
1308
+ fallthrough;
12251309 case V4L2_PIX_FMT_YUV555:
12261310 case V4L2_PIX_FMT_ARGB555:
12271311 buf[0][offset] = (g_u_s << 5) | b_v;
12281312 buf[0][offset + 1] = (alpha & 0x80) | (r_y_h << 2)
12291313 | (g_u_s >> 3);
12301314 break;
1315
+ case V4L2_PIX_FMT_RGBX555:
1316
+ alpha = 0;
1317
+ fallthrough;
1318
+ case V4L2_PIX_FMT_RGBA555:
1319
+ buf[0][offset] = (g_u_s << 6) | (b_v << 1) |
1320
+ ((alpha & 0x80) >> 7);
1321
+ buf[0][offset + 1] = (r_y_h << 3) | (g_u_s >> 2);
1322
+ break;
1323
+ case V4L2_PIX_FMT_XBGR555:
1324
+ alpha = 0;
1325
+ fallthrough;
1326
+ case V4L2_PIX_FMT_ABGR555:
1327
+ buf[0][offset] = (g_u_s << 5) | r_y_h;
1328
+ buf[0][offset + 1] = (alpha & 0x80) | (b_v << 2)
1329
+ | (g_u_s >> 3);
1330
+ break;
1331
+ case V4L2_PIX_FMT_BGRX555:
1332
+ alpha = 0;
1333
+ fallthrough;
1334
+ case V4L2_PIX_FMT_BGRA555:
1335
+ buf[0][offset] = (g_u_s << 6) | (r_y_h << 1) |
1336
+ ((alpha & 0x80) >> 7);
1337
+ buf[0][offset + 1] = (b_v << 3) | (g_u_s >> 2);
1338
+ break;
12311339 case V4L2_PIX_FMT_RGB555X:
12321340 case V4L2_PIX_FMT_XRGB555X:
12331341 alpha = 0;
1234
- /* fall through */
1342
+ fallthrough;
12351343 case V4L2_PIX_FMT_ARGB555X:
12361344 buf[0][offset] = (alpha & 0x80) | (r_y_h << 2) | (g_u_s >> 3);
12371345 buf[0][offset + 1] = (g_u_s << 5) | b_v;
....@@ -1256,24 +1364,46 @@
12561364 case V4L2_PIX_FMT_RGB32:
12571365 case V4L2_PIX_FMT_XRGB32:
12581366 case V4L2_PIX_FMT_HSV32:
1367
+ case V4L2_PIX_FMT_XYUV32:
12591368 alpha = 0;
1260
- /* fall through */
1369
+ fallthrough;
12611370 case V4L2_PIX_FMT_YUV32:
12621371 case V4L2_PIX_FMT_ARGB32:
1372
+ case V4L2_PIX_FMT_AYUV32:
12631373 buf[0][offset] = alpha;
12641374 buf[0][offset + 1] = r_y_h;
12651375 buf[0][offset + 2] = g_u_s;
12661376 buf[0][offset + 3] = b_v;
12671377 break;
1378
+ case V4L2_PIX_FMT_RGBX32:
1379
+ alpha = 0;
1380
+ fallthrough;
1381
+ case V4L2_PIX_FMT_RGBA32:
1382
+ buf[0][offset] = r_y_h;
1383
+ buf[0][offset + 1] = g_u_s;
1384
+ buf[0][offset + 2] = b_v;
1385
+ buf[0][offset + 3] = alpha;
1386
+ break;
12681387 case V4L2_PIX_FMT_BGR32:
12691388 case V4L2_PIX_FMT_XBGR32:
1389
+ case V4L2_PIX_FMT_VUYX32:
12701390 alpha = 0;
1271
- /* fall through */
1391
+ fallthrough;
12721392 case V4L2_PIX_FMT_ABGR32:
1393
+ case V4L2_PIX_FMT_VUYA32:
12731394 buf[0][offset] = b_v;
12741395 buf[0][offset + 1] = g_u_s;
12751396 buf[0][offset + 2] = r_y_h;
12761397 buf[0][offset + 3] = alpha;
1398
+ break;
1399
+ case V4L2_PIX_FMT_BGRX32:
1400
+ alpha = 0;
1401
+ fallthrough;
1402
+ case V4L2_PIX_FMT_BGRA32:
1403
+ buf[0][offset] = alpha;
1404
+ buf[0][offset + 1] = b_v;
1405
+ buf[0][offset + 2] = g_u_s;
1406
+ buf[0][offset + 3] = r_y_h;
12771407 break;
12781408 case V4L2_PIX_FMT_SBGGR8:
12791409 buf[0][offset] = odd ? g_u_s : b_v;
....@@ -1355,6 +1485,22 @@
13551485 buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
13561486 buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
13571487 break;
1488
+ case V4L2_PIX_FMT_SBGGR16:
1489
+ buf[0][offset] = buf[0][offset + 1] = odd ? g_u_s : b_v;
1490
+ buf[1][offset] = buf[1][offset + 1] = odd ? r_y_h : g_u_s;
1491
+ break;
1492
+ case V4L2_PIX_FMT_SGBRG16:
1493
+ buf[0][offset] = buf[0][offset + 1] = odd ? b_v : g_u_s;
1494
+ buf[1][offset] = buf[1][offset + 1] = odd ? g_u_s : r_y_h;
1495
+ break;
1496
+ case V4L2_PIX_FMT_SGRBG16:
1497
+ buf[0][offset] = buf[0][offset + 1] = odd ? r_y_h : g_u_s;
1498
+ buf[1][offset] = buf[1][offset + 1] = odd ? g_u_s : b_v;
1499
+ break;
1500
+ case V4L2_PIX_FMT_SRGGB16:
1501
+ buf[0][offset] = buf[0][offset + 1] = odd ? g_u_s : r_y_h;
1502
+ buf[1][offset] = buf[1][offset + 1] = odd ? b_v : g_u_s;
1503
+ break;
13581504 }
13591505 }
13601506
....@@ -1373,6 +1519,10 @@
13731519 case V4L2_PIX_FMT_SGBRG12:
13741520 case V4L2_PIX_FMT_SGRBG12:
13751521 case V4L2_PIX_FMT_SRGGB12:
1522
+ case V4L2_PIX_FMT_SBGGR16:
1523
+ case V4L2_PIX_FMT_SGBRG16:
1524
+ case V4L2_PIX_FMT_SGRBG16:
1525
+ case V4L2_PIX_FMT_SRGGB16:
13761526 return buf_line & 1;
13771527 default:
13781528 return 0;
....@@ -1777,43 +1927,45 @@
17771927
17781928 static noinline void tpg_print_str_2(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
17791929 unsigned p, unsigned first, unsigned div, unsigned step,
1780
- int y, int x, char *text, unsigned len)
1930
+ int y, int x, const char *text, unsigned len)
17811931 {
17821932 PRINTSTR(u8);
17831933 }
17841934
17851935 static noinline void tpg_print_str_4(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
17861936 unsigned p, unsigned first, unsigned div, unsigned step,
1787
- int y, int x, char *text, unsigned len)
1937
+ int y, int x, const char *text, unsigned len)
17881938 {
17891939 PRINTSTR(u16);
17901940 }
17911941
17921942 static noinline void tpg_print_str_6(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
17931943 unsigned p, unsigned first, unsigned div, unsigned step,
1794
- int y, int x, char *text, unsigned len)
1944
+ int y, int x, const char *text, unsigned len)
17951945 {
17961946 PRINTSTR(x24);
17971947 }
17981948
17991949 static noinline void tpg_print_str_8(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
18001950 unsigned p, unsigned first, unsigned div, unsigned step,
1801
- int y, int x, char *text, unsigned len)
1951
+ int y, int x, const char *text, unsigned len)
18021952 {
18031953 PRINTSTR(u32);
18041954 }
18051955
18061956 void tpg_gen_text(const struct tpg_data *tpg, u8 *basep[TPG_MAX_PLANES][2],
1807
- int y, int x, char *text)
1957
+ int y, int x, const char *text)
18081958 {
18091959 unsigned step = V4L2_FIELD_HAS_T_OR_B(tpg->field) ? 2 : 1;
18101960 unsigned div = step;
18111961 unsigned first = 0;
1812
- unsigned len = strlen(text);
1962
+ unsigned len;
18131963 unsigned p;
18141964
1815
- if (font8x16 == NULL || basep == NULL)
1965
+ if (font8x16 == NULL || basep == NULL || text == NULL)
18161966 return;
1967
+
1968
+ len = strlen(text);
18171969
18181970 /* Checks if it is possible to show string */
18191971 if (y + 16 >= tpg->compose.height || x + 8 >= tpg->compose.width)
....@@ -1855,6 +2007,30 @@
18552007 }
18562008 }
18572009 EXPORT_SYMBOL_GPL(tpg_gen_text);
2010
+
2011
+const char *tpg_g_color_order(const struct tpg_data *tpg)
2012
+{
2013
+ switch (tpg->pattern) {
2014
+ case TPG_PAT_75_COLORBAR:
2015
+ case TPG_PAT_100_COLORBAR:
2016
+ case TPG_PAT_CSC_COLORBAR:
2017
+ case TPG_PAT_100_HCOLORBAR:
2018
+ return "White, yellow, cyan, green, magenta, red, blue, black";
2019
+ case TPG_PAT_BLACK:
2020
+ return "Black";
2021
+ case TPG_PAT_WHITE:
2022
+ return "White";
2023
+ case TPG_PAT_RED:
2024
+ return "Red";
2025
+ case TPG_PAT_GREEN:
2026
+ return "Green";
2027
+ case TPG_PAT_BLUE:
2028
+ return "Blue";
2029
+ default:
2030
+ return NULL;
2031
+ }
2032
+}
2033
+EXPORT_SYMBOL_GPL(tpg_g_color_order);
18582034
18592035 void tpg_update_mv_step(struct tpg_data *tpg)
18602036 {
....@@ -2038,8 +2214,12 @@
20382214 tpg->compose.left, tpg->compose.top);
20392215 pr_info("tpg colorspace: %d\n", tpg->colorspace);
20402216 pr_info("tpg transfer function: %d/%d\n", tpg->xfer_func, tpg->real_xfer_func);
2041
- pr_info("tpg Y'CbCr encoding: %d/%d\n", tpg->ycbcr_enc, tpg->real_ycbcr_enc);
2042
- pr_info("tpg HSV encoding: %d/%d\n", tpg->hsv_enc, tpg->real_hsv_enc);
2217
+ if (tpg->color_enc == TGP_COLOR_ENC_HSV)
2218
+ pr_info("tpg HSV encoding: %d/%d\n",
2219
+ tpg->hsv_enc, tpg->real_hsv_enc);
2220
+ else if (tpg->color_enc == TGP_COLOR_ENC_YCBCR)
2221
+ pr_info("tpg Y'CbCr encoding: %d/%d\n",
2222
+ tpg->ycbcr_enc, tpg->real_ycbcr_enc);
20432223 pr_info("tpg quantization: %d/%d\n", tpg->quantization, tpg->real_quantization);
20442224 pr_info("tpg RGB range: %d/%d\n", tpg->rgb_range, tpg->real_rgb_range);
20452225 }