forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/drivers/media/platform/rockchip/isp/isp_stats_v2x.c
....@@ -55,17 +55,13 @@
5555 ISP2X_SIAWB_GET_MEAN_Y_G(reg_val);
5656 }
5757
58
-static int
58
+static void
5959 rkisp_stats_get_rawawb_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
6060 struct rkisp_isp2x_stat_buffer *pbuf)
6161 {
6262 u64 msb, lsb;
63
- u32 ctrl;
63
+ u32 value;
6464 int i;
65
-
66
- ctrl = rkisp_read(stats_vdev->dev, ISP_RAWAWB_CTRL, true);
67
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
68
- return -ENODATA;
6965
7066 if (!pbuf)
7167 goto out;
....@@ -159,8 +155,9 @@
159155 }
160156
161157 out:
162
- rkisp_write(stats_vdev->dev, ISP_RAWAWB_CTRL, ctrl, true);
163
- return 0;
158
+ value = rkisp_read(stats_vdev->dev, ISP_RAWAWB_CTRL, true);
159
+ value |= ISP2X_3A_MEAS_DONE;
160
+ rkisp_write(stats_vdev->dev, ISP_RAWAWB_CTRL, value, true);
164161 }
165162
166163 static void
....@@ -183,18 +180,14 @@
183180 af->win[2].lum = rkisp_read(stats_vdev->dev, ISP_AFM_LUM_C, true);
184181 }
185182
186
-static int
183
+static void
187184 rkisp_stats_get_rawaf_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
188185 struct rkisp_isp2x_stat_buffer *pbuf)
189186 {
190187 struct isp2x_rawaf_stat *af;
191
- u32 value, read_line, ctrl;
188
+ u32 value, read_line;
192189 u32 line_num[ISP2X_RAWAF_LINE_NUM + 1];
193190 int i;
194
-
195
- ctrl = rkisp_read(stats_vdev->dev, ISP_RAWAF_CTRL, true);
196
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
197
- return -ENODATA;
198191
199192 if (!pbuf)
200193 goto out;
....@@ -231,21 +224,18 @@
231224 af->ramdata[i] = rkisp_read(stats_vdev->dev, ISP_RAWAF_RAM_DATA, true);
232225
233226 out:
234
- rkisp_write(stats_vdev->dev, ISP_RAWAF_CTRL, ctrl, true);
227
+ value = rkisp_read(stats_vdev->dev, ISP_RAWAF_CTRL, true);
228
+ value |= ISP2X_3A_MEAS_DONE;
229
+ rkisp_write(stats_vdev->dev, ISP_RAWAF_CTRL, value, true);
235230 rkisp_write(stats_vdev->dev, ISP_RAWAF_INT_STATE, 0, true);
236
- return 0;
237231 }
238232
239
-static int
233
+static void
240234 rkisp_stats_get_yuvae_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
241235 struct rkisp_isp2x_stat_buffer *pbuf)
242236 {
243
- u32 value, ctrl;
237
+ u32 value;
244238 int i;
245
-
246
- ctrl = rkisp_read(stats_vdev->dev, ISP_YUVAE_CTRL, true);
247
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
248
- return -ENODATA;
249239
250240 if (!pbuf)
251241 goto out;
....@@ -266,8 +256,9 @@
266256 rkisp_read(stats_vdev->dev, ISP_YUVAE_WND1_SUMY + 4 * i, true);
267257
268258 out:
269
- rkisp_write(stats_vdev->dev, ISP_YUVAE_CTRL, ctrl, true);
270
- return 0;
259
+ value = rkisp_read(stats_vdev->dev, ISP_YUVAE_CTRL, true);
260
+ value |= ISP2X_3A_MEAS_DONE;
261
+ rkisp_write(stats_vdev->dev, ISP_YUVAE_CTRL, value, true);
271262 }
272263
273264 static void
....@@ -293,11 +284,11 @@
293284 }
294285 }
295286
296
-static int
287
+static void
297288 rkisp_stats_get_rawaebig_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
298289 struct isp2x_rawaebig_stat *ae, u32 blk_no)
299290 {
300
- u32 addr, value, ctrl;
291
+ u32 addr, value;
301292 int i;
302293
303294 switch (blk_no) {
....@@ -314,10 +305,6 @@
314305 addr = RAWAE_BIG1_BASE;
315306 break;
316307 }
317
-
318
- ctrl = rkisp_read(stats_vdev->dev, addr + RAWAE_BIG_CTRL, true);
319
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
320
- return -ENODATA;
321308
322309 if (!ae)
323310 goto out;
....@@ -339,15 +326,16 @@
339326 }
340327
341328 out:
342
- rkisp_write(stats_vdev->dev, addr + RAWAE_BIG_CTRL, ctrl, true);
343
- return 0;
329
+ value = rkisp_read(stats_vdev->dev, addr + RAWAE_BIG_CTRL, true);
330
+ value |= ISP2X_3A_MEAS_DONE;
331
+ rkisp_write(stats_vdev->dev, addr + RAWAE_BIG_CTRL, value, true);
344332 }
345333
346
-static int
334
+static void
347335 rkisp_stats_get_rawhstbig_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
348336 struct isp2x_rawhistbig_stat *hst, u32 blk_no)
349337 {
350
- u32 addr, ctrl;
338
+ u32 addr, value;
351339 int i;
352340
353341 switch (blk_no) {
....@@ -365,10 +353,6 @@
365353 break;
366354 }
367355
368
- ctrl = rkisp_read(stats_vdev->dev, addr + ISP_RAWHIST_BIG_CTRL, true);
369
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
370
- return -ENODATA;
371
-
372356 if (!hst)
373357 goto out;
374358
....@@ -377,129 +361,87 @@
377361 addr + ISP_RAWHIST_BIG_RO_BASE_BIN, true);
378362
379363 out:
380
- rkisp_write(stats_vdev->dev, addr + ISP_RAWHIST_BIG_CTRL, ctrl, true);
381
- return 0;
364
+ value = rkisp_read(stats_vdev->dev, addr + ISP_RAWHIST_BIG_CTRL, true);
365
+ value |= ISP2X_3A_MEAS_DONE;
366
+ rkisp_write(stats_vdev->dev, addr + ISP_RAWHIST_BIG_CTRL, value, true);
382367 }
383368
384
-static int
369
+static void
385370 rkisp_stats_get_rawae1_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
386371 struct rkisp_isp2x_stat_buffer *pbuf)
387372 {
388
- int ret = 0;
389
-
390
- if (!pbuf) {
373
+ if (!pbuf)
391374 rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 1);
392
- } else {
393
- ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae1, 1);
394
- if (!ret)
395
- pbuf->meas_type |= ISP2X_STAT_RAWAE1;
396
- }
397
-
398
- return ret;
375
+ else
376
+ rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae1, 1);
399377 }
400378
401
-static int
379
+static void
402380 rkisp_stats_get_rawhst1_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
403381 struct rkisp_isp2x_stat_buffer *pbuf)
404382 {
405
- int ret = 0;
406
-
407
- if (!pbuf) {
383
+ if (!pbuf)
408384 rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 1);
409
- } else {
410
- ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist1, 1);
411
- if (!ret)
412
- pbuf->meas_type |= ISP2X_STAT_RAWHST1;
413
- }
414
-
415
- return ret;
385
+ else
386
+ rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist1, 1);
416387 }
417388
418
-static int
389
+static void
419390 rkisp_stats_get_rawae2_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
420391 struct rkisp_isp2x_stat_buffer *pbuf)
421392 {
422
- int ret = 0;
423
-
424
- if (!pbuf) {
393
+ if (!pbuf)
425394 rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 2);
426
- } else {
395
+ else
427396 rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae2, 2);
428
- if (!ret)
429
- pbuf->meas_type |= ISP2X_STAT_RAWAE2;
430
- }
431
-
432
- return ret;
433397 }
434398
435
-static int
399
+static void
436400 rkisp_stats_get_rawhst2_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
437401 struct rkisp_isp2x_stat_buffer *pbuf)
438402 {
439
- int ret = 0;
440
-
441
- if (!pbuf) {
403
+ if (!pbuf)
442404 rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 2);
443
- } else {
444
- ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist2, 2);
445
- if (!ret)
446
- pbuf->meas_type |= ISP2X_STAT_RAWHST2;
447
- }
448
-
449
- return ret;
405
+ else
406
+ rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist2, 2);
450407 }
451408
452
-static int
409
+static void
453410 rkisp_stats_get_rawae3_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
454411 struct rkisp_isp2x_stat_buffer *pbuf)
455412 {
456
- int ret = 0;
457
-
458
- if (!pbuf) {
413
+ if (!pbuf)
459414 rkisp_stats_get_rawaebig_meas_reg(stats_vdev, NULL, 0);
460
- } else {
461
- ret = rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae3, 0);
462
- if (!ret)
463
- pbuf->meas_type |= ISP2X_STAT_RAWAE3;
464
- }
465
-
466
- return ret;
415
+ else
416
+ rkisp_stats_get_rawaebig_meas_reg(stats_vdev, &pbuf->params.rawae3, 0);
467417 }
468418
469
-static int
419
+static void
470420 rkisp_stats_get_rawhst3_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
471421 struct rkisp_isp2x_stat_buffer *pbuf)
472422 {
473
- int ret = 0;
474
-
475
- if (!pbuf) {
423
+ if (!pbuf)
476424 rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, NULL, 0);
477
- } else {
478
- ret = rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist3, 0);
479
- if (!ret)
480
- pbuf->meas_type |= ISP2X_STAT_RAWHST3;
481
- }
482
-
483
- return ret;
425
+ else
426
+ rkisp_stats_get_rawhstbig_meas_reg(stats_vdev, &pbuf->params.rawhist3, 0);
484427 }
485428
486
-static int
429
+static void
487430 rkisp_stats_get_rawaelite_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
488431 struct rkisp_isp2x_stat_buffer *pbuf)
489432 {
490433 struct isp2x_rawaelite_stat *ae;
491
- u32 value, ctrl;
434
+ u32 value;
492435 int i;
493
-
494
- ctrl = rkisp_read(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, true);
495
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
496
- return -ENODATA;
497436
498437 if (!pbuf)
499438 goto out;
500439
501
- pbuf->meas_type |= ISP2X_STAT_RAWAE0;
502440 ae = &pbuf->params.rawae0;
441
+ value = rkisp_read(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, true);
442
+
443
+ if ((value & ISP2X_3A_MEAS_DONE) == 0)
444
+ return;
503445
504446 for (i = 0; i < ISP2X_RAWAELITE_MEAN_NUM; i++) {
505447 value = rkisp_read(stats_vdev->dev, ISP_RAWAE_LITE_RO_MEAN + 4 * i, true);
....@@ -509,33 +451,30 @@
509451 }
510452
511453 out:
512
- rkisp_write(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, ctrl, true);
513
- return 0;
454
+ value = rkisp_read(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, true);
455
+ value |= ISP2X_3A_MEAS_DONE;
456
+ rkisp_write(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, value, true);
514457 }
515458
516
-static int
459
+static void
517460 rkisp_stats_get_rawhstlite_meas_reg(struct rkisp_isp_stats_vdev *stats_vdev,
518461 struct rkisp_isp2x_stat_buffer *pbuf)
519462 {
520463 struct isp2x_rawhistlite_stat *hst;
521
- u32 ctrl;
464
+ u32 value;
522465 int i;
523
-
524
- ctrl = rkisp_read(stats_vdev->dev, ISP_RAWHIST_LITE_CTRL, true);
525
- if (!(ctrl & ISP2X_3A_MEAS_DONE))
526
- return -ENODATA;
527466
528467 if (!pbuf)
529468 goto out;
530469
531
- pbuf->meas_type |= ISP2X_STAT_RAWHST0;
532470 hst = &pbuf->params.rawhist0;
533471 for (i = 0; i < ISP2X_HIST_BIN_N_MAX; i++)
534472 hst->hist_bin[i] = rkisp_read(stats_vdev->dev, ISP_RAWHIST_LITE_RO_BASE_BIN, true);
535473
536474 out:
537
- rkisp_write(stats_vdev->dev, ISP_RAWHIST_LITE_CTRL, ctrl, true);
538
- return 0;
475
+ value = rkisp_read(stats_vdev->dev, ISP_RAWHIST_LITE_CTRL, true);
476
+ value |= ISP2X_3A_MEAS_DONE;
477
+ rkisp_write(stats_vdev->dev, ISP_RAWHIST_LITE_CTRL, value, true);
539478 }
540479
541480 static void
....@@ -723,7 +662,7 @@
723662 ISP2X_SIAWB_GET_MEAN_Y_G(reg_val);
724663 }
725664
726
-static int
665
+static void
727666 rkisp_stats_get_rawawb_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
728667 struct rkisp_isp2x_stat_buffer *pbuf)
729668 {
....@@ -733,7 +672,7 @@
733672 u32 i;
734673
735674 if (!pbuf)
736
- goto out;
675
+ goto OUT;
737676
738677 pbuf->meas_type |= ISP2X_STAT_RAWAWB;
739678
....@@ -830,11 +769,10 @@
830769 pbuf->params.rawawb.ramdata[2 * i].r = (msb & 0x3FFFF0) >> 4;
831770 pbuf->params.rawawb.ramdata[2 * i].wp = (msb & 0x01C00000) >> 22;
832771
833
-out:
772
+OUT:
834773 value = rkisp_read(stats_vdev->dev, ISP_RAWAWB_CTRL, true);
835774 value |= ISP2X_3A_MEAS_DONE;
836775 rkisp_write(stats_vdev->dev, ISP_RAWAWB_CTRL, value, true);
837
- return 0;
838776 }
839777
840778 static void
....@@ -861,7 +799,7 @@
861799 af->win[2].lum = ddr_addr[6];
862800 }
863801
864
-static int
802
+static void
865803 rkisp_stats_get_rawaf_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
866804 struct rkisp_isp2x_stat_buffer *pbuf)
867805 {
....@@ -871,7 +809,7 @@
871809 int i;
872810
873811 if (!pbuf)
874
- goto out;
812
+ goto OUT;
875813
876814 af = &pbuf->params.rawaf;
877815 pbuf->meas_type |= ISP2X_STAT_RAWAF;
....@@ -888,15 +826,14 @@
888826 for (i = 0; i < ISP2X_RAWAF_SUMDATA_ROW * ISP2X_RAWAF_SUMDATA_COLUMN; i++)
889827 af->ramdata[i] = ddr_addr[i];
890828
891
-out:
829
+OUT:
892830 value = rkisp_read(stats_vdev->dev, ISP_RAWAF_CTRL, true);
893831 value |= ISP2X_3A_MEAS_DONE;
894832 rkisp_write(stats_vdev->dev, ISP_RAWAF_CTRL, value, true);
895833 rkisp_write(stats_vdev->dev, ISP_RAWAF_INT_STATE, 0, true);
896
- return 0;
897834 }
898835
899
-static int
836
+static void
900837 rkisp_stats_get_yuvae_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
901838 struct rkisp_isp2x_stat_buffer *pbuf)
902839 {
....@@ -905,7 +842,7 @@
905842 int i;
906843
907844 if (!pbuf)
908
- goto out;
845
+ goto OUT;
909846
910847 pbuf->meas_type |= ISP2X_STAT_YUVAE;
911848
....@@ -925,11 +862,10 @@
925862 pbuf->params.yuvae.ro_yuvae_sumy[i] =
926863 rkisp_read(stats_vdev->dev, ISP_YUVAE_WND1_SUMY + 4 * i, true);
927864
928
-out:
865
+OUT:
929866 value = rkisp_read(stats_vdev->dev, ISP_YUVAE_CTRL, true);
930867 value |= ISP2X_3A_MEAS_DONE;
931868 rkisp_write(stats_vdev->dev, ISP_YUVAE_CTRL, value, true);
932
- return 0;
933869 }
934870
935871 static void
....@@ -960,7 +896,7 @@
960896 }
961897 }
962898
963
-static int
899
+static void
964900 rkisp_stats_get_rawaebig_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
965901 struct isp2x_rawaebig_stat *ae, u32 blk_no)
966902 {
....@@ -987,7 +923,7 @@
987923 }
988924
989925 if (!ae)
990
- goto out;
926
+ goto OUT;
991927
992928 for (i = 0; i < ISP2X_RAWAEBIG_SUBWIN_NUM; i++)
993929 ae->sumr[i] = rkisp_read(stats_vdev->dev, addr + RAWAE_BIG_WND1_SUMR + i * 4, true);
....@@ -1005,14 +941,13 @@
1005941 ae->data[i].channelr_xy = ISP2X_RAWAEBIG_GET_MEAN_R(value);
1006942 }
1007943
1008
-out:
944
+OUT:
1009945 value = rkisp_read(stats_vdev->dev, addr + RAWAE_BIG_CTRL, true);
1010946 value |= ISP2X_3A_MEAS_DONE;
1011947 rkisp_write(stats_vdev->dev, addr + RAWAE_BIG_CTRL, value, true);
1012
- return 0;
1013948 }
1014949
1015
-static int
950
+static void
1016951 rkisp_stats_get_rawhstbig_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
1017952 struct isp2x_rawhistbig_stat *hst, u32 blk_no)
1018953 {
....@@ -1039,121 +974,78 @@
1039974 }
1040975
1041976 if (!hst)
1042
- goto out;
977
+ goto OUT;
1043978
1044979 for (i = 0; i < ISP2X_HIST_BIN_N_MAX; i++)
1045980 hst->hist_bin[i] = ddr_addr[i];
1046981
1047
-out:
982
+OUT:
1048983 value = rkisp_read(stats_vdev->dev, addr + ISP_RAWHIST_BIG_CTRL, true);
1049984 value |= ISP2X_3A_MEAS_DONE;
1050985 rkisp_write(stats_vdev->dev, addr + ISP_RAWHIST_BIG_CTRL, value, true);
1051
- return 0;
1052986 }
1053987
1054
-static int
988
+static void
1055989 rkisp_stats_get_rawae1_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
1056990 struct rkisp_isp2x_stat_buffer *pbuf)
1057991 {
1058
- int ret = 0;
1059
-
1060
- if (!pbuf) {
992
+ if (!pbuf)
1061993 rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 1);
1062
- } else {
1063
- ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae1, 1);
1064
- if (!ret)
1065
- pbuf->meas_type |= ISP2X_STAT_RAWAE1;
1066
- }
1067
-
1068
- return ret;
994
+ else
995
+ rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae1, 1);
1069996 }
1070997
1071
-static int
998
+static void
1072999 rkisp_stats_get_rawhst1_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
10731000 struct rkisp_isp2x_stat_buffer *pbuf)
10741001 {
1075
- int ret = 0;
1076
-
1077
- if (!pbuf) {
1002
+ if (!pbuf)
10781003 rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 1);
1079
- } else {
1080
- ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist1, 1);
1081
- if (!ret)
1082
- pbuf->meas_type |= ISP2X_STAT_RAWHST1;
1083
- }
1084
-
1085
- return ret;
1004
+ else
1005
+ rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist1, 1);
10861006 }
10871007
1088
-static int
1008
+static void
10891009 rkisp_stats_get_rawae2_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
10901010 struct rkisp_isp2x_stat_buffer *pbuf)
10911011 {
1092
- int ret = 0;
1093
-
1094
- if (!pbuf) {
1012
+ if (!pbuf)
10951013 rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 2);
1096
- } else {
1097
- ret = rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae2, 2);
1098
- if (!ret)
1099
- pbuf->meas_type |= ISP2X_STAT_RAWAE2;
1100
- }
1101
-
1102
- return ret;
1014
+ else
1015
+ rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae2, 2);
11031016 }
11041017
1105
-static int
1018
+static void
11061019 rkisp_stats_get_rawhst2_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
11071020 struct rkisp_isp2x_stat_buffer *pbuf)
11081021 {
1109
- int ret = 0;
1110
-
1111
- if (!pbuf) {
1022
+ if (!pbuf)
11121023 rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 2);
1113
- } else {
1114
- ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist2, 2);
1115
- if (!ret)
1116
- pbuf->meas_type |= ISP2X_STAT_RAWHST2;
1117
- }
1118
-
1119
- return ret;
1024
+ else
1025
+ rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist2, 2);
11201026 }
11211027
1122
-static int
1028
+static void
11231029 rkisp_stats_get_rawae3_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
11241030 struct rkisp_isp2x_stat_buffer *pbuf)
11251031 {
1126
- int ret = 0;
1127
-
1128
- if (!pbuf) {
1032
+ if (!pbuf)
11291033 rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, NULL, 0);
1130
- } else {
1034
+ else
11311035 rkisp_stats_get_rawaebig_meas_ddr(stats_vdev, &pbuf->params.rawae3, 0);
1132
- if (!ret)
1133
- pbuf->meas_type |= ISP2X_STAT_RAWAE3;
1134
- }
1135
-
1136
- return ret;
11371036 }
11381037
1139
-static int
1038
+static void
11401039 rkisp_stats_get_rawhst3_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
11411040 struct rkisp_isp2x_stat_buffer *pbuf)
11421041 {
1143
- int ret = 0;
1144
-
1145
- if (!pbuf) {
1042
+ if (!pbuf)
11461043 rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, NULL, 0);
1147
- } else {
1148
- ret = rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist3, 0);
1149
- if (!ret)
1150
- pbuf->meas_type |= ISP2X_STAT_RAWHST3;
1151
- }
1152
-
1153
- return ret;
1044
+ else
1045
+ rkisp_stats_get_rawhstbig_meas_ddr(stats_vdev, &pbuf->params.rawhist3, 0);
11541046 }
11551047
1156
-static int
1048
+static void
11571049 rkisp_stats_get_rawaelite_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
11581050 struct rkisp_isp2x_stat_buffer *pbuf)
11591051 {
....@@ -1163,10 +1055,13 @@
11631055 int i;
11641056
11651057 if (!pbuf)
1166
- goto out;
1058
+ goto OUT;
11671059
1168
- pbuf->meas_type |= ISP2X_STAT_RAWAE0;
11691060 ae = &pbuf->params.rawae0;
1061
+ value = rkisp_read(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, true);
1062
+ if ((value & ISP2X_3A_MEAS_DONE) == 0)
1063
+ return;
1064
+
11701065 rd_buf_idx = stats_vdev->rd_buf_idx;
11711066 ddr_addr = stats_vdev->stats_buf[rd_buf_idx].vaddr + 0x0AB0;
11721067 for (i = 0; i < ISP2X_RAWAELITE_MEAN_NUM; i++) {
....@@ -1176,14 +1071,13 @@
11761071 ae->data[i].channelr_xy = ISP2X_RAWAEBIG_GET_MEAN_R(value);
11771072 }
11781073
1179
-out:
1074
+OUT:
11801075 value = rkisp_read(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, true);
11811076 value |= ISP2X_3A_MEAS_DONE;
11821077 rkisp_write(stats_vdev->dev, ISP_RAWAE_LITE_CTRL, value, true);
1183
- return 0;
11841078 }
11851079
1186
-static int
1080
+static void
11871081 rkisp_stats_get_rawhstlite_meas_ddr(struct rkisp_isp_stats_vdev *stats_vdev,
11881082 struct rkisp_isp2x_stat_buffer *pbuf)
11891083 {
....@@ -1193,9 +1087,8 @@
11931087 int i;
11941088
11951089 if (!pbuf)
1196
- goto out;
1090
+ goto OUT;
11971091
1198
- pbuf->meas_type |= ISP2X_STAT_RAWHST0;
11991092 hst = &pbuf->params.rawhist0;
12001093
12011094 rd_buf_idx = stats_vdev->rd_buf_idx;
....@@ -1204,11 +1097,10 @@
12041097 for (i = 0; i < ISP2X_HIST_BIN_N_MAX; i++)
12051098 hst->hist_bin[i] = ddr_addr[i];
12061099
1207
-out:
1100
+OUT:
12081101 value = rkisp_read(stats_vdev->dev, ISP_RAWHIST_LITE_CTRL, true);
12091102 value |= ISP2X_3A_MEAS_DONE;
12101103 rkisp_write(stats_vdev->dev, ISP_RAWHIST_LITE_CTRL, value, true);
1211
- return 0;
12121104 }
12131105
12141106 static struct rkisp_stats_v2x_ops __maybe_unused rkisp_stats_ddr_ops_v2x = {
....@@ -1237,15 +1129,14 @@
12371129 {
12381130 unsigned int cur_frame_id = -1;
12391131 struct rkisp_isp2x_stat_buffer *cur_stat_buf = NULL;
1240
- struct rkisp_buffer *cur_buf = stats_vdev->cur_buf;
1132
+ struct rkisp_buffer *cur_buf = NULL;
12411133 struct rkisp_stats_v2x_ops *ops =
12421134 (struct rkisp_stats_v2x_ops *)stats_vdev->priv_ops;
1243
- int ret = 0;
12441135
12451136 cur_frame_id = meas_work->frame_id;
12461137 spin_lock(&stats_vdev->rd_lock);
12471138 /* get one empty buffer */
1248
- if (!cur_buf && !list_empty(&stats_vdev->stat)) {
1139
+ if (!list_empty(&stats_vdev->stat)) {
12491140 cur_buf = list_first_entry(&stats_vdev->stat,
12501141 struct rkisp_buffer, queue);
12511142 list_del(&cur_buf->queue);
....@@ -1258,11 +1149,18 @@
12581149 cur_stat_buf->frame_id = cur_frame_id;
12591150 }
12601151
1261
- if (meas_work->isp_ris & ISP2X_SIAWB_DONE)
1152
+ if (meas_work->isp_ris & ISP2X_SIAWB_DONE) {
12621153 ops->get_siawb_meas(stats_vdev, cur_stat_buf);
12631154
1264
- if (meas_work->isp_ris & ISP2X_SIAF_FIN)
1155
+ if (cur_stat_buf)
1156
+ cur_stat_buf->meas_type |= ISP2X_STAT_SIAWB;
1157
+ }
1158
+
1159
+ if (meas_work->isp_ris & ISP2X_SIAF_FIN) {
12651160 ops->get_siaf_meas(stats_vdev, cur_stat_buf);
1161
+ if (cur_stat_buf)
1162
+ cur_stat_buf->meas_type |= ISP2X_STAT_SIAF;
1163
+ }
12661164
12671165 if (meas_work->isp_ris & ISP2X_AFM_SUM_OF)
12681166 v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev,
....@@ -1272,17 +1170,29 @@
12721170 v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev,
12731171 "ISP2X_AFM_LUM_OF\n");
12741172
1275
- if (meas_work->isp_ris & ISP2X_YUVAE_END)
1276
- ret |= ops->get_yuvae_meas(stats_vdev, cur_stat_buf);
1173
+ if (meas_work->isp_ris & ISP2X_YUVAE_END) {
1174
+ ops->get_yuvae_meas(stats_vdev, cur_stat_buf);
1175
+ if (cur_stat_buf)
1176
+ cur_stat_buf->meas_type |= ISP2X_STAT_YUVAE;
1177
+ }
12771178
1278
- if (meas_work->isp_ris & ISP2X_SIHST_RDY)
1179
+ if (meas_work->isp_ris & ISP2X_SIHST_RDY) {
12791180 ops->get_sihst_meas(stats_vdev, cur_stat_buf);
1181
+ if (cur_stat_buf)
1182
+ cur_stat_buf->meas_type |= ISP2X_STAT_SIHST;
1183
+ }
12801184
1281
- if (meas_work->isp3a_ris & ISP2X_3A_RAWAWB)
1282
- ret |= ops->get_rawawb_meas(stats_vdev, cur_stat_buf);
1185
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWAWB) {
1186
+ ops->get_rawawb_meas(stats_vdev, cur_stat_buf);
1187
+ if (cur_stat_buf)
1188
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWAWB;
1189
+ }
12831190
1284
- if (meas_work->isp3a_ris & ISP2X_3A_RAWAF)
1285
- ret |= ops->get_rawaf_meas(stats_vdev, cur_stat_buf);
1191
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWAF) {
1192
+ ops->get_rawaf_meas(stats_vdev, cur_stat_buf);
1193
+ if (cur_stat_buf)
1194
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWAF;
1195
+ }
12861196
12871197 if (meas_work->isp3a_ris & ISP2X_3A_RAWAF_SUM)
12881198 v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev,
....@@ -1292,29 +1202,53 @@
12921202 v4l2_warn(stats_vdev->vnode.vdev.v4l2_dev,
12931203 "ISP2X_3A_RAWAF_LUM\n");
12941204
1295
- if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_BIG)
1296
- ret |= ops->get_rawae3_meas(stats_vdev, cur_stat_buf);
1205
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_BIG) {
1206
+ ops->get_rawae3_meas(stats_vdev, cur_stat_buf);
1207
+ if (cur_stat_buf)
1208
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWAE3;
1209
+ }
12971210
1298
- if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_BIG)
1299
- ret |= ops->get_rawhst3_meas(stats_vdev, cur_stat_buf);
1211
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_BIG) {
1212
+ ops->get_rawhst3_meas(stats_vdev, cur_stat_buf);
1213
+ if (cur_stat_buf)
1214
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWHST3;
1215
+ }
13001216
1301
- if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_CH0)
1302
- ret |= ops->get_rawae0_meas(stats_vdev, cur_stat_buf);
1217
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_CH0) {
1218
+ ops->get_rawae0_meas(stats_vdev, cur_stat_buf);
1219
+ if (cur_stat_buf)
1220
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWAE0;
1221
+ }
13031222
1304
- if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_CH1)
1305
- ret |= ops->get_rawae1_meas(stats_vdev, cur_stat_buf);
1223
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_CH1) {
1224
+ ops->get_rawae1_meas(stats_vdev, cur_stat_buf);
1225
+ if (cur_stat_buf)
1226
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWAE1;
1227
+ }
13061228
1307
- if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_CH2)
1308
- ret |= ops->get_rawae2_meas(stats_vdev, cur_stat_buf);
1229
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWAE_CH2) {
1230
+ ops->get_rawae2_meas(stats_vdev, cur_stat_buf);
1231
+ if (cur_stat_buf)
1232
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWAE2;
1233
+ }
13091234
1310
- if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_CH0)
1311
- ret |= ops->get_rawhst0_meas(stats_vdev, cur_stat_buf);
1235
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_CH0) {
1236
+ ops->get_rawhst0_meas(stats_vdev, cur_stat_buf);
1237
+ if (cur_stat_buf)
1238
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWHST0;
1239
+ }
13121240
1313
- if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_CH1)
1314
- ret |= ops->get_rawhst1_meas(stats_vdev, cur_stat_buf);
1241
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_CH1) {
1242
+ ops->get_rawhst1_meas(stats_vdev, cur_stat_buf);
1243
+ if (cur_stat_buf)
1244
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWHST1;
1245
+ }
13151246
1316
- if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_CH2)
1317
- ret |= ops->get_rawhst2_meas(stats_vdev, cur_stat_buf);
1247
+ if (meas_work->isp3a_ris & ISP2X_3A_RAWHIST_CH2) {
1248
+ ops->get_rawhst2_meas(stats_vdev, cur_stat_buf);
1249
+ if (cur_stat_buf)
1250
+ cur_stat_buf->meas_type |= ISP2X_STAT_RAWHST2;
1251
+ }
13181252
13191253 if (meas_work->isp_ris & ISP2X_FRAME) {
13201254 ops->get_bls_stats(stats_vdev, cur_stat_buf);
....@@ -1322,7 +1256,7 @@
13221256 ops->get_dhaz_stats(stats_vdev, cur_stat_buf);
13231257 }
13241258
1325
- if (cur_buf && !ret) {
1259
+ if (cur_buf) {
13261260 bool reg_withstream = false;
13271261 struct v4l2_subdev *sd = v4l2_get_subdev_hostdata(&stats_vdev->dev->br_dev.sd);
13281262
....@@ -1339,9 +1273,7 @@
13391273 memcpy(tmp_statsbuf, cur_stat_buf, sizeof(*cur_stat_buf));
13401274 }
13411275 vb2_buffer_done(&cur_buf->vb.vb2_buf, VB2_BUF_STATE_DONE);
1342
- cur_buf = NULL;
13431276 }
1344
- stats_vdev->cur_buf = cur_buf;
13451277 }
13461278
13471279 static void
....@@ -1447,7 +1379,7 @@
14471379 if ((isp_ris & ISP2X_FRAME) && stats_vdev->rd_stats_from_ddr) {
14481380 wr_buf_idx = stats_vdev->wr_buf_idx;
14491381 stats_vdev->rd_buf_idx = wr_buf_idx;
1450
- rkisp_finish_buffer(dev, &stats_vdev->stats_buf[wr_buf_idx]);
1382
+
14511383 wr_buf_idx = (wr_buf_idx + 1) % RKISP_STATS_DDR_BUF_NUM;
14521384 stats_vdev->wr_buf_idx = wr_buf_idx;
14531385 rkisp_write(stats_vdev->dev, MI_DBR_WR_SIZE,
....@@ -1474,9 +1406,20 @@
14741406 work.frame_id = cur_frame_id;
14751407 work.isp_ris = temp_isp_ris | isp_ris;
14761408 work.isp3a_ris = temp_isp3a_ris | iq_3a_mask;
1477
- work.timestamp = ktime_get_ns();
1409
+ work.timestamp = rkisp_time_get_ns(dev);
14781410
1479
- rkisp_stats_send_meas_v2x(stats_vdev, &work);
1411
+ if (!IS_HDR_RDBK(dev->hdr.op_mode)) {
1412
+ if (!kfifo_is_full(&stats_vdev->rd_kfifo))
1413
+ kfifo_in(&stats_vdev->rd_kfifo,
1414
+ &work, sizeof(work));
1415
+ else
1416
+ v4l2_err(stats_vdev->vnode.vdev.v4l2_dev,
1417
+ "stats kfifo is full\n");
1418
+
1419
+ tasklet_schedule(&stats_vdev->rd_tasklet);
1420
+ } else {
1421
+ rkisp_stats_send_meas_v2x(stats_vdev, &work);
1422
+ }
14801423 }
14811424
14821425 /*