mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 16:31:13 +00:00
20ea6adbf1
Build system: x86_64 Build-tested: bcm2708, bcm2709, bcm2710, bcm2711 Run-tested: bcm2708/RPiB+, bcm2709/RPi3B, bcm2710/RPi3B, bcm2711/RPi4B Signed-off-by: Marty Jones <mj8263788@gmail.com> Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
339 lines
10 KiB
Diff
339 lines
10 KiB
Diff
From 93606862a8674875fd61166bfef56d2f3dd22b48 Mon Sep 17 00:00:00 2001
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
Date: Mon, 12 Oct 2020 17:03:14 +0100
|
|
Subject: [PATCH] uapi: bcm2835-isp: Add bcm2835-isp uapi header file
|
|
|
|
This file defines the userland interface to the bcm2835-isp driver
|
|
that will follow in a separate commit.
|
|
|
|
Signed-off-by: Naushir Patuck <naush@raspberrypi.com>
|
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
|
---
|
|
include/uapi/linux/bcm2835-isp.h | 320 +++++++++++++++++++++++++++++++
|
|
1 file changed, 320 insertions(+)
|
|
create mode 100644 include/uapi/linux/bcm2835-isp.h
|
|
|
|
--- /dev/null
|
|
+++ b/include/uapi/linux/bcm2835-isp.h
|
|
@@ -0,0 +1,320 @@
|
|
+/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */
|
|
+/*
|
|
+ * bcm2835-isp.h
|
|
+ *
|
|
+ * BCM2835 ISP driver - user space header file.
|
|
+ *
|
|
+ * Copyright © 2019-2020 Raspberry Pi (Trading) Ltd.
|
|
+ *
|
|
+ * Author: Naushir Patuck (naush@raspberrypi.com)
|
|
+ *
|
|
+ */
|
|
+
|
|
+#ifndef __BCM2835_ISP_H_
|
|
+#define __BCM2835_ISP_H_
|
|
+
|
|
+#include <linux/v4l2-controls.h>
|
|
+
|
|
+#define V4L2_CID_USER_BCM2835_ISP_CC_MATRIX \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0001)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_LENS_SHADING \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0002)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_BLACK_LEVEL \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0003)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_GEQ \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0004)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_GAMMA \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0005)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_DENOISE \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0006)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_SHARPEN \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0007)
|
|
+#define V4L2_CID_USER_BCM2835_ISP_DPC \
|
|
+ (V4L2_CID_USER_BCM2835_ISP_BASE + 0x0008)
|
|
+
|
|
+/*
|
|
+ * All structs below are directly mapped onto the equivalent structs in
|
|
+ * drivers/staging/vc04_services/vchiq-mmal/mmal-parameters.h
|
|
+ * for convenience.
|
|
+ */
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_rational - Rational value type.
|
|
+ *
|
|
+ * @num: Numerator.
|
|
+ * @den: Denominator.
|
|
+ */
|
|
+struct bcm2835_isp_rational {
|
|
+ __s32 num;
|
|
+ __u32 den;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_ccm - Colour correction matrix.
|
|
+ *
|
|
+ * @ccm: 3x3 correction matrix coefficients.
|
|
+ * @offsets: 1x3 correction offsets.
|
|
+ */
|
|
+struct bcm2835_isp_ccm {
|
|
+ struct bcm2835_isp_rational ccm[3][3];
|
|
+ __s32 offsets[3];
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_custom_ccm - Custom CCM applied with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_CC_MATRIX ctrl.
|
|
+ *
|
|
+ * @enabled: Enable custom CCM.
|
|
+ * @ccm: Custom CCM coefficients and offsets.
|
|
+ */
|
|
+struct bcm2835_isp_custom_ccm {
|
|
+ __u32 enabled;
|
|
+ struct bcm2835_isp_ccm ccm;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * enum bcm2835_isp_gain_format - format of the gains in the lens shading
|
|
+ * tables used with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_LENS_SHADING ctrl.
|
|
+ *
|
|
+ * @GAIN_FORMAT_U0P8_1: Gains are u0.8 format, starting at 1.0
|
|
+ * @GAIN_FORMAT_U1P7_0: Gains are u1.7 format, starting at 0.0
|
|
+ * @GAIN_FORMAT_U1P7_1: Gains are u1.7 format, starting at 1.0
|
|
+ * @GAIN_FORMAT_U2P6_0: Gains are u2.6 format, starting at 0.0
|
|
+ * @GAIN_FORMAT_U2P6_1: Gains are u2.6 format, starting at 1.0
|
|
+ * @GAIN_FORMAT_U3P5_0: Gains are u3.5 format, starting at 0.0
|
|
+ * @GAIN_FORMAT_U3P5_1: Gains are u3.5 format, starting at 1.0
|
|
+ * @GAIN_FORMAT_U4P10: Gains are u4.10 format, starting at 0.0
|
|
+ */
|
|
+enum bcm2835_isp_gain_format {
|
|
+ GAIN_FORMAT_U0P8_1 = 0,
|
|
+ GAIN_FORMAT_U1P7_0 = 1,
|
|
+ GAIN_FORMAT_U1P7_1 = 2,
|
|
+ GAIN_FORMAT_U2P6_0 = 3,
|
|
+ GAIN_FORMAT_U2P6_1 = 4,
|
|
+ GAIN_FORMAT_U3P5_0 = 5,
|
|
+ GAIN_FORMAT_U3P5_1 = 6,
|
|
+ GAIN_FORMAT_U4P10 = 7,
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_lens_shading - Lens shading tables supplied with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_LENS_SHADING
|
|
+ * ctrl.
|
|
+ *
|
|
+ * @enabled: Enable lens shading.
|
|
+ * @grid_cell_size: Size of grid cells in samples (16, 32, 64, 128 or 256).
|
|
+ * @grid_width: Width of lens shading tables in grid cells.
|
|
+ * @grid_stride: Row to row distance (in grid cells) between grid cells
|
|
+ * in the same horizontal location.
|
|
+ * @grid_height: Height of lens shading tables in grid cells.
|
|
+ * @dmabuf: dmabuf file handle containing the table.
|
|
+ * @ref_transform: Reference transform - unsupported, please pass zero.
|
|
+ * @corner_sampled: Whether the gains are sampled at the corner points
|
|
+ * of the grid cells or in the cell centres.
|
|
+ * @gain_format: Format of the gains (see enum &bcm2835_isp_gain_format).
|
|
+ */
|
|
+struct bcm2835_isp_lens_shading {
|
|
+ __u32 enabled;
|
|
+ __u32 grid_cell_size;
|
|
+ __u32 grid_width;
|
|
+ __u32 grid_stride;
|
|
+ __u32 grid_height;
|
|
+ __s32 dmabuf;
|
|
+ __u32 ref_transform;
|
|
+ __u32 corner_sampled;
|
|
+ __u32 gain_format;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_black_level - Sensor black level set with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_BLACK_LEVEL ctrl.
|
|
+ *
|
|
+ * @enabled: Enable black level.
|
|
+ * @black_level_r: Black level for red channel.
|
|
+ * @black_level_g: Black level for green channels.
|
|
+ * @black_level_b: Black level for blue channel.
|
|
+ */
|
|
+struct bcm2835_isp_black_level {
|
|
+ __u32 enabled;
|
|
+ __u16 black_level_r;
|
|
+ __u16 black_level_g;
|
|
+ __u16 black_level_b;
|
|
+ __u8 padding[2]; /* Unused */
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_geq - Green equalisation parameters set with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_GEQ ctrl.
|
|
+ *
|
|
+ * @enabled: Enable green equalisation.
|
|
+ * @offset: Fixed offset of the green equalisation threshold.
|
|
+ * @slope: Slope of the green equalisation threshold.
|
|
+ */
|
|
+struct bcm2835_isp_geq {
|
|
+ __u32 enabled;
|
|
+ __u32 offset;
|
|
+ struct bcm2835_isp_rational slope;
|
|
+};
|
|
+
|
|
+#define BCM2835_NUM_GAMMA_PTS 33
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_gamma - Gamma parameters set with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_GAMMA ctrl.
|
|
+ *
|
|
+ * @enabled: Enable gamma adjustment.
|
|
+ * @X: X values of the points defining the gamma curve.
|
|
+ * Values should be scaled to 16 bits.
|
|
+ * @Y: Y values of the points defining the gamma curve.
|
|
+ * Values should be scaled to 16 bits.
|
|
+ */
|
|
+struct bcm2835_isp_gamma {
|
|
+ __u32 enabled;
|
|
+ __u16 x[BCM2835_NUM_GAMMA_PTS];
|
|
+ __u16 y[BCM2835_NUM_GAMMA_PTS];
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_denoise - Denoise parameters set with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_DENOISE ctrl.
|
|
+ *
|
|
+ * @enabled: Enable denoise.
|
|
+ * @constant: Fixed offset of the noise threshold.
|
|
+ * @slope: Slope of the noise threshold.
|
|
+ * @strength: Denoise strength between 0.0 (off) and 1.0 (maximum).
|
|
+ */
|
|
+struct bcm2835_isp_denoise {
|
|
+ __u32 enabled;
|
|
+ __u32 constant;
|
|
+ struct bcm2835_isp_rational slope;
|
|
+ struct bcm2835_isp_rational strength;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_sharpen - Sharpen parameters set with the
|
|
+ * V4L2_CID_USER_BCM2835_ISP_SHARPEN ctrl.
|
|
+ *
|
|
+ * @enabled: Enable sharpening.
|
|
+ * @threshold: Threshold at which to start sharpening pixels.
|
|
+ * @strength: Strength with which pixel sharpening increases.
|
|
+ * @limit: Limit to the amount of sharpening applied.
|
|
+ */
|
|
+struct bcm2835_isp_sharpen {
|
|
+ __u32 enabled;
|
|
+ struct bcm2835_isp_rational threshold;
|
|
+ struct bcm2835_isp_rational strength;
|
|
+ struct bcm2835_isp_rational limit;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * enum bcm2835_isp_dpc_mode - defective pixel correction (DPC) strength.
|
|
+ *
|
|
+ * @DPC_MODE_OFF: No DPC.
|
|
+ * @DPC_MODE_NORMAL: Normal DPC.
|
|
+ * @DPC_MODE_STRONG: Strong DPC.
|
|
+ */
|
|
+enum bcm2835_isp_dpc_mode {
|
|
+ DPC_MODE_OFF = 0,
|
|
+ DPC_MODE_NORMAL = 1,
|
|
+ DPC_MODE_STRONG = 2,
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_dpc - Defective pixel correction (DPC) parameters set
|
|
+ * with the V4L2_CID_USER_BCM2835_ISP_DPC ctrl.
|
|
+ *
|
|
+ * @enabled: Enable DPC.
|
|
+ * @strength: DPC strength (see enum &bcm2835_isp_dpc_mode).
|
|
+ */
|
|
+struct bcm2835_isp_dpc {
|
|
+ __u32 enabled;
|
|
+ __u32 strength;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * ISP statistics structures.
|
|
+ *
|
|
+ * The bcm2835_isp_stats structure is generated at the output of the
|
|
+ * statistics node. Note that this does not directly map onto the statistics
|
|
+ * output of the ISP HW. Instead, the MMAL firmware code maps the HW statistics
|
|
+ * to the bcm2835_isp_stats structure.
|
|
+ */
|
|
+#define DEFAULT_AWB_REGIONS_X 16
|
|
+#define DEFAULT_AWB_REGIONS_Y 12
|
|
+
|
|
+#define NUM_HISTOGRAMS 2
|
|
+#define NUM_HISTOGRAM_BINS 128
|
|
+#define AWB_REGIONS (DEFAULT_AWB_REGIONS_X * DEFAULT_AWB_REGIONS_Y)
|
|
+#define FLOATING_REGIONS 16
|
|
+#define AGC_REGIONS 16
|
|
+#define FOCUS_REGIONS 12
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_stats_hist - Histogram statistics
|
|
+ *
|
|
+ * @r_hist: Red channel histogram.
|
|
+ * @g_hist: Combined green channel histogram.
|
|
+ * @b_hist: Blue channel histogram.
|
|
+ */
|
|
+struct bcm2835_isp_stats_hist {
|
|
+ __u32 r_hist[NUM_HISTOGRAM_BINS];
|
|
+ __u32 g_hist[NUM_HISTOGRAM_BINS];
|
|
+ __u32 b_hist[NUM_HISTOGRAM_BINS];
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_stats_region - Region sums.
|
|
+ *
|
|
+ * @counted: The number of 2x2 bayer tiles accumulated.
|
|
+ * @notcounted: The number of 2x2 bayer tiles not accumulated.
|
|
+ * @r_sum: Total sum of counted pixels in the red channel for a region.
|
|
+ * @g_sum: Total sum of counted pixels in the green channel for a region.
|
|
+ * @b_sum: Total sum of counted pixels in the blue channel for a region.
|
|
+ */
|
|
+struct bcm2835_isp_stats_region {
|
|
+ __u32 counted;
|
|
+ __u32 notcounted;
|
|
+ __u64 r_sum;
|
|
+ __u64 g_sum;
|
|
+ __u64 b_sum;
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_stats_focus - Focus statistics.
|
|
+ *
|
|
+ * @contrast_val: Focus measure - accumulated output of the focus filter.
|
|
+ * In the first dimension, index [0] counts pixels below a
|
|
+ * preset threshold, and index [1] counts pixels above the
|
|
+ * threshold. In the second dimension, index [0] uses the
|
|
+ * first predefined filter, and index [1] uses the second
|
|
+ * predefined filter.
|
|
+ * @contrast_val_num: The number of counted pixels in the above accumulation.
|
|
+ */
|
|
+struct bcm2835_isp_stats_focus {
|
|
+ __u64 contrast_val[2][2];
|
|
+ __u32 contrast_val_num[2][2];
|
|
+};
|
|
+
|
|
+/**
|
|
+ * struct bcm2835_isp_stats - ISP statistics.
|
|
+ *
|
|
+ * @version: Version of the bcm2835_isp_stats structure.
|
|
+ * @size: Size of the bcm2835_isp_stats structure.
|
|
+ * @hist: Histogram statistics for the entire image.
|
|
+ * @awb_stats: Statistics for the regions defined for AWB calculations.
|
|
+ * @floating_stats: Statistics for arbitrarily placed (floating) regions.
|
|
+ * @agc_stats: Statistics for the regions defined for AGC calculations.
|
|
+ * @focus_stats: Focus filter statistics for the focus regions.
|
|
+ */
|
|
+struct bcm2835_isp_stats {
|
|
+ __u32 version;
|
|
+ __u32 size;
|
|
+ struct bcm2835_isp_stats_hist hist[NUM_HISTOGRAMS];
|
|
+ struct bcm2835_isp_stats_region awb_stats[AWB_REGIONS];
|
|
+ struct bcm2835_isp_stats_region floating_stats[FLOATING_REGIONS];
|
|
+ struct bcm2835_isp_stats_region agc_stats[AGC_REGIONS];
|
|
+ struct bcm2835_isp_stats_focus focus_stats[FOCUS_REGIONS];
|
|
+};
|
|
+
|
|
+#endif /* __BCM2835_ISP_H_ */
|