From ac523e2cad9fac415ffb40aae33fce9f994bb2c1 Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Fri, 14 Nov 2025 09:56:12 +0800 Subject: [PATCH] media: i2c: imx477: remove 4-lane config Raspberry PI HQ IMX477 only has 2-lanes for camera cable and connector design, 4-lanes will never work Bug 5331483 Change-Id: I419bb6a4ba2778e1a4b73d1749ec1da263bd3101 Signed-off-by: Jerry Chang Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3490068 Reviewed-by: Bibek Basu GVS: buildbot_gerritrpt Reviewed-by: Ankur Pawar --- drivers/media/i2c/imx477_mode_tbls.h | 246 +-------------------------- drivers/media/i2c/nv_imx477.c | 26 +-- 2 files changed, 4 insertions(+), 268 deletions(-) diff --git a/drivers/media/i2c/imx477_mode_tbls.h b/drivers/media/i2c/imx477_mode_tbls.h index 9ce54e6d..3f1dff36 100644 --- a/drivers/media/i2c/imx477_mode_tbls.h +++ b/drivers/media/i2c/imx477_mode_tbls.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0-only */ +/* SPDX-FileCopyrightText: Copyright (c) 2020-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. */ /* - * Copyright (c) 2020-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * + * imx477_mode_tbls.h - imx477 sensor mode tables */ #ifndef __IMX477_I2C_TABLES__ @@ -575,249 +575,9 @@ static const imx477_reg imx477_mode_1920x1080_60fps[] = { {IMX477_TABLE_END, 0x0000} }; -static const imx477_reg imx477_mode_3840x2160_30fps_4lane[] = { - {0x0112, 0x0A}, - {0x0113, 0x0A}, - {0x0114, 0x03}, - {0x0342, 0x16}, - {0x0343, 0xC8}, - {0x0340, 0x12}, - {0x0341, 0xC0}, - {0x0344, 0x00}, - {0x0345, 0x00}, - {0x0346, 0x01}, - {0x0347, 0xB8}, - {0x0348, 0x0F}, - {0x0349, 0xD7}, - {0x034A, 0x0A}, - {0x034B, 0x27}, - {0x00E3, 0x00}, - {0x00E4, 0x00}, - {0x00FC, 0x0A}, - {0x00FD, 0x0A}, - {0x00FE, 0x0A}, - {0x00FF, 0x0A}, - {0x0E13, 0x00}, - {0x0220, 0x00}, - {0x0221, 0x11}, - {0x0381, 0x01}, - {0x0383, 0x01}, - {0x0385, 0x01}, - {0x0387, 0x01}, - {0x0900, 0x00}, - {0x0901, 0x11}, - {0x0902, 0x02}, - {0x3140, 0x02}, - {0x3C00, 0x00}, - {0x3C01, 0x03}, - {0x3C02, 0xDC}, - {0x3F0D, 0x00}, - {0x5748, 0x07}, - {0x5749, 0xFF}, - {0x574A, 0x00}, - {0x574B, 0x00}, - {0x7B75, 0x0E}, - {0x7B76, 0x09}, - {0x7B77, 0x0C}, - {0x7B78, 0x06}, - {0x7B79, 0x3B}, - {0x7B53, 0x01}, - {0x9369, 0x5A}, - {0x936B, 0x55}, - {0x936D, 0x28}, - {0x9304, 0x03}, - {0x9305, 0x00}, - {0x9E9A, 0x2F}, - {0x9E9B, 0x2F}, - {0x9E9C, 0x2F}, - {0x9E9D, 0x00}, - {0x9E9E, 0x00}, - {0x9E9F, 0x00}, - {0xA2A9, 0x60}, - {0xA2B7, 0x00}, - {0x0401, 0x00}, - {0x0404, 0x00}, - {0x0405, 0x10}, - {0x0408, 0x00}, - {0x0409, 0x6C}, - {0x040A, 0x00}, - {0x040B, 0x00}, - {0x040C, 0x0F}, - {0x040D, 0x00}, - {0x040E, 0x08}, - {0x040F, 0x70}, - {0x034C, 0x0F}, - {0x034D, 0x00}, - {0x034E, 0x08}, - {0x034F, 0x70}, - {0x0301, 0x05}, - {0x0303, 0x02}, - {0x0305, 0x02}, - {0x0306, 0x00}, - {0x0307, 0xAF}, - {0x0309, 0x0A}, - {0x030B, 0x01}, - {0x030D, 0x02}, - {0x030E, 0x00}, - {0x030F, 0x7D}, - {0x0310, 0x01}, - {0x0820, 0x17}, - {0x0821, 0x70}, - {0x0822, 0x00}, - {0x0823, 0x00}, - {0x080A, 0x00}, - {0x080B, 0x97}, - {0x080C, 0x00}, - {0x080D, 0x5F}, - {0x080E, 0x00}, - {0x080F, 0x9F}, - {0x0810, 0x00}, - {0x0811, 0x6F}, - {0x0812, 0x00}, - {0x0813, 0x6F}, - {0x0814, 0x00}, - {0x0815, 0x57}, - {0x0816, 0x01}, - {0x0817, 0x87}, - {0x0818, 0x00}, - {0x0819, 0x4F}, - {0xE04C, 0x00}, - {0xE04D, 0x9F}, - {0xE04E, 0x00}, - {0xE04F, 0x1F}, - {0x3E20, 0x01}, - {0x3E37, 0x00}, - {0x3F50, 0x00}, - {0x3F56, 0x00}, - {0x3F57, 0xA7}, - {IMX477_TABLE_WAIT_MS, IMX477_WAIT_MS}, - {IMX477_TABLE_END, 0x0000} -}; - -static const imx477_reg imx477_mode_1920x1080_60fps_4lane[] = { - {0x0112, 0x0A}, - {0x0113, 0x0A}, - {0x0114, 0x03}, - {0x0342, 0x0C}, - {0x0343, 0x04}, - {0x0340, 0x11}, - {0x0341, 0xC6}, - {0x0344, 0x00}, - {0x0345, 0x00}, - {0x0346, 0x01}, - {0x0347, 0xB8}, - {0x0348, 0x0F}, - {0x0349, 0xD7}, - {0x034A, 0x0A}, - {0x034B, 0x27}, - {0x00E3, 0x00}, - {0x00E4, 0x00}, - {0x00FC, 0x0A}, - {0x00FD, 0x0A}, - {0x00FE, 0x0A}, - {0x00FF, 0x0A}, - {0x0220, 0x00}, - {0x0221, 0x11}, - {0x0381, 0x01}, - {0x0383, 0x01}, - {0x0385, 0x01}, - {0x0387, 0x01}, - {0x0900, 0x01}, - {0x0901, 0x22}, - {0x0902, 0x02}, - {0x3140, 0x02}, - {0x3C00, 0x00}, - {0x3C01, 0x01}, - {0x3C02, 0x9C}, - {0x3F0D, 0x00}, - {0x5748, 0x00}, - {0x5749, 0x00}, - {0x574A, 0x00}, - {0x574B, 0xA4}, - {0x7B75, 0x0E}, - {0x7B76, 0x09}, - {0x7B77, 0x08}, - {0x7B78, 0x06}, - {0x7B79, 0x34}, - {0x7B53, 0x00}, - {0x9369, 0x73}, - {0x936B, 0x64}, - {0x936D, 0x5F}, - {0x9304, 0x03}, - {0x9305, 0x80}, - {0x9E9A, 0x2F}, - {0x9E9B, 0x2F}, - {0x9E9C, 0x2F}, - {0x9E9D, 0x00}, - {0x9E9E, 0x00}, - {0x9E9F, 0x00}, - {0xA2A9, 0x27}, - {0xA2B7, 0x03}, - {0x0401, 0x00}, - {0x0404, 0x00}, - {0x0405, 0x10}, - {0x0408, 0x00}, - {0x0409, 0x36}, - {0x040A, 0x00}, - {0x040B, 0x00}, - {0x040C, 0x07}, - {0x040D, 0x80}, - {0x040E, 0x04}, - {0x040F, 0x38}, - {0x034C, 0x07}, - {0x034D, 0x80}, - {0x034E, 0x04}, - {0x034F, 0x38}, - {0x0301, 0x05}, - {0x0303, 0x02}, - {0x0305, 0x02}, - {0x0306, 0x00}, - {0x0307, 0xAF}, - {0x0309, 0x0A}, - {0x030B, 0x01}, - {0x030D, 0x02}, - {0x030E, 0x00}, - {0x030F, 0x7D}, - {0x0310, 0x01}, - {0x0820, 0x17}, - {0x0821, 0x70}, - {0x0822, 0x00}, - {0x0823, 0x00}, - {0x080A, 0x00}, - {0x080B, 0x97}, - {0x080C, 0x00}, - {0x080D, 0x5F}, - {0x080E, 0x00}, - {0x080F, 0x9F}, - {0x0810, 0x00}, - {0x0811, 0x6F}, - {0x0812, 0x00}, - {0x0813, 0x6F}, - {0x0814, 0x00}, - {0x0815, 0x57}, - {0x0816, 0x01}, - {0x0817, 0x87}, - {0x0818, 0x00}, - {0x0819, 0x4F}, - {0xE04C, 0x00}, - {0xE04D, 0x9F}, - {0xE04E, 0x00}, - {0xE04F, 0x1F}, - {0x3E20, 0x01}, - {0x3E37, 0x00}, - {0x3F50, 0x00}, - {0x3F56, 0x00}, - {0x3F57, 0x58}, - {0X3FF9, 0x01}, - {IMX477_TABLE_WAIT_MS, IMX477_WAIT_MS}, - {IMX477_TABLE_END, 0x0000} -}; - enum { IMX477_MODE_3840x2160_30FPS, IMX477_MODE_1920x1080_60FPS, - IMX477_MODE_3840x2160_30FPS_4LANE, - IMX477_MODE_1920x1080_60FPS_4LANE, IMX477_MODE_COMMON, IMX477_START_STREAM, IMX477_STOP_STREAM, @@ -826,8 +586,6 @@ enum { static const imx477_reg *mode_table[] = { [IMX477_MODE_3840x2160_30FPS] = imx477_mode_3840x2160_30fps, [IMX477_MODE_1920x1080_60FPS] = imx477_mode_1920x1080_60fps, - [IMX477_MODE_3840x2160_30FPS_4LANE] = imx477_mode_3840x2160_30fps_4lane, - [IMX477_MODE_1920x1080_60FPS_4LANE] = imx477_mode_1920x1080_60fps_4lane, [IMX477_MODE_COMMON] = imx477_mode_common, [IMX477_START_STREAM] = imx477_start, [IMX477_STOP_STREAM] = imx477_stop, diff --git a/drivers/media/i2c/nv_imx477.c b/drivers/media/i2c/nv_imx477.c index ded29e4e..405c90a0 100644 --- a/drivers/media/i2c/nv_imx477.c +++ b/drivers/media/i2c/nv_imx477.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0-only -// SPDX-FileCopyrightText: Copyright (c) 2021-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +// SPDX-FileCopyrightText: Copyright (c) 2021-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved. /* * Copyright (c) 2020, RidgeRun. All rights reserved. * @@ -42,11 +42,6 @@ static const u32 ctrl_cid_list[] = { TEGRA_CAMERA_CID_SENSOR_MODE_ID, }; -enum imx477_Config { - TWO_LANE_CONFIG, - FOUR_LANE_CONFIG, -}; - struct imx477 { struct i2c_client *i2c_client; struct v4l2_subdev *subdev; @@ -54,7 +49,6 @@ struct imx477 { u32 frame_length; struct camera_common_data *s_data; struct tegracam_device *tc_dev; - enum imx477_Config config; }; static const struct regmap_config sensor_regmap_config = { @@ -600,30 +594,14 @@ static int imx477_set_mode(struct tegracam_device *tc_dev) struct camera_common_data *s_data = tc_dev->s_data; unsigned int mode_index = 0; int err = 0; - const char *config; - struct device_node *mode; - uint offset = ARRAY_SIZE(imx477_frmfmt); dev_dbg(tc_dev->dev, "%s:\n", __func__); - mode = of_get_child_by_name(tc_dev->dev->of_node, "mode0"); - err = of_property_read_string(mode, "num_lanes", &config); - - if (config[0] == '4') - priv->config = FOUR_LANE_CONFIG; - else if (config[0] == '2') - priv->config = TWO_LANE_CONFIG; - else - dev_err(tc_dev->dev, "Unsupported config\n"); - err = imx477_write_table(priv, mode_table[IMX477_MODE_COMMON]); if (err) return err; mode_index = s_data->mode; - if (priv->config == FOUR_LANE_CONFIG) - err = imx477_write_table(priv, mode_table[mode_index + offset]); - else - err = imx477_write_table(priv, mode_table[mode_index]); + err = imx477_write_table(priv, mode_table[mode_index]); if (err) return err;