1 #include "mixer.h"
2 #include "rffc5071.h"
3 #include "rffc5071_spi.h"
4 #include "max2871.h"
5 #include "gpio_lpc.h"
6 
7 /* RFFC5071 GPIO serial interface PinMux */
8 #if (defined JAWBREAKER || defined HACKRF_ONE)
9 static struct gpio_t gpio_rffc5072_select	= GPIO(2, 13);
10 static struct gpio_t gpio_rffc5072_clock	= GPIO(5,  6);
11 static struct gpio_t gpio_rffc5072_data		= GPIO(3,  3);
12 static struct gpio_t gpio_rffc5072_reset	= GPIO(2, 14);
13 #endif
14 #ifdef RAD1O
15 static struct gpio_t gpio_vco_ce			= GPIO(2, 13);
16 static struct gpio_t gpio_vco_sclk			= GPIO(5,  6);
17 static struct gpio_t gpio_vco_sdata			= GPIO(3,  3);
18 static struct gpio_t gpio_vco_le			= GPIO(2, 14);
19 static struct gpio_t gpio_vco_mux			= GPIO(5, 25);
20 static struct gpio_t gpio_synt_rfout_en		= GPIO(3,  5);
21 #endif
22 
23 #if (defined JAWBREAKER || defined HACKRF_ONE)
24 const rffc5071_spi_config_t rffc5071_spi_config = {
25 	.gpio_select = &gpio_rffc5072_select,
26 	.gpio_clock = &gpio_rffc5072_clock,
27 	.gpio_data = &gpio_rffc5072_data,
28 };
29 
30 spi_bus_t spi_bus_rffc5071 = {
31 	.config = &rffc5071_spi_config,
32 	.start = rffc5071_spi_start,
33 	.stop = rffc5071_spi_stop,
34 	.transfer = rffc5071_spi_transfer,
35 	.transfer_gather = rffc5071_spi_transfer_gather,
36 };
37 
38 mixer_driver_t mixer = {
39 	.bus = &spi_bus_rffc5071,
40 	.gpio_reset = &gpio_rffc5072_reset,
41 };
42 #endif
43 #ifdef RAD1O
44 mixer_driver_t mixer = {
45 	.gpio_vco_ce = &gpio_vco_ce,
46 	.gpio_vco_sclk = &gpio_vco_sclk,
47 	.gpio_vco_sdata = &gpio_vco_sdata,
48 	.gpio_vco_le = &gpio_vco_le,
49 	.gpio_synt_rfout_en = &gpio_synt_rfout_en,
50 	.gpio_vco_mux = &gpio_vco_mux,
51 };
52 #endif
53 
mixer_bus_setup(mixer_driver_t * const mixer)54 void mixer_bus_setup(mixer_driver_t* const mixer)
55 {
56 #if (defined JAWBREAKER || defined HACKRF_ONE)
57 	(void) mixer;
58 	spi_bus_start(&spi_bus_rffc5071, &rffc5071_spi_config);
59 #endif
60 #ifdef RAD1O
61 	(void) mixer;
62 #endif
63 }
64 
mixer_setup(mixer_driver_t * const mixer)65 void mixer_setup(mixer_driver_t* const mixer)
66 {
67 #if (defined JAWBREAKER || defined HACKRF_ONE)
68 	rffc5071_setup(mixer);
69 #endif
70 #ifdef RAD1O
71 	max2871_setup(mixer);
72 #endif
73 }
74 
mixer_set_frequency(mixer_driver_t * const mixer,uint16_t mhz)75 uint64_t mixer_set_frequency(mixer_driver_t* const mixer, uint16_t mhz)
76 {
77 #if (defined JAWBREAKER || defined HACKRF_ONE)
78 	return rffc5071_set_frequency(mixer, mhz);
79 #endif
80 #ifdef RAD1O
81 	return max2871_set_frequency(mixer, mhz);
82 #endif
83 }
84 
mixer_tx(mixer_driver_t * const mixer)85 void mixer_tx(mixer_driver_t* const mixer)
86 {
87 #if (defined JAWBREAKER || defined HACKRF_ONE)
88 	rffc5071_tx(mixer);
89 #endif
90 #ifdef RAD1O
91 	(void) mixer;
92 #endif
93 }
94 
mixer_rx(mixer_driver_t * const mixer)95 void mixer_rx(mixer_driver_t* const mixer)
96 {
97 #if (defined JAWBREAKER || defined HACKRF_ONE)
98 	rffc5071_rx(mixer);
99 #endif
100 #ifdef RAD1O
101 	(void) mixer;
102 #endif
103 }
104 
mixer_rxtx(mixer_driver_t * const mixer)105 void mixer_rxtx(mixer_driver_t* const mixer)
106 {
107 #if (defined JAWBREAKER || defined HACKRF_ONE)
108 	rffc5071_rxtx(mixer);
109 #endif
110 #ifdef RAD1O
111 	(void) mixer;
112 #endif
113 }
114 
mixer_enable(mixer_driver_t * const mixer)115 void mixer_enable(mixer_driver_t* const mixer)
116 {
117 #if (defined JAWBREAKER || defined HACKRF_ONE)
118 	rffc5071_enable(mixer);
119 #endif
120 #ifdef RAD1O
121 	max2871_enable(mixer);
122 #endif
123 }
124 
mixer_disable(mixer_driver_t * const mixer)125 void mixer_disable(mixer_driver_t* const mixer)
126 {
127 #if (defined JAWBREAKER || defined HACKRF_ONE)
128 	rffc5071_disable(mixer);
129 #endif
130 #ifdef RAD1O
131 	max2871_disable(mixer);
132 #endif
133 }
134 
mixer_set_gpo(mixer_driver_t * const mixer,uint8_t gpo)135 void mixer_set_gpo(mixer_driver_t* const mixer, uint8_t gpo)
136 {
137 #if (defined JAWBREAKER || defined HACKRF_ONE)
138 	rffc5071_set_gpo(mixer, gpo);
139 #endif
140 #ifdef RAD1O
141 	(void) mixer;
142 	(void) gpo;
143 #endif
144 }
145