222 lines
5.8 KiB
C
222 lines
5.8 KiB
C
|
/* 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__ */
|