202 lines
4.2 KiB
C
202 lines
4.2 KiB
C
/*
|
|
* imx204.c - imx204 sensor driver
|
|
*
|
|
* Copyright (c) 2017-2018, NVIDIA CORPORATION, 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include <media/camera_common.h>
|
|
|
|
#ifndef __IMX204_I2C_TABLES__
|
|
#define __IMX204_I2C_TABLES__
|
|
|
|
#define IMX204_TABLE_WAIT_MS 0xFFFF
|
|
#define IMX204_TABLE_END 0xFFFA
|
|
#define IMX204_TABLE_ENABLE_GTX 0xFFFB
|
|
#define IMX204_MAX_RETRIES 3
|
|
#define IMX204_WAIT_MS 2
|
|
|
|
struct reg_24_8 {
|
|
u32 addr;
|
|
u8 val;
|
|
};
|
|
#define imx204_reg struct reg_24_8
|
|
|
|
static imx204_reg mode_table_common[] = {
|
|
{IMX204_TABLE_END, 0x00},
|
|
};
|
|
|
|
static const imx204_reg imx204_start[] = {
|
|
{IMX204_TABLE_WAIT_MS, 7},
|
|
{0x810000, 0x00},
|
|
{IMX204_TABLE_WAIT_MS, 14},
|
|
{0x810001, 0x18},
|
|
{IMX204_TABLE_END, 0x00},
|
|
};
|
|
|
|
static const imx204_reg imx204_stop[] = {
|
|
{0x810000, 0x01},
|
|
{IMX204_TABLE_WAIT_MS, 7},
|
|
{IMX204_TABLE_END, 0x00},
|
|
};
|
|
|
|
static const imx204_reg tp_colorbars[] = {
|
|
{IMX204_TABLE_END, 0x00},
|
|
};
|
|
|
|
static const imx204_reg mode_5352x3950[] = {
|
|
{0x8100ed, 0x03},
|
|
{0x8100e0, 0x60},
|
|
{0x8100de, 0xaa},
|
|
{0x8100da, 0xff},
|
|
{0x8100db, 0xff},
|
|
|
|
{0x810000, 0x02},
|
|
{0x8102eb, 0x03},
|
|
{0x810063, 0x18},
|
|
{0x810073, 0x1F},
|
|
{0x81021A, 0xFF},
|
|
{0x81021B, 0x01},
|
|
{0x8102D2, 0x00},
|
|
{0x810322, 0x0F},
|
|
{0x810323, 0x00},
|
|
{0x810396, 0x01},
|
|
{0x8103C6, 0x00},
|
|
{0x8103E7, 0x00},
|
|
{0x810414, 0x2C},
|
|
{0x810415, 0x00},
|
|
{0x810416, 0x45},
|
|
{0x810417, 0x00},
|
|
{0x81041C, 0x28},
|
|
{0x81041D, 0x00},
|
|
{0x81041E, 0x30},
|
|
{0x81041F, 0x00},
|
|
{0x810430, 0x41},
|
|
{0x810431, 0x00},
|
|
{0x810432, 0x45},
|
|
{0x810433, 0x00},
|
|
{0x81043C, 0x41},
|
|
{0x81043D, 0x00},
|
|
{0x81043E, 0x44},
|
|
{0x81043F, 0x00},
|
|
{0x810479, 0x5B},
|
|
{0x81047A, 0x00},
|
|
{0x81047B, 0x59},
|
|
{0x81047C, 0x00},
|
|
{0x81047D, 0x53},
|
|
{0x81047E, 0x00},
|
|
{0x81048D, 0x04},
|
|
{0x810490, 0x35},
|
|
{0x810491, 0x00},
|
|
{0x810492, 0x40},
|
|
{0x810493, 0x00},
|
|
{0x810494, 0x35},
|
|
{0x810495, 0x00},
|
|
{0x810496, 0x40},
|
|
{0x810497, 0x00},
|
|
{0x8104A0, 0x44},
|
|
{0x8104A1, 0x00},
|
|
{0x8104A2, 0x41},
|
|
{0x8104A3, 0x00},
|
|
{0x8104A4, 0x33},
|
|
{0x8104A5, 0x00},
|
|
{0x8104A6, 0x33},
|
|
{0x8104A7, 0x00},
|
|
{0x8104B4, 0x48},
|
|
{0x8104B5, 0x00},
|
|
{0x8104D1, 0x44},
|
|
{0x8104D2, 0x00},
|
|
{0x8104D3, 0x42},
|
|
{0x8104D4, 0x00},
|
|
{0x8104D5, 0x48},
|
|
{0x8104D6, 0x00},
|
|
{0x8104E3, 0x44},
|
|
{0x8104E4, 0x00},
|
|
{0x8104E5, 0x41},
|
|
{0x8104E6, 0x00},
|
|
{0x8104E7, 0x33},
|
|
{0x8104E8, 0x00},
|
|
{0x8104E9, 0x33},
|
|
{0x8104EA, 0x00},
|
|
{0x8104F1, 0x44},
|
|
{0x8104F2, 0x00},
|
|
{0x8104F3, 0x42},
|
|
{0x8104F4, 0x00},
|
|
{0x8104F5, 0x48},
|
|
{0x8104F6, 0x00},
|
|
{0x81052C, 0x0F},
|
|
{0x81054F, 0x06},
|
|
{0x810582, 0x04},
|
|
{0x8107CA, 0x3A},
|
|
|
|
{IMX204_TABLE_WAIT_MS, 20},
|
|
{0x8102eb, 0x00},
|
|
|
|
{0x810013, 0x82},
|
|
{0x810113, 0x82},
|
|
{0x810009, 0x00},
|
|
{0x81000a, 0x00},
|
|
{0x810011, 0x03},
|
|
{0x81001a, 0x01},
|
|
|
|
{0x810012, 0x00}, // 2.304G
|
|
|
|
{0x810003, 0x00},
|
|
{0x810004, 0x00},
|
|
{0x810005, 0x01},
|
|
{0x810006, 0x00},
|
|
{0x810007, 0x50},
|
|
{0x810008, 0x00},
|
|
{0x81000d, 0x00}, // SVR
|
|
{0x81000e, 0x00}, // SVR
|
|
{0x81001a, 0x00},
|
|
{0x81001c, 0x00},
|
|
{0x810036, 0x00},
|
|
{0x810062, 0x0a},
|
|
{0x81007e, 0x00},
|
|
{0x81007f, 0x00},
|
|
{0x810103, 0x00},
|
|
{0x810115, 0x01},
|
|
{0x81059d, 0x00},
|
|
{0x8106f8, 0x00},
|
|
{0x8106f8, 0x00},
|
|
{IMX204_TABLE_END, 0x00},
|
|
};
|
|
|
|
enum {
|
|
IMX204_MODE_5352x3950,
|
|
IMX204_MODE_COMMON,
|
|
IMX204_MODE_START_STREAM,
|
|
IMX204_MODE_STOP_STREAM,
|
|
IMX204_MODE_TEST_PATTERN,
|
|
};
|
|
|
|
static const imx204_reg *mode_table[] = {
|
|
[IMX204_MODE_5352x3950] = mode_5352x3950,
|
|
[IMX204_MODE_COMMON] = mode_table_common,
|
|
[IMX204_MODE_START_STREAM] = imx204_start,
|
|
[IMX204_MODE_STOP_STREAM] = imx204_stop,
|
|
[IMX204_MODE_TEST_PATTERN] = tp_colorbars,
|
|
};
|
|
|
|
static const int imx204_60_fr[] = {
|
|
60,
|
|
};
|
|
|
|
static const struct camera_common_frmfmt imx204_frmfmt[] = {
|
|
{{5352, 3950}, imx204_60_fr, 1, 0, IMX204_MODE_5352x3950},
|
|
};
|
|
|
|
#endif /* __IMX204_I2C_TABLES__ */
|