1 | /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ |
2 | /* |
3 | * CCS static data binary format definitions |
4 | * |
5 | * Copyright 2019--2020 Intel Corporation |
6 | */ |
7 | |
8 | #ifndef __CCS_DATA_DEFS_H__ |
9 | #define __CCS_DATA_DEFS_H__ |
10 | |
11 | #include "ccs-data.h" |
12 | |
13 | #define CCS_STATIC_DATA_VERSION 0 |
14 | |
15 | enum __ccs_data_length_specifier_id { |
16 | CCS_DATA_LENGTH_SPECIFIER_1 = 0, |
17 | CCS_DATA_LENGTH_SPECIFIER_2 = 1, |
18 | CCS_DATA_LENGTH_SPECIFIER_3 = 2 |
19 | }; |
20 | |
21 | #define CCS_DATA_LENGTH_SPECIFIER_SIZE_SHIFT 6 |
22 | |
23 | struct __ccs_data_length_specifier { |
24 | u8 length; |
25 | } __packed; |
26 | |
27 | struct __ccs_data_length_specifier2 { |
28 | u8 length[2]; |
29 | } __packed; |
30 | |
31 | struct __ccs_data_length_specifier3 { |
32 | u8 length[3]; |
33 | } __packed; |
34 | |
35 | struct __ccs_data_block { |
36 | u8 id; |
37 | struct __ccs_data_length_specifier length; |
38 | } __packed; |
39 | |
40 | #define 5 |
41 | |
42 | struct __ccs_data_block3 { |
43 | u8 id; |
44 | struct __ccs_data_length_specifier2 length; |
45 | } __packed; |
46 | |
47 | struct __ccs_data_block4 { |
48 | u8 id; |
49 | struct __ccs_data_length_specifier3 length; |
50 | } __packed; |
51 | |
52 | enum __ccs_data_block_id { |
53 | CCS_DATA_BLOCK_ID_DUMMY = 1, |
54 | CCS_DATA_BLOCK_ID_DATA_VERSION = 2, |
55 | CCS_DATA_BLOCK_ID_SENSOR_READ_ONLY_REGS = 3, |
56 | CCS_DATA_BLOCK_ID_MODULE_READ_ONLY_REGS = 4, |
57 | CCS_DATA_BLOCK_ID_SENSOR_MANUFACTURER_REGS = 5, |
58 | CCS_DATA_BLOCK_ID_MODULE_MANUFACTURER_REGS = 6, |
59 | CCS_DATA_BLOCK_ID_SENSOR_RULE_BASED_BLOCK = 32, |
60 | CCS_DATA_BLOCK_ID_MODULE_RULE_BASED_BLOCK = 33, |
61 | CCS_DATA_BLOCK_ID_SENSOR_PDAF_PIXEL_LOCATION = 36, |
62 | CCS_DATA_BLOCK_ID_MODULE_PDAF_PIXEL_LOCATION = 37, |
63 | CCS_DATA_BLOCK_ID_LICENSE = 40, |
64 | CCS_DATA_BLOCK_ID_END = 127, |
65 | }; |
66 | |
67 | struct __ccs_data_block_version { |
68 | u8 static_data_version_major[2]; |
69 | u8 static_data_version_minor[2]; |
70 | u8 year[2]; |
71 | u8 month; |
72 | u8 day; |
73 | } __packed; |
74 | |
75 | struct __ccs_data_block_regs { |
76 | u8 reg_len; |
77 | } __packed; |
78 | |
79 | #define CCS_DATA_BLOCK_REGS_ADDR_MASK 0x07 |
80 | #define CCS_DATA_BLOCK_REGS_LEN_SHIFT 3 |
81 | #define CCS_DATA_BLOCK_REGS_LEN_MASK 0x38 |
82 | #define CCS_DATA_BLOCK_REGS_SEL_SHIFT 6 |
83 | |
84 | enum ccs_data_block_regs_sel { |
85 | CCS_DATA_BLOCK_REGS_SEL_REGS = 0, |
86 | CCS_DATA_BLOCK_REGS_SEL_REGS2 = 1, |
87 | CCS_DATA_BLOCK_REGS_SEL_REGS3 = 2, |
88 | }; |
89 | |
90 | struct __ccs_data_block_regs2 { |
91 | u8 reg_len; |
92 | u8 addr; |
93 | } __packed; |
94 | |
95 | #define CCS_DATA_BLOCK_REGS_2_ADDR_MASK 0x01 |
96 | #define CCS_DATA_BLOCK_REGS_2_LEN_SHIFT 1 |
97 | #define CCS_DATA_BLOCK_REGS_2_LEN_MASK 0x3e |
98 | |
99 | struct __ccs_data_block_regs3 { |
100 | u8 reg_len; |
101 | u8 addr[2]; |
102 | } __packed; |
103 | |
104 | #define CCS_DATA_BLOCK_REGS_3_LEN_MASK 0x3f |
105 | |
106 | enum __ccs_data_ffd_pixelcode { |
107 | CCS_DATA_BLOCK_FFD_PIXELCODE_EMBEDDED = 1, |
108 | CCS_DATA_BLOCK_FFD_PIXELCODE_DUMMY = 2, |
109 | CCS_DATA_BLOCK_FFD_PIXELCODE_BLACK = 3, |
110 | CCS_DATA_BLOCK_FFD_PIXELCODE_DARK = 4, |
111 | CCS_DATA_BLOCK_FFD_PIXELCODE_VISIBLE = 5, |
112 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_0 = 8, |
113 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_1 = 9, |
114 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_2 = 10, |
115 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_3 = 11, |
116 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_4 = 12, |
117 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_5 = 13, |
118 | CCS_DATA_BLOCK_FFD_PIXELCODE_MS_6 = 14, |
119 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_OB = 16, |
120 | CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_OB = 17, |
121 | CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_OB = 18, |
122 | CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_OB = 19, |
123 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_OB = 20, |
124 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_OB = 21, |
125 | CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_OB = 22, |
126 | CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_OB = 23, |
127 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOTAL = 24, |
128 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_PDAF = 32, |
129 | CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_PDAF = 33, |
130 | CCS_DATA_BLOCK_FFD_PIXELCODE_LEFT_PDAF = 34, |
131 | CCS_DATA_BLOCK_FFD_PIXELCODE_RIGHT_PDAF = 35, |
132 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_LEFT_PDAF = 36, |
133 | CCS_DATA_BLOCK_FFD_PIXELCODE_TOP_RIGHT_PDAF = 37, |
134 | CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_LEFT_PDAF = 38, |
135 | CCS_DATA_BLOCK_FFD_PIXELCODE_BOTTOM_RIGHT_PDAF = 39, |
136 | CCS_DATA_BLOCK_FFD_PIXELCODE_SEPARATED_PDAF = 40, |
137 | CCS_DATA_BLOCK_FFD_PIXELCODE_ORIGINAL_ORDER_PDAF = 41, |
138 | CCS_DATA_BLOCK_FFD_PIXELCODE_VENDOR_PDAF = 41, |
139 | }; |
140 | |
141 | struct __ccs_data_block_ffd_entry { |
142 | u8 pixelcode; |
143 | u8 reserved; |
144 | u8 value[2]; |
145 | } __packed; |
146 | |
147 | struct __ccs_data_block_ffd { |
148 | u8 num_column_descs; |
149 | u8 num_row_descs; |
150 | } __packed; |
151 | |
152 | enum __ccs_data_block_rule_id { |
153 | CCS_DATA_BLOCK_RULE_ID_IF = 1, |
154 | CCS_DATA_BLOCK_RULE_ID_READ_ONLY_REGS = 2, |
155 | CCS_DATA_BLOCK_RULE_ID_FFD = 3, |
156 | CCS_DATA_BLOCK_RULE_ID_MSR = 4, |
157 | CCS_DATA_BLOCK_RULE_ID_PDAF_READOUT = 5, |
158 | }; |
159 | |
160 | struct __ccs_data_block_rule_if { |
161 | u8 addr[2]; |
162 | u8 value; |
163 | u8 mask; |
164 | } __packed; |
165 | |
166 | enum __ccs_data_block_pdaf_readout_order { |
167 | CCS_DATA_BLOCK_PDAF_READOUT_ORDER_ORIGINAL = 1, |
168 | CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_WITHIN_LINE = 2, |
169 | CCS_DATA_BLOCK_PDAF_READOUT_ORDER_SEPARATE_TYPES_SEPARATE_LINES = 3, |
170 | }; |
171 | |
172 | struct __ccs_data_block_pdaf_readout { |
173 | u8 pdaf_readout_info_reserved; |
174 | u8 pdaf_readout_info_order; |
175 | } __packed; |
176 | |
177 | struct __ccs_data_block_pdaf_pix_loc_block_desc { |
178 | u8 block_type_id; |
179 | u8 repeat_x[2]; |
180 | } __packed; |
181 | |
182 | struct __ccs_data_block_pdaf_pix_loc_block_desc_group { |
183 | u8 num_block_descs[2]; |
184 | u8 repeat_y; |
185 | } __packed; |
186 | |
187 | enum __ccs_data_block_pdaf_pix_loc_pixel_type { |
188 | CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SEPARATED = 0, |
189 | CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SEPARATED = 1, |
190 | CCS_DATA_PDAF_PIXEL_TYPE_TOP_SEPARATED = 2, |
191 | CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SEPARATED = 3, |
192 | CCS_DATA_PDAF_PIXEL_TYPE_LEFT_SIDE_BY_SIDE = 4, |
193 | CCS_DATA_PDAF_PIXEL_TYPE_RIGHT_SIDE_BY_SIDE = 5, |
194 | CCS_DATA_PDAF_PIXEL_TYPE_TOP_SIDE_BY_SIDE = 6, |
195 | CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_SIDE_BY_SIDE = 7, |
196 | CCS_DATA_PDAF_PIXEL_TYPE_TOP_LEFT = 8, |
197 | CCS_DATA_PDAF_PIXEL_TYPE_TOP_RIGHT = 9, |
198 | CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_LEFT = 10, |
199 | CCS_DATA_PDAF_PIXEL_TYPE_BOTTOM_RIGHT = 11, |
200 | }; |
201 | |
202 | struct __ccs_data_block_pdaf_pix_loc_pixel_desc { |
203 | u8 pixel_type; |
204 | u8 small_offset_x; |
205 | u8 small_offset_y; |
206 | } __packed; |
207 | |
208 | struct __ccs_data_block_pdaf_pix_loc { |
209 | u8 main_offset_x[2]; |
210 | u8 main_offset_y[2]; |
211 | u8 global_pdaf_type; |
212 | u8 block_width; |
213 | u8 block_height; |
214 | u8 num_block_desc_groups[2]; |
215 | } __packed; |
216 | |
217 | struct __ccs_data_block_end { |
218 | u8 crc[4]; |
219 | } __packed; |
220 | |
221 | #endif /* __CCS_DATA_DEFS_H__ */ |
222 | |