mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
media: rcar-csi2: Simplify rcsi2_calc_mbps()
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>
This commit is contained in:
parent
0ffd7f4c4c
commit
21bcc9355c
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user