/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* * CCS static data binary format definitions * * Copyright 2019--2020 Intel Corporation */ #ifndef __CCS_DATA_DEFS_H__ #define __CCS_DATA_DEFS_H__ #include "ccs-data.h" #define CCS_STATIC_DATA_VERSION 0 enum __ccs_data_length_specifier_id { CCS_DATA_LENGTH_SPECIFIER_1 = 0, CCS_DATA_LENGTH_SPECIFIER_2 = 1, CCS_DATA_LENGTH_SPECIFIER_3 = 2 }; #define CCS_DATA_LENGTH_SPECIFIER_SIZE_SHIFT 6 struct __ccs_data_length_specifier { u8 length; } __packed; struct __ccs_data_length_specifier2 { u8 length[2]; } __packed; struct __ccs_data_length_specifier3 { u8 length[3]; } __packed; struct __ccs_data_block { u8 id; struct __ccs_data_length_specifier length; } __packed; #define CCS_DATA_BLOCK_HEADER_ID_VERSION_SHIFT 5 struct __ccs_data_block3 { u8 id; struct __ccs_data_length_specifier2 length; } __packed; struct __ccs_data_block4 { u8 id; struct __ccs_data_length_specifier3 length; } __packed; enum __ccs_data_block_id { CCS_DATA_BLOCK_ID_DUMMY = 1, CCS_DATA_BLOCK_ID_DATA_VERSION = 2, CCS_DATA_BLOCK_ID_SENSOR_READ_ONLY_REGS = 3, CCS_DATA_BLOCK_ID_MODULE_READ_ONLY_REGS = 4, CCS_DATA_BLOCK_ID_SENSOR_MANUFACTURER_REGS = 5, CCS_DATA_BLOCK_ID_MODULE_MANUFACTURER_REGS = 6, CCS_DATA_BLOCK_ID_SENSOR_RULE_BASED_BLOCK = 32, CCS_DATA_BLOCK_ID_MODULE_RULE_BASED_BLOCK = 33, CCS_DATA_BLOCK_ID_SENSOR_PDAF_PIXEL_LOCATION = 36, CCS_DATA_BLOCK_ID_MODULE_PDAF_PIXEL_LOCATION = 37, CCS_DATA_BLOCK_ID_LICENSE = 40, CCS_DATA_BLOCK_ID_END = 127, }; struct __ccs_data_block_version { u8 static_data_version_major[2]; u8 static_data_version_minor[2]; u8 year[2]; u8 month; u8 day; } __packed; struct __ccs_data_block_regs { u8 reg_len; } __packed; #define CCS_DATA_BLOCK_REGS_ADDR_MASK 0x07 #define CCS_DATA_BLOCK_REGS_LEN_SHIFT 3 #define CCS_DATA_BLOCK_REGS_LEN_MASK 0x38 #define CCS_DATA_BLOCK_REGS_SEL_SHIFT 6 enum ccs_data_block_regs_sel { CCS_DATA_BLOCK_REGS_SEL_REGS = 0, CCS_DATA_BLOCK_REGS_SEL_REGS2 = 1, CCS_DATA_BLOCK_REGS_SEL_REGS3 = 2, }; struct __ccs_data_block_regs2 { u8 reg_len; u8 addr; } __packed; #define CCS_DATA_BLOCK_REGS_2_ADDR_MASK 0x01 #define CCS_DATA_BLOCK_REGS_2_LEN_SHIFT 1 #define CCS_DATA_BLOCK_REGS_2_LEN_MASK 0x3e struct __ccs_data_block_regs3 { u8 reg_len; u8 addr[2]; } __packed; #define CCS_DATA_BLOCK_REGS_3_LEN_MASK 0x3f enum __ccs_data_ffd_pixelcode { CCS_DATA_BLOCK_FFD_PIXELCODE_EMBEDDED = 1, CCS_DATA_BLOCK_FFD_PIXELCODE_DUMMY = 2, CCS_DATA_BLOCK_FFD_PIXELCODE_BLACK = 3, CCS_DATA_BLOCK_FFD_PIXELCODE_DARK = 4, CCS_DATA_BLOCK_FFD_PIXELCODE_VISIBLE = 5, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_0 = 8, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_1 = 9, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_2 = 10, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_3 = 11, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_4 = 12, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_5 = 13, CCS_DATA_BLOCK_FFD_PIXELCODE_MS_6 = 14, CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_OB = 16, CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_OB = 17, CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_OB = 18, CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_OB = 19, CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_OB = 20, CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_OB = 21, CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_OB = 22, CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_OB = 23, CCS_DATA_BLOCK_FFD_PIXELCODE_TOTAL = 24, CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_PDAF = 32, CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_PDAF = 33, CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_PDAF = 34, CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_PDAF = 35, CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_PDAF = 36, CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_PDAF = 37, CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_PDAF = 38, CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_PDAF = 39, CCS_DATA_BLOCK_FFD_PIXELCODE_SEPARATED_PDAF = 40, CCS_DATA_BLOCK_FFD_PIXELCODE_ORIGINAL_ORDER_PDAF = 41, CCS_DATA_BLOCK_FFD_PIXELCODE_VENDOR_PDAF = 41, }; struct __ccs_data_block_ffd_entry { u8 pixelcode; u8 reserved; u8 value[2]; } __packed; struct __ccs_data_block_ffd { u8 num_column_descs; u8 num_row_descs; } __packed; enum __ccs_data_block_rule_id { CCS_DATA_BLOCK_RULE_ID_IF = 1, CCS_DATA_BLOCK_RULE_ID_READ_ONLY_REGS = 2, CCS_DATA_BLOCK_RULE_ID_FFD = 3, CCS_DATA_BLOCK_RULE_ID_MSR = 4, CCS_DATA_BLOCK_RULE_ID_PDAF_READOUT = 5, }; struct __ccs_data_block_rule_if { u8 addr[2]; u8 value; u8 mask; } __packed; enum __ccs_data_block_pdaf_readout_order { CCS_DATA_BLOCK_PDAF_READOUT_ORDER_ORIGINAL = 1, CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_WITHIN_LINE = 2, CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_TYPES_SEPARATE_LINES = 3, }; struct __ccs_data_block_pdaf_readout { u8 pdaf_readout_info_reserved; u8 pdaf_readout_info_order; } __packed; struct __ccs_data_block_pdaf_pix_loc_block_desc { u8 block_type_id; u8 repeat_x[2]; } __packed; struct __ccs_data_block_pdaf_pix_loc_block_desc_group { u8 num_block_descs[2]; u8 repeat_y; } __packed; enum __ccs_data_block_pdaf_pix_loc_pixel_type { CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SEPARATED = 0, CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SEPARATED = 1, CCS_DATA_PDAF_PIXEL_TYPE_TOP_SEPARATED = 2, CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SEPARATED = 3, CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SIDE_BY_SIDE = 4, CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SIDE_BY_SIDE = 5, CCS_DATA_PDAF_PIXEL_TYPE_TOP_SIDE_BY_SIDE = 6, CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SIDE_BY_SIDE = 7, CCS_DATA_PDAF_PIXEL_TYPE_TOP_LEFT = 8, CCS_DATA_PDAF_PIXEL_TYPE_TOP_RIGHT = 9, CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_LEFT = 10, CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_RIGHT = 11, }; struct __ccs_data_block_pdaf_pix_loc_pixel_desc { u8 pixel_type; u8 small_offset_x; u8 small_offset_y; } __packed; struct __ccs_data_block_pdaf_pix_loc { u8 main_offset_x[2]; u8 main_offset_y[2]; u8 global_pdaf_type; u8 block_width; u8 block_height; u8 num_block_desc_groups[2]; } __packed; struct __ccs_data_block_end { u8 crc[4]; } __packed; #endif /* __CCS_DATA_DEFS_H__ */