cxd2880_dvbt2.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * cxd2880_dvbt2.h
  4. * Sony CXD2880 DVB-T2/T tuner + demodulator driver
  5. * DVB-T2 related definitions
  6. *
  7. * Copyright (C) 2016, 2017, 2018 Sony Semiconductor Solutions Corporation
  8. */
  9. #ifndef CXD2880_DVBT2_H
  10. #define CXD2880_DVBT2_H
  11. #include "cxd2880_common.h"
  12. enum cxd2880_dvbt2_profile {
  13. CXD2880_DVBT2_PROFILE_BASE,
  14. CXD2880_DVBT2_PROFILE_LITE,
  15. CXD2880_DVBT2_PROFILE_ANY
  16. };
  17. enum cxd2880_dvbt2_version {
  18. CXD2880_DVBT2_V111,
  19. CXD2880_DVBT2_V121,
  20. CXD2880_DVBT2_V131
  21. };
  22. enum cxd2880_dvbt2_s1 {
  23. CXD2880_DVBT2_S1_BASE_SISO = 0x00,
  24. CXD2880_DVBT2_S1_BASE_MISO = 0x01,
  25. CXD2880_DVBT2_S1_NON_DVBT2 = 0x02,
  26. CXD2880_DVBT2_S1_LITE_SISO = 0x03,
  27. CXD2880_DVBT2_S1_LITE_MISO = 0x04,
  28. CXD2880_DVBT2_S1_RSVD3 = 0x05,
  29. CXD2880_DVBT2_S1_RSVD4 = 0x06,
  30. CXD2880_DVBT2_S1_RSVD5 = 0x07,
  31. CXD2880_DVBT2_S1_UNKNOWN = 0xff
  32. };
  33. enum cxd2880_dvbt2_base_s2 {
  34. CXD2880_DVBT2_BASE_S2_M2K_G_ANY = 0x00,
  35. CXD2880_DVBT2_BASE_S2_M8K_G_DVBT = 0x01,
  36. CXD2880_DVBT2_BASE_S2_M4K_G_ANY = 0x02,
  37. CXD2880_DVBT2_BASE_S2_M1K_G_ANY = 0x03,
  38. CXD2880_DVBT2_BASE_S2_M16K_G_ANY = 0x04,
  39. CXD2880_DVBT2_BASE_S2_M32K_G_DVBT = 0x05,
  40. CXD2880_DVBT2_BASE_S2_M8K_G_DVBT2 = 0x06,
  41. CXD2880_DVBT2_BASE_S2_M32K_G_DVBT2 = 0x07,
  42. CXD2880_DVBT2_BASE_S2_UNKNOWN = 0xff
  43. };
  44. enum cxd2880_dvbt2_lite_s2 {
  45. CXD2880_DVBT2_LITE_S2_M2K_G_ANY = 0x00,
  46. CXD2880_DVBT2_LITE_S2_M8K_G_DVBT = 0x01,
  47. CXD2880_DVBT2_LITE_S2_M4K_G_ANY = 0x02,
  48. CXD2880_DVBT2_LITE_S2_M16K_G_DVBT2 = 0x03,
  49. CXD2880_DVBT2_LITE_S2_M16K_G_DVBT = 0x04,
  50. CXD2880_DVBT2_LITE_S2_RSVD1 = 0x05,
  51. CXD2880_DVBT2_LITE_S2_M8K_G_DVBT2 = 0x06,
  52. CXD2880_DVBT2_LITE_S2_RSVD2 = 0x07,
  53. CXD2880_DVBT2_LITE_S2_UNKNOWN = 0xff
  54. };
  55. enum cxd2880_dvbt2_guard {
  56. CXD2880_DVBT2_G1_32 = 0x00,
  57. CXD2880_DVBT2_G1_16 = 0x01,
  58. CXD2880_DVBT2_G1_8 = 0x02,
  59. CXD2880_DVBT2_G1_4 = 0x03,
  60. CXD2880_DVBT2_G1_128 = 0x04,
  61. CXD2880_DVBT2_G19_128 = 0x05,
  62. CXD2880_DVBT2_G19_256 = 0x06,
  63. CXD2880_DVBT2_G_RSVD1 = 0x07,
  64. CXD2880_DVBT2_G_UNKNOWN = 0xff
  65. };
  66. enum cxd2880_dvbt2_mode {
  67. CXD2880_DVBT2_M2K = 0x00,
  68. CXD2880_DVBT2_M8K = 0x01,
  69. CXD2880_DVBT2_M4K = 0x02,
  70. CXD2880_DVBT2_M1K = 0x03,
  71. CXD2880_DVBT2_M16K = 0x04,
  72. CXD2880_DVBT2_M32K = 0x05,
  73. CXD2880_DVBT2_M_RSVD1 = 0x06,
  74. CXD2880_DVBT2_M_RSVD2 = 0x07
  75. };
  76. enum cxd2880_dvbt2_bw {
  77. CXD2880_DVBT2_BW_8 = 0x00,
  78. CXD2880_DVBT2_BW_7 = 0x01,
  79. CXD2880_DVBT2_BW_6 = 0x02,
  80. CXD2880_DVBT2_BW_5 = 0x03,
  81. CXD2880_DVBT2_BW_10 = 0x04,
  82. CXD2880_DVBT2_BW_1_7 = 0x05,
  83. CXD2880_DVBT2_BW_RSVD1 = 0x06,
  84. CXD2880_DVBT2_BW_RSVD2 = 0x07,
  85. CXD2880_DVBT2_BW_RSVD3 = 0x08,
  86. CXD2880_DVBT2_BW_RSVD4 = 0x09,
  87. CXD2880_DVBT2_BW_RSVD5 = 0x0a,
  88. CXD2880_DVBT2_BW_RSVD6 = 0x0b,
  89. CXD2880_DVBT2_BW_RSVD7 = 0x0c,
  90. CXD2880_DVBT2_BW_RSVD8 = 0x0d,
  91. CXD2880_DVBT2_BW_RSVD9 = 0x0e,
  92. CXD2880_DVBT2_BW_RSVD10 = 0x0f,
  93. CXD2880_DVBT2_BW_UNKNOWN = 0xff
  94. };
  95. enum cxd2880_dvbt2_l1pre_type {
  96. CXD2880_DVBT2_L1PRE_TYPE_TS = 0x00,
  97. CXD2880_DVBT2_L1PRE_TYPE_GS = 0x01,
  98. CXD2880_DVBT2_L1PRE_TYPE_TS_GS = 0x02,
  99. CXD2880_DVBT2_L1PRE_TYPE_RESERVED = 0x03,
  100. CXD2880_DVBT2_L1PRE_TYPE_UNKNOWN = 0xff
  101. };
  102. enum cxd2880_dvbt2_papr {
  103. CXD2880_DVBT2_PAPR_0 = 0x00,
  104. CXD2880_DVBT2_PAPR_1 = 0x01,
  105. CXD2880_DVBT2_PAPR_2 = 0x02,
  106. CXD2880_DVBT2_PAPR_3 = 0x03,
  107. CXD2880_DVBT2_PAPR_RSVD1 = 0x04,
  108. CXD2880_DVBT2_PAPR_RSVD2 = 0x05,
  109. CXD2880_DVBT2_PAPR_RSVD3 = 0x06,
  110. CXD2880_DVBT2_PAPR_RSVD4 = 0x07,
  111. CXD2880_DVBT2_PAPR_RSVD5 = 0x08,
  112. CXD2880_DVBT2_PAPR_RSVD6 = 0x09,
  113. CXD2880_DVBT2_PAPR_RSVD7 = 0x0a,
  114. CXD2880_DVBT2_PAPR_RSVD8 = 0x0b,
  115. CXD2880_DVBT2_PAPR_RSVD9 = 0x0c,
  116. CXD2880_DVBT2_PAPR_RSVD10 = 0x0d,
  117. CXD2880_DVBT2_PAPR_RSVD11 = 0x0e,
  118. CXD2880_DVBT2_PAPR_RSVD12 = 0x0f,
  119. CXD2880_DVBT2_PAPR_UNKNOWN = 0xff
  120. };
  121. enum cxd2880_dvbt2_l1post_constell {
  122. CXD2880_DVBT2_L1POST_BPSK = 0x00,
  123. CXD2880_DVBT2_L1POST_QPSK = 0x01,
  124. CXD2880_DVBT2_L1POST_QAM16 = 0x02,
  125. CXD2880_DVBT2_L1POST_QAM64 = 0x03,
  126. CXD2880_DVBT2_L1POST_C_RSVD1 = 0x04,
  127. CXD2880_DVBT2_L1POST_C_RSVD2 = 0x05,
  128. CXD2880_DVBT2_L1POST_C_RSVD3 = 0x06,
  129. CXD2880_DVBT2_L1POST_C_RSVD4 = 0x07,
  130. CXD2880_DVBT2_L1POST_C_RSVD5 = 0x08,
  131. CXD2880_DVBT2_L1POST_C_RSVD6 = 0x09,
  132. CXD2880_DVBT2_L1POST_C_RSVD7 = 0x0a,
  133. CXD2880_DVBT2_L1POST_C_RSVD8 = 0x0b,
  134. CXD2880_DVBT2_L1POST_C_RSVD9 = 0x0c,
  135. CXD2880_DVBT2_L1POST_C_RSVD10 = 0x0d,
  136. CXD2880_DVBT2_L1POST_C_RSVD11 = 0x0e,
  137. CXD2880_DVBT2_L1POST_C_RSVD12 = 0x0f,
  138. CXD2880_DVBT2_L1POST_CONSTELL_UNKNOWN = 0xff
  139. };
  140. enum cxd2880_dvbt2_l1post_cr {
  141. CXD2880_DVBT2_L1POST_R1_2 = 0x00,
  142. CXD2880_DVBT2_L1POST_R_RSVD1 = 0x01,
  143. CXD2880_DVBT2_L1POST_R_RSVD2 = 0x02,
  144. CXD2880_DVBT2_L1POST_R_RSVD3 = 0x03,
  145. CXD2880_DVBT2_L1POST_R_UNKNOWN = 0xff
  146. };
  147. enum cxd2880_dvbt2_l1post_fec_type {
  148. CXD2880_DVBT2_L1POST_FEC_LDPC16K = 0x00,
  149. CXD2880_DVBT2_L1POST_FEC_RSVD1 = 0x01,
  150. CXD2880_DVBT2_L1POST_FEC_RSVD2 = 0x02,
  151. CXD2880_DVBT2_L1POST_FEC_RSVD3 = 0x03,
  152. CXD2880_DVBT2_L1POST_FEC_UNKNOWN = 0xff
  153. };
  154. enum cxd2880_dvbt2_pp {
  155. CXD2880_DVBT2_PP1 = 0x00,
  156. CXD2880_DVBT2_PP2 = 0x01,
  157. CXD2880_DVBT2_PP3 = 0x02,
  158. CXD2880_DVBT2_PP4 = 0x03,
  159. CXD2880_DVBT2_PP5 = 0x04,
  160. CXD2880_DVBT2_PP6 = 0x05,
  161. CXD2880_DVBT2_PP7 = 0x06,
  162. CXD2880_DVBT2_PP8 = 0x07,
  163. CXD2880_DVBT2_PP_RSVD1 = 0x08,
  164. CXD2880_DVBT2_PP_RSVD2 = 0x09,
  165. CXD2880_DVBT2_PP_RSVD3 = 0x0a,
  166. CXD2880_DVBT2_PP_RSVD4 = 0x0b,
  167. CXD2880_DVBT2_PP_RSVD5 = 0x0c,
  168. CXD2880_DVBT2_PP_RSVD6 = 0x0d,
  169. CXD2880_DVBT2_PP_RSVD7 = 0x0e,
  170. CXD2880_DVBT2_PP_RSVD8 = 0x0f,
  171. CXD2880_DVBT2_PP_UNKNOWN = 0xff
  172. };
  173. enum cxd2880_dvbt2_plp_code_rate {
  174. CXD2880_DVBT2_R1_2 = 0x00,
  175. CXD2880_DVBT2_R3_5 = 0x01,
  176. CXD2880_DVBT2_R2_3 = 0x02,
  177. CXD2880_DVBT2_R3_4 = 0x03,
  178. CXD2880_DVBT2_R4_5 = 0x04,
  179. CXD2880_DVBT2_R5_6 = 0x05,
  180. CXD2880_DVBT2_R1_3 = 0x06,
  181. CXD2880_DVBT2_R2_5 = 0x07,
  182. CXD2880_DVBT2_PLP_CR_UNKNOWN = 0xff
  183. };
  184. enum cxd2880_dvbt2_plp_constell {
  185. CXD2880_DVBT2_QPSK = 0x00,
  186. CXD2880_DVBT2_QAM16 = 0x01,
  187. CXD2880_DVBT2_QAM64 = 0x02,
  188. CXD2880_DVBT2_QAM256 = 0x03,
  189. CXD2880_DVBT2_CON_RSVD1 = 0x04,
  190. CXD2880_DVBT2_CON_RSVD2 = 0x05,
  191. CXD2880_DVBT2_CON_RSVD3 = 0x06,
  192. CXD2880_DVBT2_CON_RSVD4 = 0x07,
  193. CXD2880_DVBT2_CONSTELL_UNKNOWN = 0xff
  194. };
  195. enum cxd2880_dvbt2_plp_type {
  196. CXD2880_DVBT2_PLP_TYPE_COMMON = 0x00,
  197. CXD2880_DVBT2_PLP_TYPE_DATA1 = 0x01,
  198. CXD2880_DVBT2_PLP_TYPE_DATA2 = 0x02,
  199. CXD2880_DVBT2_PLP_TYPE_RSVD1 = 0x03,
  200. CXD2880_DVBT2_PLP_TYPE_RSVD2 = 0x04,
  201. CXD2880_DVBT2_PLP_TYPE_RSVD3 = 0x05,
  202. CXD2880_DVBT2_PLP_TYPE_RSVD4 = 0x06,
  203. CXD2880_DVBT2_PLP_TYPE_RSVD5 = 0x07,
  204. CXD2880_DVBT2_PLP_TYPE_UNKNOWN = 0xff
  205. };
  206. enum cxd2880_dvbt2_plp_payload {
  207. CXD2880_DVBT2_PLP_PAYLOAD_GFPS = 0x00,
  208. CXD2880_DVBT2_PLP_PAYLOAD_GCS = 0x01,
  209. CXD2880_DVBT2_PLP_PAYLOAD_GSE = 0x02,
  210. CXD2880_DVBT2_PLP_PAYLOAD_TS = 0x03,
  211. CXD2880_DVBT2_PLP_PAYLOAD_RSVD1 = 0x04,
  212. CXD2880_DVBT2_PLP_PAYLOAD_RSVD2 = 0x05,
  213. CXD2880_DVBT2_PLP_PAYLOAD_RSVD3 = 0x06,
  214. CXD2880_DVBT2_PLP_PAYLOAD_RSVD4 = 0x07,
  215. CXD2880_DVBT2_PLP_PAYLOAD_RSVD5 = 0x08,
  216. CXD2880_DVBT2_PLP_PAYLOAD_RSVD6 = 0x09,
  217. CXD2880_DVBT2_PLP_PAYLOAD_RSVD7 = 0x0a,
  218. CXD2880_DVBT2_PLP_PAYLOAD_RSVD8 = 0x0b,
  219. CXD2880_DVBT2_PLP_PAYLOAD_RSVD9 = 0x0c,
  220. CXD2880_DVBT2_PLP_PAYLOAD_RSVD10 = 0x0d,
  221. CXD2880_DVBT2_PLP_PAYLOAD_RSVD11 = 0x0e,
  222. CXD2880_DVBT2_PLP_PAYLOAD_RSVD12 = 0x0f,
  223. CXD2880_DVBT2_PLP_PAYLOAD_RSVD13 = 0x10,
  224. CXD2880_DVBT2_PLP_PAYLOAD_RSVD14 = 0x11,
  225. CXD2880_DVBT2_PLP_PAYLOAD_RSVD15 = 0x12,
  226. CXD2880_DVBT2_PLP_PAYLOAD_RSVD16 = 0x13,
  227. CXD2880_DVBT2_PLP_PAYLOAD_RSVD17 = 0x14,
  228. CXD2880_DVBT2_PLP_PAYLOAD_RSVD18 = 0x15,
  229. CXD2880_DVBT2_PLP_PAYLOAD_RSVD19 = 0x16,
  230. CXD2880_DVBT2_PLP_PAYLOAD_RSVD20 = 0x17,
  231. CXD2880_DVBT2_PLP_PAYLOAD_RSVD21 = 0x18,
  232. CXD2880_DVBT2_PLP_PAYLOAD_RSVD22 = 0x19,
  233. CXD2880_DVBT2_PLP_PAYLOAD_RSVD23 = 0x1a,
  234. CXD2880_DVBT2_PLP_PAYLOAD_RSVD24 = 0x1b,
  235. CXD2880_DVBT2_PLP_PAYLOAD_RSVD25 = 0x1c,
  236. CXD2880_DVBT2_PLP_PAYLOAD_RSVD26 = 0x1d,
  237. CXD2880_DVBT2_PLP_PAYLOAD_RSVD27 = 0x1e,
  238. CXD2880_DVBT2_PLP_PAYLOAD_RSVD28 = 0x1f,
  239. CXD2880_DVBT2_PLP_PAYLOAD_UNKNOWN = 0xff
  240. };
  241. enum cxd2880_dvbt2_plp_fec {
  242. CXD2880_DVBT2_FEC_LDPC_16K = 0x00,
  243. CXD2880_DVBT2_FEC_LDPC_64K = 0x01,
  244. CXD2880_DVBT2_FEC_RSVD1 = 0x02,
  245. CXD2880_DVBT2_FEC_RSVD2 = 0x03,
  246. CXD2880_DVBT2_FEC_UNKNOWN = 0xff
  247. };
  248. enum cxd2880_dvbt2_plp_mode {
  249. CXD2880_DVBT2_PLP_MODE_NOTSPECIFIED = 0x00,
  250. CXD2880_DVBT2_PLP_MODE_NM = 0x01,
  251. CXD2880_DVBT2_PLP_MODE_HEM = 0x02,
  252. CXD2880_DVBT2_PLP_MODE_RESERVED = 0x03,
  253. CXD2880_DVBT2_PLP_MODE_UNKNOWN = 0xff
  254. };
  255. enum cxd2880_dvbt2_plp_btype {
  256. CXD2880_DVBT2_PLP_COMMON,
  257. CXD2880_DVBT2_PLP_DATA
  258. };
  259. enum cxd2880_dvbt2_stream {
  260. CXD2880_DVBT2_STREAM_GENERIC_PACKETIZED = 0x00,
  261. CXD2880_DVBT2_STREAM_GENERIC_CONTINUOUS = 0x01,
  262. CXD2880_DVBT2_STREAM_GENERIC_ENCAPSULATED = 0x02,
  263. CXD2880_DVBT2_STREAM_TRANSPORT = 0x03,
  264. CXD2880_DVBT2_STREAM_UNKNOWN = 0xff
  265. };
  266. struct cxd2880_dvbt2_l1pre {
  267. enum cxd2880_dvbt2_l1pre_type type;
  268. u8 bw_ext;
  269. enum cxd2880_dvbt2_s1 s1;
  270. u8 s2;
  271. u8 mixed;
  272. enum cxd2880_dvbt2_mode fft_mode;
  273. u8 l1_rep;
  274. enum cxd2880_dvbt2_guard gi;
  275. enum cxd2880_dvbt2_papr papr;
  276. enum cxd2880_dvbt2_l1post_constell mod;
  277. enum cxd2880_dvbt2_l1post_cr cr;
  278. enum cxd2880_dvbt2_l1post_fec_type fec;
  279. u32 l1_post_size;
  280. u32 l1_post_info_size;
  281. enum cxd2880_dvbt2_pp pp;
  282. u8 tx_id_availability;
  283. u16 cell_id;
  284. u16 network_id;
  285. u16 sys_id;
  286. u8 num_frames;
  287. u16 num_symbols;
  288. u8 regen;
  289. u8 post_ext;
  290. u8 num_rf_freqs;
  291. u8 rf_idx;
  292. enum cxd2880_dvbt2_version t2_version;
  293. u8 l1_post_scrambled;
  294. u8 t2_base_lite;
  295. u32 crc32;
  296. };
  297. struct cxd2880_dvbt2_plp {
  298. u8 id;
  299. enum cxd2880_dvbt2_plp_type type;
  300. enum cxd2880_dvbt2_plp_payload payload;
  301. u8 ff;
  302. u8 first_rf_idx;
  303. u8 first_frm_idx;
  304. u8 group_id;
  305. enum cxd2880_dvbt2_plp_constell constell;
  306. enum cxd2880_dvbt2_plp_code_rate plp_cr;
  307. u8 rot;
  308. enum cxd2880_dvbt2_plp_fec fec;
  309. u16 num_blocks_max;
  310. u8 frm_int;
  311. u8 til_len;
  312. u8 til_type;
  313. u8 in_band_a_flag;
  314. u8 in_band_b_flag;
  315. u16 rsvd;
  316. enum cxd2880_dvbt2_plp_mode plp_mode;
  317. u8 static_flag;
  318. u8 static_padding_flag;
  319. };
  320. struct cxd2880_dvbt2_l1post {
  321. u16 sub_slices_per_frame;
  322. u8 num_plps;
  323. u8 num_aux;
  324. u8 aux_cfg_rfu;
  325. u8 rf_idx;
  326. u32 freq;
  327. u8 fef_type;
  328. u32 fef_length;
  329. u8 fef_intvl;
  330. };
  331. struct cxd2880_dvbt2_ofdm {
  332. u8 mixed;
  333. u8 is_miso;
  334. enum cxd2880_dvbt2_mode mode;
  335. enum cxd2880_dvbt2_guard gi;
  336. enum cxd2880_dvbt2_pp pp;
  337. u8 bw_ext;
  338. enum cxd2880_dvbt2_papr papr;
  339. u16 num_symbols;
  340. };
  341. struct cxd2880_dvbt2_bbheader {
  342. enum cxd2880_dvbt2_stream stream_input;
  343. u8 is_single_input_stream;
  344. u8 is_constant_coding_modulation;
  345. u8 issy_indicator;
  346. u8 null_packet_deletion;
  347. u8 ext;
  348. u8 input_stream_identifier;
  349. u16 user_packet_length;
  350. u16 data_field_length;
  351. u8 sync_byte;
  352. u32 issy;
  353. enum cxd2880_dvbt2_plp_mode plp_mode;
  354. };
  355. #endif