mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
media: camera: Fix build for Linux v6.8
In Linux v6.8, the 'g_frame_interval' function pointer was removed from the 'v4l2_subdev_video_ops' structure and replaced by 'get_frame_interval' that was added to the 'v4l2_subdev_pad_ops' structure. Add a test to conftest to detect if 'get_frame_interval' is supported and update the camera CSI driver accordingly to populate the appropriate function pointer. Note that the new 'get_frame_interval' function pointer has an additional 'state' argument but is otherwise the same as the previous 'g_frame_interval' function pointer. Bug 4448428 Change-Id: Iff049c3bffda11c677ac879b2b91e10deb78060c Signed-off-by: Jon Hunter <jonathanh@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3053901 Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
0356a563b3
commit
a1f59dfc30
@@ -2,9 +2,11 @@
|
|||||||
/*
|
/*
|
||||||
* NVIDIA Tegra CSI Device
|
* NVIDIA Tegra CSI Device
|
||||||
*
|
*
|
||||||
* Copyright (c) 2015-2022, NVIDIA CORPORATION. All rights reserved.
|
* Copyright (c) 2015-2024, NVIDIA CORPORATION. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <nvidia/conftest.h>
|
||||||
|
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/gpio/consumer.h>
|
#include <linux/gpio/consumer.h>
|
||||||
@@ -685,6 +687,9 @@ static int tegra_csi_set_format(struct v4l2_subdev *subdev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int tegra_csi_g_frame_interval(struct v4l2_subdev *sd,
|
static int tegra_csi_g_frame_interval(struct v4l2_subdev *sd,
|
||||||
|
#if defined(NV_V4L2_SUBDEV_PAD_OPS_STRUCT_HAS_GET_FRAME_INTERVAL)
|
||||||
|
struct v4l2_subdev_state *sd_state,
|
||||||
|
#endif
|
||||||
struct v4l2_subdev_frame_interval *vfi)
|
struct v4l2_subdev_frame_interval *vfi)
|
||||||
{
|
{
|
||||||
struct tegra_csi_channel *chan = to_csi_chan(sd);
|
struct tegra_csi_channel *chan = to_csi_chan(sd);
|
||||||
@@ -716,10 +721,15 @@ static int tegra_csi_enum_mbus_code(struct v4l2_subdev *sd,
|
|||||||
static struct v4l2_subdev_video_ops tegra_csi_video_ops = {
|
static struct v4l2_subdev_video_ops tegra_csi_video_ops = {
|
||||||
.s_stream = tegra_csi_s_stream,
|
.s_stream = tegra_csi_s_stream,
|
||||||
.g_input_status = tegra_csi_g_input_status,
|
.g_input_status = tegra_csi_g_input_status,
|
||||||
|
#if !defined(NV_V4L2_SUBDEV_PAD_OPS_STRUCT_HAS_GET_FRAME_INTERVAL)
|
||||||
.g_frame_interval = tegra_csi_g_frame_interval,
|
.g_frame_interval = tegra_csi_g_frame_interval,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct v4l2_subdev_pad_ops tegra_csi_pad_ops = {
|
static struct v4l2_subdev_pad_ops tegra_csi_pad_ops = {
|
||||||
|
#if defined(NV_V4L2_SUBDEV_PAD_OPS_STRUCT_HAS_GET_FRAME_INTERVAL)
|
||||||
|
.get_frame_interval = tegra_csi_g_frame_interval,
|
||||||
|
#endif
|
||||||
.get_fmt = tegra_csi_get_format,
|
.get_fmt = tegra_csi_get_format,
|
||||||
.set_fmt = tegra_csi_set_format,
|
.set_fmt = tegra_csi_set_format,
|
||||||
.enum_mbus_code = tegra_csi_enum_mbus_code,
|
.enum_mbus_code = tegra_csi_enum_mbus_code,
|
||||||
|
|||||||
@@ -167,6 +167,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_async_subdev_nf_init
|
|||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_async_notifier_init
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_async_notifier_init
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_async_nf_init_has_v4l2_dev_arg
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_async_nf_init_has_v4l2_dev_arg
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += __v4l2_async_nf_add_subdev
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += __v4l2_async_nf_add_subdev
|
||||||
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_subdev_pad_ops_struct_has_get_frame_interval
|
||||||
NV_CONFTEST_FUNCTION_COMPILE_TESTS += vm_area_struct_has_const_vm_flags
|
NV_CONFTEST_FUNCTION_COMPILE_TESTS += vm_area_struct_has_const_vm_flags
|
||||||
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_present_drm_gem_prime_fd_to_handle
|
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_present_drm_gem_prime_fd_to_handle
|
||||||
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_present_drm_gem_prime_handle_to_fd
|
NV_CONFTEST_GENERIC_COMPILE_TESTS += is_export_symbol_present_drm_gem_prime_handle_to_fd
|
||||||
|
|||||||
@@ -7757,6 +7757,25 @@ compile_test() {
|
|||||||
compile_check_conftest "$CODE" "NV_V4L2_ASYNC_NF_ADD_SUBDEV_PRESENT" "" "functions"
|
compile_check_conftest "$CODE" "NV_V4L2_ASYNC_NF_ADD_SUBDEV_PRESENT" "" "functions"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
v4l2_subdev_pad_ops_struct_has_get_frame_interval)
|
||||||
|
#
|
||||||
|
# Determine if struct v4l2_subdev_pad_ops has the 'get_frame_interval'
|
||||||
|
# function pointer.
|
||||||
|
#
|
||||||
|
# Added by commit 287fe160834a ("media: v4l2-subdev: Turn
|
||||||
|
# .[gs]_frame_interval into pad operations") in Linux v6.8.
|
||||||
|
#
|
||||||
|
CODE="
|
||||||
|
#define _LINUX_EFI_H
|
||||||
|
#include <media/v4l2-subdev.h>
|
||||||
|
int conftest_v4l2_subdev_pad_ops_struct_has_get_set_frame_interval(void) {
|
||||||
|
return offsetof(struct v4l2_subdev_pad_ops, get_frame_interval);
|
||||||
|
}
|
||||||
|
"
|
||||||
|
compile_check_conftest "$CODE" \
|
||||||
|
"NV_V4L2_SUBDEV_PAD_OPS_STRUCT_HAS_GET_FRAME_INTERVAL" "" "types"
|
||||||
|
;;
|
||||||
|
|
||||||
crypto_engine_ctx_struct_removed_test)
|
crypto_engine_ctx_struct_removed_test)
|
||||||
#
|
#
|
||||||
# Determine if struct 'crypto_engine_ctx' is removed in linux kernel.
|
# Determine if struct 'crypto_engine_ctx' is removed in linux kernel.
|
||||||
|
|||||||
Reference in New Issue
Block a user