ccs-data-defs.h 5.8 KB

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