[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250219-rcar-streams-v1-10-f1b93e370aab@ideasonboard.com>
Date: Wed, 19 Feb 2025 15:49:04 +0200
From: Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
To: Niklas Söderlund <niklas.soderlund@...natech.se>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Sakari Ailus <sakari.ailus@...ux.intel.com>
Cc: linux-media@...r.kernel.org, linux-renesas-soc@...r.kernel.org,
linux-kernel@...r.kernel.org,
Niklas Söderlund <niklas.soderlund+renesas@...natech.se>,
Mauro Carvalho Chehab <mchehab+huawei@...nel.org>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>,
Jacopo Mondi <jacopo.mondi@...asonboard.com>,
Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
Subject: [PATCH 10/18] media: rcar-csi2: Optimize rcsi2_calc_mbps()
With modern drivers supporting V4L2_CID_LINK_FREQ, we don't need to do
any calculations based on the bpp and number of lanes when figuring out
the link frequency. However, the code currently always runs code to get
the bpp and number of lanes.
Optimize the rcsi2_calc_mbps() so that we only do that when needed, i.e.
when V4L2_CID_LINK_FREQ is not supported by the upstream subdevice.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen+renesas@...asonboard.com>
---
drivers/media/platform/renesas/rcar-csi2.c | 32 ++++++++++++++++++------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/media/platform/renesas/rcar-csi2.c b/drivers/media/platform/renesas/rcar-csi2.c
index f8b581e10886..d6d5c18b0b4c 100644
--- a/drivers/media/platform/renesas/rcar-csi2.c
+++ b/drivers/media/platform/renesas/rcar-csi2.c
@@ -1001,33 +1001,39 @@ static int rcsi2_get_active_lanes(struct rcar_csi2 *priv,
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 v4l2_subdev *source;
unsigned int lanes;
unsigned int bpp;
s64 freq;
u64 mbps;
- int ret;
if (!priv->remote)
return -ENODEV;
source = priv->remote;
- ret = rcsi2_get_active_lanes(priv, &lanes);
- if (ret)
- return ret;
+ if (v4l2_ctrl_find(source->ctrl_handler, V4L2_CID_LINK_FREQ)) {
+ bpp = 0;
+ lanes = 0;
+ } else {
+ const struct rcar_csi2_format *format;
+ struct v4l2_mbus_framefmt *fmt;
+ int ret;
- fmt = v4l2_subdev_state_get_format(state, RCAR_CSI2_SINK);
- if (!fmt)
- return -EINVAL;
+ ret = rcsi2_get_active_lanes(priv, &lanes);
+ if (ret)
+ return ret;
- format = rcsi2_code_to_fmt(fmt->code);
- if (!format)
- return -EINVAL;
+ 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;
+ bpp = format->bpp;
+ }
freq = v4l2_get_link_freq(source->ctrl_handler, bpp, 2 * lanes);
if (freq < 0) {
--
2.43.0
Powered by blists - more mailing lists