/* * imx318_mode_tbls.h - imx318 sensor mode tables * * Copyright (c) 2017, 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 . */ #ifndef __IMX318_I2C_TABLES__ #define __IMX318_I2C_TABLES__ #include #include #define IMX318_TABLE_WAIT_MS 0 #define IMX318_TABLE_END 1 #define IMX318_MAX_RETRIES 3 #define imx318_reg struct reg_8 static imx318_reg imx318_start[] = { {0x0100, 0x01}, { IMX318_TABLE_END, 0x00 } }; static imx318_reg imx318_stop[] = { {0x0100, 0x00 }, {IMX318_TABLE_END, 0x00 } }; static imx318_reg mode_table_common[] = { /*External Clock Setting*/ {0x0136, 0x18}, {0x0137, 0x00}, /*Global Setting*/ {0x3067, 0x00}, {0x30F0, 0x02}, {0x31C2, 0x00}, {0x41B6, 0x0A}, {0x4600, 0x1B}, {0x46C2, 0x00}, {0x4877, 0x11}, {0x487B, 0x4D}, {0x487F, 0x27}, {0x4883, 0xB4}, {0x4C6F, 0x5E}, {0x5113, 0xF4}, {0x5115, 0xF6}, {0x5125, 0xF4}, {0x5127, 0xF8}, {0x51CF, 0xF4}, {0x51E9, 0xF4}, {0x5483, 0x7A}, {0x5485, 0x7C}, {0x5495, 0x7A}, {0x5497, 0x7F}, {0x5515, 0xC3}, {0x5517, 0xC7}, {0x552B, 0x7A}, {0x5535, 0x7A}, {0x5A35, 0x1B}, {0x5C13, 0x00}, {0x5C5A, 0x01}, {0x5C5B, 0x01}, {0x5D89, 0x81}, {0x5D8B, 0x2C}, {0x5D8D, 0x61}, {0x5D8F, 0xE1}, {0x5D91, 0x4D}, {0x5D93, 0xB4}, {0x5D95, 0x41}, {0x5D97, 0x96}, {0x5D99, 0x37}, {0x5D9B, 0x81}, {0x5D9D, 0x31}, {0x5D9F, 0x71}, {0x5DA1, 0x2B}, {0x5DA3, 0x64}, {0x5DA5, 0x27}, {0x5DA7, 0x5A}, {0x6008, 0x0A}, {0x6009, 0x03}, {0x613A, 0x05}, {0x613C, 0x23}, {0x613D, 0x0F}, {0x613E, 0xFF}, {0x6142, 0x02}, {0x6143, 0x63}, {0x6144, 0x09}, {0x6145, 0x0B}, {0x6146, 0x24}, {0x6147, 0x30}, {0x6148, 0x90}, {0x6149, 0xB2}, {0x614A, 0x43}, {0x614B, 0x0A}, {0x614C, 0x01}, {0x614D, 0x12}, {0x614E, 0x30}, {0x614F, 0x98}, {0x6150, 0xA2}, {0x6157, 0x1F}, {0x615C, 0x40}, {0x615D, 0x40}, {0x615E, 0x66}, {0x615F, 0xC0}, {0x6160, 0x00}, {0x616C, 0x42}, {0x616D, 0x40}, {0x616E, 0xAC}, {0x616F, 0x4A}, {0x6170, 0x49}, {0x6171, 0x02}, {0x6172, 0xB1}, {0x6173, 0x29}, {0x6176, 0x24}, {0x6177, 0x93}, {0x6178, 0x4B}, {0x6179, 0x45}, {0x617A, 0x48}, {0x617B, 0x14}, {0x617C, 0x26}, {0x617D, 0x94}, {0x617E, 0x5A}, {0x617F, 0x35}, {0x6182, 0x15}, {0x6194, 0xC7}, {0x6195, 0x7E}, {0x6A5F, 0x03}, {0x9002, 0x11}, {0x9200, 0x5D}, {0x9201, 0x49}, {0x9202, 0x5D}, {0x9203, 0x4A}, {0x9204, 0x5D}, {0x9205, 0x4B}, {0x9206, 0x5D}, {0x9207, 0x4D}, {0x9208, 0x5D}, {0x9209, 0x4F}, {0x920A, 0x5D}, {0x920B, 0x51}, {0x920C, 0x5D}, {0x920D, 0x53}, {0x920E, 0x5D}, {0x920F, 0x55}, {0x9210, 0x5D}, {0x9211, 0x57}, {0x9212, 0x5D}, {0x9213, 0x59}, {0x9214, 0x5D}, {0x9215, 0x5B}, {0x9216, 0x5D}, {0x9217, 0x5D}, {0x9218, 0x5D}, {0x9219, 0x5F}, {0x921A, 0x5D}, {0x921B, 0x61}, {0x921C, 0x5D}, {0x921D, 0x63}, {0x921E, 0x5D}, {0x921F, 0x65}, {0x9220, 0x5D}, {0x9221, 0x67}, {0x9300, 0x80}, {0x9301, 0xCD}, {0x9302, 0xFF}, {0x9306, 0x50}, {0x9307, 0x50}, {0x9309, 0x46}, {0x930A, 0x46}, {0x930C, 0x50}, {0x930D, 0x50}, {0x930F, 0x51}, {0x9310, 0x3C}, {0x9312, 0x30}, {0x9313, 0x16}, {0x9324, 0x05}, {0x9327, 0x05}, {0x932A, 0x05}, {0x932D, 0x06}, {0x9330, 0x10}, {0x9331, 0x10}, {0x9332, 0x15}, {0x9333, 0x05}, {0x9334, 0x0C}, {0x9335, 0x10}, {0x9336, 0x05}, {0x9337, 0x0C}, {0x9338, 0x10}, {0x9339, 0x05}, {0x933A, 0x0C}, {0x933B, 0x10}, {0x933C, 0x06}, {0x933D, 0x0C}, {0x933E, 0x10}, {0x933F, 0x1B}, {0x9340, 0x1B}, {0x9341, 0x1B}, {0x9342, 0x1B}, {0x9343, 0x18}, {0x9344, 0x18}, {0x9345, 0x18}, {0x9346, 0x18}, {0xF800, 0xD9}, {0xF801, 0xD9}, {0xF802, 0x41}, {0xF803, 0x00}, {0xF804, 0x55}, {0xF805, 0xE4}, {0xF806, 0xDC}, {0xF807, 0x01}, {0xF808, 0x81}, {0xF809, 0xD1}, {0xF80A, 0x31}, {0xF80B, 0x06}, {0xF80C, 0x00}, {0xF80D, 0xBA}, {0xF80E, 0x70}, {0xF80F, 0x47}, {0xF810, 0xC0}, {0xF811, 0xBA}, {0xF812, 0x70}, {0xF813, 0x47}, /*Load setting*/ {0x3729, 0x01}, /*IMG Quality*/ {IMX318_TABLE_END, 0x00} }; static imx318_reg imx318_cphy_4k_30fps[] = { /*MIPI setting*/ {0x0111, 0x03}, /*CPHY*/ {0x0112, 0x0A}, /*RAW10*/ {0x0113, 0x0A}, /*RAW10*/ {0x0114, 0x02}, /*3 trios*/ {0x0601, 0x00}, /*TPG mode*/ /*Frame Horizontal Clock Count*/ {0x0342, 0x17}, {0x0343, 0xB0}, /*Frame Vertical Clock Count*/ {0x0340, 0x11}, {0x0341, 0x28}, /*Visible Size*/ {0x0344, 0x00}, {0x0345, 0x00}, {0x0346, 0x00}, {0x0347, 0x00}, {0x0348, 0x15}, {0x0349, 0x6F}, {0x034A, 0x10}, {0x034B, 0x0F}, {0x31A2, 0x00}, /*Mode Setting*/ {0x0220, 0x00}, {0x0221, 0x11}, {0x0222, 0x01}, {0x0381, 0x01}, {0x0383, 0x01}, {0x0385, 0x01}, {0x0387, 0x01}, {0x0900, 0x00}, {0x0901, 0x11}, {0x0902, 0x00}, {0x3010, 0x65}, {0x3011, 0x11}, {0x301C, 0x00}, {0x3045, 0x01}, {0x3194, 0x01}, {0x31A0, 0x00}, {0x31A1, 0x00}, {0xD5EC, 0x3A}, {0xD5ED, 0x00}, /*Digital Crop & Scaling*/ {0x0401, 0x00}, {0x0404, 0x00}, {0x0405, 0x10}, {0x0408, 0x00}, {0x0409, 0x00}, {0x040A, 0x00}, {0x040B, 0x00}, {0x040C, 0x15}, {0x040D, 0x70}, {0x040E, 0x10}, {0x040F, 0x10}, /*Output Size Settings*/ {0x034C, 0x15}, /*Horizontal size*/ {0x034D, 0x70}, {0x034E, 0x10}, /*Vertical size*/ {0x034F, 0x10}, {0x4041, 0x00}, /*EMBD LINE SIZE*/ /*Clock setting*/ {0x0301, 0x05}, {0x0303, 0x02}, {0x0305, 0x04}, {0x0306, 0x01}, {0x0307, 0x4D}, {0x0309, 0x08}, {0x030B, 0x01}, {0x030D, 0x04}, {0x030E, 0x01}, {0x030F, 0x3C}, {0x0820, 0x32}, {0x0821, 0xC9}, {0x0822, 0x24}, {0x0823, 0x92}, {0x422F, 0x01}, {0x4230, 0x00}, /*Output Data Select Setting*/ {0x3031, 0x00}, {0x3033, 0x00}, {0x3039, 0x00}, {0x303B, 0x00}, /*EIS setting*/ {0x306C, 0x00}, {0x306E, 0x0D}, {0x306F, 0x56}, {0x6636, 0x00}, {0x6637, 0x14}, {0xCA12, 0x2C}, {0xCA13, 0x2C}, {0xCA14, 0x1C}, {0xCA15, 0x1C}, {0xCA16, 0x06}, {0xCA17, 0x06}, {0xCA18, 0x20}, {0xCA19, 0x20}, {0xCA1A, 0x0C}, {0xCA1B, 0x0C}, {0xCA1C, 0x06}, {0xCA1D, 0x06}, {0xCA66, 0x39}, {0xCA67, 0x39}, {0xCA68, 0x39}, {0xCA69, 0x39}, {0xCA6A, 0x13}, {0xCA6B, 0x13}, {0xCA6C, 0x20}, {0xCA6D, 0x20}, {0xCA6E, 0x20}, {0xCA6F, 0x20}, {0xCA70, 0x10}, {0xCA71, 0x10}, /*GYRO setting*/ {0x30AC, 0x00}, {0x3900, 0x00}, {0x3901, 0x00}, {0x31C3, 0x01}, /*DLC setting*/ {0x3066, 0x00}, /*LSC setting*/ {0x7B63, 0x00}, /*Analog setting*/ {0x56FB, 0x50}, {0x56FF, 0x50}, {0x6174, 0x28}, {0x6175, 0xC2}, {0x9323, 0x0C}, /*Other setting*/ {0x30F1, 0x00}, {0x30F4, 0x01}, {0x30F5, 0x54}, {0x30F6, 0x00}, {0x30F7, 0x14}, {0x30FC, 0x01}, {0x30FD, 0x01}, {0x714E, 0x01}, {0x714D, 0x06}, {0x7152, 0x06}, {0x7156, 0x01}, {0x7155, 0x00}, {0x7159, 0x00}, {0x76A3, 0x06}, {0x76A0, 0x01}, {0x76A5, 0x06}, {0x76A9, 0x00}, {0x76AF, 0x00}, {0x76AC, 0x01}, {0x9303, 0x32}, {0xD00C, 0x0C}, {0x3600, 0x4F}, {0x3601, 0x00}, {0x3602, 0xFA}, {0x3603, 0x3B}, {0x3604, 0xBC}, {0x3605, 0x2F}, {0x3606, 0x96}, {0x3607, 0x28}, {0x3608, 0x7D}, {0x3609, 0x22}, {0x360A, 0x6C}, {0x360B, 0x1E}, {0x360C, 0x5E}, {0x360D, 0x1B}, {0x360E, 0x54}, {0x360F, 0x18}, {0x3610, 0x4B}, /*CIT setting*/ {0x0202, 0x11}, {0x0203, 0x14}, {0x0224, 0x01}, {0x0225, 0xF4}, /*Gain setting*/ {0x0204, 0x00}, {0x0205, 0x00}, {0x020E, 0x01}, {0x020F, 0x00}, {0x0210, 0x01}, {0x0211, 0x00}, {0x0212, 0x01}, {0x0213, 0x00}, {0x0214, 0x01}, {0x0215, 0x00}, {0x0216, 0x00}, {0x0217, 0x00}, {0x0218, 0x01}, {0x0219, 0x00}, {IMX318_TABLE_END, 0x00} }; enum { IMX318_MODE_CPHY_4k_30FPS, IMX318_MODE_COMMON, IMX318_MODE_START_STREAM, IMX318_MODE_STOP_STREAM }; static imx318_reg *mode_table[] = { [IMX318_MODE_CPHY_4k_30FPS] = imx318_cphy_4k_30fps, [IMX318_MODE_COMMON] = mode_table_common, [IMX318_MODE_START_STREAM] = imx318_start, [IMX318_MODE_STOP_STREAM] = imx318_stop }; static const int imx318_30fps[] = { 30, }; /* * WARNING: frmfmt ordering need to match mode definition in * device tree! */ static const struct camera_common_frmfmt imx318_frmfmt[] = { {{5488, 4112}, imx318_30fps, 1, 0, IMX318_MODE_CPHY_4k_30FPS}, /* Add modes with no device tree support after below */ }; #endif /* __IMX318_I2C_TABLES__ */