/* SPDX-License-Identifier: GPL-2.0 */ /* Copyright (c) 2018-2023, NVIDIA CORPORATION & AFFILIATES. All Rights Reserved. */ /* * ar0234_mode_tbls.h - ar0234 sensor mode tables */ #ifndef __AR0234_I2C_TABLES__ #define __AR0234_I2C_TABLES__ #include #define AR0234_TABLE_WAIT_MS 0xff00 #define AR0234_TABLE_END 0xff01 #define AR0234_MAX_RETRIES 3 #define AR0234_WAIT_MS_STOP 1 #define AR0234_WAIT_MS_START 30 #define AR0234_WAIT_MS_STREAM 210 #define AR0234_GAIN_TABLE_SIZE 255 #define AR0234_EEPROM_ADDRESS 0x54 #define AR0234_EEPROM_ADDRESS_R 0x58 #define AR0234_EEPROM_SIZE 512 #define AR0234_EEPROM_STR_SIZE (AR0234_EEPROM_SIZE * 2) #define AR0234_EEPROM_BLOCK_SIZE (1 << 8) #define AR0234_EEPROM_NUM_BLOCKS \ (AR0234_EEPROM_SIZE / AR0234_EEPROM_BLOCK_SIZE) #define ar0234_reg struct reg_16 struct index_reg_8 { u16 source; u16 addr; u16 val; }; static struct index_reg_8 ar0234_start[] = { {0x06, 0x30ce, 0x0120}, {0x06, 0x301A, 0x295C}, // RESET_REGISTER {0x00, AR0234_TABLE_END, 0x00} }; static struct index_reg_8 ar0234_stop[] = { {0x06, 0x301a, 0x2058}, {0x00, AR0234_TABLE_END, 0x00} }; static struct index_reg_8 ar0234_Double_Dser_Ser[] = { {0x52, 0x1458, 0x28}, {0x52, 0x1459, 0x68}, {0x52, 0x1558, 0x28}, {0x52, 0x1559, 0x68}, {0x52, 0x1658, 0x28}, {0x52, 0x1659, 0x68}, {0x52, 0x1758, 0x28}, {0x52, 0x1759, 0x68}, {0x52, 0x0018, 0x0F}, // Oneshot reset {0x52, 0x0006, 0xF3}, // Enable links A and B {0x52, 0x0001, 0xcc}, // disable the i2c2 {0x52, 0x0003, 0xAE}, // Disable CC to link B {0x80, 0x0000, 0x84}, // Link A serializer address is 0x84 {0x52, 0x0003, 0xAB}, // Disable CC to link A {0x80, 0x0000, 0x88}, // Link B serializer address is 0x88 {0x52, 0x0003, 0xAA}, // Enable CC to links A and B {0x84, 0x0002, 0x33}, // Enable pipes X and Y {0x84, 0x0308, 0x7E}, // Pipe X pulls clock from port A, pipe Y from port B {0x84, 0x0311, 0x21}, // Pipe X pulls data from port A, pipe Y from port B {0x84, 0x0316, 0x6b}, // RAW10 to pipe Y {0x84, 0x0314, 0x6b}, // RAW10 to pipe Y {0x88, 0x0002, 0x33}, // Enable pipes X and Y {0x88, 0x0308, 0x7E}, // Pipe X pulls clock from port A, pipe Y from port B {0x88, 0x0311, 0x21}, // Pipe X pulls data from port A, pipe Y from port B {0x88, 0x0316, 0x6b}, // RAW10 to pipe Y {0x88, 0x0314, 0x6b}, // RAW10 to pipe Y {0x52, 0x00F4, 0x0f}, // Enable pipe 0 {0x52, 0x00F0, 0x10}, // Link A ID 0 to pipe 0 // Link A ID 1 to pipe 1 {0x52, 0x00F1, 0x54}, // Link B ID 0 to pipe 2 // Link B ID 1 to pipe 3 {0x52, 0x08A0, 0x01}, // CSI output is 2x4 {0x52, 0x08A3, 0x44}, // Default 4x2 lane mapping {0x52, 0x08A4, 0x44}, // Default 4x2 lane mapping {0x52, 0x090A, 0x40}, {0x52, 0x094A, 0x40}, // 2 lanes on port D {0x52, 0x098A, 0x40}, // 2 lanes on port E {0x52, 0x09CA, 0x40}, {0x52, 0x1D00, 0xF4}, {0x52, 0x1E00, 0xF4}, {0x52, 0x0415, 0x2E}, {0x52, 0x0418, 0x2E}, // 1400Mbps {0x52, 0x041B, 0x2E}, {0x52, 0x041E, 0x2E}, {0x52, 0x1D00, 0xF5}, {0x52, 0x1E00, 0xF5}, {0x52, 0x090B, 0x07}, // Enable 3 mappings Pipe 0//video2 {0x52, 0x092D, 0x15}, // All mappings to controller 1 (port A) {0x52, 0x090D, 0x2B}, // Input RAW10, VC0 {0x52, 0x090E, 0x2B}, // Output RAW10, VC0 {0x52, 0x090F, 0x00}, // Input FS, VC0 {0x52, 0x0910, 0x00}, // Output FS, VC0 {0x52, 0x0911, 0x01}, // Input FE, VC0 {0x52, 0x0912, 0x01}, // Output FE, VC0 {0x52, 0x094B, 0x07}, // Enable 3 mappings Pipe 1 //video3 {0x52, 0x096D, 0x15}, // All mappings to controller 1 (port A) {0x52, 0x094D, 0x2B}, // Input RAW10, VC0 {0x52, 0x094E, 0x6B}, // Output RAW10, VC1 {0x52, 0x094F, 0x00}, // Input FS, VC0 {0x52, 0x0950, 0x40}, // Output FS, VC1 {0x52, 0x0951, 0x01}, // Input FE, VC0 {0x52, 0x0952, 0x41}, // Output FE, VC1 {0x52, 0x098B, 0x07}, // Enable 3 mappings Pipe 2 //video1 {0x52, 0x09AD, 0x15}, // All mappings to controller 1 (port A) {0x52, 0x098D, 0x2B}, // Input RAW10, VC0 {0x52, 0x098E, 0xaB}, // Output RAW10, VC2 {0x52, 0x098F, 0x00}, // Input FS, VC0 {0x52, 0x0990, 0x80}, // Output FS, VC2 {0x52, 0x0991, 0x01}, // Input FE, VC0 {0x52, 0x0992, 0x81}, // Output FE, VC2 {0x52, 0x09CB, 0x07}, // Enable 3 mappings Pipe 3 //video0 {0x52, 0x09ED, 0x15}, // All mappings to controller 1 (port A) {0x52, 0x09CD, 0x2B}, // Input RAW10, VC0 {0x52, 0x09CE, 0xeB}, // Output RAW10, VC3 {0x52, 0x09CF, 0x00}, // Input FS, VC0 {0x52, 0x09D0, 0xc0}, // Output FS, VC3 {0x52, 0x09D1, 0x01}, // Input FE, VC0 {0x52, 0x09D2, 0xc1}, // Output FE, VC3 {0x52, 0x08A2, 0xF0}, {0x84, 0x02be, 0x90}, // Enable sensor power down pin. {0x84, 0x02bf, 0x60}, // Enable sensor reset pin. {0x84, 0x02ca, 0x80}, // Enable sensor power down pin. {0x84, 0x02cb, 0x60}, // Enable sensor reset pin. {0x84, 0x02d3, 0x90}, // Enable sensor power down pin. {0x84, 0x02d4, 0x60}, // Enable sensor reset pin. {0x84, 0x02d6, 0x90}, // Enable sensor power down pin. {0x84, 0x02d7, 0x60}, // Enable sensor reset pin. {0x88, 0x02be, 0x90}, // Enable sensor power down pin. {0x88, 0x02bf, 0x60}, // Enable sensor reset pin. {0x88, 0x02ca, 0x80}, // Enable sensor power down pin. {0x88, 0x02cb, 0x60}, // Enable sensor reset pin. {0x88, 0x02d3, 0x90}, // Enable sensor power down pin. {0x88, 0x02d4, 0x60}, // Enable sensor reset pin. {0x88, 0x02d6, 0x90}, // Enable sensor power down pin. {0x88, 0x02d7, 0x60}, // Enable sensor reset pin. {0x52, 0x04AF, 0xC0}, // AUTO_FS_LINKS = 0, FS_USE_XTAL = 1, FS_LINK_[3:0] = 0 {0x52, 0x04A0, 0x00}, // Manual frame sync, no pin output {0x52, 0x04A2, 0x00}, // Turn off auto master link selection {0x52, 0x04AA, 0x00}, // OVLP window = 0 {0x52, 0x04AB, 0x00}, {0x52, 0x04A5, 0x35}, // 30Hz FSYNC {0x52, 0x04A6, 0xB7}, {0x52, 0x04A7, 0x0C}, {0x84, 0x02D9, 0x04}, {0x84, 0x02DB, 0x08}, {0x84, 0x02Dc, 0x04}, {0x84, 0x02De, 0x08}, // MFP8 for FSIN {0x88, 0x02D9, 0x04}, {0x88, 0x02DB, 0x08}, {0x88, 0x02Dc, 0x04}, {0x88, 0x02De, 0x08}, // MFP8 for FSIN {0x52, 0x04B1, 0x40}, // FSYNC TX ID is 8 {0x84, 0x0042, 0xB0}, // eeprom i2c map {0x84, 0x0043, 0xA8}, {0x84, 0x0044, 0xB2}, {0x84, 0x0045, 0xAA}, {0x88, 0x0042, 0xB0}, // eeprom i2c map {0x88, 0x0043, 0xA8}, {0x88, 0x0044, 0xB2}, {0x88, 0x0045, 0xAA}, {0x84, 0x02be, 0x83}, // hawk1(0x84) max9295D MFP0-- ACCEL interrupt {0x84, 0x02bf, 0x11}, {0x52, 0x030c, 0x04}, // max96712 MTF4---ACCEL1 interrupt {0x52, 0x030e, 0x11}, // MTF4 {0x84, 0x02c7, 0x83}, // hawk1(0x84)max9295D MFP3-- gyro interrupt {0x84, 0x02c8, 0x12}, {0x52, 0x0320, 0x04}, // max96712 MTF10---gyro1 interrupt {0x52, 0x0322, 0x12}, // MTF10 // Disable output, enable TX hawk2(0x88) max9295D MFP0-- ACCEL interrupt {0x88, 0x02BE, 0x03}, {0x88, 0x02BF, 0x00}, // No pull-up/down, TX ID = 0 {0x52, 0x0310, 0x00}, // Enable output max96712 MTF5---ACCEL2 interrupt {0x52, 0x0347, 0x05}, // Disable TX on link B {0x52, 0x0348, 0x60}, // Enable RX on link B, RX ID = 0 {0x88, 0x02c7, 0x03}, // hawk2(0x88)max9295D MFP3-- gyro interrupt {0x88, 0x02c8, 0x15}, {0x52, 0x0313, 0x00}, {0x52, 0x034A, 0x05}, // max96712 MTF6---gyro2 interrupt {0x52, 0x034B, 0x75}, // MTF6 {0x52, 0x0003, 0xFF}, // enable i2c channel B {0x52, 0x0007, 0x20}, {0x52, 0x0003, 0xF6}, {0x00, AR0234_TABLE_END, 0x00 } }; static struct index_reg_8 ar0234_Single_Dser_Ser[] = { {0x52, 0x1458, 0x28}, {0x52, 0x1459, 0x68}, {0x52, 0x1558, 0x28}, {0x52, 0x1559, 0x68}, {0x52, 0x1658, 0x28}, {0x52, 0x1659, 0x68}, {0x52, 0x1758, 0x28}, {0x52, 0x1759, 0x68}, {0x52, 0x0018, 0x0F}, {0x52, 0x0006, 0xF1}, {0x52, 0x0001, 0xcc}, // disable the i2c2 {0x80, 0x0010, 0x21}, {0x80, 0x0330, 0x06}, {0x80, 0x0332, 0x4E}, {0x80, 0x0333, 0xE4}, {0x80, 0x0331, 0x77}, {0x80, 0x0311, 0x41}, {0x80, 0x0308, 0x74}, {0x80, 0x0314, 0x2B}, {0x80, 0x0316, 0x22}, {0x80, 0x0318, 0x2B}, {0x80, 0x031A, 0x22}, {0x80, 0x0002, 0xff}, {0x80, 0x0053, 0x10}, {0x80, 0x0057, 0x11}, {0x80, 0x005B, 0x12}, {0x80, 0x005F, 0x13}, {0x52, 0x00F0, 0x20}, // pipx--pip0 pipz--pip1 gmsl phy A {0x52, 0x00F4, 0x03}, // enable pip 0/1 {0x52, 0x08A0, 0x01}, {0x52, 0x08A3, 0x44}, {0x52, 0x08A4, 0x44}, {0x52, 0x090A, 0x40}, {0x52, 0x094A, 0x40}, {0x52, 0x098A, 0x40}, {0x52, 0x09CA, 0x40}, {0x52, 0x0415, 0x2E}, {0x52, 0x0418, 0x2E}, {0x52, 0x041B, 0x2E}, {0x52, 0x041E, 0x2E}, {0x52, 0x090B, 0x07}, {0x52, 0x092D, 0x15}, {0x52, 0x090D, 0x2b}, {0x52, 0x090E, 0x2b}, {0x52, 0x090F, 0x00}, {0x52, 0x0910, 0x00}, {0x52, 0x0911, 0x01}, {0x52, 0x0912, 0x01}, {0x52, 0x094B, 0x07}, {0x52, 0x096D, 0x15}, {0x52, 0x094D, 0x2b}, {0x52, 0x094E, 0x6b}, {0x52, 0x094F, 0x00}, {0x52, 0x0950, 0x40}, {0x52, 0x0951, 0x01}, {0x52, 0x0952, 0x41}, {0x80, 0x02be, 0x90}, // Enable sensor power down pin. {0x80, 0x02bf, 0x60}, // Enable sensor reset pin. {0x80, 0x02ca, 0x80}, // Enable sensor power down pin. {0x80, 0x02cb, 0x60}, // Enable sensor reset pin. {0x80, 0x02d3, 0x90}, // Enable sensor power down pin. {0x80, 0x02d4, 0x60}, // Enable sensor reset pin. {0x80, 0x02d6, 0x90}, // Enable sensor power down pin. {0x80, 0x02d7, 0x60}, // Enable sensor reset pin. {0x52, 0x04AF, 0xC0}, // AUTO_FS_LINKS = 0, FS_USE_XTAL = 1, FS_LINK_[3:0] = 0 {0x52, 0x04A0, 0x04}, // Manual frame sync, output on MFP2 {0x52, 0x04A2, 0x00}, // Turn off auto master link selection {0x52, 0x04AA, 0x00}, // OVLP window = 0 {0x52, 0x04AB, 0x00}, {0x52, 0x04A5, 0x35}, // 30Hz FSYNC {0x52, 0x04A6, 0xB7}, {0x52, 0x04A7, 0x0C}, {0x80, 0x02D9, 0x04}, {0x80, 0x02DB, 0x08}, // MFP8 for FSIN {0x80, 0x02Dc, 0x04}, {0x80, 0x02De, 0x08}, // MFP8 for FSIN {0x52, 0x04B1, 0x40}, // FSYNC TX ID is 8 {0x80, 0x0042, 0xB0}, // eeprom i2c map eeporm have two i2c address {0x80, 0x0043, 0xA8}, {0x80, 0x0044, 0xB2}, {0x80, 0x0045, 0xAA}, {0x80, 0x02be, 0x83}, // hawk1(0x84) max9295D MFP0-- ACCEL interrupt {0x80, 0x02bf, 0x11}, {0x52, 0x030c, 0x04}, // max96712 MTF4---ACCEL1 interrupt {0x52, 0x030e, 0x11}, // MTF4 {0x80, 0x02c7, 0x83}, // hawk1(0x84)max9295D MFP3-- gyro interrupt {0x80, 0x02c8, 0x12}, {0x52, 0x0320, 0x04}, // max96712 MTF10---gyro1 interrupt {0x52, 0x0322, 0x12}, // MTF10 {0x00, AR0234_TABLE_END, 0x00 } }; static struct index_reg_8 ar0234_1920x1080_crop_30fps[] = { {0x06, 0x301A, 0x00D9}, {0x06, AR0234_TABLE_WAIT_MS, 100}, {0x06, 0x3F4C, 0x121F}, {0x06, 0x3F4E, 0x121F}, {0x06, 0x3F50, 0x0B81}, {0x06, 0x31E0, 0x0003}, {0x06, 0x31E0, 0x0003}, {0x06, 0x30B0, 0x0028}, {0x06, 0x3088, 0x8000}, {0x06, 0x3086, 0xC1AE}, {0x06, 0x3086, 0x327F}, {0x06, 0x3086, 0x5780}, {0x06, 0x3086, 0x272F}, {0x06, 0x3086, 0x7416}, {0x06, 0x3086, 0x7E13}, {0x06, 0x3086, 0x8000}, {0x06, 0x3086, 0x307E}, {0x06, 0x3086, 0xFF80}, {0x06, 0x3086, 0x20C3}, {0x06, 0x3086, 0xB00E}, {0x06, 0x3086, 0x8190}, {0x06, 0x3086, 0x1643}, {0x06, 0x3086, 0x1651}, {0x06, 0x3086, 0x9D3E}, {0x06, 0x3086, 0x9545}, {0x06, 0x3086, 0x2209}, {0x06, 0x3086, 0x3781}, {0x06, 0x3086, 0x9016}, {0x06, 0x3086, 0x4316}, {0x06, 0x3086, 0x7F90}, {0x06, 0x3086, 0x8000}, {0x06, 0x3086, 0x387F}, {0x06, 0x3086, 0x1380}, {0x06, 0x3086, 0x233B}, {0x06, 0x3086, 0x7F93}, {0x06, 0x3086, 0x4502}, {0x06, 0x3086, 0x8000}, {0x06, 0x3086, 0x7FB0}, {0x06, 0x3086, 0x8D66}, {0x06, 0x3086, 0x7F90}, {0x06, 0x3086, 0x8192}, {0x06, 0x3086, 0x3C16}, {0x06, 0x3086, 0x357F}, {0x06, 0x3086, 0x9345}, {0x06, 0x3086, 0x0280}, {0x06, 0x3086, 0x007F}, {0x06, 0x3086, 0xB08D}, {0x06, 0x3086, 0x667F}, {0x06, 0x3086, 0x9081}, {0x06, 0x3086, 0x8237}, {0x06, 0x3086, 0x4502}, {0x06, 0x3086, 0x3681}, {0x06, 0x3086, 0x8044}, {0x06, 0x3086, 0x1631}, {0x06, 0x3086, 0x4374}, {0x06, 0x3086, 0x1678}, {0x06, 0x3086, 0x7B7D}, {0x06, 0x3086, 0x4502}, {0x06, 0x3086, 0x450A}, {0x06, 0x3086, 0x7E12}, {0x06, 0x3086, 0x8180}, {0x06, 0x3086, 0x377F}, {0x06, 0x3086, 0x1045}, {0x06, 0x3086, 0x0A0E}, {0x06, 0x3086, 0x7FD4}, {0x06, 0x3086, 0x8024}, {0x06, 0x3086, 0x0E82}, {0x06, 0x3086, 0x9CC2}, {0x06, 0x3086, 0xAFA8}, {0x06, 0x3086, 0xAA03}, {0x06, 0x3086, 0x430D}, {0x06, 0x3086, 0x2D46}, {0x06, 0x3086, 0x4316}, {0x06, 0x3086, 0x5F16}, {0x06, 0x3086, 0x530D}, {0x06, 0x3086, 0x1660}, {0x06, 0x3086, 0x401E}, {0x06, 0x3086, 0x2904}, {0x06, 0x3086, 0x2984}, {0x06, 0x3086, 0x81E7}, {0x06, 0x3086, 0x816F}, {0x06, 0x3086, 0x1706}, {0x06, 0x3086, 0x81E7}, {0x06, 0x3086, 0x7F81}, {0x06, 0x3086, 0x5C0D}, {0x06, 0x3086, 0x5754}, {0x06, 0x3086, 0x495F}, {0x06, 0x3086, 0x5305}, {0x06, 0x3086, 0x5307}, {0x06, 0x3086, 0x4D2B}, {0x06, 0x3086, 0xF810}, {0x06, 0x3086, 0x164C}, {0x06, 0x3086, 0x0755}, {0x06, 0x3086, 0x562B}, {0x06, 0x3086, 0xB82B}, {0x06, 0x3086, 0x984E}, {0x06, 0x3086, 0x1129}, {0x06, 0x3086, 0x9460}, {0x06, 0x3086, 0x5C09}, {0x06, 0x3086, 0x5C1B}, {0x06, 0x3086, 0x4002}, {0x06, 0x3086, 0x4500}, {0x06, 0x3086, 0x4580}, {0x06, 0x3086, 0x29B6}, {0x06, 0x3086, 0x7F80}, {0x06, 0x3086, 0x4004}, {0x06, 0x3086, 0x7F88}, {0x06, 0x3086, 0x4109}, {0x06, 0x3086, 0x5C0B}, {0x06, 0x3086, 0x29B2}, {0x06, 0x3086, 0x4115}, {0x06, 0x3086, 0x5C03}, {0x06, 0x3086, 0x4105}, {0x06, 0x3086, 0x5F2B}, {0x06, 0x3086, 0x902B}, {0x06, 0x3086, 0x8081}, {0x06, 0x3086, 0x6F40}, {0x06, 0x3086, 0x1041}, {0x06, 0x3086, 0x0160}, {0x06, 0x3086, 0x29A2}, {0x06, 0x3086, 0x29A3}, {0x06, 0x3086, 0x5F4D}, {0x06, 0x3086, 0x1C17}, {0x06, 0x3086, 0x0281}, {0x06, 0x3086, 0xE729}, {0x06, 0x3086, 0x8345}, {0x06, 0x3086, 0x8840}, {0x06, 0x3086, 0x0F7F}, {0x06, 0x3086, 0x8A40}, {0x06, 0x3086, 0x2345}, {0x06, 0x3086, 0x8024}, {0x06, 0x3086, 0x4008}, {0x06, 0x3086, 0x7F88}, {0x06, 0x3086, 0x5D29}, {0x06, 0x3086, 0x9288}, {0x06, 0x3086, 0x102B}, {0x06, 0x3086, 0x0489}, {0x06, 0x3086, 0x165C}, {0x06, 0x3086, 0x4386}, {0x06, 0x3086, 0x170B}, {0x06, 0x3086, 0x5C03}, {0x06, 0x3086, 0x8A48}, {0x06, 0x3086, 0x4D4E}, {0x06, 0x3086, 0x2B80}, {0x06, 0x3086, 0x4C09}, {0x06, 0x3086, 0x4119}, {0x06, 0x3086, 0x816F}, {0x06, 0x3086, 0x4110}, {0x06, 0x3086, 0x4001}, {0x06, 0x3086, 0x6029}, {0x06, 0x3086, 0x8229}, {0x06, 0x3086, 0x8329}, {0x06, 0x3086, 0x435C}, {0x06, 0x3086, 0x055F}, {0x06, 0x3086, 0x4D1C}, {0x06, 0x3086, 0x81E7}, {0x06, 0x3086, 0x4502}, {0x06, 0x3086, 0x8180}, {0x06, 0x3086, 0x7F80}, {0x06, 0x3086, 0x410A}, {0x06, 0x3086, 0x9144}, {0x06, 0x3086, 0x1609}, {0x06, 0x3086, 0x2FC3}, {0x06, 0x3086, 0xB130}, {0x06, 0x3086, 0xC3B1}, {0x06, 0x3086, 0x0343}, {0x06, 0x3086, 0x164A}, {0x06, 0x3086, 0x0A43}, {0x06, 0x3086, 0x160B}, {0x06, 0x3086, 0x4316}, {0x06, 0x3086, 0x8F43}, {0x06, 0x3086, 0x1690}, {0x06, 0x3086, 0x4316}, {0x06, 0x3086, 0x7F81}, {0x06, 0x3086, 0x450A}, {0x06, 0x3086, 0x410F}, {0x06, 0x3086, 0x7F83}, {0x06, 0x3086, 0x5D29}, {0x06, 0x3086, 0x4488}, {0x06, 0x3086, 0x102B}, {0x06, 0x3086, 0x0453}, {0x06, 0x3086, 0x0D40}, {0x06, 0x3086, 0x2345}, {0x06, 0x3086, 0x0240}, {0x06, 0x3086, 0x087F}, {0x06, 0x3086, 0x8053}, {0x06, 0x3086, 0x0D89}, {0x06, 0x3086, 0x165C}, {0x06, 0x3086, 0x4586}, {0x06, 0x3086, 0x170B}, {0x06, 0x3086, 0x5C05}, {0x06, 0x3086, 0x8A60}, {0x06, 0x3086, 0x4B91}, {0x06, 0x3086, 0x4416}, {0x06, 0x3086, 0x09C1}, {0x06, 0x3086, 0x2CA9}, {0x06, 0x3086, 0xAB30}, {0x06, 0x3086, 0x51B3}, {0x06, 0x3086, 0x3D5A}, {0x06, 0x3086, 0x7E3D}, {0x06, 0x3086, 0x7E19}, {0x06, 0x3086, 0x8000}, {0x06, 0x3086, 0x8B1F}, {0x06, 0x3086, 0x2A1F}, {0x06, 0x3086, 0x83A2}, {0x06, 0x3086, 0x7516}, {0x06, 0x3086, 0xAD33}, {0x06, 0x3086, 0x450A}, {0x06, 0x3086, 0x7F53}, {0x06, 0x3086, 0x8023}, {0x06, 0x3086, 0x8C66}, {0x06, 0x3086, 0x7F13}, {0x06, 0x3086, 0x8184}, {0x06, 0x3086, 0x1481}, {0x06, 0x3086, 0x8031}, {0x06, 0x3086, 0x3D64}, {0x06, 0x3086, 0x452A}, {0x06, 0x3086, 0x9451}, {0x06, 0x3086, 0x9E96}, {0x06, 0x3086, 0x3D2B}, {0x06, 0x3086, 0x3D1B}, {0x06, 0x3086, 0x529F}, {0x06, 0x3086, 0x0E3D}, {0x06, 0x3086, 0x083D}, {0x06, 0x3086, 0x167E}, {0x06, 0x3086, 0x307E}, {0x06, 0x3086, 0x1175}, {0x06, 0x3086, 0x163E}, {0x06, 0x3086, 0x970E}, {0x06, 0x3086, 0x82B2}, {0x06, 0x3086, 0x3D7F}, {0x06, 0x3086, 0xAC3E}, {0x06, 0x3086, 0x4502}, {0x06, 0x3086, 0x7E11}, {0x06, 0x3086, 0x7FD0}, {0x06, 0x3086, 0x8000}, {0x06, 0x3086, 0x8C66}, {0x06, 0x3086, 0x7F90}, {0x06, 0x3086, 0x8194}, {0x06, 0x3086, 0x3F44}, {0x06, 0x3086, 0x1681}, {0x06, 0x3086, 0x8416}, {0x06, 0x3086, 0x2C2C}, {0x06, 0x3086, 0x2C2C}, {0x06, 0x302A, 0x0005}, {0x06, 0x302C, 0x0001}, {0x06, 0x302E, 0x0003}, {0x06, 0x3030, 0x0096}, // PLL multiplier {0x06, 0x302E, 0x0006}, // PLL input pre-divider value {0x06, 0x302C, 0x0004}, // P1 divider {0x06, 0x302A, 0x0005}, // P2 divider {0x06, 0x3038, 0x0004}, // P3 divider {0x06, 0x3036, 0x000A}, // WCD divider {0x06, 0x31B0, 0x002F}, // Frame preamble {0x06, 0x31B2, 0x002C}, // Line preamble {0x06, 0x31B4, 0x1144}, // MIPI timing 0 {0x06, 0x31B6, 0x00C7}, // MIPI timing 1 {0x06, 0x31B8, 0x3047}, // MIPI timing 2 {0x06, 0x31BA, 0x0103}, // MIPI timing 3 {0x06, 0x31BC, 0x8583}, // MIPI timing 4 {0x06, 0x31AE, 0x0204}, // 4-lane MIPI {0x06, 0x3002, 0x0008}, // Y_ADDR_START = 8 {0x06, 0x3004, 0x0008}, // X_ADDR_START = 8 {0x06, 0x3006, 0x04B7}, // Y_ADDR_END = 1207 {0x06, 0x3008, 0x0787}, // X_ADDR_END = 1927 {0x06, 0x300A, 0x04C6}, // FRAME_LENGTH_LINES = 1220 {0x06, 0x300C, 0x0264}, // LINE_LENGTH_PCK = 612 {0x06, 0x3012, 0x02DC}, // COARSE_INTEGRATION_TIME = 732 {0x06, 0x31AC, 0x0A0A}, // DATA_FORMAT_BITS = 2570 {0x06, 0x306E, 0x9010}, // DATAPATH_SELECT = 36880 {0x06, 0x30A2, 0x0001}, // X_ODD_INC = 1 {0x06, 0x30A6, 0x0001}, // Y_ODD_INC = 1 {0x06, 0x3082, 0x0003}, // OPERATION_MODE_CTRL = 3 {0x06, 0x3040, 0x0000}, // READ_MODE = 0 {0x06, 0x31D0, 0x0000}, // COMPANDING = 0 {0x06, 0x3044, 0x0410}, {0x06, 0x3094, 0x03D4}, {0x06, 0x3096, 0x0480}, {0x06, 0x30BA, 0x7602}, {0x06, 0x30B0, 0x0028}, {0x06, 0x30FE, 0x002A}, {0x06, 0x31DE, 0x0410}, {0x06, 0x3ED6, 0x1435}, {0x06, 0x3ED8, 0x9865}, {0x06, 0x3EDA, 0x7698}, {0x06, 0x3EDC, 0x99FF}, {0x06, 0x3EE2, 0xBB88}, {0x06, 0x3EE4, 0x8836}, {0x06, 0x3EF0, 0x1CF0}, {0x06, 0x3EF2, 0x0000}, {0x06, 0x3EF8, 0x6166}, {0x06, 0x3EFA, 0x3333}, {0x06, 0x3EFC, 0x6634}, {0x06, 0x3276, 0x05DC}, {0x06, 0x3F00, 0x9D05}, {0x06, 0x3ED2, 0xFA86}, {0x06, 0x3EEE, 0xA4FE}, {0x06, 0x30BA, 0x7602}, {0x06, 0x3180, 0xC24F}, {0x06, 0x3ECC, 0x6E42}, {0x06, 0x3ECC, 0x0E42}, {0x06, 0x3EEC, 0x0C0C}, {0x06, 0x3EE8, 0xAAE4}, {0x06, 0x3EE6, 0x3363}, {0x06, 0x3EE6, 0x3363}, {0x06, 0x3EE8, 0xAAE4}, {0x06, 0x3EE8, 0xAAE4}, {0x06, 0x3102, 0x5000}, {0x06, 0x3060, 0x000D}, {0x06, 0x3ED0, 0xFF44}, {0x06, 0x3ED2, 0xAA86}, {0x06, 0x3ED4, 0x031F}, {0x06, 0x3EEE, 0xA4AA}, {0x06, 0x301a, 0x2058}, {0x00, AR0234_TABLE_END, 0x00}, }; static struct index_reg_8 tp_colorbars[] = { {0x06, 0x3070, 0x2}, {0x00, AR0234_TABLE_END, 0x00}, }; enum { AR0234_MODE_1920X1080_CROP_30FPS, AR0234_MODE_START_STREAM, AR0234_MODE_STOP_STREAM, AR0234_MODE_Dser_Ser, AR0234_MODE_Single_Dser_Ser, AR0234_MODE_TEST_PATTERN }; static struct index_reg_8 *mode_table[] = { [AR0234_MODE_1920X1080_CROP_30FPS] = ar0234_1920x1080_crop_30fps, [AR0234_MODE_START_STREAM] = ar0234_start, [AR0234_MODE_STOP_STREAM] = ar0234_stop, [AR0234_MODE_Dser_Ser] = ar0234_Double_Dser_Ser, [AR0234_MODE_Single_Dser_Ser] = ar0234_Single_Dser_Ser, [AR0234_MODE_TEST_PATTERN] = tp_colorbars, }; static const int ar0234_30fps[] = { 30, }; static const int ar0234_36fps[] = { 36, }; static const int ar0234_18fps[] = { 18, }; static const int ar0234_60fps[] = { 60, }; static const int ar0234_120fps[] = { 120, }; static const struct camera_common_frmfmt ar0234_frmfmt[] = { {{1920, 1200}, ar0234_60fps, 1, 0, AR0234_MODE_1920X1080_CROP_30FPS}, }; #endif /* __AR0234_I2C_TABLES__ */