mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-22 17:55:24 -04:00
media: platform: rzg2l-cru: Use v4l2_get_link_freq()
The rzg2l_csi2_calc_mbps() function currently tries to calculate the link frequency for a CSI2 bus using the V4L2_CID_PIXEL_RATE control of the remote subdevice. Switch the function to v4l2_get_link_freq() which correctly targets V4L2_CID_LINK_FREQ before falling back on V4L2_CID_PIXEL_RATE if the former is unavailable. Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Signed-off-by: Daniel Scally <dan.scally+renesas@ideasonboard.com> Link: https://lore.kernel.org/r/20250625-rzg2l-cru-v6-3-a9099ed26c14@ideasonboard.com Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
This commit is contained in:
committed by
Hans Verkuil
parent
d225bdb6ed
commit
ac261abe73
@@ -282,15 +282,18 @@ static int rzg2l_csi2_calc_mbps(struct rzg2l_csi2 *csi2)
|
||||
const struct rzg2l_csi2_format *format;
|
||||
const struct v4l2_mbus_framefmt *fmt;
|
||||
struct v4l2_subdev_state *state;
|
||||
struct v4l2_ctrl *ctrl;
|
||||
struct media_pad *remote_pad;
|
||||
u64 mbps;
|
||||
s64 ret;
|
||||
|
||||
/* Read the pixel rate control from remote. */
|
||||
ctrl = v4l2_ctrl_find(source->ctrl_handler, V4L2_CID_PIXEL_RATE);
|
||||
if (!ctrl) {
|
||||
dev_err(csi2->dev, "no pixel rate control in subdev %s\n",
|
||||
source->name);
|
||||
return -EINVAL;
|
||||
if (!csi2->remote_source)
|
||||
return -ENODEV;
|
||||
|
||||
remote_pad = media_pad_remote_pad_unique(&csi2->pads[RZG2L_CSI2_SINK]);
|
||||
if (IS_ERR(remote_pad)) {
|
||||
dev_err(csi2->dev, "can't get source pad of %s (%ld)\n",
|
||||
csi2->remote_source->name, PTR_ERR(remote_pad));
|
||||
return PTR_ERR(remote_pad);
|
||||
}
|
||||
|
||||
state = v4l2_subdev_lock_and_get_active_state(&csi2->subdev);
|
||||
@@ -298,12 +301,16 @@ static int rzg2l_csi2_calc_mbps(struct rzg2l_csi2 *csi2)
|
||||
format = rzg2l_csi2_code_to_fmt(fmt->code);
|
||||
v4l2_subdev_unlock_state(state);
|
||||
|
||||
/*
|
||||
* Calculate hsfreq in Mbps
|
||||
* hsfreq = (pixel_rate * bits_per_sample) / number_of_lanes
|
||||
*/
|
||||
mbps = v4l2_ctrl_g_ctrl_int64(ctrl) * format->bpp;
|
||||
do_div(mbps, csi2->lanes * 1000000);
|
||||
/* Read the link frequency from remote subdevice. */
|
||||
ret = v4l2_get_link_freq(remote_pad, format->bpp, csi2->lanes * 2);
|
||||
if (ret < 0) {
|
||||
dev_err(csi2->dev, "can't retrieve link freq from subdev %s\n",
|
||||
source->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mbps = ret * 2;
|
||||
do_div(mbps, 1000000);
|
||||
|
||||
return mbps;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user