From 04b1b44e8168f2a2f1b5123495b0b795049fb47b Mon Sep 17 00:00:00 2001 From: Jon Hunter Date: Wed, 30 Apr 2025 11:36:04 +0100 Subject: [PATCH] media: camera: Use conftest for CSI2 config In Linux v5.18, commit 20c238dfb26c ("media: v4l2-mediabus: Drop legacy V4L2_MBUS_CSI2_*_LANE flags"), commit 5a6ac3f4b46f ("media: v4l2-mediabus: Drop legacy V4L2_MBUS_CSI2_CHANNEL_* flags") and commit b9f7caa7753a ("media: v4l2-mediabus: Drop V4L2_MBUS_CSI2_CONTINUOUS_CLOCK flag") removed various CSI2 flags. Out of these flags we only need to set the number of lanes. The other flags are redundant. The configuration was moved by commit 94d964e58ad6 ("media: v4l2-fwnode: Move bus config structure to v4l2_mediabus.h") to the structure v4l2_mbus_config_mipi_csi2 which itself is under the structure v4l2_fwnode_endpoint. Use conftest to detect if the structure v4l2_mbus_config_mipi_csi2 is present and avoid using kernel version checks. Bug 4425688 Change-Id: Icd597492e48831326c203a6556176ac3767472a3 Signed-off-by: Jon Hunter Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3354475 (cherry picked from commit 2f830334986ee53d45673d1a6b89af77acef94d9) Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3354638 Reviewed-by: Paritosh Dixit GVS: buildbot_gerritrpt Tested-by: Brad Griffis Reviewed-by: Brad Griffis --- .../platform/tegra/camera/camera_common.c | 23 ++++--------------- scripts/conftest/Makefile | 1 + scripts/conftest/conftest.sh | 19 +++++++++++++++ 3 files changed, 24 insertions(+), 19 deletions(-) diff --git a/drivers/media/platform/tegra/camera/camera_common.c b/drivers/media/platform/tegra/camera/camera_common.c index 1a149b1d..a7285bf8 100644 --- a/drivers/media/platform/tegra/camera/camera_common.c +++ b/drivers/media/platform/tegra/camera/camera_common.c @@ -1,20 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -/* - * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +// SPDX-FileCopyrightText: Copyright (c) 2015-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. #include @@ -1052,12 +1037,12 @@ int camera_common_get_mbus_config(struct v4l2_subdev *sd, * then return an error */ cfg->type = V4L2_MBUS_CSI2_DPHY; -#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 18, 0) +#if defined(NV_V4L2_FWNODE_ENDPOINT_STRUCT_HAS_V4L2_MBUS_CONFIG_MIPI_CSI2) /* Linux v5.18 */ + cfg->bus.mipi_csi2.num_data_lanes = 4; +#else cfg->flags = V4L2_MBUS_CSI2_4_LANE | V4L2_MBUS_CSI2_CHANNEL_0 | V4L2_MBUS_CSI2_CONTINUOUS_CLOCK; -#else - cfg->bus.mipi_csi2.num_data_lanes = 4; #endif return 0; diff --git a/scripts/conftest/Makefile b/scripts/conftest/Makefile index 6afc092c..ef6f7d31 100644 --- a/scripts/conftest/Makefile +++ b/scripts/conftest/Makefile @@ -241,6 +241,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_nf_init_has_v4l2_dev_arg NV_CONFTEST_FUNCTION_COMPILE_TESTS += __v4l2_async_nf_add_subdev +NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_fwnode_endpoint_struct_has_v4l2_mbus_config_mipi_csi2 NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_subdev_pad_ops_struct_has_get_set_frame_interval NV_CONFTEST_FUNCTION_COMPILE_TESTS += v4l2_subdev_pad_ops_struct_has_dv_timings NV_CONFTEST_FUNCTION_COMPILE_TESTS += vm_area_struct_has_const_vm_flags diff --git a/scripts/conftest/conftest.sh b/scripts/conftest/conftest.sh index b0346ce9..7ad4ce6c 100755 --- a/scripts/conftest/conftest.sh +++ b/scripts/conftest/conftest.sh @@ -9014,6 +9014,25 @@ compile_test() { compile_check_conftest "$CODE" "NV_V4L2_ASYNC_NF_ADD_SUBDEV_PRESENT" "" "functions" ;; + v4l2_fwnode_endpoint_struct_has_v4l2_mbus_config_mipi_csi2) + # + # Determine if struct 'v4l2_fwnode_endpoint' has a + # 'v4l2_mbus_config_mipi_csi2' member. + # + # Commit 94d964e58ad6 ("media: v4l2-fwnode: Move bus config + # structure to v4l2_mediabus.h") added this in Linux v5.18. + # + CODE=" + #define _LINUX_EFI_H + #include + struct v4l2_mbus_config_mipi_csi2 *conftest(struct v4l2_fwnode_endpoint *endpoint) { + return &endpoint->bus.mipi_csi2; + } + " + compile_check_conftest "$CODE" \ + "NV_V4L2_FWNODE_ENDPOINT_STRUCT_HAS_V4L2_MBUS_CONFIG_MIPI_CSI2" "" "types" + ;; + v4l2_subdev_pad_ops_struct_has_get_set_frame_interval) # # Determine if struct v4l2_subdev_pad_ops has the 'get_frame_interval'