]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: rcar-csi2: Simplify rcsi2_calc_mbps()
authorTomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Thu, 15 Jan 2026 10:07:00 +0000 (12:07 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Wed, 11 Mar 2026 00:05:31 +0000 (01:05 +0100)
Instead of taking the bpp and the number of lanes as parameters to
rcsi2_calc_mbps(), change the function to get those parameters inside
the function. This centralizes the code a bit and makes it easier to add
streams support.

Also, in the future when the legacy (non-link-freq) code is removed,
there will be no need to change rcsi2_calc_mbps() parameters.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Tested-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/renesas/rcar-csi2.c

index 8032fa4f7a8ad6dc5a0fb84dac214d44ee206414..a2a87c5bfd7c51ad9edf80437f4e4694d7121e11 100644 (file)
@@ -1003,13 +1003,18 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv,
        return 0;
 }
 
-static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp,
-                          unsigned int lanes)
+static int rcsi2_calc_mbps(struct rcar_csi2 *priv,
+                          struct v4l2_subdev_state *state)
 {
+       const struct rcar_csi2_format *format;
+       struct v4l2_mbus_framefmt *fmt;
        struct media_pad *remote_pad;
        struct v4l2_subdev *source;
+       unsigned int lanes;
+       unsigned int bpp;
        s64 freq;
        u64 mbps;
+       int ret;
 
        if (!priv->remote)
                return -ENODEV;
@@ -1017,6 +1022,20 @@ static int rcsi2_calc_mbps(struct rcar_csi2 *priv, unsigned int bpp,
        source = priv->remote;
        remote_pad = &source->entity.pads[priv->remote_pad];
 
+       ret = rcsi2_get_active_lanes(priv, &lanes);
+       if (ret)
+               return ret;
+
+       fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK);
+       if (!fmt)
+               return -EINVAL;
+
+       format = rcsi2_code_to_fmt(fmt->code);
+       if (!format)
+               return -EINVAL;
+
+       bpp = format->bpp;
+
        freq = v4l2_get_link_freq(remote_pad, bpp, 2 * lanes);
        if (freq < 0) {
                int ret = (int)freq;
@@ -1093,7 +1112,7 @@ static int rcsi2_start_receiver_gen3(struct rcar_csi2 *priv,
        phycnt = PHYCNT_ENABLECLK;
        phycnt |= (1 << lanes) - 1;
 
-       mbps = rcsi2_calc_mbps(priv, format->bpp, lanes);
+       mbps = rcsi2_calc_mbps(priv, state);
        if (mbps < 0)
                return mbps;
 
@@ -1475,23 +1494,15 @@ static int rcsi2_start_receiver_v4h(struct rcar_csi2 *priv,
                                    struct v4l2_subdev_state *state)
 {
        const struct rcsi2_cphy_setting *cphy = NULL;
-       const struct rcar_csi2_format *format;
-       const struct v4l2_mbus_framefmt *fmt;
        unsigned int lanes;
        int mbps;
        int ret;
 
-       /* Use the format on the sink pad to compute the receiver config. */
-       fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK);
-       format = rcsi2_code_to_fmt(fmt->code);
-       if (!format)
-               return -EINVAL;
-
        ret = rcsi2_get_active_lanes(priv, &lanes);
        if (ret)
                return ret;
 
-       mbps = rcsi2_calc_mbps(priv, format->bpp, lanes);
+       mbps = rcsi2_calc_mbps(priv, state);
        if (mbps < 0)
                return mbps;
 
@@ -1732,23 +1743,15 @@ static int rcsi2_init_common_v4m(struct rcar_csi2 *priv, unsigned int mbps)
 static int rcsi2_start_receiver_v4m(struct rcar_csi2 *priv,
                                    struct v4l2_subdev_state *state)
 {
-       const struct rcar_csi2_format *format;
-       const struct v4l2_mbus_framefmt *fmt;
        unsigned int lanes;
        int mbps;
        int ret;
 
-       /* Calculate parameters */
-       fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK);
-       format = rcsi2_code_to_fmt(fmt->code);
-       if (!format)
-               return -EINVAL;
-
        ret = rcsi2_get_active_lanes(priv, &lanes);
        if (ret)
                return ret;
 
-       mbps = rcsi2_calc_mbps(priv, format->bpp, lanes);
+       mbps = rcsi2_calc_mbps(priv, state);
        if (mbps < 0)
                return mbps;