1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (c) 2020 Rockchip Electronics Co., Ltd. */ 3 4 #ifndef OTP_EEPROM_HEAD_H 5 #define OTP_EEPROM_HEAD_H 6 7 #define SLAVE_ADDRESS 0x50 8 9 #define INFO_FLAG_REG 0X0000 10 #define INFO_ID_REG 0X0001 11 #define SMARTISAN_PN_REG 0X000A 12 #define SMARTISAN_PN_SIZE 0x000C //12 13 #define MOUDLE_ID_REG 0X0016 14 #define MOUDLE_ID_SIZE 0X0010 //16 15 #define MIRROR_FLIP_REG 0X0026 16 #define FULL_SIZE_WIGHT_REG 0X0027 17 #define FULL_SIZE_HEIGHT_REG 0X0029 18 #define INFO_CHECKSUM_REG 0X0033 19 20 #define AWB_FLAG_REG 0x0034 21 #define AWB_VERSION_REG 0x0035 22 #define CUR_R_REG 0x0036 23 #define CUR_B_REG 0x0038 24 #define CUR_G_REG 0x003A 25 #define GOLDEN_R_REG 0x003C 26 #define GOLDEN_B_REG 0x003E 27 #define GOLDEN_G_REG 0x0040 28 #define AWB_CHECKSUM_REG 0x0062 29 30 #define LSC_FLAG_REG 0X0063 31 #define LSC_VERSION_REG 0x0064 32 #define LSC_TABLE_SIZE_REG 0x0065 33 #define LSC_DATA_START_REG 0x0067 34 #define LSC_DATA_SIZE 0x0908 //2312 35 #define LSC_CHECKSUM_REG 0x097B 36 37 #define SFR_FLAG_REG 0X097C 38 #define SFR_EQUIQ_NUM_REG 0X097D 39 #define SFR_C_HOR_REG 0X097E 40 #define SFR_C_VER_REG 0X0980 41 #define SFR_TOP_L_HOR_REG 0X0982 42 #define SFR_TOP_L_VER_REG 0X0984 43 #define SFR_TOP_R_HOR_REG 0X0986 44 #define SFR_TOP_R_VER_REG 0X0988 45 #define SFR_BOTTOM_L_HOR_REG 0X098A 46 #define SFR_BOTTOM_L_VER_REG 0X098C 47 #define SFR_BOTTOM_R_HOR_REG 0X098E 48 #define SFR_BOTTOM_R_VER_REG 0X0990 49 #define SFR_CHECKSUM_REG 0x09BE 50 51 #define TOTAL_CHECKSUM_REG 0x09BF 52 53 #define RKMOUDLE_ID_SIZE 0X0004 //16 54 #define RK_INFO_RESERVED_SIZE 0x000f// v1 23, v2 0x000f 55 #define RK_AWB_RESERVED_SIZE 0x001c 56 #define RK_LSC_RESERVED_SIZE 0x0020 57 #define RK_GAINMAP_SIZE 0x0800 58 #define RK_DCCMAP_SIZE 0x0200 59 #define RK_PDAF_RESERVED_SIZE 0x0020 60 #define RK_AF_RESERVED_SIZE 0x0014 61 #define RKOTP_MAX_MODULE 0x0008 62 63 #define RKOTP_REG_START 0x0008//v1 0, v2 0x0008 64 #define RKOTP_INFO_ID 0 65 #define RKOTP_AWB_ID 1 66 #define RKOTP_LSC_ID 2 67 #define RKOTP_PDAF_ID 3 68 #define RKOTP_AF_ID 4 69 70 struct id_defination { 71 u32 supplier_id; 72 u32 year; 73 u32 month; 74 u32 day; 75 u32 sensor_id; 76 u32 lens_id; 77 u32 vcm_id; 78 u32 driver_ic_id; 79 u32 color_temperature_id; 80 }; 81 82 struct full_size { 83 u16 width; 84 u16 height; 85 }; 86 87 struct basic_info { 88 u32 flag; 89 struct id_defination id; 90 u32 smartisan_pn[SMARTISAN_PN_SIZE]; 91 u32 modul_id[MOUDLE_ID_SIZE]; 92 u32 mirror_flip; 93 struct full_size size; 94 u32 checksum; 95 u32 version; 96 u32 module_size; 97 }; 98 99 struct awb_otp_info { 100 u32 flag; 101 u32 version; 102 u32 r_ratio; 103 u32 b_ratio; 104 u32 g_ratio; 105 u32 r_golden; 106 u32 b_golden; 107 u32 g_golden; 108 u32 checksum; 109 u32 size; 110 }; 111 112 struct lsc_otp_info { 113 u32 flag; 114 u32 version; 115 u16 table_size; 116 u8 data[LSC_DATA_SIZE]; 117 u32 checksum; 118 u32 size; 119 }; 120 121 struct sfr_data { 122 u32 top_l_horizontal; 123 u32 top_l_vertical; 124 u32 top_r_horizontal; 125 u32 top_r_vertical; 126 u32 bottom_l_horizontal; 127 u32 bottom_l_vertical; 128 u32 bottom_r_horizontal; 129 u32 bottom_r_vertical; 130 }; 131 132 struct sfr_otp_info { 133 u32 flag; 134 u32 equip_num; 135 u32 center_horizontal; 136 u32 center_vertical; 137 struct sfr_data data[3]; 138 u32 checksum; 139 }; 140 141 struct pdaf_otp_info { 142 u32 flag; 143 u32 version; 144 u32 gainmap_width; 145 u32 gainmap_height; 146 u32 gainmap[RK_GAINMAP_SIZE]; 147 u32 gainmap_checksum; 148 u32 dcc_mode; 149 u32 dcc_dir; 150 u32 dccmap_width; 151 u32 dccmap_height; 152 u32 dccmap[RK_DCCMAP_SIZE]; 153 u32 dccmap_checksum; 154 u32 checksum; 155 u32 size; 156 }; 157 158 struct af_otp_info { 159 u32 flag; 160 u32 version; 161 u32 af_inf; 162 u32 af_macro; 163 u32 checksum; 164 u32 size; 165 }; 166 167 struct otp_info { 168 u32 flag; 169 u32 total_checksum; 170 struct basic_info basic_data; 171 struct awb_otp_info awb_data; 172 struct lsc_otp_info lsc_data; 173 struct sfr_otp_info sfr_otp_data; 174 struct pdaf_otp_info pdaf_data; 175 struct af_otp_info af_data; 176 }; 177 178 /* eeprom device structure */ 179 struct eeprom_device { 180 struct v4l2_subdev sd; 181 struct i2c_client *client; 182 struct otp_info *otp; 183 struct proc_dir_entry *procfs; 184 char name[128]; 185 struct mutex mutex; 186 }; 187 188 #endif /* OTP_EEPROM_HEAD_H */ 189 190