162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * CCS static data binary format definitions 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2019--2020 Intel Corporation 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __CCS_DATA_DEFS_H__ 962306a36Sopenharmony_ci#define __CCS_DATA_DEFS_H__ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "ccs-data.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define CCS_STATIC_DATA_VERSION 0 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cienum __ccs_data_length_specifier_id { 1662306a36Sopenharmony_ci CCS_DATA_LENGTH_SPECIFIER_1 = 0, 1762306a36Sopenharmony_ci CCS_DATA_LENGTH_SPECIFIER_2 = 1, 1862306a36Sopenharmony_ci CCS_DATA_LENGTH_SPECIFIER_3 = 2 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define CCS_DATA_LENGTH_SPECIFIER_SIZE_SHIFT 6 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistruct __ccs_data_length_specifier { 2462306a36Sopenharmony_ci u8 length; 2562306a36Sopenharmony_ci} __packed; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct __ccs_data_length_specifier2 { 2862306a36Sopenharmony_ci u8 length[2]; 2962306a36Sopenharmony_ci} __packed; 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistruct __ccs_data_length_specifier3 { 3262306a36Sopenharmony_ci u8 length[3]; 3362306a36Sopenharmony_ci} __packed; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_cistruct __ccs_data_block { 3662306a36Sopenharmony_ci u8 id; 3762306a36Sopenharmony_ci struct __ccs_data_length_specifier length; 3862306a36Sopenharmony_ci} __packed; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci#define CCS_DATA_BLOCK_HEADER_ID_VERSION_SHIFT 5 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistruct __ccs_data_block3 { 4362306a36Sopenharmony_ci u8 id; 4462306a36Sopenharmony_ci struct __ccs_data_length_specifier2 length; 4562306a36Sopenharmony_ci} __packed; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistruct __ccs_data_block4 { 4862306a36Sopenharmony_ci u8 id; 4962306a36Sopenharmony_ci struct __ccs_data_length_specifier3 length; 5062306a36Sopenharmony_ci} __packed; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cienum __ccs_data_block_id { 5362306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_DUMMY = 1, 5462306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_DATA_VERSION = 2, 5562306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_SENSOR_READ_ONLY_REGS = 3, 5662306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_MODULE_READ_ONLY_REGS = 4, 5762306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_SENSOR_MANUFACTURER_REGS = 5, 5862306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_MODULE_MANUFACTURER_REGS = 6, 5962306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_SENSOR_RULE_BASED_BLOCK = 32, 6062306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_MODULE_RULE_BASED_BLOCK = 33, 6162306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_SENSOR_PDAF_PIXEL_LOCATION = 36, 6262306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_MODULE_PDAF_PIXEL_LOCATION = 37, 6362306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_LICENSE = 40, 6462306a36Sopenharmony_ci CCS_DATA_BLOCK_ID_END = 127, 6562306a36Sopenharmony_ci}; 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_cistruct __ccs_data_block_version { 6862306a36Sopenharmony_ci u8 static_data_version_major[2]; 6962306a36Sopenharmony_ci u8 static_data_version_minor[2]; 7062306a36Sopenharmony_ci u8 year[2]; 7162306a36Sopenharmony_ci u8 month; 7262306a36Sopenharmony_ci u8 day; 7362306a36Sopenharmony_ci} __packed; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cistruct __ccs_data_block_regs { 7662306a36Sopenharmony_ci u8 reg_len; 7762306a36Sopenharmony_ci} __packed; 7862306a36Sopenharmony_ci 7962306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_ADDR_MASK 0x07 8062306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_LEN_SHIFT 3 8162306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_LEN_MASK 0x38 8262306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_SEL_SHIFT 6 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_cienum ccs_data_block_regs_sel { 8562306a36Sopenharmony_ci CCS_DATA_BLOCK_REGS_SEL_REGS = 0, 8662306a36Sopenharmony_ci CCS_DATA_BLOCK_REGS_SEL_REGS2 = 1, 8762306a36Sopenharmony_ci CCS_DATA_BLOCK_REGS_SEL_REGS3 = 2, 8862306a36Sopenharmony_ci}; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_cistruct __ccs_data_block_regs2 { 9162306a36Sopenharmony_ci u8 reg_len; 9262306a36Sopenharmony_ci u8 addr; 9362306a36Sopenharmony_ci} __packed; 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_2_ADDR_MASK 0x01 9662306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_2_LEN_SHIFT 1 9762306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_2_LEN_MASK 0x3e 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_cistruct __ccs_data_block_regs3 { 10062306a36Sopenharmony_ci u8 reg_len; 10162306a36Sopenharmony_ci u8 addr[2]; 10262306a36Sopenharmony_ci} __packed; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci#define CCS_DATA_BLOCK_REGS_3_LEN_MASK 0x3f 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_cienum __ccs_data_ffd_pixelcode { 10762306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_EMBEDDED = 1, 10862306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_DUMMY = 2, 10962306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BLACK = 3, 11062306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_DARK = 4, 11162306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_VISIBLE = 5, 11262306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_0 = 8, 11362306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_1 = 9, 11462306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_2 = 10, 11562306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_3 = 11, 11662306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_4 = 12, 11762306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_5 = 13, 11862306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_MS_6 = 14, 11962306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_OB = 16, 12062306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_OB = 17, 12162306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_OB = 18, 12262306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_OB = 19, 12362306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_OB = 20, 12462306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_OB = 21, 12562306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_OB = 22, 12662306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_OB = 23, 12762306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOTAL = 24, 12862306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_PDAF = 32, 12962306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_PDAF = 33, 13062306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_PDAF = 34, 13162306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_PDAF = 35, 13262306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_PDAF = 36, 13362306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_PDAF = 37, 13462306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_PDAF = 38, 13562306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_PDAF = 39, 13662306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_SEPARATED_PDAF = 40, 13762306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_ORIGINAL_ORDER_PDAF = 41, 13862306a36Sopenharmony_ci CCS_DATA_BLOCK_FFD_PIXELCODE_VENDOR_PDAF = 41, 13962306a36Sopenharmony_ci}; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_cistruct __ccs_data_block_ffd_entry { 14262306a36Sopenharmony_ci u8 pixelcode; 14362306a36Sopenharmony_ci u8 reserved; 14462306a36Sopenharmony_ci u8 value[2]; 14562306a36Sopenharmony_ci} __packed; 14662306a36Sopenharmony_ci 14762306a36Sopenharmony_cistruct __ccs_data_block_ffd { 14862306a36Sopenharmony_ci u8 num_column_descs; 14962306a36Sopenharmony_ci u8 num_row_descs; 15062306a36Sopenharmony_ci} __packed; 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_cienum __ccs_data_block_rule_id { 15362306a36Sopenharmony_ci CCS_DATA_BLOCK_RULE_ID_IF = 1, 15462306a36Sopenharmony_ci CCS_DATA_BLOCK_RULE_ID_READ_ONLY_REGS = 2, 15562306a36Sopenharmony_ci CCS_DATA_BLOCK_RULE_ID_FFD = 3, 15662306a36Sopenharmony_ci CCS_DATA_BLOCK_RULE_ID_MSR = 4, 15762306a36Sopenharmony_ci CCS_DATA_BLOCK_RULE_ID_PDAF_READOUT = 5, 15862306a36Sopenharmony_ci}; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_cistruct __ccs_data_block_rule_if { 16162306a36Sopenharmony_ci u8 addr[2]; 16262306a36Sopenharmony_ci u8 value; 16362306a36Sopenharmony_ci u8 mask; 16462306a36Sopenharmony_ci} __packed; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_cienum __ccs_data_block_pdaf_readout_order { 16762306a36Sopenharmony_ci CCS_DATA_BLOCK_PDAF_READOUT_ORDER_ORIGINAL = 1, 16862306a36Sopenharmony_ci CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_WITHIN_LINE = 2, 16962306a36Sopenharmony_ci CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_TYPES_SEPARATE_LINES = 3, 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_cistruct __ccs_data_block_pdaf_readout { 17362306a36Sopenharmony_ci u8 pdaf_readout_info_reserved; 17462306a36Sopenharmony_ci u8 pdaf_readout_info_order; 17562306a36Sopenharmony_ci} __packed; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_cistruct __ccs_data_block_pdaf_pix_loc_block_desc { 17862306a36Sopenharmony_ci u8 block_type_id; 17962306a36Sopenharmony_ci u8 repeat_x[2]; 18062306a36Sopenharmony_ci} __packed; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_cistruct __ccs_data_block_pdaf_pix_loc_block_desc_group { 18362306a36Sopenharmony_ci u8 num_block_descs[2]; 18462306a36Sopenharmony_ci u8 repeat_y; 18562306a36Sopenharmony_ci} __packed; 18662306a36Sopenharmony_ci 18762306a36Sopenharmony_cienum __ccs_data_block_pdaf_pix_loc_pixel_type { 18862306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SEPARATED = 0, 18962306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SEPARATED = 1, 19062306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_TOP_SEPARATED = 2, 19162306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SEPARATED = 3, 19262306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SIDE_BY_SIDE = 4, 19362306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SIDE_BY_SIDE = 5, 19462306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_TOP_SIDE_BY_SIDE = 6, 19562306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SIDE_BY_SIDE = 7, 19662306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_TOP_LEFT = 8, 19762306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_TOP_RIGHT = 9, 19862306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_LEFT = 10, 19962306a36Sopenharmony_ci CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_RIGHT = 11, 20062306a36Sopenharmony_ci}; 20162306a36Sopenharmony_ci 20262306a36Sopenharmony_cistruct __ccs_data_block_pdaf_pix_loc_pixel_desc { 20362306a36Sopenharmony_ci u8 pixel_type; 20462306a36Sopenharmony_ci u8 small_offset_x; 20562306a36Sopenharmony_ci u8 small_offset_y; 20662306a36Sopenharmony_ci} __packed; 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_cistruct __ccs_data_block_pdaf_pix_loc { 20962306a36Sopenharmony_ci u8 main_offset_x[2]; 21062306a36Sopenharmony_ci u8 main_offset_y[2]; 21162306a36Sopenharmony_ci u8 global_pdaf_type; 21262306a36Sopenharmony_ci u8 block_width; 21362306a36Sopenharmony_ci u8 block_height; 21462306a36Sopenharmony_ci u8 num_block_desc_groups[2]; 21562306a36Sopenharmony_ci} __packed; 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_cistruct __ccs_data_block_end { 21862306a36Sopenharmony_ci u8 crc[4]; 21962306a36Sopenharmony_ci} __packed; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci#endif /* __CCS_DATA_DEFS_H__ */ 222