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