Pull media fixes from Mauro Carvalho Chehab: "The rockship rkisp1 driver will be promoted from staging in 5.11. While not too late, do a few uAPI changes which are needed to better support its functionalities" * tag 'media/v5.11-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: media: rockchip: rkisp1: extend uapi array sizes media: rockchip: rkisp1: carry ip version information media: rockchip: rkisp1: reduce number of histogram grid elements in uapi media: rkisp1: stats: mask the hist_bins values media: rkisp1: stats: remove a wrong cast to u8 media: rkisp1: uapi: change hist_bins array type from __u16 to __u32
Unified · Split
| @@ -13,6 +13,22 @@ This file documents the driver for the Rockchip ISP1 that is part of RK3288 · 12 unmodified lines | |||
| 13 | and RK3399 SoCs. The driver is located under drivers/staging/media/rkisp1 | 13 | and RK3399 SoCs. The driver is located under drivers/staging/media/rkisp1 |
| 14 | and uses the Media-Controller API. | 14 | and uses the Media-Controller API. |
| 15 | 15 | ||
| 16 | Revisions | ||
| 17 | ========= | ||
| 18 | |||
| 19 | There exist multiple smaller revisions to this ISP that got introduced in | ||
| 20 | later SoCs. Revisions can be found in the enum :c:type:`rkisp1_cif_isp_version` | ||
| 21 | in the UAPI and the revision of the ISP inside the running SoC can be read | ||
| 22 | in the field hw_revision of struct media_device_info as returned by | ||
| 23 | ioctl MEDIA_IOC_DEVICE_INFO. | ||
| 24 | |||
| 25 | Versions in use are: | ||
| 26 | |||
| 27 | - RKISP1_V10: used at least in rk3288 and rk3399 | ||
| 28 | - RKISP1_V11: declared in the original vendor code, but not used | ||
| 29 | - RKISP1_V12: used at least in rk3326 and px30 | ||
| 30 | - RKISP1_V13: used at least in rk1808 | ||
| 31 | |||
| 16 | Topology | 32 | Topology |
| 17 | ======== | 33 | ======== |
| 18 | .. _rkisp1_topology_graph: | 34 | .. _rkisp1_topology_graph: |
| @@ -104,6 +104,7 @@ · 103 unmodified lines | |||
| 104 | struct rkisp1_match_data { | 104 | struct rkisp1_match_data { |
| 105 | const char * const *clks; | 105 | const char * const *clks; |
| 106 | unsigned int size; | 106 | unsigned int size; |
| 107 | enum rkisp1_cif_isp_version isp_ver; | ||
| 107 | }; | 108 | }; |
| 108 | 109 | ||
| 109 | /* ---------------------------------------------------------------------------- | 110 | /* ---------------------------------------------------------------------------- |
| @@ -411,15 +412,16 @@ static const char * const rk3399_isp_clks[] = { · 301 unmodified lines | |||
| 411 | "hclk", | 412 | "hclk", |
| 412 | }; | 413 | }; |
| 413 | 414 | ||
| 414 | static const struct rkisp1_match_data rk3399_isp_clk_data = { | 415 | static const struct rkisp1_match_data rk3399_isp_match_data = { |
| 415 | .clks = rk3399_isp_clks, | 416 | .clks = rk3399_isp_clks, |
| 416 | .size = ARRAY_SIZE(rk3399_isp_clks), | 417 | .size = ARRAY_SIZE(rk3399_isp_clks), |
| 418 | .isp_ver = RKISP1_V10, | ||
| 417 | }; | 419 | }; |
| 418 | 420 | ||
| 419 | static const struct of_device_id rkisp1_of_match[] = { | 421 | static const struct of_device_id rkisp1_of_match[] = { |
| 420 | { | 422 | { |
| 421 | .compatible = "rockchip,rk3399-cif-isp", | 423 | .compatible = "rockchip,rk3399-cif-isp", |
| 422 | .data = &rk3399_isp_clk_data, | 424 | .data = &rk3399_isp_match_data, |
| 423 | }, | 425 | }, |
| 424 | {}, | 426 | {}, |
| 425 | }; | 427 | }; |
| @@ -457,15 +459,15 @@ static void rkisp1_debug_init(struct rkisp1_device *rkisp1) · 31 unmodified lines | |||
| 457 | 459 | ||
| 458 | static int rkisp1_probe(struct platform_device *pdev) | 460 | static int rkisp1_probe(struct platform_device *pdev) |
| 459 | { | 461 | { |
| 460 | const struct rkisp1_match_data *clk_data; | 462 | const struct rkisp1_match_data *match_data; |
| 461 | struct device *dev = &pdev->dev; | 463 | struct device *dev = &pdev->dev; |
| 462 | struct rkisp1_device *rkisp1; | 464 | struct rkisp1_device *rkisp1; |
| 463 | struct v4l2_device *v4l2_dev; | 465 | struct v4l2_device *v4l2_dev; |
| 464 | unsigned int i; | 466 | unsigned int i; |
| 465 | int ret, irq; | 467 | int ret, irq; |
| 466 | 468 | ||
| 467 | clk_data = of_device_get_match_data(&pdev->dev); | 469 | match_data = of_device_get_match_data(&pdev->dev); |
| 468 | if (!clk_data) | 470 | if (!match_data) |
| 469 | return -ENODEV; | 471 | return -ENODEV; |
| 470 | 472 | ||
| 471 | rkisp1 = devm_kzalloc(dev, sizeof(*rkisp1), GFP_KERNEL); | 473 | rkisp1 = devm_kzalloc(dev, sizeof(*rkisp1), GFP_KERNEL); |
| @@ -494,15 +496,16 @@ static int rkisp1_probe(struct platform_device *pdev) · 22 unmodified lines | |||
| 494 | 496 | ||
| 495 | rkisp1->irq = irq; | 497 | rkisp1->irq = irq; |
| 496 | 498 | ||
| 497 | for (i = 0; i < clk_data->size; i++) | 499 | for (i = 0; i < match_data->size; i++) |
| 498 | rkisp1->clks[i].id = clk_data->clks[i]; | 500 | rkisp1->clks[i].id = match_data->clks[i]; |
| 499 | ret = devm_clk_bulk_get(dev, clk_data->size, rkisp1->clks); | 501 | ret = devm_clk_bulk_get(dev, match_data->size, rkisp1->clks); |
| 500 | if (ret) | 502 | if (ret) |
| 501 | return ret; | 503 | return ret; |
| 502 | rkisp1->clk_size = clk_data->size; | 504 | rkisp1->clk_size = match_data->size; |
| 503 | 505 | ||
| 504 | pm_runtime_enable(&pdev->dev); | 506 | pm_runtime_enable(&pdev->dev); |
| 505 | 507 | ||
| 508 | rkisp1->media_dev.hw_revision = match_data->isp_ver; | ||
| 506 | strscpy(rkisp1->media_dev.model, RKISP1_DRIVER_NAME, | 509 | strscpy(rkisp1->media_dev.model, RKISP1_DRIVER_NAME, |
| 507 | sizeof(rkisp1->media_dev.model)); | 510 | sizeof(rkisp1->media_dev.model)); |
| 508 | rkisp1->media_dev.dev = &pdev->dev; | 511 | rkisp1->media_dev.dev = &pdev->dev; |
| @@ -391,7 +391,7 @@ static void rkisp1_goc_config(struct rkisp1_params *params, · 390 unmodified lines | |||
| 391 | RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA); | 391 | RKISP1_CIF_ISP_CTRL_ISP_GAMMA_OUT_ENA); |
| 392 | rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE); | 392 | rkisp1_write(params->rkisp1, arg->mode, RKISP1_CIF_ISP_GAMMA_OUT_MODE); |
| 393 | 393 | ||
| 394 | for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES; i++) | 394 | for (i = 0; i < RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10; i++) |
| 395 | rkisp1_write(params->rkisp1, arg->gamma_y[i], | 395 | rkisp1_write(params->rkisp1, arg->gamma_y[i], |
| 396 | RKISP1_CIF_ISP_GAMMA_OUT_Y_0 + i * 4); | 396 | RKISP1_CIF_ISP_GAMMA_OUT_Y_0 + i * 4); |
| 397 | } | 397 | } |
| @@ -589,7 +589,6 @@ static void rkisp1_hst_config(struct rkisp1_params *params, · 191 unmodified lines | |||
| 589 | RKISP1_CIF_ISP_HIST_WEIGHT_22TO03, | 589 | RKISP1_CIF_ISP_HIST_WEIGHT_22TO03, |
| 590 | RKISP1_CIF_ISP_HIST_WEIGHT_13TO43, | 590 | RKISP1_CIF_ISP_HIST_WEIGHT_13TO43, |
| 591 | RKISP1_CIF_ISP_HIST_WEIGHT_04TO34, | 591 | RKISP1_CIF_ISP_HIST_WEIGHT_04TO34, |
| 592 | RKISP1_CIF_ISP_HIST_WEIGHT_44, | ||
| 593 | }; | 592 | }; |
| 594 | const u8 *weight; | 593 | const u8 *weight; |
| 595 | unsigned int i; | 594 | unsigned int i; |
| @@ -622,6 +621,8 @@ static void rkisp1_hst_config(struct rkisp1_params *params, · 26 unmodified lines | |||
| 622 | weight[2], | 621 | weight[2], |
| 623 | weight[3]), | 622 | weight[3]), |
| 624 | hist_weight_regs[i]); | 623 | hist_weight_regs[i]); |
| 624 | |||
| 625 | rkisp1_write(params->rkisp1, weight[0] & 0x1F, RKISP1_CIF_ISP_HIST_WEIGHT_44); | ||
| 625 | } | 626 | } |
| 626 | 627 | ||
| 627 | static void | 628 | static void |
| @@ -365,6 +365,7 @@ · 364 unmodified lines | |||
| 365 | #define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER 0x0000007F | 365 | #define RKISP1_CIF_ISP_MAX_HIST_PREDIVIDER 0x0000007F |
| 366 | #define RKISP1_CIF_ISP_HIST_ROW_NUM 5 | 366 | #define RKISP1_CIF_ISP_HIST_ROW_NUM 5 |
| 367 | #define RKISP1_CIF_ISP_HIST_COLUMN_NUM 5 | 367 | #define RKISP1_CIF_ISP_HIST_COLUMN_NUM 5 |
| 368 | #define RKISP1_CIF_ISP_HIST_GET_BIN(x) ((x) & 0x000FFFFF) | ||
| 368 | 369 | ||
| 369 | /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */ | 370 | /* AUTO FOCUS MEASUREMENT: ISP_AFM_CTRL */ |
| 370 | #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0) | 371 | #define RKISP1_ISP_AFM_CTRL_ENABLE BIT(0) |
| @@ -203,7 +203,7 @@ static void rkisp1_stats_get_aec_meas(struct rkisp1_stats *stats, · 202 unmodified lines | |||
| 203 | unsigned int i; | 203 | unsigned int i; |
| 204 | 204 | ||
| 205 | pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP; | 205 | pbuf->meas_type |= RKISP1_CIF_ISP_STAT_AUTOEXP; |
| 206 | for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX; i++) | 206 | for (i = 0; i < RKISP1_CIF_ISP_AE_MEAN_MAX_V10; i++) |
| 207 | pbuf->params.ae.exp_mean[i] = | 207 | pbuf->params.ae.exp_mean[i] = |
| 208 | (u8)rkisp1_read(rkisp1, | 208 | (u8)rkisp1_read(rkisp1, |
| 209 | RKISP1_CIF_ISP_EXP_MEAN_00 + i * 4); | 209 | RKISP1_CIF_ISP_EXP_MEAN_00 + i * 4); |
| @@ -233,10 +233,11 @@ static void rkisp1_stats_get_hst_meas(struct rkisp1_stats *stats, · 23 unmodified lines | |||
| 233 | unsigned int i; | 233 | unsigned int i; |
| 234 | 234 | ||
| 235 | pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST; | 235 | pbuf->meas_type |= RKISP1_CIF_ISP_STAT_HIST; |
| 236 | for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX; i++) | 236 | for (i = 0; i < RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10; i++) { |
| 237 | pbuf->params.hist.hist_bins[i] = | 237 | u32 reg_val = rkisp1_read(rkisp1, RKISP1_CIF_ISP_HIST_BIN_0 + i * 4); |
| 238 | (u8)rkisp1_read(rkisp1, | 238 | |
| 239 | RKISP1_CIF_ISP_HIST_BIN_0 + i * 4); | 239 | pbuf->params.hist.hist_bins[i] = RKISP1_CIF_ISP_HIST_GET_BIN(reg_val); |
| 240 | } | ||
| 240 | } | 241 | } |
| 241 | 242 | ||
| 242 | static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats, | 243 | static void rkisp1_stats_get_bls_meas(struct rkisp1_stats *stats, |
| @@ -49,8 +49,14 @@ · 48 unmodified lines | |||
| 49 | #define RKISP1_CIF_ISP_CTK_COEFF_MAX 0x100 | 49 | #define RKISP1_CIF_ISP_CTK_COEFF_MAX 0x100 |
| 50 | #define RKISP1_CIF_ISP_CTK_OFFSET_MAX 0x800 | 50 | #define RKISP1_CIF_ISP_CTK_OFFSET_MAX 0x800 |
| 51 | 51 | ||
| 52 | #define RKISP1_CIF_ISP_AE_MEAN_MAX 25 | 52 | #define RKISP1_CIF_ISP_AE_MEAN_MAX_V10 25 |
| 53 | #define RKISP1_CIF_ISP_HIST_BIN_N_MAX 16 | 53 | #define RKISP1_CIF_ISP_AE_MEAN_MAX_V12 81 |
| 54 | #define RKISP1_CIF_ISP_AE_MEAN_MAX RKISP1_CIF_ISP_AE_MEAN_MAX_V12 | ||
| 55 | |||
| 56 | #define RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10 16 | ||
| 57 | #define RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 32 | ||
| 58 | #define RKISP1_CIF_ISP_HIST_BIN_N_MAX RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 | ||
| 59 | |||
| 54 | #define RKISP1_CIF_ISP_AFM_MAX_WINDOWS 3 | 60 | #define RKISP1_CIF_ISP_AFM_MAX_WINDOWS 3 |
| 55 | #define RKISP1_CIF_ISP_DEGAMMA_CURVE_SIZE 17 | 61 | #define RKISP1_CIF_ISP_DEGAMMA_CURVE_SIZE 17 |
| 56 | 62 | ||
| @@ -86,7 +92,9 @@ · 29 unmodified lines | |||
| 86 | * Gamma out | 92 | * Gamma out |
| 87 | */ | 93 | */ |
| 88 | /* Maximum number of color samples supported */ | 94 | /* Maximum number of color samples supported */ |
| 89 | #define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES 17 | 95 | #define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10 17 |
| 96 | #define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 34 | ||
| 97 | #define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 | ||
| 90 | 98 | ||
| 91 | /* | 99 | /* |
| 92 | * Lens shade correction | 100 | * Lens shade correction |
| @@ -102,8 +110,9 @@ · 9 unmodified lines | |||
| 102 | /* | 110 | /* |
| 103 | * Histogram calculation | 111 | * Histogram calculation |
| 104 | */ | 112 | */ |
| 105 | /* Last 3 values unused. */ | 113 | #define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10 25 |
| 106 | #define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE 28 | 114 | #define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12 81 |
| 115 | #define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12 | ||
| 107 | 116 | ||
| 108 | /* | 117 | /* |
| 109 | * Defect Pixel Cluster Correction | 118 | * Defect Pixel Cluster Correction |
| @@ -124,6 +133,21 @@ · 14 unmodified lines | |||
| 124 | #define RKISP1_CIF_ISP_STAT_AFM (1U << 2) | 133 | #define RKISP1_CIF_ISP_STAT_AFM (1U << 2) |
| 125 | #define RKISP1_CIF_ISP_STAT_HIST (1U << 3) | 134 | #define RKISP1_CIF_ISP_STAT_HIST (1U << 3) |
| 126 | 135 | ||
| 136 | /** | ||
| 137 | * enum rkisp1_cif_isp_version - ISP variants | ||
| 138 | * | ||
| 139 | * @RKISP1_V10: used at least in rk3288 and rk3399 | ||
| 140 | * @RKISP1_V11: declared in the original vendor code, but not used | ||
| 141 | * @RKISP1_V12: used at least in rk3326 and px30 | ||
| 142 | * @RKISP1_V13: used at least in rk1808 | ||
| 143 | */ | ||
| 144 | enum rkisp1_cif_isp_version { | ||
| 145 | RKISP1_V10 = 10, | ||
| 146 | RKISP1_V11, | ||
| 147 | RKISP1_V12, | ||
| 148 | RKISP1_V13, | ||
| 149 | }; | ||
| 150 | |||
| 127 | enum rkisp1_cif_isp_histogram_mode { | 151 | enum rkisp1_cif_isp_histogram_mode { |
| 128 | RKISP1_CIF_ISP_HISTOGRAM_MODE_DISABLE, | 152 | RKISP1_CIF_ISP_HISTOGRAM_MODE_DISABLE, |
| 129 | RKISP1_CIF_ISP_HISTOGRAM_MODE_RGB_COMBINED, | 153 | RKISP1_CIF_ISP_HISTOGRAM_MODE_RGB_COMBINED, |
| @@ -510,6 +534,15 @@ enum rkisp1_cif_isp_goc_mode { · 380 unmodified lines | |||
| 510 | * | 534 | * |
| 511 | * @mode: goc mode (from enum rkisp1_cif_isp_goc_mode) | 535 | * @mode: goc mode (from enum rkisp1_cif_isp_goc_mode) |
| 512 | * @gamma_y: gamma out curve y-axis for all color components | 536 | * @gamma_y: gamma out curve y-axis for all color components |
| 537 | * | ||
| 538 | * The number of entries of @gamma_y depends on the hardware revision | ||
| 539 | * as is reported by the hw_revision field of the struct media_device_info | ||
| 540 | * that is returned by ioctl MEDIA_IOC_DEVICE_INFO. | ||
| 541 | * | ||
| 542 | * Versions <= V11 have RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10 | ||
| 543 | * entries, versions >= V12 have RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 | ||
| 544 | * entries. RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES is equal to the maximum | ||
| 545 | * of the two. | ||
| 513 | */ | 546 | */ |
| 514 | struct rkisp1_cif_isp_goc_config { | 547 | struct rkisp1_cif_isp_goc_config { |
| 515 | __u32 mode; | 548 | __u32 mode; |
| @@ -524,6 +557,15 @@ struct rkisp1_cif_isp_goc_config { · 8 unmodified lines | |||
| 524 | * skipped | 557 | * skipped |
| 525 | * @meas_window: coordinates of the measure window | 558 | * @meas_window: coordinates of the measure window |
| 526 | * @hist_weight: weighting factor for sub-windows | 559 | * @hist_weight: weighting factor for sub-windows |
| 560 | * | ||
| 561 | * The number of entries of @hist_weight depends on the hardware revision | ||
| 562 | * as is reported by the hw_revision field of the struct media_device_info | ||
| 563 | * that is returned by ioctl MEDIA_IOC_DEVICE_INFO. | ||
| 564 | * | ||
| 565 | * Versions <= V11 have RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10 | ||
| 566 | * entries, versions >= V12 have RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12 | ||
| 567 | * entries. RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE is equal to the maximum | ||
| 568 | * of the two. | ||
| 527 | */ | 569 | */ |
| 528 | struct rkisp1_cif_isp_hst_config { | 570 | struct rkisp1_cif_isp_hst_config { |
| 529 | __u32 mode; | 571 | __u32 mode; |
| @@ -811,7 +853,15 @@ struct rkisp1_cif_isp_bls_meas_val { · 281 unmodified lines | |||
| 811 | * @exp_mean: Mean luminance value of block xx | 853 | * @exp_mean: Mean luminance value of block xx |
| 812 | * @bls_val: BLS measured values | 854 | * @bls_val: BLS measured values |
| 813 | * | 855 | * |
| 814 | * Image is divided into 5x5 blocks. | 856 | * The number of entries of @exp_mean depends on the hardware revision |
| 857 | * as is reported by the hw_revision field of the struct media_device_info | ||
| 858 | * that is returned by ioctl MEDIA_IOC_DEVICE_INFO. | ||
| 859 | * | ||
| 860 | * Versions <= V11 have RKISP1_CIF_ISP_AE_MEAN_MAX_V10 entries, | ||
| 861 | * versions >= V12 have RKISP1_CIF_ISP_AE_MEAN_MAX_V12 entries. | ||
| 862 | * RKISP1_CIF_ISP_AE_MEAN_MAX is equal to the maximum of the two. | ||
| 863 | * | ||
| 864 | * Image is divided into 5x5 blocks on V10 and 9x9 blocks on V12. | ||
| 815 | */ | 865 | */ |
| 816 | struct rkisp1_cif_isp_ae_stat { | 866 | struct rkisp1_cif_isp_ae_stat { |
| 817 | __u8 exp_mean[RKISP1_CIF_ISP_AE_MEAN_MAX]; | 867 | __u8 exp_mean[RKISP1_CIF_ISP_AE_MEAN_MAX]; |
| @@ -844,13 +894,29 @@ struct rkisp1_cif_isp_af_stat { · 26 unmodified lines | |||
| 844 | /** | 894 | /** |
| 845 | * struct rkisp1_cif_isp_hist_stat - statistics histogram data | 895 | * struct rkisp1_cif_isp_hist_stat - statistics histogram data |
| 846 | * | 896 | * |
| 847 | * @hist_bins: measured bin counters | 897 | * @hist_bins: measured bin counters. Each bin is a 20 bits unsigned fixed point |
| 898 | * type. Bits 0-4 are the fractional part and bits 5-19 are the | ||
| 899 | * integer part. | ||
| 900 | * | ||
| 901 | * The window of the measurements area is divided to 5x5 sub-windows for | ||
| 902 | * V10/V11 and to 9x9 sub-windows for V12. The histogram is then computed for | ||
| 903 | * each sub-window independently and the final result is a weighted average of | ||
| 904 | * the histogram measurements on all sub-windows. The window of the | ||
| 905 | * measurements area and the weight of each sub-window are configurable using | ||
| 906 | * struct @rkisp1_cif_isp_hst_config. | ||
| 907 | * | ||
| 908 | * The histogram contains 16 bins in V10/V11 and 32 bins in V12/V13. | ||
| 909 | * | ||
| 910 | * The number of entries of @hist_bins depends on the hardware revision | ||
| 911 | * as is reported by the hw_revision field of the struct media_device_info | ||
| 912 | * that is returned by ioctl MEDIA_IOC_DEVICE_INFO. | ||
| 848 | * | 913 | * |
| 849 | * Measurement window divided into 25 sub-windows, set | 914 | * Versions <= V11 have RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10 entries, |
| 850 | * with ISP_HIST_XXX | 915 | * versions >= V12 have RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 entries. |
| 916 | * RKISP1_CIF_ISP_HIST_BIN_N_MAX is equal to the maximum of the two. | ||
| 851 | */ | 917 | */ |
| 852 | struct rkisp1_cif_isp_hist_stat { | 918 | struct rkisp1_cif_isp_hist_stat { |
| 853 | __u16 hist_bins[RKISP1_CIF_ISP_HIST_BIN_N_MAX]; | 919 | __u32 hist_bins[RKISP1_CIF_ISP_HIST_BIN_N_MAX]; |
| 854 | }; | 920 | }; |
| 855 | 921 | ||
| 856 | /** | 922 | /** |