mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
[t23x][camera]: Fix VIDIOC_G/S_PARM v4l2-compliance test fail.
Implemented VIDIOC_G/S_PARM ioctl calls to fix
v4l2-compliance test fail.
Bug 4807063
Change-Id: Ia03b161b5659c710976084f277064a44d10aec15
Signed-off-by: Praveen AC <pac@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3221436
(cherry picked from commit c3b8c1cd3e)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3232021
Reviewed-by: Ankur Pawar <ankurp@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
Tested-by: Ankur Pawar <ankurp@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
@@ -1,8 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
|
// SPDX-FileCopyrightText: Copyright (c) 2018-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||||
/*
|
/*
|
||||||
* tegracam_v4l2 - tegra camera framework for v4l2 support
|
* tegracam_v4l2 - tegra camera framework for v4l2 support
|
||||||
*
|
|
||||||
* Copyright (c) 2018-2022, NVIDIA CORPORATION. All rights reserved.
|
|
||||||
*/
|
*/
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <media/tegra-v4l2-camera.h>
|
#include <media/tegra-v4l2-camera.h>
|
||||||
@@ -112,6 +111,21 @@ static int v4l2sd_g_input_status(struct v4l2_subdev *sd, u32 *status)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cam_g_frame_interval(struct v4l2_subdev *sd,
|
||||||
|
struct v4l2_subdev_state *sd_state,
|
||||||
|
struct v4l2_subdev_frame_interval *ival)
|
||||||
|
{
|
||||||
|
struct i2c_client *client = v4l2_get_subdevdata(sd);
|
||||||
|
struct camera_common_data *s_data = to_camera_common_data(&client->dev);
|
||||||
|
|
||||||
|
if (!s_data)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
ival->interval.denominator = s_data->frmfmt[s_data->mode_prop_idx].framerates[0];
|
||||||
|
ival->interval.numerator = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct v4l2_subdev_video_ops v4l2sd_video_ops = {
|
static struct v4l2_subdev_video_ops v4l2sd_video_ops = {
|
||||||
.s_stream = v4l2sd_stream,
|
.s_stream = v4l2sd_stream,
|
||||||
.g_input_status = v4l2sd_g_input_status,
|
.g_input_status = v4l2sd_g_input_status,
|
||||||
|
|||||||
@@ -2347,10 +2347,34 @@ static long tegra_channel_default_ioctl(struct file *file, void *fh,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Implemented vidioc_s_parm and vidioc_g_parm ioctl to support multiple frame
|
||||||
|
* rates.
|
||||||
|
*/
|
||||||
|
static int tegra_channel_s_parm(struct file *file, void *fh,
|
||||||
|
struct v4l2_streamparm *a)
|
||||||
|
{
|
||||||
|
struct tegra_channel *chan = video_drvdata(file);
|
||||||
|
struct v4l2_subdev *sd = chan->subdev_on_csi;
|
||||||
|
|
||||||
|
return v4l2_s_parm_cap(chan->video, sd, a);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tegra_channel_g_parm(struct file *file, void *fh,
|
||||||
|
struct v4l2_streamparm *a)
|
||||||
|
{
|
||||||
|
struct tegra_channel *chan = video_drvdata(file);
|
||||||
|
struct v4l2_subdev *sd = chan->subdev_on_csi;
|
||||||
|
|
||||||
|
return v4l2_g_parm_cap(chan->video, sd, a);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct v4l2_ioctl_ops tegra_channel_ioctl_ops = {
|
static const struct v4l2_ioctl_ops tegra_channel_ioctl_ops = {
|
||||||
.vidioc_querycap = tegra_channel_querycap,
|
.vidioc_querycap = tegra_channel_querycap,
|
||||||
.vidioc_enum_framesizes = tegra_channel_enum_framesizes,
|
.vidioc_enum_framesizes = tegra_channel_enum_framesizes,
|
||||||
.vidioc_enum_frameintervals = tegra_channel_enum_frameintervals,
|
.vidioc_enum_frameintervals = tegra_channel_enum_frameintervals,
|
||||||
|
.vidioc_s_parm = tegra_channel_s_parm,
|
||||||
|
.vidioc_g_parm = tegra_channel_g_parm,
|
||||||
.vidioc_enum_fmt_vid_cap = tegra_channel_enum_format,
|
.vidioc_enum_fmt_vid_cap = tegra_channel_enum_format,
|
||||||
.vidioc_g_fmt_vid_cap = tegra_channel_get_format,
|
.vidioc_g_fmt_vid_cap = tegra_channel_get_format,
|
||||||
.vidioc_s_fmt_vid_cap = tegra_channel_set_format,
|
.vidioc_s_fmt_vid_cap = tegra_channel_set_format,
|
||||||
|
|||||||
Reference in New Issue
Block a user