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