Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
0002 /*
0003  * CCS static data binary format definitions
0004  *
0005  * Copyright 2019--2020 Intel Corporation
0006  */
0007 
0008 #ifndef __CCS_DATA_DEFS_H__
0009 #define __CCS_DATA_DEFS_H__
0010 
0011 #include "ccs-data.h"
0012 
0013 #define CCS_STATIC_DATA_VERSION 0
0014 
0015 enum __ccs_data_length_specifier_id {
0016     CCS_DATA_LENGTH_SPECIFIER_1 = 0,
0017     CCS_DATA_LENGTH_SPECIFIER_2 = 1,
0018     CCS_DATA_LENGTH_SPECIFIER_3 = 2
0019 };
0020 
0021 #define CCS_DATA_LENGTH_SPECIFIER_SIZE_SHIFT    6
0022 
0023 struct __ccs_data_length_specifier {
0024     u8 length;
0025 } __packed;
0026 
0027 struct __ccs_data_length_specifier2 {
0028     u8 length[2];
0029 } __packed;
0030 
0031 struct __ccs_data_length_specifier3 {
0032     u8 length[3];
0033 } __packed;
0034 
0035 struct __ccs_data_block {
0036     u8 id;
0037     struct __ccs_data_length_specifier length;
0038 } __packed;
0039 
0040 #define CCS_DATA_BLOCK_HEADER_ID_VERSION_SHIFT  5
0041 
0042 struct __ccs_data_block3 {
0043     u8 id;
0044     struct __ccs_data_length_specifier2 length;
0045 } __packed;
0046 
0047 struct __ccs_data_block4 {
0048     u8 id;
0049     struct __ccs_data_length_specifier3 length;
0050 } __packed;
0051 
0052 enum __ccs_data_block_id {
0053     CCS_DATA_BLOCK_ID_DUMMY = 1,
0054     CCS_DATA_BLOCK_ID_DATA_VERSION = 2,
0055     CCS_DATA_BLOCK_ID_SENSOR_READ_ONLY_REGS = 3,
0056     CCS_DATA_BLOCK_ID_MODULE_READ_ONLY_REGS = 4,
0057     CCS_DATA_BLOCK_ID_SENSOR_MANUFACTURER_REGS = 5,
0058     CCS_DATA_BLOCK_ID_MODULE_MANUFACTURER_REGS = 6,
0059     CCS_DATA_BLOCK_ID_SENSOR_RULE_BASED_BLOCK = 32,
0060     CCS_DATA_BLOCK_ID_MODULE_RULE_BASED_BLOCK = 33,
0061     CCS_DATA_BLOCK_ID_SENSOR_PDAF_PIXEL_LOCATION = 36,
0062     CCS_DATA_BLOCK_ID_MODULE_PDAF_PIXEL_LOCATION = 37,
0063     CCS_DATA_BLOCK_ID_LICENSE = 40,
0064     CCS_DATA_BLOCK_ID_END = 127,
0065 };
0066 
0067 struct __ccs_data_block_version {
0068     u8 static_data_version_major[2];
0069     u8 static_data_version_minor[2];
0070     u8 year[2];
0071     u8 month;
0072     u8 day;
0073 } __packed;
0074 
0075 struct __ccs_data_block_regs {
0076     u8 reg_len;
0077 } __packed;
0078 
0079 #define CCS_DATA_BLOCK_REGS_ADDR_MASK       0x07
0080 #define CCS_DATA_BLOCK_REGS_LEN_SHIFT       3
0081 #define CCS_DATA_BLOCK_REGS_LEN_MASK        0x38
0082 #define CCS_DATA_BLOCK_REGS_SEL_SHIFT       6
0083 
0084 enum ccs_data_block_regs_sel {
0085     CCS_DATA_BLOCK_REGS_SEL_REGS = 0,
0086     CCS_DATA_BLOCK_REGS_SEL_REGS2 = 1,
0087     CCS_DATA_BLOCK_REGS_SEL_REGS3 = 2,
0088 };
0089 
0090 struct __ccs_data_block_regs2 {
0091     u8 reg_len;
0092     u8 addr;
0093 } __packed;
0094 
0095 #define CCS_DATA_BLOCK_REGS_2_ADDR_MASK     0x01
0096 #define CCS_DATA_BLOCK_REGS_2_LEN_SHIFT     1
0097 #define CCS_DATA_BLOCK_REGS_2_LEN_MASK      0x3e
0098 
0099 struct __ccs_data_block_regs3 {
0100     u8 reg_len;
0101     u8 addr[2];
0102 } __packed;
0103 
0104 #define CCS_DATA_BLOCK_REGS_3_LEN_MASK      0x3f
0105 
0106 enum __ccs_data_ffd_pixelcode {
0107     CCS_DATA_BLOCK_FFD_PIXELCODE_EMBEDDED = 1,
0108     CCS_DATA_BLOCK_FFD_PIXELCODE_DUMMY = 2,
0109     CCS_DATA_BLOCK_FFD_PIXELCODE_BLACK = 3,
0110     CCS_DATA_BLOCK_FFD_PIXELCODE_DARK = 4,
0111     CCS_DATA_BLOCK_FFD_PIXELCODE_VISIBLE = 5,
0112     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_0 = 8,
0113     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_1 = 9,
0114     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_2 = 10,
0115     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_3 = 11,
0116     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_4 = 12,
0117     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_5 = 13,
0118     CCS_DATA_BLOCK_FFD_PIXELCODE_MS_6 = 14,
0119     CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_OB = 16,
0120     CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_OB = 17,
0121     CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_OB = 18,
0122     CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_OB = 19,
0123     CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_OB = 20,
0124     CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_OB = 21,
0125     CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_OB = 22,
0126     CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_OB = 23,
0127     CCS_DATA_BLOCK_FFD_PIXELCODE_TOTAL = 24,
0128     CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_PDAF = 32,
0129     CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_PDAF = 33,
0130     CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_PDAF = 34,
0131     CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_PDAF = 35,
0132     CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_PDAF = 36,
0133     CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_PDAF = 37,
0134     CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_PDAF = 38,
0135     CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_PDAF = 39,
0136     CCS_DATA_BLOCK_FFD_PIXELCODE_SEPARATED_PDAF = 40,
0137     CCS_DATA_BLOCK_FFD_PIXELCODE_ORIGINAL_ORDER_PDAF = 41,
0138     CCS_DATA_BLOCK_FFD_PIXELCODE_VENDOR_PDAF = 41,
0139 };
0140 
0141 struct __ccs_data_block_ffd_entry {
0142     u8 pixelcode;
0143     u8 reserved;
0144     u8 value[2];
0145 } __packed;
0146 
0147 struct __ccs_data_block_ffd {
0148     u8 num_column_descs;
0149     u8 num_row_descs;
0150 } __packed;
0151 
0152 enum __ccs_data_block_rule_id {
0153     CCS_DATA_BLOCK_RULE_ID_IF = 1,
0154     CCS_DATA_BLOCK_RULE_ID_READ_ONLY_REGS = 2,
0155     CCS_DATA_BLOCK_RULE_ID_FFD = 3,
0156     CCS_DATA_BLOCK_RULE_ID_MSR = 4,
0157     CCS_DATA_BLOCK_RULE_ID_PDAF_READOUT = 5,
0158 };
0159 
0160 struct __ccs_data_block_rule_if {
0161     u8 addr[2];
0162     u8 value;
0163     u8 mask;
0164 } __packed;
0165 
0166 enum __ccs_data_block_pdaf_readout_order {
0167     CCS_DATA_BLOCK_PDAF_READOUT_ORDER_ORIGINAL = 1,
0168     CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_WITHIN_LINE = 2,
0169     CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_TYPES_SEPARATE_LINES = 3,
0170 };
0171 
0172 struct __ccs_data_block_pdaf_readout {
0173     u8 pdaf_readout_info_reserved;
0174     u8 pdaf_readout_info_order;
0175 } __packed;
0176 
0177 struct __ccs_data_block_pdaf_pix_loc_block_desc {
0178     u8 block_type_id;
0179     u8 repeat_x[2];
0180 } __packed;
0181 
0182 struct __ccs_data_block_pdaf_pix_loc_block_desc_group {
0183     u8 num_block_descs[2];
0184     u8 repeat_y;
0185 } __packed;
0186 
0187 enum __ccs_data_block_pdaf_pix_loc_pixel_type {
0188     CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SEPARATED = 0,
0189     CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SEPARATED = 1,
0190     CCS_DATA_PDAF_PIXEL_TYPE_TOP_SEPARATED = 2,
0191     CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SEPARATED = 3,
0192     CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SIDE_BY_SIDE = 4,
0193     CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SIDE_BY_SIDE = 5,
0194     CCS_DATA_PDAF_PIXEL_TYPE_TOP_SIDE_BY_SIDE = 6,
0195     CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SIDE_BY_SIDE = 7,
0196     CCS_DATA_PDAF_PIXEL_TYPE_TOP_LEFT = 8,
0197     CCS_DATA_PDAF_PIXEL_TYPE_TOP_RIGHT = 9,
0198     CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_LEFT = 10,
0199     CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_RIGHT = 11,
0200 };
0201 
0202 struct __ccs_data_block_pdaf_pix_loc_pixel_desc {
0203     u8 pixel_type;
0204     u8 small_offset_x;
0205     u8 small_offset_y;
0206 } __packed;
0207 
0208 struct __ccs_data_block_pdaf_pix_loc {
0209     u8 main_offset_x[2];
0210     u8 main_offset_y[2];
0211     u8 global_pdaf_type;
0212     u8 block_width;
0213     u8 block_height;
0214     u8 num_block_desc_groups[2];
0215 } __packed;
0216 
0217 struct __ccs_data_block_end {
0218     u8 crc[4];
0219 } __packed;
0220 
0221 #endif /* __CCS_DATA_DEFS_H__ */