forked from rrcarlosr/Jetpack
833 lines
17 KiB
C
833 lines
17 KiB
C
/*
|
|
* imx274.c - imx274 sensor driver
|
|
*
|
|
* Copyright (c) 2016-2019, 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/>.
|
|
*/
|
|
|
|
#ifndef __IMX274_I2C_TABLES__
|
|
#define __IMX274_I2C_TABLES__
|
|
|
|
#include <media/camera_common.h>
|
|
|
|
|
|
#define IMX274_TABLE_WAIT_MS 0
|
|
#define IMX274_TABLE_END 1
|
|
#define IMX274_WAIT_MS 1
|
|
#define IMX274_WAIT_MS_START 15
|
|
|
|
#define ENABLE_EXTRA_MODES 0
|
|
|
|
#define imx274_reg struct reg_8
|
|
|
|
static const imx274_reg imx274_start[] = {
|
|
{0x3000, 0x00}, /* mode select streaming on */
|
|
{0x303E, 0x02},
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS_START},
|
|
{0x30F4, 0x00},
|
|
{0x3018, 0xA2},
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS_START},
|
|
{IMX274_TABLE_END, 0x00}
|
|
};
|
|
|
|
static const imx274_reg imx274_stop[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x01}, /* mode select streaming off */
|
|
{IMX274_TABLE_END, 0x00}
|
|
};
|
|
|
|
static const imx274_reg tp_colorbars[] = {
|
|
/* test pattern */
|
|
{0x303C, 0x11},
|
|
{0x303D, 0x0B},
|
|
{0x370B, 0x11},
|
|
{0x370E, 0x00},
|
|
{0x377F, 0x01},
|
|
{0x3781, 0x01},
|
|
{IMX274_TABLE_END, 0x00}
|
|
};
|
|
|
|
|
|
/* Mode 1 : 3840X2160 10 bits 30fps*/
|
|
static const imx274_reg mode_3840X2160[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12}, /* mode select streaming on */
|
|
/* input freq. 24M */
|
|
{0x3120, 0xF0},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9c},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3306, 0x32},
|
|
{0x3590, 0x32},
|
|
{0x3686, 0x32},
|
|
/* resolution */
|
|
{0x30E2, 0x01},
|
|
{0x30F6, 0x07},
|
|
{0x30F7, 0x01},
|
|
{0x30F8, 0xC6},
|
|
{0x30F9, 0x11},
|
|
{0x3130, 0x78}, /*WRITE_VSIZE*/
|
|
{0x3131, 0x08},
|
|
{0x3132, 0x70}, /*Y_OUT_SIZE*/
|
|
{0x3133, 0x08},
|
|
|
|
/* crop */
|
|
{0x30DD, 0x01}, /*VWIDCUTEN*/
|
|
{0x30DE, 0x04}, /*VWIDCUT*/
|
|
{0x30E0, 0x03}, /*VWINCUTPOS*/
|
|
{0x3037, 0x01}, /*HTRIMMING_EN*/
|
|
{0x3038, 0x0C}, /*HTRIMMING_START*/
|
|
{0x3039, 0x00},
|
|
{0x303A, 0x0C}, /*HTRIMMING_END*/
|
|
{0x303B, 0x0F},
|
|
|
|
/* mode setting */
|
|
{0x3004, 0x01},
|
|
{0x3005, 0x01},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0xA2},
|
|
{0x300C, 0x0C}, /* SHR: Minimum 12 */
|
|
{0x300D, 0x00},
|
|
{0x300E, 0x01},
|
|
{0x3019, 0x00},
|
|
{0x3A41, 0x08},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x16},
|
|
{0x3345, 0x00},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x1F},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x1A},
|
|
{0x366C, 0x19},
|
|
{0x366D, 0x17},
|
|
{0x33A6, 0x01},
|
|
{0x306B, 0x05},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
/* Mode 1 : 3840X2160 10 bits 60fps*/
|
|
static const imx274_reg mode_3840X2160_60fps_4lane[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12}, /* mode select streaming on */
|
|
/* input freq. 24M */
|
|
{0x3120, 0xF0},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9c},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3306, 0x32},
|
|
{0x3590, 0x32},
|
|
{0x3686, 0x32},
|
|
/* resolution */
|
|
{0x30E2, 0x01},
|
|
{0x30F6, 0x07},
|
|
{0x30F7, 0x01},
|
|
// {0x30F6, 0x0e}, // HMAX , 263
|
|
// {0x30F7, 0x02}, // HMAX
|
|
{0x30F8, 0xC6},
|
|
{0x30F9, 0x11},
|
|
{0x3130, 0x78}, /*WRITE_VSIZE*/
|
|
{0x3131, 0x08},
|
|
{0x3132, 0x70}, /*Y_OUT_SIZE*/
|
|
{0x3133, 0x08},
|
|
|
|
/* crop */
|
|
{0x30DD, 0x01}, /*VWIDCUTEN*/
|
|
{0x30DE, 0x04}, /*VWIDCUT*/
|
|
{0x30E0, 0x03}, /*VWINCUTPOS*/
|
|
{0x3037, 0x01}, /*HTRIMMING_EN*/
|
|
{0x3038, 0x0C}, /*HTRIMMING_START*/
|
|
{0x3039, 0x00},
|
|
{0x303A, 0x0C}, /*HTRIMMING_END*/
|
|
{0x303B, 0x0F},
|
|
|
|
/* mode setting */
|
|
{0x3004, 0x01},
|
|
{0x3005, 0x01},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0x02},
|
|
{0x300C, 0x0C}, /* SHR: Minimum 12 */
|
|
{0x300D, 0x00},
|
|
{0x300E, 0x00},
|
|
{0x3019, 0x00},
|
|
{0x3A41, 0x08},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x16},
|
|
{0x3345, 0x00},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x1F},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x1A},
|
|
{0x366C, 0x19},
|
|
{0x366D, 0x17},
|
|
{0x33A6, 0x01},
|
|
{0x306B, 0x05},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
/* Mode 1 : 3840X2160 10 bits 60fps*/
|
|
static const imx274_reg mode_3840X2160_60fps_2lane[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12}, /* mode select streaming on */
|
|
/* input freq. 24M */
|
|
{0x3120, 0xF0},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9c},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3306, 0x32},
|
|
{0x3590, 0x32},
|
|
{0x3686, 0x32},
|
|
/* resolution */
|
|
{0x30E2, 0x01},
|
|
// {0x30F6, 0x07},
|
|
// {0x30F7, 0x01},
|
|
{0x30F6, 0x0e}, // HMAX , 263
|
|
{0x30F7, 0x02}, // HMAX
|
|
{0x30F8, 0xC6},
|
|
{0x30F9, 0x11},
|
|
{0x3130, 0x78}, /*WRITE_VSIZE*/
|
|
{0x3131, 0x08},
|
|
{0x3132, 0x70}, /*Y_OUT_SIZE*/
|
|
{0x3133, 0x08},
|
|
|
|
/* crop */
|
|
{0x30DD, 0x01}, /*VWIDCUTEN*/
|
|
{0x30DE, 0x04}, /*VWIDCUT*/
|
|
{0x30E0, 0x03}, /*VWINCUTPOS*/
|
|
{0x3037, 0x01}, /*HTRIMMING_EN*/
|
|
{0x3038, 0x0C}, /*HTRIMMING_START*/
|
|
{0x3039, 0x00},
|
|
{0x303A, 0x0C}, /*HTRIMMING_END*/
|
|
{0x303B, 0x0F},
|
|
|
|
/* mode setting */
|
|
{0x3004, 0x01},
|
|
{0x3005, 0x01},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0x02},
|
|
{0x300C, 0x0C}, /* SHR: Minimum 12 */
|
|
{0x300D, 0x00},
|
|
{0x300E, 0x00},
|
|
{0x3019, 0x00},
|
|
{0x3A41, 0x08},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x16},
|
|
{0x3345, 0x00},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x1F},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x1A},
|
|
{0x366C, 0x19},
|
|
{0x366D, 0x17},
|
|
{0x33A6, 0x01},
|
|
{0x306B, 0x05},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
/* Mode1(DOL): 3840x2160 10 bits 30fps DOL-HDR
|
|
* Active H: LI (4) + Left margin (12) + 3840 = 3856
|
|
* Active V: [OB (8) + 2166 + VBP (50)] * 2 exposures = 4448
|
|
*/
|
|
static imx274_reg mode_3840X2160_dol_30fps[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12},
|
|
/*MCLK 24MHz */
|
|
{0x3120, 0xF0},
|
|
{0x3121, 0x00},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9C},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x331D, 0x00},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3305, 0x00},
|
|
{0x3306, 0x32},
|
|
{0x3307, 0x00},
|
|
{0x3590, 0x32},
|
|
{0x3391, 0x00},
|
|
{0x3686, 0x32},
|
|
{0x3687, 0x00},
|
|
|
|
/*Mode Setting*/
|
|
{0x3004, 0x06},
|
|
{0x3005, 0x01},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0xA2}, /* [7:5] is set to 0x5 to enable VWINPOS cropping. */
|
|
{0x300C, 0x06}, /* SHR: Minimum 6 */
|
|
{0x300D, 0x00},
|
|
{0x300E, 0x00},
|
|
{0x3019, 0x31},
|
|
{0x301A, 0x00},
|
|
{0x302E, 0x06},
|
|
{0x302F, 0x00},
|
|
{0x3030, 0x80},
|
|
{0x3031, 0x01},
|
|
{0x3032, 0x32},
|
|
{0x3033, 0x00},
|
|
{0x3041, 0x31},
|
|
{0x3042, 0x07},
|
|
{0x3043, 0x01},
|
|
{0x306B, 0x05},
|
|
{0x30E2, 0x01},
|
|
{0x30E9, 0x01},
|
|
{0x30F6, 0x1C},
|
|
{0x30F7, 0x04},
|
|
{0x30F8, 0xEC},
|
|
{0x30F9, 0x08},
|
|
{0x30FA, 0x00},
|
|
{0x3037, 0x01},
|
|
{0x3038, 0x00}, /* Note that the 12 "margin" pixels are NOT cropped here. */
|
|
/* They will be cropped by CSI along with LI pixels. */
|
|
/* This is a WAR for CSI cropping alignment requirements. */
|
|
{0x3039, 0x00},
|
|
{0x303A, 0x0C},
|
|
{0x303B, 0x0F},
|
|
{0x30DD, 0x01},
|
|
{0x30DE, 0x04}, /* VWIDCUT: Crop 4 margin rows from the top and bottom. */
|
|
{0x30DF, 0x00},
|
|
{0x30E0, 0x03}, /* VWINPOS: Crop after 6 ignored area rows (VWINPOS * 2) */
|
|
{0x30E1, 0x00},
|
|
{0x3130, 0x7E}, /* WRITE_VSIZE: 2174 = post-crop size (2166) + OB (8) */
|
|
{0x3131, 0x08},
|
|
{0x3132, 0xA8}, /* Y_OUT_SIZE: 2216 = post-crop (2166) + RHS (50) */
|
|
{0x3133, 0x08},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x16},
|
|
{0x3345, 0x00},
|
|
{0x33A6, 0x01},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x1F},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x1A},
|
|
{0x366C, 0x19},
|
|
{0x366D, 0x17},
|
|
{0x3A41, 0x08},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
/* Mode 3(DOL) : 1920x1080 10 bits 60fps DOL-HDR
|
|
* Active H: LI (4) + Left margin (6) + 1920 + Right margin (6) = 1936
|
|
* Active V: [OB (8) + 1086 + VBP (38)] * 2 exposures = 2264
|
|
*/
|
|
static imx274_reg mode_1920X1080_dol_60fps[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12},
|
|
/*MCLK 24MHz */
|
|
{0x3120, 0xF0},
|
|
{0x3121, 0x00},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9C},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x331D, 0x00},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3305, 0x00},
|
|
{0x3306, 0x32},
|
|
{0x3307, 0x00},
|
|
{0x3590, 0x32},
|
|
{0x3391, 0x00},
|
|
{0x3686, 0x32},
|
|
{0x3687, 0x00},
|
|
|
|
/*Mode Setting*/
|
|
{0x3004, 0x07},
|
|
{0x3005, 0x21},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0xB1},
|
|
{0x300C, 0x04}, /* SHR: Minimum 4 */
|
|
{0x300D, 0x00},
|
|
{0x300E, 0x00},
|
|
{0x3019, 0x31},
|
|
{0x301A, 0x00},
|
|
{0x302E, 0x06},
|
|
{0x302F, 0x00},
|
|
{0x3030, 0x10},
|
|
{0x3031, 0x00},
|
|
{0x3032, 0x26},
|
|
{0x3033, 0x00},
|
|
{0x3041, 0x31},
|
|
{0x3042, 0x04},
|
|
{0x3043, 0x01},
|
|
{0x306B, 0x05},
|
|
{0x30E2, 0x02},
|
|
{0x30E9, 0x01},
|
|
{0x30F6, 0x1C}, /* HMAX */
|
|
{0x30F7, 0x04},
|
|
{0x30F8, 0x83},
|
|
{0x30F9, 0x04},
|
|
{0x30FA, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x30DD, 0x01},
|
|
{0x30DE, 0x04}, /* VWIDCUT */
|
|
{0x30DF, 0x00},
|
|
{0x30E0, 0x03}, /* VWINPOS */
|
|
{0x30E1, 0x00},
|
|
{0x3037, 0x01},
|
|
{0x3038, 0x00}, /* HTRIM (6 left and 6 right margin pixels output) */
|
|
{0x3039, 0x00},
|
|
{0x303A, 0x18},
|
|
{0x303B, 0x0F},
|
|
{0x3130, 0x46}, /* WRITE_VSIZE: 1094 = post-crop size (1086) + OB (8)*/
|
|
{0x3131, 0x04},
|
|
{0x3132, 0x64}, /* Y_OUT_SIZE: 1124 = post-crop (1086) + RHS1 (38)*/
|
|
{0x3133, 0x04},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x1A},
|
|
{0x3345, 0x00},
|
|
{0x33A6, 0x01},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x00},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x1A},
|
|
{0x366C, 0x19},
|
|
{0x366D, 0x17},
|
|
{0x3A41, 0x08},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
/* Mode 3 : 1920X1080 10 bits 60fps*/
|
|
static imx274_reg mode_1920X1080[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12}, /* mode select streaming on */
|
|
/* input freq. 24M */
|
|
{0x3120, 0xF0},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9c},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3306, 0x32},
|
|
{0x3590, 0x32},
|
|
{0x3686, 0x32},
|
|
/* resolution */
|
|
{0x30E2, 0x02},
|
|
{0x30F6, 0x04},
|
|
{0x30F7, 0x01},
|
|
{0x30F8, 0x0C},
|
|
{0x30F9, 0x12},
|
|
{0x3130, 0x40},
|
|
{0x3131, 0x04},
|
|
{0x3132, 0x38},
|
|
{0x3133, 0x04},
|
|
|
|
/* crop */
|
|
{0x30DD, 0x01},
|
|
{0x30DE, 0x07},
|
|
{0x30DF, 0x00},
|
|
{0x30E0, 0x04},
|
|
{0x30E1, 0x00},
|
|
{0x3037, 0x01},
|
|
{0x3038, 0x0C},
|
|
{0x3039, 0x00},
|
|
{0x303A, 0x0C},
|
|
{0x303B, 0x0F},
|
|
|
|
/* mode setting */
|
|
{0x3004, 0x02},
|
|
{0x3005, 0x21},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0xB1},
|
|
{0x300C, 0x08}, /* SHR: Minimum 8 */
|
|
{0x300D, 0x00},
|
|
{0x3019, 0x00},
|
|
{0x3A41, 0x08},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x1A},
|
|
{0x3345, 0x00},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x00},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x1A},
|
|
{0x366C, 0x19},
|
|
{0x366D, 0x17},
|
|
{0x33A6, 0x01},
|
|
{0x306B, 0x05},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
/* Mode 5 : 1288X546 10 bits 240fps*/
|
|
static const imx274_reg mode_1288x546[] = {
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{0x3000, 0x12}, /* mode select streaming on */
|
|
/* input freq. 24M */
|
|
{0x3120, 0xF0},
|
|
{0x3122, 0x02},
|
|
{0x3129, 0x9c},
|
|
{0x312A, 0x02},
|
|
{0x312D, 0x02},
|
|
|
|
{0x310B, 0x00},
|
|
{0x304C, 0x00},
|
|
{0x304D, 0x03},
|
|
{0x331C, 0x1A},
|
|
{0x3502, 0x02},
|
|
{0x3529, 0x0E},
|
|
{0x352A, 0x0E},
|
|
{0x352B, 0x0E},
|
|
{0x3538, 0x0E},
|
|
{0x3539, 0x0E},
|
|
{0x3553, 0x00},
|
|
{0x357D, 0x05},
|
|
{0x357F, 0x05},
|
|
{0x3581, 0x04},
|
|
{0x3583, 0x76},
|
|
{0x3587, 0x01},
|
|
{0x35BB, 0x0E},
|
|
{0x35BC, 0x0E},
|
|
{0x35BD, 0x0E},
|
|
{0x35BE, 0x0E},
|
|
{0x35BF, 0x0E},
|
|
{0x366E, 0x00},
|
|
{0x366F, 0x00},
|
|
{0x3670, 0x00},
|
|
{0x3671, 0x00},
|
|
{0x30EE, 0x01},
|
|
{0x3304, 0x32},
|
|
{0x3306, 0x32},
|
|
{0x3590, 0x32},
|
|
{0x3686, 0x32},
|
|
/* resolution */
|
|
{0x30E2, 0x04},
|
|
{0x30F6, 0x04}, /* HMAX 260 */
|
|
{0x30F7, 0x01}, /* HMAX */
|
|
{0x30F8, 0x83}, /* VMAX 1155 */
|
|
{0x30F9, 0x04}, /* VMAX */
|
|
{0x30FA, 0x00}, /* VMAX */
|
|
{0x3130, 0x26},
|
|
{0x3131, 0x02},
|
|
{0x3132, 0x22},
|
|
{0x3133, 0x02},
|
|
/* mode setting */
|
|
{0x3004, 0x04},
|
|
{0x3005, 0x31},
|
|
{0x3006, 0x00},
|
|
{0x3007, 0x02},
|
|
{0x300C, 0x04}, /* SHR: Minimum 4 */
|
|
{0x300D, 0x00},
|
|
{0x3019, 0x00},
|
|
{0x3A41, 0x04},
|
|
{0x3342, 0x0A},
|
|
{0x3343, 0x00},
|
|
{0x3344, 0x1A},
|
|
{0x3345, 0x00},
|
|
{0x3528, 0x0E},
|
|
{0x3554, 0x00},
|
|
{0x3555, 0x01},
|
|
{0x3556, 0x01},
|
|
{0x3557, 0x01},
|
|
{0x3558, 0x01},
|
|
{0x3559, 0x00},
|
|
{0x355A, 0x00},
|
|
{0x35BA, 0x0E},
|
|
{0x366A, 0x1B},
|
|
{0x366B, 0x19},
|
|
{0x366C, 0x17},
|
|
{0x366D, 0x17},
|
|
{0x33A6, 0x01},
|
|
{0x306B, 0x05},
|
|
|
|
{IMX274_TABLE_WAIT_MS, IMX274_WAIT_MS},
|
|
{IMX274_TABLE_END, 0x0000}
|
|
};
|
|
|
|
static const imx274_reg imx274_2_lane_conf[] = {
|
|
{0x312E, 0x01},
|
|
{0x3AA2, 0x01},
|
|
{IMX274_TABLE_END, 0x00}
|
|
};
|
|
|
|
enum {
|
|
IMX274_MODE_3840X2160,
|
|
IMX274_MODE_1920X1080,
|
|
IMX274_MODE_3840X2160_DOL_30FPS,
|
|
IMX274_MODE_1920X1080_DOL_60FPS,
|
|
IMX274_MODE_1288X546,
|
|
IMX274_MODE_START_STREAM,
|
|
IMX274_MODE_STOP_STREAM,
|
|
IMX274_MODE_TEST_PATTERN,
|
|
IMX274_MODE_2_LANE,
|
|
};
|
|
|
|
static const imx274_reg *mode_table[] = {
|
|
[IMX274_MODE_3840X2160] = mode_3840X2160_60fps_2lane,
|
|
[IMX274_MODE_1920X1080] = mode_1920X1080,
|
|
[IMX274_MODE_3840X2160_DOL_30FPS] = mode_3840X2160_dol_30fps,
|
|
[IMX274_MODE_1920X1080_DOL_60FPS] = mode_1920X1080_dol_60fps,
|
|
[IMX274_MODE_1288X546] = mode_1288x546,
|
|
[IMX274_MODE_START_STREAM] = imx274_start,
|
|
[IMX274_MODE_STOP_STREAM] = imx274_stop,
|
|
[IMX274_MODE_TEST_PATTERN] = tp_colorbars,
|
|
[IMX274_MODE_2_LANE] = imx274_2_lane_conf,
|
|
};
|
|
|
|
static const imx274_reg *mode_table_4lane[] = {
|
|
[IMX274_MODE_3840X2160] = mode_3840X2160_60fps_4lane,
|
|
[IMX274_MODE_1920X1080] = mode_1920X1080,
|
|
[IMX274_MODE_3840X2160_DOL_30FPS] = mode_3840X2160_dol_30fps,
|
|
[IMX274_MODE_1920X1080_DOL_60FPS] = mode_1920X1080_dol_60fps,
|
|
[IMX274_MODE_1288X546] = mode_1288x546,
|
|
[IMX274_MODE_START_STREAM] = imx274_start,
|
|
[IMX274_MODE_STOP_STREAM] = imx274_stop,
|
|
[IMX274_MODE_TEST_PATTERN] = tp_colorbars,
|
|
[IMX274_MODE_2_LANE] = imx274_2_lane_conf,
|
|
};
|
|
|
|
static const int imx274_30_fr[] = {
|
|
30,
|
|
};
|
|
|
|
static const int imx274_60_fr[] = {
|
|
60,
|
|
};
|
|
|
|
static const int imx274_240_fr[] = {
|
|
240,
|
|
};
|
|
|
|
static const struct camera_common_frmfmt imx274_frmfmt[] = {
|
|
{{3840, 2160}, imx274_60_fr, 1, 0, IMX274_MODE_3840X2160},
|
|
{{1920, 1080}, imx274_60_fr, 1, 0, IMX274_MODE_1920X1080},
|
|
{{3856, 4448}, imx274_30_fr, 1, 1, IMX274_MODE_3840X2160_DOL_30FPS},
|
|
{{1936, 2264}, imx274_60_fr, 1, 1, IMX274_MODE_1920X1080_DOL_60FPS},
|
|
#if ENABLE_EXTRA_MODES
|
|
{{1288, 546}, imx274_240_fr, 1, 0, IMX274_MODE_1288X546},
|
|
#endif
|
|
};
|
|
#endif /* __IMX274_I2C_TABLES__ */
|