mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 09:11:26 +03:00
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 <jerchang@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3490068 Reviewed-by: Bibek Basu <bbasu@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: Ankur Pawar <ankurp@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
9dc6ab65c2
commit
ac523e2cad
@@ -1,7 +1,7 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* 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__
|
#ifndef __IMX477_I2C_TABLES__
|
||||||
@@ -575,249 +575,9 @@ static const imx477_reg imx477_mode_1920x1080_60fps[] = {
|
|||||||
{IMX477_TABLE_END, 0x0000}
|
{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 {
|
enum {
|
||||||
IMX477_MODE_3840x2160_30FPS,
|
IMX477_MODE_3840x2160_30FPS,
|
||||||
IMX477_MODE_1920x1080_60FPS,
|
IMX477_MODE_1920x1080_60FPS,
|
||||||
IMX477_MODE_3840x2160_30FPS_4LANE,
|
|
||||||
IMX477_MODE_1920x1080_60FPS_4LANE,
|
|
||||||
IMX477_MODE_COMMON,
|
IMX477_MODE_COMMON,
|
||||||
IMX477_START_STREAM,
|
IMX477_START_STREAM,
|
||||||
IMX477_STOP_STREAM,
|
IMX477_STOP_STREAM,
|
||||||
@@ -826,8 +586,6 @@ enum {
|
|||||||
static const imx477_reg *mode_table[] = {
|
static const imx477_reg *mode_table[] = {
|
||||||
[IMX477_MODE_3840x2160_30FPS] = imx477_mode_3840x2160_30fps,
|
[IMX477_MODE_3840x2160_30FPS] = imx477_mode_3840x2160_30fps,
|
||||||
[IMX477_MODE_1920x1080_60FPS] = imx477_mode_1920x1080_60fps,
|
[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_MODE_COMMON] = imx477_mode_common,
|
||||||
[IMX477_START_STREAM] = imx477_start,
|
[IMX477_START_STREAM] = imx477_start,
|
||||||
[IMX477_STOP_STREAM] = imx477_stop,
|
[IMX477_STOP_STREAM] = imx477_stop,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// 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.
|
* Copyright (c) 2020, RidgeRun. All rights reserved.
|
||||||
*
|
*
|
||||||
@@ -42,11 +42,6 @@ static const u32 ctrl_cid_list[] = {
|
|||||||
TEGRA_CAMERA_CID_SENSOR_MODE_ID,
|
TEGRA_CAMERA_CID_SENSOR_MODE_ID,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum imx477_Config {
|
|
||||||
TWO_LANE_CONFIG,
|
|
||||||
FOUR_LANE_CONFIG,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct imx477 {
|
struct imx477 {
|
||||||
struct i2c_client *i2c_client;
|
struct i2c_client *i2c_client;
|
||||||
struct v4l2_subdev *subdev;
|
struct v4l2_subdev *subdev;
|
||||||
@@ -54,7 +49,6 @@ struct imx477 {
|
|||||||
u32 frame_length;
|
u32 frame_length;
|
||||||
struct camera_common_data *s_data;
|
struct camera_common_data *s_data;
|
||||||
struct tegracam_device *tc_dev;
|
struct tegracam_device *tc_dev;
|
||||||
enum imx477_Config config;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct regmap_config sensor_regmap_config = {
|
static const struct regmap_config sensor_regmap_config = {
|
||||||
@@ -600,29 +594,13 @@ static int imx477_set_mode(struct tegracam_device *tc_dev)
|
|||||||
struct camera_common_data *s_data = tc_dev->s_data;
|
struct camera_common_data *s_data = tc_dev->s_data;
|
||||||
unsigned int mode_index = 0;
|
unsigned int mode_index = 0;
|
||||||
int err = 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__);
|
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]);
|
err = imx477_write_table(priv, mode_table[IMX477_MODE_COMMON]);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
mode_index = s_data->mode;
|
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)
|
if (err)
|
||||||
|
|||||||
Reference in New Issue
Block a user