no-OS
hmc630x.h
Go to the documentation of this file.
1 /***************************************************************************/
33 #ifndef _HMC630X_H_
34 #define _HMC630X_H_
35 
36 #include <stdbool.h>
37 #include <stdint.h>
38 #include "no_os_util.h"
39 #include "no_os_gpio.h"
40 
41 /* Code the row on highest 8 (of 16) bits and the field mask on lowest 8 bits. */
42 #define HMC630X_PARAM(row, mask) (((((uint16_t)row) << 8)) | (mask))
43 #define HMC630X_ROW(param) ((param) >> 8)
44 #define HMC630X_MASK(param) ((param) & 0xff)
45 
46 /* ROW0 */
47 #define HMC6301_LNA_PWRDWN HMC630X_PARAM(0, NO_OS_BIT(7))
48 #define HMC6301_BBAMP_PWRDN_I HMC630X_PARAM(0, NO_OS_BIT(6))
49 #define HMC6301_BBAMP_PWRDN_Q HMC630X_PARAM(0, NO_OS_BIT(5))
50 #define HMC6301_DIVIDER_PWRDN HMC630X_PARAM(0, NO_OS_BIT(4))
51 #define HMC6301_MIXER_PWRDN HMC630X_PARAM(0, NO_OS_BIT(3))
52 #define HMC6301_IFMIXER_PWRDN_I HMC630X_PARAM(0, NO_OS_BIT(2))
53 #define HMC6301_TRIPLER_PWRDN HMC630X_PARAM(0, NO_OS_BIT(1))
54 #define HMC6301_IFVGA_PWRDN HMC630X_PARAM(0, NO_OS_BIT(0))
55 
56 /* ROW1 */
57 #define HMC6300_PA_SEL_VGBS HMC630X_PARAM(1, NO_OS_GENMASK(7, 4))
58 #define HMC6300_PA_SEL_VREF HMC630X_PARAM(1, NO_OS_GENMASK(3, 0))
59 
60 #define HMC6301_IPC_PWRDWN HMC630X_PARAM(1, NO_OS_BIT(7))
61 #define HMC6301_IFMIX_PWRDN_Q HMC630X_PARAM(1, NO_OS_BIT(6))
62 #define HMC6301_IF_BGMUX_PWRDN HMC630X_PARAM(1, NO_OS_BIT(5))
63 #define HMC6301_ASK_PWRDN HMC630X_PARAM(1, NO_OS_BIT(4))
64 #define HMC6301_BBAMP_ATTEN1 HMC630X_PARAM(1, NO_OS_GENMASK(3, 2))
65 #define HMC6301_BBAMP_SELL_ASK HMC630X_PARAM(1, NO_OS_BIT(1))
66 #define HMC6301_BBAMP_SIGSHORT HMC630X_PARAM(1, NO_OS_BIT(0))
67 
68 /* ROW2 */
69 #define HMC6300_PA_SEL_ALC_DAC HMC630X_PARAM(2, NO_OS_GENMASK(7, 4))
70 #define HMC6300_PA_SEP_PA_PWRDWN_FAST HMC630X_PARAM(2, NO_OS_BIT(3))
71 #define HMC6300_PA_PWRDWN_FAST HMC630X_PARAM(2, NO_OS_BIT(2))
72 #define HMC6300_PA_SE_SEL HMC630X_PARAM(2, NO_OS_BIT(1))
73 #define HMC6300_POWER_DET_PWRDN HMC630X_PARAM(2, NO_OS_BIT(0))
74 
75 #define HMC6301_BBAMP_ATTENFI HMC630X_PARAM(2, NO_OS_GENMASK(7, 5))
76 #define HMC6301_BBAMP_ATTENFQ HMC630X_PARAM(2, NO_OS_GENMASK(4, 2))
77 #define HMC6301_BBAMP_ATTEN2 HMC630X_PARAM(2, NO_OS_GENMASK(1, 0))
78 
79 /* ROW3 */
80 #define HMC6300_DRIVER_BIAS HMC630X_PARAM(3, NO_OS_GENMASK(7, 5))
81 #define HMC6300_DRIVER_BIAS2 HMC630X_PARAM(3, NO_OS_GENMASK(4, 2))
82 #define HMC6300_EN_IFMIX_HICG HMC630X_PARAM(3, NO_OS_BIT(1))
83 #define HMC6300_EN_TEMPFLASH HMC630X_PARAM(3, NO_OS_BIT(0))
84 
85 #define HMC6301_BBAMP_SELBW HMC630X_PARAM(3, NO_OS_GENMASK(7, 6))
86 #define HMC6301_BBAMP_SELFASTREC HMC630X_PARAM(3, NO_OS_GENMASK(5, 4))
87 #define HMC6301_BG_MONITOR_SEL HMC630X_PARAM(3, NO_OS_GENMASK(3, 2))
88 #define HMC6301_IF_REFSEL HMC630X_PARAM(3, NO_OS_BIT(1))
89 #define HMC6301_LNA_REFSEL HMC630X_PARAM(3, NO_OS_BIT(0))
90 
91 /* ROW4 */
92 #define HMC6300_DRIVER_PWRDN HMC630X_PARAM(4, NO_OS_BIT(7))
93 #define HMC6300_UPMIXER_PWRDN HMC630X_PARAM(4, NO_OS_BIT(6))
94 #define HMC6300_IFVGA_PWRDN HMC630X_PARAM(4, NO_OS_BIT(5))
95 #define HMC6300_DIVIDER_PWRDN HMC630X_PARAM(4, NO_OS_BIT(4))
96 #define HMC6300_PA_PWRDN HMC630X_PARAM(4, NO_OS_BIT(3))
97 #define HMC6300_RFVGA_PWRDN HMC630X_PARAM(4, NO_OS_BIT(2))
98 #define HMC6300_TRIPLER_PWRDN HMC630X_PARAM(4, NO_OS_BIT(1))
99 #define HMC6300_IF_UPMIXER_PWRDN HMC630X_PARAM(4, NO_OS_BIT(0))
100 
101 #define HMC6301_IFVGA_BIAS HMC630X_PARAM(4, NO_OS_GENMASK(7, 5))
102 #define HMC6301_IFVGA_TUNE HMC630X_PARAM(4, NO_OS_GENMASK(4, 1))
103 #define HMC6301_ENDIGVGA HMC630X_PARAM(4, NO_OS_BIT(0))
104 
105 /* ROW5 */
106 #define HMC6300_TRIPLER_BIAS_HIGH HMC630X_PARAM(5, NO_OS_GENMASK(7, 0))
107 
108 #define HMC6301_IFVGA_VGA_ADJ HMC630X_PARAM(5, NO_OS_GENMASK(7, 4))
109 #define HMC6301_RFMIX_TUNE HMC630X_PARAM(5, NO_OS_GENMASK(3, 0))
110 
111 /* ROW6 */
112 #define HMC6300_TRIPLER_BIAS_LOW HMC630X_PARAM(6, NO_OS_GENMASK(7, 2))
113 
114 #define HMC6301_TRIPLER_BIAS_HIGH HMC630X_PARAM(6, NO_OS_GENMASK(7, 0))
115 
116 /* ROW7 */
117 #define HMC6300_IFVGA_VGA_ADJ HMC630X_PARAM(7, NO_OS_GENMASK(7, 4))
118 #define HMC6300_IFVGA_TUNE HMC630X_PARAM(7, NO_OS_GENMASK(3, 0))
119 
120 #define HMC6301_TRIPLER_BIAS_LOW HMC630X_PARAM(7, NO_OS_GENMASK(7, 2))
121 #define HMC6301_BBAMP_SELFM HMC630X_PARAM(7, NO_OS_BIT(1))
122 #define HMC6301_FM_PWRDN HMC630X_PARAM(7, NO_OS_BIT(0))
123 
124 /* ROW8 */
125 #define HMC6300_IFVGA_BIAS HMC630X_PARAM(8, NO_OS_GENMASK(7, 4))
126 #define HMC6300_IF_UPMIXER_TUNE HMC630X_PARAM(8, NO_OS_GENMASK(3, 0))
127 
128 #define HMC6301_LNA_BIAS HMC630X_PARAM(8, NO_OS_GENMASK(7, 5))
129 #define HMC6301_LNA_GAIN HMC630X_PARAM(8, NO_OS_GENMASK(4, 3))
130 #define HMC6301_IFVGA_Q_CNTRL HMC630X_PARAM(8, NO_OS_GENMASK(2, 0))
131 
132 /* ROW9*/
133 #define HMC6300_IFVGA_Q_CNTRL HMC630X_PARAM(9, NO_OS_GENMASK(7, 5))
134 
135 #define HMC6301_ENANAV_LNA HMC630X_PARAM(9, NO_OS_BIT(7))
136 #define HMC6301_ENBAR_TEMPS HMC630X_PARAM(9, NO_OS_BIT(6))
137 #define HMC6301_EN_TEMPFLASH HMC630X_PARAM(9, NO_OS_BIT(5))
138 #define HMC6301_EN_SEP_IFMIX_PWRDN_Q HMC630X_PARAM(9, NO_OS_BIT(4))
139 
140 /* ROW10 */
141 #define HMC6300_ENABLE_FM HMC630X_PARAM(10, NO_OS_BIT(7))
142 #define HMC6300_IF_REFSEL HMC630X_PARAM(10, NO_OS_BIT(6))
143 #define HMC6300_BG_MONITOR HMC630X_PARAM(10, NO_OS_BIT(5))
144 #define HMC6300_ENDIG_IFVGA_GAIN_CONTROL HMC630X_PARAM(10, NO_OS_BIT(4))
145 #define HMC6300_IPC_PWRDN HMC630X_PARAM(10, NO_OS_BIT(3))
146 #define HMC6300_IF_BGMUX_PWRDN HMC630X_PARAM(10, NO_OS_BIT(2))
147 #define HMC6300_UPMIX_CAL_PWRDN HMC630X_PARAM(10, NO_OS_BIT(1))
148 #define HMC6300_TEMPSENSOR_PWRDN HMC630X_PARAM(10, NO_OS_BIT(0))
149 
150 /* ROW11 */
151 #define HMC6300_RFVGAGAIN HMC630X_PARAM(11, NO_OS_GENMASK(7, 4))
152 #define HMC6300_ENRFVGA_ANA HMC630X_PARAM(11, NO_OS_BIT(3))
153 #define HMC6300_RFVGA_ICTRL HMC630X_PARAM(11, NO_OS_GENMASK(2, 0))
154 
155 /* ROW12 */
156 #define HMC6300_UPMIX_CAL HMC630X_PARAM(12, NO_OS_GENMASK(7, 0))
157 
158 /* ROW16 */
159 #define HMC630X_BYP_SYNTH_LDO HMC630X_PARAM(16, NO_OS_BIT(7))
160 #define HMC630X_EN_CPSHORT HMC630X_PARAM(16, NO_OS_BIT(6))
161 #define HMC630X_EN_CPCMFB HMC630X_PARAM(16, NO_OS_BIT(5))
162 #define HMC630X_EN_CP_DUMP HMC630X_PARAM(16, NO_OS_BIT(4))
163 #define HMC630X_EN_CPTRIST HMC630X_PARAM(16, NO_OS_BIT(3))
164 #define HMC630X_EN_CP HMC630X_PARAM(16, NO_OS_BIT(2))
165 #define HMC630X_EN_SYNTH_LDO HMC630X_PARAM(16, NO_OS_BIT(1))
166 #define HMC630X_ENBAR_SYNTHBG HMC630X_PARAM(16, NO_OS_BIT(0))
167 
168 /* ROW17 */
169 #define HMC630X_EN_LOCKD_CLK HMC630X_PARAM(17, NO_OS_BIT(7))
170 #define HMC630X_EN_TEST_DIVOUT HMC630X_PARAM(17, NO_OS_BIT(6))
171 #define HMC630X_EN_VTUNE_FLASH HMC630X_PARAM(17, NO_OS_BIT(5))
172 #define HMC630X_EN_REBUF_DC HMC630X_PARAM(17, NO_OS_BIT(4))
173 #define HMC630X_EN_REFBUF HMC630X_PARAM(17, NO_OS_BIT(3))
174 #define HMC630X_EN_STICK_DIV HMC630X_PARAM(17, NO_OS_BIT(2))
175 #define HMC630X_EN_FBDIV_CML2CMOS HMC630X_PARAM(17, NO_OS_BIT(1))
176 #define HMC630X_EN_FBDIV HMC630X_PARAM(17, NO_OS_BIT(0))
177 
178 /* ROW18 */
179 #define HMC630X_EN_NB250M HMC630X_PARAM(18, NO_OS_BIT(6))
180 #define HMC630X_BYP_VCO_LDO HMC630X_PARAM(18, NO_OS_BIT(5))
181 #define HMC630X_EN_EXTLO HMC630X_PARAM(18, NO_OS_BIT(4))
182 #define HMC630X_EN_VCOPK HMC630X_PARAM(18, NO_OS_BIT(3))
183 #define HMC630X_EN_VCO HMC630X_PARAM(18, NO_OS_BIT(2))
184 #define HMC630X_EN_VCO_REG HMC630X_PARAM(18, NO_OS_BIT(1))
185 #define HMC630X_ENBAR_VCOGB HMC630X_PARAM(18, NO_OS_BIT(0))
186 
187 /* ROW19 */
188 #define HMC630X_REFSEL_SYNTHBG HMC630X_PARAM(19, NO_OS_BIT(1))
189 #define HMC630X_MUXREF HMC630X_PARAM(19, NO_OS_BIT(0))
190 
191 /* ROW20 */
192 #define HMC630X_FBDIV_CODE HMC630X_PARAM(20, NO_OS_GENMASK(6, 0))
193 
194 /* ROW21 */
195 #define HMC630X_REFSEL_VCOBG HMC630X_PARAM(21, NO_OS_BIT(4))
196 #define HMC630X_VCO_BIASTRIM HMC630X_PARAM(21, NO_OS_GENMASK(3, 0))
197 
198 /* ROW22 */
199 #define HMC630X_VCO_BANDSEL HMC630X_PARAM(22, NO_OS_GENMASK(6, 0))
200 
201 /* ROW23 */
202 #define HMC630X_ICP_BIASTRIM HMC630X_PARAM(23, NO_OS_GENMASK(7, 5))
203 #define HMC630X_VCO_OFFSET HMC630X_PARAM(23, NO_OS_GENMASK(4, 0))
204 
205 /* ROW24 */
206 #define HMC630X_LOCKDET HMC630X_PARAM(24, NO_OS_BIT(3))
207 #define HMC630X_DN HMC630X_PARAM(24, NO_OS_BIT(2))
208 #define HMC630X_UP HMC630X_PARAM(24, NO_OS_BIT(1))
209 #define HMC630X_CENTER HMC630X_PARAM(24, NO_OS_BIT(0))
210 
211 /* ROW25 */
212 #define HMC630X_VTUNE_FLASHP HMC630X_PARAM(25, NO_OS_GENMASK(7, 0))
213 
214 /* ROW26 */
215 #define HMC630X_VTUNE_FLASHN HMC630X_PARAM(26, NO_OS_GENMASK(7, 0))
216 
217 /* ROW27 */
218 #define HMC630X_TEMPS HMC630X_PARAM(27, NO_OS_GENMASK(4, 0))
219 
220 /* Devices supported by this driver. */
224 };
225 
226 /* Possible values for receiver LNA attenuator. */
232 };
233 
234 /* Possible baseband attenuation values. */
240 };
241 
242 /* Possible baseband fine attenuation adjustment values. */
252 };
253 
254 /* Possible values for the low-pass corner of the baseband amplifiers. */
260 };
261 
262 /* Possible values for the high-pass corner of the baseband amplifiers. */
267  HMC6301_BB_HPC_RESERVED /* Do not use. */
268 };
269 
270 /* Possible values for the external reference clock. */
276 };
277 
278 struct hmc6300_attr {
279  uint8_t rf_attn;
280 };
281 
282 struct hmc6301_attr {
290 };
291 
292 /* Initialization parameters for hmc6300_init(). */
295  enum hmc630x_ref_clk ref_clk; /* Reference clock value. */
296  struct no_os_gpio_init_param en; /* EN GPIO signal of the digital interface. */
298  clk; /* CLK GPIO signal of the digital interface. */
300  data; /* DATA GPIO signal of the digital interface. */
302  scanout; /* SCANOUT GPIO signal of the digital interface. */
303  bool enabled;
304  bool temp_en;
305  uint64_t vco;
306  uint8_t if_attn;
307  union {
308  struct hmc6300_attr tx;
309  struct hmc6301_attr rx;
310  };
311 };
312 
313 struct hmc630x_dev;
314 struct hmc630x_vco;
315 
316 /* Device driver init/remove API. */
317 int hmc630x_init(struct hmc630x_dev **dev, struct hmc630x_init_param *init);
318 int hmc630x_remove(struct hmc630x_dev *dev);
319 enum hmc630x_type hmc630x_type(struct hmc630x_dev *dev);
320 
321 /* Register access API. */
322 int hmc630x_write_row(struct hmc630x_dev *dev, uint8_t row, uint8_t val);
323 int hmc630x_read_row(struct hmc630x_dev *dev, uint8_t row, uint8_t *val);
324 int hmc630x_write(struct hmc630x_dev *dev, uint16_t param, uint8_t val);
325 int hmc630x_read(struct hmc630x_dev *dev, uint16_t param, uint8_t *val);
326 int hmc630x_write_regmap(struct hmc630x_dev *dev, const uint8_t *regmap);
327 int hmc630x_read_regmap(struct hmc630x_dev *dev, uint8_t *regmap);
328 
329 /* hmc6300/hmc6301 API. */
330 int hmc630x_set_temp_en(struct hmc630x_dev *dev, bool enable);
331 int hmc630x_get_temp_en(struct hmc630x_dev *dev, bool *enable);
332 int hmc630x_get_temp(struct hmc630x_dev *dev, uint8_t *temp);
333 int hmc630x_set_enable(struct hmc630x_dev *dev, bool enable);
334 int hmc630x_get_enable(struct hmc630x_dev *dev, bool *enable);
335 int hmc630x_set_if_attn(struct hmc630x_dev *dev, uint8_t attn);
336 int hmc630x_get_if_attn(struct hmc630x_dev *dev, uint8_t *attn);
337 int hmc630x_set_vco(struct hmc630x_dev *dev, uint64_t frequency);
338 int hmc630x_get_vco(struct hmc630x_dev *dev, uint64_t *frequency);
339 int hmc630x_get_avail_vco(struct hmc630x_dev *dev, const uint64_t **avail,
340  uint8_t *avail_num);
341 
342 /* hmc6300-only API. */
343 int hmc6300_set_fm_en(struct hmc630x_dev *dev, bool enable);
344 int hmc6300_get_fm_en(struct hmc630x_dev *dev, bool *enable);
345 int hmc6300_set_rf_attn(struct hmc630x_dev *dev, uint8_t attn);
346 int hmc6300_get_rf_attn(struct hmc630x_dev *dev, uint8_t *attn);
347 
348 /* hmc6301-only API. */
349 int hmc6301_set_lna_gain(struct hmc630x_dev *dev, enum hmc6301_lna_attn gain);
350 int hmc6301_get_lna_gain(struct hmc630x_dev *dev, enum hmc6301_lna_attn *gain);
351 int hmc6301_set_bb_attn(struct hmc630x_dev *dev, enum hmc6301_bb_attn attn1,
352  enum hmc6301_bb_attn attn2);
353 int hmc6301_get_bb_attn(struct hmc630x_dev *dev, enum hmc6301_bb_attn *attn1,
354  enum hmc6301_bb_attn *attn2);
355 int hmc6301_set_bb_attn_fine(struct hmc630x_dev *dev,
356  enum hmc6301_bb_attn_fine attn_i,
357  enum hmc6301_bb_attn_fine attn_q);
358 int hmc6301_get_bb_attn_fine(struct hmc630x_dev *dev,
359  enum hmc6301_bb_attn_fine *attn_i,
360  enum hmc6301_bb_attn_fine *attn_q);
361 int hmc6301_set_bb_lpc_hpc(struct hmc630x_dev *dev, enum hmc6301_bb_lpc lpc,
362  enum hmc6301_bb_hpc hpc);
363 int hmc6301_get_bb_lpc_hpc(struct hmc630x_dev *dev, enum hmc6301_bb_lpc *lpc,
364  enum hmc6301_bb_hpc *hpc);
365 
366 #endif
HMC6300_BITBANG_DELAY_US
#define HMC6300_BITBANG_DELAY_US
Definition: hmc630x.c:46
HMC6301_BBAMP_ATTEN2
#define HMC6301_BBAMP_ATTEN2
Definition: hmc630x.h:77
hmc630x_init_param::rx
struct hmc6301_attr rx
Definition: hmc630x.h:309
hmc630x_set_vco
int hmc630x_set_vco(struct hmc630x_dev *dev, uint64_t frequency)
Definition: hmc630x.c:743
HMC6300_DIVIDER_PWRDN
#define HMC6300_DIVIDER_PWRDN
Definition: hmc630x.h:95
HMC6301_BBAMP_ATTEN1
#define HMC6301_BBAMP_ATTEN1
Definition: hmc630x.h:64
hmc630x_set_if_attn
int hmc630x_set_if_attn(struct hmc630x_dev *dev, uint8_t attn)
Definition: hmc630x.c:675
hmc630x_remove
int hmc630x_remove(struct hmc630x_dev *dev)
Definition: hmc630x.c:254
no_os_alloc.h
no_os_gpio_init_param
Structure holding the parameters for GPIO initialization.
Definition: no_os_gpio.h:79
hmc630x_init_param::enabled
bool enabled
Definition: hmc630x.h:303
hmc630x_remove
int hmc630x_remove(struct hmc630x_dev *dev)
Definition: hmc630x.c:254
hmc630x_init_param
Definition: hmc630x.h:293
HMC6301_BB_LPC_1400MHz
@ HMC6301_BB_LPC_1400MHz
Definition: hmc630x.h:256
hmc6301_attr
Definition: hmc630x.h:282
hmc630x_init_param::temp_en
bool temp_en
Definition: hmc630x.h:304
hmc630x_read
int hmc630x_read(struct hmc630x_dev *dev, uint16_t param, uint8_t *value)
Definition: hmc630x.c:430
hmc630x_init
int hmc630x_init(struct hmc630x_dev **dev, struct hmc630x_init_param *init)
Definition: hmc630x.c:109
HMC6300_TRIPLER_PWRDN
#define HMC6300_TRIPLER_PWRDN
Definition: hmc630x.h:98
HMC630X_FRAME_SIZE
#define HMC630X_FRAME_SIZE
Definition: hmc630x.c:44
hmc630x_read
int hmc630x_read(struct hmc630x_dev *dev, uint16_t param, uint8_t *val)
Definition: hmc630x.c:430
hmc6300_attr::rf_attn
uint8_t rf_attn
Definition: hmc630x.h:279
HMC630X_FBDIV_CODE
#define HMC630X_FBDIV_CODE
Definition: hmc630x.h:192
HMC6301_BB_ATTN_18dB
@ HMC6301_BB_ATTN_18dB
Definition: hmc630x.h:239
HMC6301_BB_ATTN_FINE_1dB
@ HMC6301_BB_ATTN_FINE_1dB
Definition: hmc630x.h:248
HMC6301_BBAMP_SELFASTREC
#define HMC6301_BBAMP_SELFASTREC
Definition: hmc630x.h:86
hmc6301_set_lna_gain
int hmc6301_set_lna_gain(struct hmc630x_dev *dev, enum hmc6301_lna_attn gain)
Definition: hmc630x.c:865
hmc6301_attr::bb_attni_fine
enum hmc6301_bb_attn_fine bb_attni_fine
Definition: hmc630x.h:285
hmc6300_get_rf_attn
int hmc6300_get_rf_attn(struct hmc630x_dev *dev, uint8_t *attn)
Definition: hmc630x.c:730
no_os_gpio_get_value
int32_t no_os_gpio_get_value(struct no_os_gpio_desc *desc, uint8_t *value)
Get the value of the specified GPIO.
Definition: no_os_gpio.c:221
hmc6300_set_rf_attn
int hmc6300_set_rf_attn(struct hmc630x_dev *dev, uint8_t attn)
Definition: hmc630x.c:715
hmc6301_get_bb_lpc_hpc
int hmc6301_get_bb_lpc_hpc(struct hmc630x_dev *dev, enum hmc6301_bb_lpc *lpc, enum hmc6301_bb_hpc *hpc)
Definition: hmc630x.c:1002
no_os_delay.h
Header file of Delay functions.
HMC6301_BB_LPC_500MHz
@ HMC6301_BB_LPC_500MHz
Definition: hmc630x.h:258
HMC6301_BB_LPC_200MHz
@ HMC6301_BB_LPC_200MHz
Definition: hmc630x.h:259
HMC6301_BB_ATTN_6dB
@ HMC6301_BB_ATTN_6dB
Definition: hmc630x.h:238
hmc630x_init_param::data
struct no_os_gpio_init_param data
Definition: hmc630x.h:299
HMC630X_ARRAY_ADDRESS_MASK
#define HMC630X_ARRAY_ADDRESS_MASK
Definition: hmc630x.c:39
hmc6301_attr::bb_attnq_fine
enum hmc6301_bb_attn_fine bb_attnq_fine
Definition: hmc630x.h:286
HMC6300_TEMPSENSOR_PWRDN
#define HMC6300_TEMPSENSOR_PWRDN
Definition: hmc630x.h:148
hmc630x_read_row
int hmc630x_read_row(struct hmc630x_dev *dev, uint8_t row, uint8_t *val)
Definition: hmc630x.c:324
HMC6301_BB_HPC_45kHz
@ HMC6301_BB_HPC_45kHz
Definition: hmc630x.h:264
hmc630x_set_vco
int hmc630x_set_vco(struct hmc630x_dev *dev, uint64_t frequency)
Definition: hmc630x.c:743
hmc6301_bb_hpc
hmc6301_bb_hpc
Definition: hmc630x.h:263
NO_OS_GPIO_HIGH
@ NO_OS_GPIO_HIGH
Definition: no_os_gpio.h:117
HMC6300_IFVGA_VGA_ADJ
#define HMC6300_IFVGA_VGA_ADJ
Definition: hmc630x.h:117
HMC630X_VCO_BANDSEL
#define HMC630X_VCO_BANDSEL
Definition: hmc630x.h:199
hmc630x_read_row
int hmc630x_read_row(struct hmc630x_dev *dev, uint8_t row, uint8_t *val)
Definition: hmc630x.c:324
hmc6301_bb_lpc
hmc6301_bb_lpc
Definition: hmc630x.h:255
no_os_calloc
void * no_os_calloc(size_t nitems, size_t size)
Allocate memory and return a pointer to it, set memory to 0.
Definition: chibios_alloc.c:54
no_os_gpio_direction_input
int32_t no_os_gpio_direction_input(struct no_os_gpio_desc *desc)
Enable the input direction of the specified GPIO.
Definition: no_os_gpio.c:124
send
int32_t send(struct mqtt_desc *mqtt)
Definition: basic_example.c:246
HMC6301_BB_ATTN_12dB
@ HMC6301_BB_ATTN_12dB
Definition: hmc630x.h:237
hmc6301_bb_attn
hmc6301_bb_attn
Definition: hmc630x.h:235
hmc630x_vco
Definition: hmc630x.c:50
HMC6301_BB_ATTN_FINE_RESERVED1
@ HMC6301_BB_ATTN_FINE_RESERVED1
Definition: hmc630x.h:247
HMC6300_ADDRESS
#define HMC6300_ADDRESS
Definition: hmc630x.c:42
HMC6301_IFMIX_PWRDN_Q
#define HMC6301_IFMIX_PWRDN_Q
Definition: hmc630x.h:61
bool
bool
Definition: common.h:48
hmc630x_get_vco
int hmc630x_get_vco(struct hmc630x_dev *dev, uint64_t *frequency)
Definition: hmc630x.c:811
HMC6300_IFVGA_PWRDN
#define HMC6300_IFVGA_PWRDN
Definition: hmc630x.h:94
hmc6301_attr::bb_attn1
enum hmc6301_bb_attn bb_attn1
Definition: hmc630x.h:283
HMC6301_BB_LPC_300MHz
@ HMC6301_BB_LPC_300MHz
Definition: hmc630x.h:257
HMC6300_UPMIXER_PWRDN
#define HMC6300_UPMIXER_PWRDN
Definition: hmc630x.h:93
NO_OS_GPIO_LOW
@ NO_OS_GPIO_LOW
Definition: no_os_gpio.h:115
hmc630x_type
enum hmc630x_type hmc630x_type(struct hmc630x_dev *dev)
Definition: hmc630x.c:284
HMC6300_PA_SEP_PA_PWRDWN_FAST
#define HMC6300_PA_SEP_PA_PWRDWN_FAST
Definition: hmc630x.h:70
HMC630X_RW_MASK
#define HMC630X_RW_MASK
Definition: hmc630x.c:40
hmc630x_get_temp
int hmc630x_get_temp(struct hmc630x_dev *dev, uint8_t *temp)
Definition: hmc630x.c:538
hmc6301_get_lna_gain
int hmc6301_get_lna_gain(struct hmc630x_dev *dev, enum hmc6301_lna_attn *gain)
Definition: hmc630x.c:878
no_os_mdelay
void no_os_mdelay(uint32_t msecs)
Wait until msecs milliseconds passed.
Definition: aducm3029_delay.c:126
hmc6301_set_bb_attn_fine
int hmc6301_set_bb_attn_fine(struct hmc630x_dev *dev, enum hmc6301_bb_attn_fine attn_i, enum hmc6301_bb_attn_fine attn_q)
Definition: hmc630x.c:934
HMC6301_IFVGA_VGA_ADJ
#define HMC6301_IFVGA_VGA_ADJ
Definition: hmc630x.h:108
hmc630x_dev::scanout
struct no_os_gpio_desc * scanout
Definition: hmc630x.c:64
no_os_field_prep
uint32_t no_os_field_prep(uint32_t mask, uint32_t val)
HMC6301_BB_ATTN_FINE_2dB
@ HMC6301_BB_ATTN_FINE_2dB
Definition: hmc630x.h:246
hmc630x_init_param::ref_clk
enum hmc630x_ref_clk ref_clk
Definition: hmc630x.h:295
HMC6301_BB_ATTN_FINE_3dB
@ HMC6301_BB_ATTN_FINE_3dB
Definition: hmc630x.h:250
HMC6301_LNA_GAIN
#define HMC6301_LNA_GAIN
Definition: hmc630x.h:129
HMC630X_ROW
#define HMC630X_ROW(param)
Definition: hmc630x.h:43
hmc6301_get_lna_gain
int hmc6301_get_lna_gain(struct hmc630x_dev *dev, enum hmc6301_lna_attn *gain)
Definition: hmc630x.c:878
hmc630x_init_param::clk
struct no_os_gpio_init_param clk
Definition: hmc630x.h:297
hmc630x_init_param::if_attn
uint8_t if_attn
Definition: hmc630x.h:306
hmc6300_attr
Definition: hmc630x.h:278
hmc6301_set_bb_lpc_hpc
int hmc6301_set_bb_lpc_hpc(struct hmc630x_dev *dev, enum hmc6301_bb_lpc lpc, enum hmc6301_bb_hpc hpc)
Definition: hmc630x.c:982
HMC6301_BBAMP_SELL_ASK
#define HMC6301_BBAMP_SELL_ASK
Definition: hmc630x.h:65
hmc630x.h
hmc6300 and hmc6301 device driver header.
hmc630x_get_avail_vco
int hmc630x_get_avail_vco(struct hmc630x_dev *dev, const uint64_t **avail, uint8_t *avail_num)
Definition: hmc630x.c:852
hmc630x_write
int hmc630x_write(struct hmc630x_dev *dev, uint16_t param, uint8_t value)
Definition: hmc630x.c:413
HMC630X_TEMPS
#define HMC630X_TEMPS
Definition: hmc630x.h:218
hmc630x_dev
Definition: hmc630x.c:57
hmc6300_get_fm_en
int hmc6300_get_fm_en(struct hmc630x_dev *dev, bool *enable)
Definition: hmc630x.c:557
HMC6300_RFVGA_PWRDN
#define HMC6300_RFVGA_PWRDN
Definition: hmc630x.h:97
hmc630x_set_temp_en
int hmc630x_set_temp_en(struct hmc630x_dev *dev, bool enable)
Definition: hmc630x.c:481
HMC6300_RFVGAGAIN
#define HMC6300_RFVGAGAIN
Definition: hmc630x.h:151
hmc630x_get_temp_en
int hmc630x_get_temp_en(struct hmc630x_dev *dev, bool *enable)
Definition: hmc630x.c:506
HMC6301_BB_HPC_350kHz
@ HMC6301_BB_HPC_350kHz
Definition: hmc630x.h:266
hmc630x_read_regmap
int hmc630x_read_regmap(struct hmc630x_dev *dev, uint8_t *regmap)
Definition: hmc630x.c:447
HMC6301_ENBAR_TEMPS
#define HMC6301_ENBAR_TEMPS
Definition: hmc630x.h:136
no_os_gpio_remove
int32_t no_os_gpio_remove(struct no_os_gpio_desc *desc)
Free the resources allocated by no_os_gpio_get().
Definition: no_os_gpio.c:104
HMC6301_BB_ATTN_FINE_RESERVED2
@ HMC6301_BB_ATTN_FINE_RESERVED2
Definition: hmc630x.h:251
HMC6301_ASK_PWRDN
#define HMC6301_ASK_PWRDN
Definition: hmc630x.h:63
HMC6300_REF_CLK_75MHz
@ HMC6300_REF_CLK_75MHz
Definition: hmc630x.h:273
HMC6301_LNA_PWRDWN
#define HMC6301_LNA_PWRDWN
Definition: hmc630x.h:47
HMC6300_REF_CLK_71p42857MHz
@ HMC6300_REF_CLK_71p42857MHz
Definition: hmc630x.h:272
hmc6300_get_rf_attn
int hmc6300_get_rf_attn(struct hmc630x_dev *dev, uint8_t *attn)
Definition: hmc630x.c:730
HMC6300_PA_PWRDN
#define HMC6300_PA_PWRDN
Definition: hmc630x.h:96
HMC6300_ENABLE_FM
#define HMC6300_ENABLE_FM
Definition: hmc630x.h:141
hmc6300_set_rf_attn
int hmc6300_set_rf_attn(struct hmc630x_dev *dev, uint8_t attn)
Definition: hmc630x.c:715
no_os_gpio_desc
Structure holding the GPIO descriptor.
Definition: no_os_gpio.h:96
hmc630x_type
hmc630x_type
Definition: hmc630x.h:221
HMC630X_MASK
#define HMC630X_MASK(param)
Definition: hmc630x.h:44
HMC6301_LNA_ATTN_12dB
@ HMC6301_LNA_ATTN_12dB
Definition: hmc630x.h:230
HMC6300_POWER_DET_PWRDN
#define HMC6300_POWER_DET_PWRDN
Definition: hmc630x.h:73
hmc630x_set_if_attn
int hmc630x_set_if_attn(struct hmc630x_dev *dev, uint8_t attn)
Definition: hmc630x.c:675
hmc6300_set_fm_en
int hmc6300_set_fm_en(struct hmc630x_dev *dev, bool enable)
Definition: hmc630x.c:544
HMC6301_LNA_ATTN_18dB
@ HMC6301_LNA_ATTN_18dB
Definition: hmc630x.h:231
hmc6301_bb_attn_fine
hmc6301_bb_attn_fine
Definition: hmc630x.h:243
hmc6301_get_bb_attn
int hmc6301_get_bb_attn(struct hmc630x_dev *dev, enum hmc6301_bb_attn *attn1, enum hmc6301_bb_attn *attn2)
Definition: hmc630x.c:914
hmc6300_get_fm_en
int hmc6300_get_fm_en(struct hmc630x_dev *dev, bool *enable)
Definition: hmc630x.c:557
hmc630x_vco::fbdiv
uint8_t * fbdiv
Definition: hmc630x.c:52
no_os_gpio_get
int32_t no_os_gpio_get(struct no_os_gpio_desc **desc, const struct no_os_gpio_init_param *param)
Obtain the GPIO decriptor.
Definition: no_os_gpio.c:49
hmc630x_get_enable
int hmc630x_get_enable(struct hmc630x_dev *dev, bool *enable)
Definition: hmc630x.c:619
HMC6301_BB_HPC_1600kHz
@ HMC6301_BB_HPC_1600kHz
Definition: hmc630x.h:265
hmc6301_attr::bb_hpc
enum hmc6301_bb_hpc bb_hpc
Definition: hmc630x.h:289
hmc630x_init_param::type
enum hmc630x_type type
Definition: hmc630x.h:294
HMC6301_ADDRESS
#define HMC6301_ADDRESS
Definition: hmc630x.c:43
hmc630x_get_if_attn
int hmc630x_get_if_attn(struct hmc630x_dev *dev, uint8_t *attn)
Definition: hmc630x.c:695
HMC6301_IF_BGMUX_PWRDN
#define HMC6301_IF_BGMUX_PWRDN
Definition: hmc630x.h:62
hmc630x_init_param::en
struct no_os_gpio_init_param en
Definition: hmc630x.h:296
HMC6300_REF_CLK_154p2857MHz
@ HMC6300_REF_CLK_154p2857MHz
Definition: hmc630x.h:275
HMC6300
@ HMC6300
Definition: hmc630x.h:222
hmc630x_read_regmap
int hmc630x_read_regmap(struct hmc630x_dev *dev, uint8_t *regmap)
Definition: hmc630x.c:447
HMC6301_BB_ATTN_0dB
@ HMC6301_BB_ATTN_0dB
Definition: hmc630x.h:236
no_os_field_get
uint32_t no_os_field_get(uint32_t mask, uint32_t word)
HMC6301_BBAMP_SELBW
#define HMC6301_BBAMP_SELBW
Definition: hmc630x.h:85
HMC6300_PA_PWRDWN_FAST
#define HMC6300_PA_PWRDWN_FAST
Definition: hmc630x.h:71
HMC6301_BB_ATTN_FINE_4dB
@ HMC6301_BB_ATTN_FINE_4dB
Definition: hmc630x.h:245
hmc630x_get_avail_vco
int hmc630x_get_avail_vco(struct hmc630x_dev *dev, const uint64_t **avail, uint8_t *avail_num)
Definition: hmc630x.c:852
hmc6301_set_bb_attn
int hmc6301_set_bb_attn(struct hmc630x_dev *dev, enum hmc6301_bb_attn attn1, enum hmc6301_bb_attn attn2)
Definition: hmc630x.c:891
no_os_free
void no_os_free(void *ptr)
Deallocate memory previously allocated by a call to no_os_calloc or no_os_malloc.
Definition: chibios_alloc.c:69
hmc630x_write_regmap
int hmc630x_write_regmap(struct hmc630x_dev *dev, const uint8_t *regmap)
Definition: hmc630x.c:377
hmc630x_write
int hmc630x_write(struct hmc630x_dev *dev, uint16_t param, uint8_t val)
Definition: hmc630x.c:413
hmc630x_get_if_attn
int hmc630x_get_if_attn(struct hmc630x_dev *dev, uint8_t *attn)
Definition: hmc630x.c:695
HMC630X_LOCKDET
#define HMC630X_LOCKDET
Definition: hmc630x.h:206
hmc630x_vco::entries
uint8_t entries
Definition: hmc630x.c:53
hmc630x_ref_clk
hmc630x_ref_clk
Definition: hmc630x.h:271
hmc6301_get_bb_attn_fine
int hmc6301_get_bb_attn_fine(struct hmc630x_dev *dev, enum hmc6301_bb_attn_fine *attn_i, enum hmc6301_bb_attn_fine *attn_q)
Definition: hmc630x.c:961
hmc630x_set_temp_en
int hmc630x_set_temp_en(struct hmc630x_dev *dev, bool enable)
Definition: hmc630x.c:481
no_os_udelay
void no_os_udelay(uint32_t usecs)
Wait until usecs microseconds passed.
Definition: aducm3029_delay.c:114
hmc630x_dev::address
uint8_t address
Definition: hmc630x.c:59
HMC6301_IPC_PWRDWN
#define HMC6301_IPC_PWRDWN
Definition: hmc630x.h:60
NULL
#define NULL
Definition: wrapper.h:64
hmc630x_write_regmap
int hmc630x_write_regmap(struct hmc630x_dev *dev, const uint8_t *regmap)
Definition: hmc630x.c:377
hmc630x_dev::en
struct no_os_gpio_desc * en
Definition: hmc630x.c:61
hmc6301_set_lna_gain
int hmc6301_set_lna_gain(struct hmc630x_dev *dev, enum hmc6301_lna_attn gain)
Definition: hmc630x.c:865
HMC6301_BB_ATTN_FINE_5dB
@ HMC6301_BB_ATTN_FINE_5dB
Definition: hmc630x.h:249
no_os_gpio_set_value
int32_t no_os_gpio_set_value(struct no_os_gpio_desc *desc, uint8_t value)
Set the value of the specified GPIO.
Definition: no_os_gpio.c:197
hmc630x_get_temp
int hmc630x_get_temp(struct hmc630x_dev *dev, uint8_t *temp)
Definition: hmc630x.c:538
hmc6301_get_bb_attn
int hmc6301_get_bb_attn(struct hmc630x_dev *dev, enum hmc6301_bb_attn *attn1, enum hmc6301_bb_attn *attn2)
Definition: hmc630x.c:914
hmc6301_set_bb_attn_fine
int hmc6301_set_bb_attn_fine(struct hmc630x_dev *dev, enum hmc6301_bb_attn_fine attn_i, enum hmc6301_bb_attn_fine attn_q)
Definition: hmc630x.c:934
hmc6301_get_bb_lpc_hpc
int hmc6301_get_bb_lpc_hpc(struct hmc630x_dev *dev, enum hmc6301_bb_lpc *lpc, enum hmc6301_bb_hpc *hpc)
Definition: hmc630x.c:1002
hmc630x_vco::freqs
uint64_t * freqs
Definition: hmc630x.c:51
hmc6301_attr::bb_lpc
enum hmc6301_bb_lpc bb_lpc
Definition: hmc630x.h:288
HMC6301
@ HMC6301
Definition: hmc630x.h:223
hmc630x_dev::data
struct no_os_gpio_desc * data
Definition: hmc630x.c:63
hmc630x_set_enable
int hmc630x_set_enable(struct hmc630x_dev *dev, bool enable)
Definition: hmc630x.c:570
HMC6300_SETTLING_DELAY_MS
#define HMC6300_SETTLING_DELAY_MS
Definition: hmc630x.c:47
HMC6301_BBAMP_ATTENFI
#define HMC6301_BBAMP_ATTENFI
Definition: hmc630x.h:75
HMC6301_BB_ATTN_FINE_0dB
@ HMC6301_BB_ATTN_FINE_0dB
Definition: hmc630x.h:244
no_os_gpio.h
Header file of GPIO Interface.
hmc630x_dev::vco
struct hmc630x_vco vco
Definition: hmc630x.c:60
HMC630X_ADDRESS_MASK
#define HMC630X_ADDRESS_MASK
Definition: hmc630x.c:41
HMC6301_LNA_ATTN_0dB
@ HMC6301_LNA_ATTN_0dB
Definition: hmc630x.h:228
hmc630x_dev::clk
struct no_os_gpio_desc * clk
Definition: hmc630x.c:62
hmc6301_set_bb_lpc_hpc
int hmc6301_set_bb_lpc_hpc(struct hmc630x_dev *dev, enum hmc6301_bb_lpc lpc, enum hmc6301_bb_hpc hpc)
Definition: hmc630x.c:982
hmc6300_set_fm_en
int hmc6300_set_fm_en(struct hmc630x_dev *dev, bool enable)
Definition: hmc630x.c:544
HMC630X_EN_SYNTH_LDO
#define HMC630X_EN_SYNTH_LDO
Definition: hmc630x.h:165
hmc630x_init
int hmc630x_init(struct hmc630x_dev **dev, struct hmc630x_init_param *init)
Definition: hmc630x.c:109
hmc630x_init_param::tx
struct hmc6300_attr tx
Definition: hmc630x.h:308
hmc630x_get_enable
int hmc630x_get_enable(struct hmc630x_dev *dev, bool *enable)
Definition: hmc630x.c:619
no_os_util.h
Header file of utility functions.
hmc630x_init_param::vco
uint64_t vco
Definition: hmc630x.h:305
HMC6300_REF_CLK_142p8571MHz
@ HMC6300_REF_CLK_142p8571MHz
Definition: hmc630x.h:274
hmc630x_dev::type
enum hmc630x_type type
Definition: hmc630x.c:58
HMC6301_BB_HPC_RESERVED
@ HMC6301_BB_HPC_RESERVED
Definition: hmc630x.h:267
hmc630x_get_vco
int hmc630x_get_vco(struct hmc630x_dev *dev, uint64_t *frequency)
Definition: hmc630x.c:811
HMC6300_EN_TEMPFLASH
#define HMC6300_EN_TEMPFLASH
Definition: hmc630x.h:83
HMC6301_BBAMP_ATTENFQ
#define HMC6301_BBAMP_ATTENFQ
Definition: hmc630x.h:76
hmc6301_attr::bb_attn2
enum hmc6301_bb_attn bb_attn2
Definition: hmc630x.h:284
hmc6301_set_bb_attn
int hmc6301_set_bb_attn(struct hmc630x_dev *dev, enum hmc6301_bb_attn attn1, enum hmc6301_bb_attn attn2)
Definition: hmc630x.c:891
hmc630x_write_row
int hmc630x_write_row(struct hmc630x_dev *dev, uint8_t row, uint8_t val)
Definition: hmc630x.c:293
hmc630x_get_temp_en
int hmc630x_get_temp_en(struct hmc630x_dev *dev, bool *enable)
Definition: hmc630x.c:506
no_os_gpio_direction_output
int32_t no_os_gpio_direction_output(struct no_os_gpio_desc *desc, uint8_t value)
Enable the output direction of the specified GPIO.
Definition: no_os_gpio.c:147
hmc6301_attr::lna_attn
enum hmc6301_lna_attn lna_attn
Definition: hmc630x.h:287
HMC6301_LNA_ATTN_6dB
@ HMC6301_LNA_ATTN_6dB
Definition: hmc630x.h:229
hmc6301_lna_attn
hmc6301_lna_attn
Definition: hmc630x.h:227
hmc630x_init_param::scanout
struct no_os_gpio_init_param scanout
Definition: hmc630x.h:301
hmc630x_set_enable
int hmc630x_set_enable(struct hmc630x_dev *dev, bool enable)
Definition: hmc630x.c:570
hmc6301_get_bb_attn_fine
int hmc6301_get_bb_attn_fine(struct hmc630x_dev *dev, enum hmc6301_bb_attn_fine *attn_i, enum hmc6301_bb_attn_fine *attn_q)
Definition: hmc630x.c:961
errno.h
Error macro definition for ARM Compiler.
HMC6300_IF_UPMIXER_PWRDN
#define HMC6300_IF_UPMIXER_PWRDN
Definition: hmc630x.h:99
hmc630x_write_row
int hmc630x_write_row(struct hmc630x_dev *dev, uint8_t row, uint8_t val)
Definition: hmc630x.c:293
HMC6301_EN_TEMPFLASH
#define HMC6301_EN_TEMPFLASH
Definition: hmc630x.h:137
HMC6300_DRIVER_PWRDN
#define HMC6300_DRIVER_PWRDN
Definition: hmc630x.h:92