From: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
To: "Niklas Söderlund" <niklas.soderlund+renesas@ragnatech.se>
Cc: Jacopo Mondi <jacopo.mondi@ideasonboard.com>,
Jai Luthra <jai.luthra+renesas@ideasonboard.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org,
linux-kernel@vger.kernel.org,
Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
Subject: Re: [PATCH v9 12/13] media: rppx1: ga: Add support for gamma out correction
Date: Wed, 3 Jun 2026 16:33:52 +0200 [thread overview]
Message-ID: <aiA7Qk9CwyN-lE7M@zed> (raw)
In-Reply-To: <20260516211320.3041412-13-niklas.soderlund+renesas@ragnatech.se>
Hi Niklas
On Sat, May 16, 2026 at 11:13:19PM +0200, Niklas Söderlund wrote:
> Extend the RPPX1 driver to allow setting the gamma out correction
> configuration parameters. It uses the RPPX1 framework for parameters and
> its writer abstraction to allow the user to control how, and when,
> configuration is applied to the RPPX1.
>
> Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
> Co-developed-by: Jai Luthra <jai.luthra+renesas@ideasonboard.com>
> Signed-off-by: Jai Luthra <jai.luthra+renesas@ideasonboard.com>
> Co-developed-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
> Signed-off-by: Jacopo Mondi <jacopo.mondi+renesas@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Thanks
j
> ---
> .../platform/dreamchip/rppx1/rpp_module.h | 1 +
> .../platform/dreamchip/rppx1/rpp_params.c | 5 ++
> .../media/platform/dreamchip/rppx1/rppx1_ga.c | 43 ++++++++++++++-
> .../uapi/linux/media/dreamchip/rppx1-config.h | 53 ++++++++++++++++++-
> 4 files changed, 100 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/dreamchip/rppx1/rpp_module.h b/drivers/media/platform/dreamchip/rppx1/rpp_module.h
> index 48b61b5c35b4..948e26d7361d 100644
> --- a/drivers/media/platform/dreamchip/rppx1/rpp_module.h
> +++ b/drivers/media/platform/dreamchip/rppx1/rpp_module.h
> @@ -54,6 +54,7 @@ union rppx1_params_block {
> struct rppx1_hist_params hist;
> struct rppx1_exm_params exm;
> struct rppx1_wbmeas_params wbmeas;
> + struct rppx1_ga_params ga;
> };
>
> union rppx1_stats_block {
> diff --git a/drivers/media/platform/dreamchip/rppx1/rpp_params.c b/drivers/media/platform/dreamchip/rppx1/rpp_params.c
> index 8d85d0c7bff1..86d445b52504 100644
> --- a/drivers/media/platform/dreamchip/rppx1/rpp_params.c
> +++ b/drivers/media/platform/dreamchip/rppx1/rpp_params.c
> @@ -30,6 +30,8 @@ rppx1_ext_params_blocks_info[] = {
> RPPX1_PARAMS_BLOCK_INFO(EXM_PRE1, exm),
> RPPX1_PARAMS_BLOCK_INFO(EXM_PRE2, exm),
> RPPX1_PARAMS_BLOCK_INFO(WBMEAS_POST, wbmeas),
> + RPPX1_PARAMS_BLOCK_INFO(GA_HV, ga),
> + RPPX1_PARAMS_BLOCK_INFO(GA_MV, ga),
> };
>
> int rppx1_params(struct rppx1 *rpp, struct vb2_buffer *vb, size_t max_size,
> @@ -84,6 +86,9 @@ int rppx1_params(struct rppx1 *rpp, struct vb2_buffer *vb, size_t max_size,
> case RPPX1_PARAMS_BLOCK_TYPE_WBMEAS_POST:
> module = &rpp->post.wbmeas;
> break;
> + case RPPX1_PARAMS_BLOCK_TYPE_GA_HV:
> + module = &rpp->hv.ga;
> + break;
> default:
> dev_warn(rpp->dev,
> "Not handled RPPX1 block type: 0x%04x\n",
> diff --git a/drivers/media/platform/dreamchip/rppx1/rppx1_ga.c b/drivers/media/platform/dreamchip/rppx1/rppx1_ga.c
> index 0667672b2694..1d9c24c43f77 100644
> --- a/drivers/media/platform/dreamchip/rppx1/rppx1_ga.c
> +++ b/drivers/media/platform/dreamchip/rppx1/rppx1_ga.c
> @@ -15,9 +15,11 @@
> #define GAMMA_OUT_MODE_REG 0x0008
> #define GAMMA_OUT_MODE_GAMMA_OUT_EQU_SEGM BIT(0)
>
> -#define GAMMA_OUT_Y_REG_NUM 17
> #define GAMMA_OUT_Y_REG(n) (0x000c + (4 * (n)))
>
> +#define GAMMA_OUT_HV_GAMMA_CURVE_MASK GENMASK(11, 0)
> +#define GAMMA_OUT_MV_GAMMA_CURVE_MASK GENMASK(23, 0)
> +
> static int rppx1_ga_probe(struct rpp_module *mod)
> {
> /* Version check. */
> @@ -44,7 +46,46 @@ static int rppx1_ga_start(struct rpp_module *mod,
> return 0;
> }
>
> +static int
> +rppx1_ga_fill_params(struct rpp_module *mod,
> + const union rppx1_params_block *block,
> + rppx1_reg_write write, void *priv)
> +{
> + const struct rppx1_ga_params *cfg = &block->ga;
> + u32 mask;
> +
> + /* If the modules is disabled, simply bypass it. */
> + if (cfg->header.flags & V4L2_ISP_PARAMS_FL_BLOCK_DISABLE) {
> + write(priv, mod->base + GAMMA_OUT_ENABLE_REG, 0);
> + return 0;
> + }
> +
> + switch (cfg->header.type) {
> + case RPPX1_PARAMS_BLOCK_TYPE_GA_HV:
> + mask = GAMMA_OUT_HV_GAMMA_CURVE_MASK;
> + break;
> + case RPPX1_PARAMS_BLOCK_TYPE_GA_MV:
> + mask = GAMMA_OUT_MV_GAMMA_CURVE_MASK;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + write(priv, mod->base + GAMMA_OUT_MODE_REG, cfg->mode);
> +
> + for (unsigned int i = 0; i < RPPX1_GA_MAX_SAMPLES; i++)
> + write(priv, mod->base + GAMMA_OUT_Y_REG(i),
> + cfg->gamma_y[i] & mask);
> +
> + /* Enable module. */
> + write(priv, mod->base + GAMMA_OUT_ENABLE_REG,
> + GAMMA_OUT_ENABLE_GAMMA_OUT_EN);
> +
> + return 0;
> +}
> +
> const struct rpp_module_ops rppx1_ga_ops = {
> .probe = rppx1_ga_probe,
> .start = rppx1_ga_start,
> + .fill_params = rppx1_ga_fill_params,
> };
> diff --git a/include/uapi/linux/media/dreamchip/rppx1-config.h b/include/uapi/linux/media/dreamchip/rppx1-config.h
> index 7ebcc00ace04..05faec2f68e3 100644
> --- a/include/uapi/linux/media/dreamchip/rppx1-config.h
> +++ b/include/uapi/linux/media/dreamchip/rppx1-config.h
> @@ -91,6 +91,8 @@ enum rppx1_meas_chan {
> * @RPPX1_PARAMS_BLOCK_TYPE_CCOR_POST: POST pipe Color Correction
> * @RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE1: PRE1 pipe Lens Shading Correction
> * @RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE2: PRE2 Lens Shading Correction
> + * @RPPX1_PARAMS_BLOCK_TYPE_GA_HV: Human Vision Pipe Gamma Out Correction
> + * @RPPX1_PARAMS_BLOCK_TYPE_GA_MV: Machine Vision Gamma Out Correction
> */
> enum rppx1_params_block_type {
> RPPX1_PARAMS_BLOCK_TYPE_WBMEAS_POST,
> @@ -107,6 +109,8 @@ enum rppx1_params_block_type {
> RPPX1_PARAMS_BLOCK_TYPE_CCOR_POST,
> RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE1,
> RPPX1_PARAMS_BLOCK_TYPE_LSC_PRE2,
> + RPPX1_PARAMS_BLOCK_TYPE_GA_HV,
> + RPPX1_PARAMS_BLOCK_TYPE_GA_MV,
> };
>
> /**
> @@ -497,6 +501,51 @@ struct rppx1_lsc_params {
> __u16 y_sect_size[RPPX1_LSC_NUM_SECTORS];
> };
>
> +/* Gamma Out */
> +#define RPPX1_GA_MAX_SAMPLES 17
> +
> +/**
> + * enum rppx1_ga_seg_mode - Gamma out curve segmentation mode
> + *
> + * Segmentation mode of the 16 input sampling points for the Gamma Out
> + * Correction module.
> + *
> + * @RPPX1_GA_SEG_MODE_LOGARITHMIC: logarithmic-like segmentation mode
> + * @RPPX1_GA_SEG_MODE_EQUIDISTANT: equidistant segmentation mode
> + */
> +enum rppx1_ga_seg_mode {
> + RPPX1_GA_SEG_MODE_LOGARITHMIC,
> + RPPX1_GA_SEG_MODE_EQUIDISTANT
> +};
> +
> +/**
> + * struct rppx1_ga_params - Gamma Out Correction configuration
> + *
> + * The Gamma Out Correction module is available on the Human Vision Output
> + * Pipe (HV) and the Machine Vision Output Pipe (MV). Userspace selects
> + * which pipe to operate by setting the @header.type field to
> + * RPPX1_PARAMS_BLOCK_TYPE_GA_HV or RPPX1_PARAMS_BLOCK_TYPE_GA_MV.
> + *
> + * The module allows to apply a @gamma_y gamma correction curve to RGB data
> + * represented as a table of 16 entries. The 16 input sampling points can be
> + * equidistant or segmented using a logarithmic scale according to the value of
> + * @mode.
> + *
> + * The gamma curve values are 12 bits on the HV output pipe and 24 bits on the
> + * MV output pipe. Userspace is expected to provide the curve values with a
> + * bit-depth matching the one of pipe in use.
> + *
> + * @header: block header (type = RPPX1_PARAMS_BLOCK_TYPE_GA_HV or
> + * type = RPPX1_PARAMS_BLOCK_TYPE_GA_MV)
> + * @mode: gamma curve input segmentation mode (see rppx1_ga_seg_mode)
> + * @gamma_y: gamma out curve y-axis values
> + */
> +struct rppx1_ga_params {
> + struct v4l2_isp_params_block_header header;
> + __u8 mode;
> + __u32 gamma_y[RPPX1_GA_MAX_SAMPLES];
> +};
> +
> /**
> * RPPX1_PARAMS_MAX_SIZE - Maximum size of all RPP-X1 parameter blocks
> *
> @@ -517,7 +566,9 @@ struct rppx1_lsc_params {
> sizeof(struct rppx1_bls_params) + \
> sizeof(struct rppx1_ccor_params) + \
> sizeof(struct rppx1_lsc_params) + \
> - sizeof(struct rppx1_lsc_params))
> + sizeof(struct rppx1_lsc_params) + \
> + sizeof(struct rppx1_ga_params) + \
> + sizeof(struct rppx1_ga_params))
>
> /* ---------------------------------------------------------------------------
> * Statistics Structures
> --
> 2.54.0
>
next prev parent reply other threads:[~2026-06-03 14:33 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-16 21:13 [PATCH v9 00/13] media: Add support for R-Car ISP using Dreamchip RPPX1 ISP Niklas Söderlund
2026-05-16 21:13 ` [PATCH v9 01/13] media: Add RPP_X1_PARAMS and RPP_X1_STATS meta formats Niklas Söderlund
2026-06-03 10:49 ` Jacopo Mondi
2026-06-03 12:48 ` Niklas Söderlund
2026-05-16 21:13 ` [PATCH v9 02/13] media: uapi: Add extensible param and stats blocks for RPPX1 Niklas Söderlund
2026-06-03 10:50 ` Jacopo Mondi
2026-06-03 12:55 ` Niklas Söderlund
2026-05-16 21:13 ` [PATCH v9 03/13] media: rppx1: Add framework to support Dreamchip RPPX1 ISP Niklas Söderlund
2026-06-03 10:56 ` Jacopo Mondi
2026-06-03 12:24 ` Jacopo Mondi
2026-06-03 13:47 ` Niklas Söderlund
2026-06-03 14:26 ` Jacopo Mondi
2026-06-03 15:17 ` Niklas Söderlund
2026-06-03 15:33 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 04/13] media: rcar-isp: Add support for ISPCORE Niklas Söderlund
2026-06-03 13:15 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 05/13] media: rppx1: wbmeas: Add support for white balance measurement Niklas Söderlund
2026-06-03 13:35 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 06/13] media: rppx1: awbg: Add support for white balance gain settings Niklas Söderlund
2026-06-03 13:38 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 07/13] media: rppx1: exm: Add support for exposure measurement Niklas Söderlund
2026-06-03 13:57 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 08/13] media: rppx1: hist: Add support histogram measurement Niklas Söderlund
2026-06-03 14:11 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 09/13] media: rppx1: bls: Add support for black level compensation Niklas Söderlund
2026-05-16 21:13 ` [PATCH v9 10/13] media: rppx1: ccor: Add support for color correction matrix Niklas Söderlund
2026-05-16 21:13 ` [PATCH v9 11/13] media: rppx1: lsc: Add support for lens shade correction Niklas Söderlund
2026-06-03 14:32 ` Jacopo Mondi
2026-05-16 21:13 ` [PATCH v9 12/13] media: rppx1: ga: Add support for gamma out correction Niklas Söderlund
2026-06-03 14:33 ` Jacopo Mondi [this message]
2026-05-16 21:13 ` [PATCH v9 13/13] media: rppx1: lin: Add support for gamma sensor linearization Niklas Söderlund
2026-06-03 14:36 ` Jacopo Mondi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aiA7Qk9CwyN-lE7M@zed \
--to=jacopo.mondi@ideasonboard.com \
--cc=jacopo.mondi+renesas@ideasonboard.com \
--cc=jai.luthra+renesas@ideasonboard.com \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.