bk4819-regs.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. /* Copyright 2023 Dual Tachyon
  2. * https://github.com/DualTachyon
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef BK4819_REGS_H
  17. #define BK4819_REGS_H
  18. #include <stdint.h>
  19. typedef struct {
  20. const char *name;
  21. uint8_t num;
  22. uint8_t offset;
  23. uint16_t mask;
  24. uint16_t inc;
  25. } RegisterSpec;
  26. static const RegisterSpec afcDisableRegSpec = {"AFC Disable", 0x73, 4, 1, 1};
  27. static const RegisterSpec afOutRegSpec = {"AF Output Select", 0x47, 8, 0xF, 1};
  28. static const RegisterSpec afDacGainRegSpec = {"AF DAC Gain", 0x48, 0, 0xF, 1};
  29. enum BK4819_REGISTER_t {
  30. BK4819_REG_00 = 0x00U,
  31. BK4819_REG_02 = 0x02U,
  32. BK4819_REG_06 = 0x06U,
  33. BK4819_REG_07 = 0x07U,
  34. BK4819_REG_08 = 0x08U,
  35. BK4819_REG_09 = 0x09U,
  36. BK4819_REG_0B = 0x0BU,
  37. BK4819_REG_0C = 0x0CU,
  38. BK4819_REG_0D = 0x0DU,
  39. BK4819_REG_0E = 0x0EU,
  40. // RX AGC Gain Table[0]
  41. BK4819_REG_10 = 0x10U,
  42. // RX AGC Gain Table[1]
  43. BK4819_REG_11 = 0x11U,
  44. // RX AGC Gain Table[2]
  45. BK4819_REG_12 = 0x12U,
  46. // RX AGC Gain Table[3]
  47. BK4819_REG_13 = 0x13U,
  48. // RX AGC Gain Table[-1]
  49. BK4819_REG_14 = 0x14U,
  50. BK4819_REG_19 = 0x19U,
  51. BK4819_REG_1F = 0x1FU,
  52. BK4819_REG_20 = 0x20U,
  53. BK4819_REG_21 = 0x21U,
  54. BK4819_REG_24 = 0x24U,
  55. BK4819_REG_28 = 0x28U,
  56. BK4819_REG_29 = 0x29U,
  57. BK4819_REG_2B = 0x2BU,
  58. BK4819_REG_30 = 0x30U,
  59. BK4819_REG_31 = 0x31U,
  60. BK4819_REG_32 = 0x32U,
  61. BK4819_REG_33 = 0x33U,
  62. BK4819_REG_36 = 0x36U,
  63. BK4819_REG_37 = 0x37U,
  64. BK4819_REG_38 = 0x38U,
  65. BK4819_REG_39 = 0x39U,
  66. BK4819_REG_3A = 0x3AU,
  67. BK4819_REG_3B = 0x3BU,
  68. BK4819_REG_3C = 0x3CU,
  69. BK4819_REG_3D = 0x3DU,
  70. BK4819_REG_3E = 0x3EU,
  71. BK4819_REG_3F = 0x3FU,
  72. BK4819_REG_40 = 0x40U,
  73. BK4819_REG_43 = 0x43U,
  74. BK4819_REG_46 = 0x46U,
  75. BK4819_REG_47 = 0x47U,
  76. BK4819_REG_48 = 0x48U,
  77. // REG_49<15:14> 0b00; High/Low Lo selection:
  78. // 0X: Auto High/Low Lo
  79. // 10: Low Lo
  80. // 11: High Lo
  81. // REG_49<13:7> 0x50; RF AGC high threshold, 1 dB/LSB
  82. // REG_49<6:0> 0x30; RF AGC low threshold, 1 dB/LSB
  83. BK4819_REG_49 = 0x49U,
  84. BK4819_REG_4D = 0x4DU,
  85. BK4819_REG_4E = 0x4EU,
  86. BK4819_REG_4F = 0x4FU,
  87. BK4819_REG_50 = 0x50U,
  88. BK4819_REG_51 = 0x51U,
  89. BK4819_REG_52 = 0x52U,
  90. BK4819_REG_58 = 0x58U,
  91. BK4819_REG_59 = 0x59U,
  92. BK4819_REG_5A = 0x5AU,
  93. BK4819_REG_5B = 0x5BU,
  94. BK4819_REG_5C = 0x5CU,
  95. BK4819_REG_5D = 0x5DU,
  96. BK4819_REG_5E = 0x5EU,
  97. BK4819_REG_5F = 0x5FU,
  98. BK4819_REG_63 = 0x63U,
  99. BK4819_REG_64 = 0x64U,
  100. BK4819_REG_65 = 0x65U,
  101. BK4819_REG_67 = 0x67U,
  102. BK4819_REG_68 = 0x68U,
  103. BK4819_REG_69 = 0x69U,
  104. BK4819_REG_6A = 0x6AU,
  105. BK4819_REG_6F = 0x6FU,
  106. BK4819_REG_70 = 0x70U,
  107. BK4819_REG_71 = 0x71U,
  108. BK4819_REG_72 = 0x72U,
  109. BK4819_REG_78 = 0x78U,
  110. BK4819_REG_79 = 0x79U,
  111. BK4819_REG_7A = 0x7AU,
  112. // REG_7B<15:0> 0xae34 RSSI table
  113. BK4819_REG_7B = 0x7BU,
  114. // REG_7C<15:0> 0x8000 RSSI table
  115. BK4819_REG_7C = 0x7CU,
  116. BK4819_REG_7D = 0x7DU,
  117. // REG_7E<15> 0; AGC fix mode:
  118. // 1: Fix
  119. // 0: Auto
  120. // REG_7E<14:12> 0b011; AGC fix index:
  121. // 011: Max.
  122. // …
  123. // 100: Min.
  124. // REG_7E<5:3> 0b101; DC filter bandwidth for TX (MIC in):
  125. // 000: Bypass DC filter
  126. // REG_7E<2:0> 0b110; DC filter bandwidth for RX (IF in):
  127. // 000: Bypass DC filter
  128. BK4819_REG_7E = 0x7EU,
  129. };
  130. typedef enum BK4819_REGISTER_t BK4819_REGISTER_t;
  131. enum BK4819_GPIO_PIN_t {
  132. BK4819_GPIO0_PIN28_RX_ENABLE = 0,
  133. BK4819_GPIO1_PIN29_PA_ENABLE = 1,
  134. BK4819_GPIO3_PIN31_UHF_LNA = 3,
  135. BK4819_GPIO4_PIN32_VHF_LNA = 4,
  136. BK4819_GPIO5_PIN1_RED = 5,
  137. BK4819_GPIO6_PIN2_GREEN = 6,
  138. };
  139. typedef enum BK4819_GPIO_PIN_t BK4819_GPIO_PIN_t;
  140. // REG 02
  141. #define BK4819_REG_02_SHIFT_FSK_TX_FINISHED 15
  142. #define BK4819_REG_02_SHIFT_FSK_FIFO_ALMOST_EMPTY 14
  143. #define BK4819_REG_02_SHIFT_FSK_RX_FINISHED 13
  144. #define BK4819_REG_02_SHIFT_FSK_FIFO_ALMOST_FULL 12
  145. #define BK4819_REG_02_SHIFT_DTMF_5TONE_FOUND 11
  146. #define BK4819_REG_02_SHIFT_CxCSS_TAIL 10
  147. #define BK4819_REG_02_SHIFT_CDCSS_FOUND 9
  148. #define BK4819_REG_02_SHIFT_CDCSS_LOST 8
  149. #define BK4819_REG_02_SHIFT_CTCSS_FOUND 7
  150. #define BK4819_REG_02_SHIFT_CTCSS_LOST 6
  151. #define BK4819_REG_02_SHIFT_VOX_FOUND 5
  152. #define BK4819_REG_02_SHIFT_VOX_LOST 4
  153. #define BK4819_REG_02_SHIFT_SQUELCH_FOUND 3
  154. #define BK4819_REG_02_SHIFT_SQUELCH_LOST 2
  155. #define BK4819_REG_02_SHIFT_FSK_RX_SYNC 1
  156. #define BK4819_REG_02_MASK_FSK_TX_FINISHED (1U << BK4819_REG_02_SHIFT_FSK_TX)
  157. #define BK4819_REG_02_MASK_FSK_FIFO_ALMOST_EMPTY (1U << BK4819_REG_02_SHIFT_FSK_FIFO_ALMOST_EMPTY)
  158. #define BK4819_REG_02_MASK_FSK_RX_FINISHED (1U << BK4819_REG_02_SHIFT_FSK_RX_FINISHED)
  159. #define BK4819_REG_02_MASK_FSK_FIFO_ALMOST_FULL (1U << BK4819_REG_02_SHIFT_FSK_FIFO_ALMOST_FULL)
  160. #define BK4819_REG_02_MASK_DTMF_5TONE_FOUND (1U << BK4819_REG_02_SHIFT_DTMF_5TONE_FOUND)
  161. #define BK4819_REG_02_MASK_CxCSS_TAIL (1U << BK4819_REG_02_SHIFT_CxCSS_TAIL)
  162. #define BK4819_REG_02_MASK_CDCSS_FOUND (1U << BK4819_REG_02_SHIFT_CDCSS_FOUND)
  163. #define BK4819_REG_02_MASK_CDCSS_LOST (1U << BK4819_REG_02_SHIFT_CDCSS_LOST)
  164. #define BK4819_REG_02_MASK_CTCSS_FOUND (1U << BK4819_REG_02_SHIFT_CTCSS_FOUND)
  165. #define BK4819_REG_02_MASK_CTCSS_LOST (1U << BK4819_REG_02_SHIFT_CTCSS_LOST)
  166. #define BK4819_REG_02_MASK_VOX_FOUND (1U << BK4819_REG_02_SHIFT_VOX_FOUND)
  167. #define BK4819_REG_02_MASK_VOX_LOST (1U << BK4819_REG_02_SHIFT_VOX_LOST)
  168. #define BK4819_REG_02_MASK_SQUELCH_FOUND (1U << BK4819_REG_02_SHIFT_SQUELCH_FOUND)
  169. #define BK4819_REG_02_MASK_SQUELCH_LOST (1U << BK4819_REG_02_SHIFT_SQUELCH_LOST)
  170. #define BK4819_REG_02_MASK_FSK_RX_SYNC (1U << BK4819_REG_02_SHIFT_FSK_RX_SYNC)
  171. #define BK4819_REG_02_FSK_TX_FINISHED (1U << BK4819_REG_02_SHIFT_FSK_TX_FINISHED)
  172. #define BK4819_REG_02_FSK_FIFO_ALMOST_EMPTY (1U << BK4819_REG_02_SHIFT_FSK_FIFO_ALMOST_EMPTY)
  173. #define BK4819_REG_02_FSK_RX_FINISHED (1U << BK4819_REG_02_SHIFT_FSK_RX_FINISHED)
  174. #define BK4819_REG_02_FSK_FIFO_ALMOST_FULL (1U << BK4819_REG_02_SHIFT_FSK_FIFO_ALMOST_FULL)
  175. #define BK4819_REG_02_DTMF_5TONE_FOUND (1U << BK4819_REG_02_SHIFT_DTMF_5TONE_FOUND)
  176. #define BK4819_REG_02_CxCSS_TAIL (1U << BK4819_REG_02_SHIFT_CxCSS_TAIL)
  177. #define BK4819_REG_02_CDCSS_FOUND (1U << BK4819_REG_02_SHIFT_CDCSS_FOUND)
  178. #define BK4819_REG_02_CDCSS_LOST (1U << BK4819_REG_02_SHIFT_CDCSS_LOST)
  179. #define BK4819_REG_02_CTCSS_FOUND (1U << BK4819_REG_02_SHIFT_CTCSS_FOUND)
  180. #define BK4819_REG_02_CTCSS_LOST (1U << BK4819_REG_02_SHIFT_CTCSS_LOST)
  181. #define BK4819_REG_02_VOX_FOUND (1U << BK4819_REG_02_SHIFT_VOX_FOUND)
  182. #define BK4819_REG_02_VOX_LOST (1U << BK4819_REG_02_SHIFT_VOX_LOST)
  183. #define BK4819_REG_02_SQUELCH_FOUND (1U << BK4819_REG_02_SHIFT_SQUELCH_FOUND)
  184. #define BK4819_REG_02_SQUELCH_LOST (1U << BK4819_REG_02_SHIFT_SQUELCH_LOST)
  185. #define BK4819_REG_02_FSK_RX_SYNC (1U << BK4819_REG_02_SHIFT_FSK_RX_SYNC)
  186. // REG 07
  187. #define BK4819_REG_07_SHIFT_FREQUENCY_MODE 13
  188. #define BK4819_REG_07_SHIFT_FREQUENCY 0
  189. #define BK4819_REG_07_MASK_FREQUENCY_MODE (0x0007U << BK4819_REG_07_SHIFT_FREQUENCY_MODE)
  190. #define BK4819_REG_07_MASK_FREQUENCY (0x1FFFU << BK4819_REG_07_SHIFT_FREQUENCY)
  191. #define BK4819_REG_07_MODE_CTC1 (0U << BK4819_REG_07_SHIFT_FREQUENCY_MODE)
  192. #define BK4819_REG_07_MODE_CTC2 (1U << BK4819_REG_07_SHIFT_FREQUENCY_MODE)
  193. #define BK4819_REG_07_MODE_CDCSS (2U << BK4819_REG_07_SHIFT_FREQUENCY_MODE)
  194. // REG 24
  195. #define BK4819_REG_24_SHIFT_UNKNOWN_15 15
  196. #define BK4819_REG_24_SHIFT_THRESHOLD 7
  197. #define BK4819_REG_24_SHIFT_UNKNOWN_6 6
  198. #define BK4819_REG_24_SHIFT_ENABLE 5
  199. #define BK4819_REG_24_SHIFT_SELECT 4
  200. #define BK4819_REG_24_SHIFT_MAX_SYMBOLS 0
  201. #define BK4819_REG_24_MASK_THRESHOLD (0x2Fu << BK4819_REG_24_SHIFT_THRESHOLD)
  202. #define BK4819_REG_24_MASK_ENABLE (0x01u << BK4819_REG_24_SHIFT_ENABLE)
  203. #define BK4819_REG_24_MASK_SELECT (0x04u << BK4819_REG_24_SHIFT_SELECT)
  204. #define BK4819_REG_24_MASK_MAX_SYMBOLS (0x0Fu << BK4819_REG_24_SHIFT_MAX_SYMBOLS)
  205. #define BK4819_REG_24_ENABLE (1u << BK4819_REG_24_SHIFT_ENABLE)
  206. #define BK4819_REG_24_DISABLE (0u << BK4819_REG_24_SHIFT_ENABLE)
  207. #define BK4819_REG_24_SELECT_DTMF (1u << BK4819_REG_24_SHIFT_SELECT)
  208. #define BK4819_REG_24_SELECT_SELCALL (0u << BK4819_REG_24_SHIFT_SELECT)
  209. // REG 30
  210. #define BK4819_REG_30_SHIFT_ENABLE_VCO_CALIB 15
  211. #define BK4819_REG_30_SHIFT_ENABLE_UNKNOWN 14
  212. #define BK4819_REG_30_SHIFT_ENABLE_RX_LINK 10
  213. #define BK4819_REG_30_SHIFT_ENABLE_AF_DAC 9
  214. #define BK4819_REG_30_SHIFT_ENABLE_DISC_MODE 8
  215. #define BK4819_REG_30_SHIFT_ENABLE_PLL_VCO 4
  216. #define BK4819_REG_30_SHIFT_ENABLE_PA_GAIN 3
  217. #define BK4819_REG_30_SHIFT_ENABLE_MIC_ADC 2
  218. #define BK4819_REG_30_SHIFT_ENABLE_TX_DSP 1
  219. #define BK4819_REG_30_SHIFT_ENABLE_RX_DSP 0
  220. #define BK4819_REG_30_MASK_ENABLE_VCO_CALIB (0x1U << BK4819_REG_30_SHIFT_ENABLE_VCO_CALIB)
  221. #define BK4819_REG_30_MASK_ENABLE_UNKNOWN (0x1U << BK4819_REG_30_SHIFT_ENABLE_UNKNOWN)
  222. #define BK4819_REG_30_MASK_ENABLE_RX_LINK (0xFU << BK4819_REG_30_SHIFT_ENABLE_RX_LINK)
  223. #define BK4819_REG_30_MASK_ENABLE_AF_DAC (0x1U << BK4819_REG_30_SHIFT_ENABLE_AF_DAC)
  224. #define BK4819_REG_30_MASK_ENABLE_DISC_MODE (0x1U << BK4819_REG_30_SHIFT_ENABLE_DISC_MODE)
  225. #define BK4819_REG_30_MASK_ENABLE_PLL_VCO (0xFU << BK4819_REG_30_SHIFT_ENABLE_PLL_VCO)
  226. #define BK4819_REG_30_MASK_ENABLE_PA_GAIN (0x1U << BK4819_REG_30_SHIFT_ENABLE_PA_GAIN)
  227. #define BK4819_REG_30_MASK_ENABLE_MIC_ADC (0x1U << BK4819_REG_30_SHIFT_ENABLE_MIC_ADC)
  228. #define BK4819_REG_30_MASK_ENABLE_TX_DSP (0x1U << BK4819_REG_30_SHIFT_ENABLE_TX_DSP)
  229. #define BK4819_REG_30_MASK_ENABLE_RX_DSP (0x1U << BK4819_REG_30_SHIFT_ENABLE_RX_DSP)
  230. enum {
  231. BK4819_REG_30_ENABLE_VCO_CALIB = (0x1U << BK4819_REG_30_SHIFT_ENABLE_VCO_CALIB),
  232. BK4819_REG_30_DISABLE_VCO_CALIB = (0x0U << BK4819_REG_30_SHIFT_ENABLE_VCO_CALIB),
  233. BK4819_REG_30_ENABLE_UNKNOWN = (0x1U << BK4819_REG_30_SHIFT_ENABLE_UNKNOWN),
  234. BK4819_REG_30_DISABLE_UNKNOWN = (0x0U << BK4819_REG_30_SHIFT_ENABLE_UNKNOWN),
  235. BK4819_REG_30_ENABLE_RX_LINK = (0xFU << BK4819_REG_30_SHIFT_ENABLE_RX_LINK),
  236. BK4819_REG_30_DISABLE_RX_LINK = (0x0U << BK4819_REG_30_SHIFT_ENABLE_RX_LINK),
  237. BK4819_REG_30_ENABLE_AF_DAC = (0x1U << BK4819_REG_30_SHIFT_ENABLE_AF_DAC),
  238. BK4819_REG_30_DISABLE_AF_DAC = (0x0U << BK4819_REG_30_SHIFT_ENABLE_AF_DAC),
  239. BK4819_REG_30_ENABLE_DISC_MODE = (0x1U << BK4819_REG_30_SHIFT_ENABLE_DISC_MODE),
  240. BK4819_REG_30_DISABLE_DISC_MODE = (0x0U << BK4819_REG_30_SHIFT_ENABLE_DISC_MODE),
  241. BK4819_REG_30_ENABLE_PLL_VCO = (0xFU << BK4819_REG_30_SHIFT_ENABLE_PLL_VCO),
  242. BK4819_REG_30_DISABLE_PLL_VCO = (0x0U << BK4819_REG_30_SHIFT_ENABLE_PLL_VCO),
  243. BK4819_REG_30_ENABLE_PA_GAIN = (0x1U << BK4819_REG_30_SHIFT_ENABLE_PA_GAIN),
  244. BK4819_REG_30_DISABLE_PA_GAIN = (0x0U << BK4819_REG_30_SHIFT_ENABLE_PA_GAIN),
  245. BK4819_REG_30_ENABLE_MIC_ADC = (0x1U << BK4819_REG_30_SHIFT_ENABLE_MIC_ADC),
  246. BK4819_REG_30_DISABLE_MIC_ADC = (0x0U << BK4819_REG_30_SHIFT_ENABLE_MIC_ADC),
  247. BK4819_REG_30_ENABLE_TX_DSP = (0x1U << BK4819_REG_30_SHIFT_ENABLE_TX_DSP),
  248. BK4819_REG_30_DISABLE_TX_DSP = (0x0U << BK4819_REG_30_SHIFT_ENABLE_TX_DSP),
  249. BK4819_REG_30_ENABLE_RX_DSP = (0x1U << BK4819_REG_30_SHIFT_ENABLE_RX_DSP),
  250. BK4819_REG_30_DISABLE_RX_DSP = (0x0U << BK4819_REG_30_SHIFT_ENABLE_RX_DSP),
  251. };
  252. // REG 3F
  253. #define BK4819_REG_3F_SHIFT_FSK_TX_FINISHED 15
  254. #define BK4819_REG_3F_SHIFT_FSK_FIFO_ALMOST_EMPTY 14
  255. #define BK4819_REG_3F_SHIFT_FSK_RX_FINISHED 13
  256. #define BK4819_REG_3F_SHIFT_FSK_FIFO_ALMOST_FULL 12
  257. #define BK4819_REG_3F_SHIFT_DTMF_5TONE_FOUND 11
  258. #define BK4819_REG_3F_SHIFT_CxCSS_TAIL 10
  259. #define BK4819_REG_3F_SHIFT_CDCSS_FOUND 9
  260. #define BK4819_REG_3F_SHIFT_CDCSS_LOST 8
  261. #define BK4819_REG_3F_SHIFT_CTCSS_FOUND 7
  262. #define BK4819_REG_3F_SHIFT_CTCSS_LOST 6
  263. #define BK4819_REG_3F_SHIFT_VOX_FOUND 5
  264. #define BK4819_REG_3F_SHIFT_VOX_LOST 4
  265. #define BK4819_REG_3F_SHIFT_SQUELCH_FOUND 3
  266. #define BK4819_REG_3F_SHIFT_SQUELCH_LOST 2
  267. #define BK4819_REG_3F_SHIFT_FSK_RX_SYNC 1
  268. #define BK4819_REG_3F_MASK_FSK_TX_FINISHED (1U << BK4819_REG_3F_SHIFT_FSK_TX)
  269. #define BK4819_REG_3F_MASK_FSK_FIFO_ALMOST_EMPTY (1U << BK4819_REG_3F_SHIFT_FSK_FIFO_ALMOST_EMPTY)
  270. #define BK4819_REG_3F_MASK_FSK_RX_FINISHED (1U << BK4819_REG_3F_SHIFT_FSK_RX_FINISHED)
  271. #define BK4819_REG_3F_MASK_FSK_FIFO_ALMOST_FULL (1U << BK4819_REG_3F_SHIFT_FSK_FIFO_ALMOST_FULL)
  272. #define BK4819_REG_3F_MASK_DTMF_5TONE_FOUND (1U << BK4819_REG_3F_SHIFT_DTMF_5TONE_FOUND)
  273. #define BK4819_REG_3F_MASK_CxCSS_TAIL (1U << BK4819_REG_3F_SHIFT_CxCSS_TAIL)
  274. #define BK4819_REG_3F_MASK_CDCSS_FOUND (1U << BK4819_REG_3F_SHIFT_CDCSS_FOUND)
  275. #define BK4819_REG_3F_MASK_CDCSS_LOST (1U << BK4819_REG_3F_SHIFT_CDCSS_LOST)
  276. #define BK4819_REG_3F_MASK_CTCSS_FOUND (1U << BK4819_REG_3F_SHIFT_CTCSS_FOUND)
  277. #define BK4819_REG_3F_MASK_CTCSS_LOST (1U << BK4819_REG_3F_SHIFT_CTCSS_LOST)
  278. #define BK4819_REG_3F_MASK_VOX_FOUND (1U << BK4819_REG_3F_SHIFT_VOX_FOUND)
  279. #define BK4819_REG_3F_MASK_VOX_LOST (1U << BK4819_REG_3F_SHIFT_VOX_LOST)
  280. #define BK4819_REG_3F_MASK_SQUELCH_FOUND (1U << BK4819_REG_3F_SHIFT_SQUELCH_FOUND)
  281. #define BK4819_REG_3F_MASK_SQUELCH_LOST (1U << BK4819_REG_3F_SHIFT_SQUELCH_LOST)
  282. #define BK4819_REG_3F_MASK_FSK_RX_SYNC (1U << BK4819_REG_3F_SHIFT_FSK_RX_SYNC)
  283. #define BK4819_REG_3F_FSK_TX_FINISHED (1U << BK4819_REG_3F_SHIFT_FSK_TX_FINISHED)
  284. #define BK4819_REG_3F_FSK_FIFO_ALMOST_EMPTY (1U << BK4819_REG_3F_SHIFT_FSK_FIFO_ALMOST_EMPTY)
  285. #define BK4819_REG_3F_FSK_RX_FINISHED (1U << BK4819_REG_3F_SHIFT_FSK_RX_FINISHED)
  286. #define BK4819_REG_3F_FSK_FIFO_ALMOST_FULL (1U << BK4819_REG_3F_SHIFT_FSK_FIFO_ALMOST_FULL)
  287. #define BK4819_REG_3F_DTMF_5TONE_FOUND (1U << BK4819_REG_3F_SHIFT_DTMF_5TONE_FOUND)
  288. #define BK4819_REG_3F_CxCSS_TAIL (1U << BK4819_REG_3F_SHIFT_CxCSS_TAIL)
  289. #define BK4819_REG_3F_CDCSS_FOUND (1U << BK4819_REG_3F_SHIFT_CDCSS_FOUND)
  290. #define BK4819_REG_3F_CDCSS_LOST (1U << BK4819_REG_3F_SHIFT_CDCSS_LOST)
  291. #define BK4819_REG_3F_CTCSS_FOUND (1U << BK4819_REG_3F_SHIFT_CTCSS_FOUND)
  292. #define BK4819_REG_3F_CTCSS_LOST (1U << BK4819_REG_3F_SHIFT_CTCSS_LOST)
  293. #define BK4819_REG_3F_VOX_FOUND (1U << BK4819_REG_3F_SHIFT_VOX_FOUND)
  294. #define BK4819_REG_3F_VOX_LOST (1U << BK4819_REG_3F_SHIFT_VOX_LOST)
  295. #define BK4819_REG_3F_SQUELCH_FOUND (1U << BK4819_REG_3F_SHIFT_SQUELCH_FOUND)
  296. #define BK4819_REG_3F_SQUELCH_LOST (1U << BK4819_REG_3F_SHIFT_SQUELCH_LOST)
  297. #define BK4819_REG_3F_FSK_RX_SYNC (1U << BK4819_REG_3F_SHIFT_FSK_RX_SYNC)
  298. // REG 51
  299. #define BK4819_REG_51_SHIFT_ENABLE_CxCSS 15
  300. #define BK4819_REG_51_SHIFT_GPIO6_PIN2_INPUT 14
  301. #define BK4819_REG_51_SHIFT_TX_CDCSS_POLARITY 13
  302. #define BK4819_REG_51_SHIFT_CxCSS_MODE 12
  303. #define BK4819_REG_51_SHIFT_CDCSS_BIT_WIDTH 11
  304. #define BK4819_REG_51_SHIFT_1050HZ_DETECTION 10
  305. #define BK4819_REG_51_SHIFT_AUTO_CDCSS_BW 9
  306. #define BK4819_REG_51_SHIFT_AUTO_CTCSS_BW 8
  307. #define BK4819_REG_51_SHIFT_CxCSS_TX_GAIN1 0
  308. #define BK4819_REG_51_MASK_ENABLE_CxCSS (0x01U << BK4819_REG_51_SHIFT_ENABLE_CxCSS)
  309. #define BK4819_REG_51_MASK_GPIO6_PIN2_INPUT (0x01U << BK4819_REG_51_SHIFT_GPIO6_PIN2_INPUT)
  310. #define BK4819_REG_51_MASK_TX_CDCSS_POLARITY (0x01U << BK4819_REG_51_SHIFT_TX_CDCSS_POLARITY)
  311. #define BK4819_REG_51_MASK_CxCSS_MODE (0x01U << BK4819_REG_51_SHIFT_CxCSS_MODE)
  312. #define BK4819_REG_51_MASK_CDCSS_BIT_WIDTH (0x01U << BK4819_REG_51_SHIFT_CDCSS_BIT_WIDTH)
  313. #define BK4819_REG_51_MASK_1050HZ_DETECTION (0x01U << BK4819_REG_51_SHIFT_1050HZ_DETECTION)
  314. #define BK4819_REG_51_MASK_AUTO_CDCSS_BW (0x01U << BK4819_REG_51_SHIFT_AUTO_CDCSS_BW)
  315. #define BK4819_REG_51_MASK_AUTO_CTCSS_BW (0x01U << BK4819_REG_51_SHIFT_AUTO_CTCSS_BW)
  316. #define BK4819_REG_51_MASK_CxCSS_TX_GAIN1 (0x7FU << BK4819_REG_51_SHIFT_CxCSS_TX_GAIN1)
  317. enum {
  318. BK4819_REG_51_ENABLE_CxCSS = (1U << BK4819_REG_51_SHIFT_ENABLE_CxCSS),
  319. BK4819_REG_51_DISABLE_CxCSS = (0U << BK4819_REG_51_SHIFT_ENABLE_CxCSS),
  320. BK4819_REG_51_GPIO6_PIN2_INPUT = (1U << BK4819_REG_51_SHIFT_GPIO6_PIN2_INPUT),
  321. BK4819_REG_51_GPIO6_PIN2_NORMAL = (0U << BK4819_REG_51_SHIFT_GPIO6_PIN2_INPUT),
  322. BK4819_REG_51_TX_CDCSS_NEGATIVE = (1U << BK4819_REG_51_SHIFT_TX_CDCSS_POLARITY),
  323. BK4819_REG_51_TX_CDCSS_POSITIVE = (0U << BK4819_REG_51_SHIFT_TX_CDCSS_POLARITY),
  324. BK4819_REG_51_MODE_CTCSS = (1U << BK4819_REG_51_SHIFT_CxCSS_MODE),
  325. BK4819_REG_51_MODE_CDCSS = (0U << BK4819_REG_51_SHIFT_CxCSS_MODE),
  326. BK4819_REG_51_CDCSS_24_BIT = (1U << BK4819_REG_51_SHIFT_CDCSS_BIT_WIDTH),
  327. BK4819_REG_51_CDCSS_23_BIT = (0U << BK4819_REG_51_SHIFT_CDCSS_BIT_WIDTH),
  328. BK4819_REG_51_1050HZ_DETECTION = (1U << BK4819_REG_51_SHIFT_1050HZ_DETECTION),
  329. BK4819_REG_51_1050HZ_NO_DETECTION = (0U << BK4819_REG_51_SHIFT_1050HZ_DETECTION),
  330. BK4819_REG_51_AUTO_CDCSS_BW_DISABLE = (1U << BK4819_REG_51_SHIFT_AUTO_CDCSS_BW),
  331. BK4819_REG_51_AUTO_CDCSS_BW_ENABLE = (0U << BK4819_REG_51_SHIFT_AUTO_CDCSS_BW),
  332. BK4819_REG_51_AUTO_CTCSS_BW_DISABLE = (1U << BK4819_REG_51_SHIFT_AUTO_CTCSS_BW),
  333. BK4819_REG_51_AUTO_CTCSS_BW_ENABLE = (0U << BK4819_REG_51_SHIFT_AUTO_CTCSS_BW),
  334. };
  335. // REG 70
  336. #define BK4819_REG_70_SHIFT_ENABLE_TONE1 15
  337. #define BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN 8
  338. #define BK4819_REG_70_SHIFT_ENABLE_TONE2 7
  339. #define BK4819_REG_70_SHIFT_TONE2_TUNING_GAIN 0
  340. #define BK4819_REG_70_MASK_ENABLE_TONE1 (0x01U << BK4819_REG_70_SHIFT_ENABLE_TONE1)
  341. #define BK4819_REG_70_MASK_TONE1_TUNING_GAIN (0x7FU << BK4819_REG_70_SHIFT_TONE1_TUNING_GAIN)
  342. #define BK4819_REG_70_MASK_ENABLE_TONE2 (0x01U << BK4819_REG_70_SHIFT_ENABLE_TONE2)
  343. #define BK4819_REG_70_MASK_TONE2_TUNING_GAIN (0x7FU << BK4819_REG_70_SHIFT_TONE2_TUNING_GAIN)
  344. enum {
  345. BK4819_REG_70_ENABLE_TONE1 = (1U << BK4819_REG_70_SHIFT_ENABLE_TONE1),
  346. BK4819_REG_70_ENABLE_TONE2 = (1U << BK4819_REG_70_SHIFT_ENABLE_TONE2),
  347. };
  348. #endif