Skip to content

Commit af22ea6

Browse files
committed
firmware: refactor si5351c for runtime platform detection
1 parent c5d1fa3 commit af22ea6

4 files changed

Lines changed: 35 additions & 37 deletions

File tree

firmware/common/hackrf_core.c

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,35 +23,21 @@
2323

2424
#include "hackrf_core.h"
2525
#include "hackrf_ui.h"
26-
//#include "sgpio.h"
27-
//#include "si5351c.h"
28-
//#include "spi_ssp.h"
2926
#include "max283x.h"
30-
//#include "max5864.h"
3127
#include "max5864_target.h"
32-
//#include "w25q80bv.h"
3328
#include "w25q80bv_target.h"
34-
//#include "i2c_bus.h"
3529
#include "i2c_lpc.h"
36-
//#include "cpld_jtag.h"
3730
#include "ice40_spi.h"
3831
#include "platform_detect.h"
3932
#include "platform_gpio.h"
4033
#include "platform_scu.h"
4134
#include "clkin.h"
35+
#include "portapack.h"
4236
#include <libopencm3/lpc43xx/cgu.h>
4337
#include <libopencm3/lpc43xx/ccu.h>
4438
#include <libopencm3/lpc43xx/scu.h>
4539
#include <libopencm3/lpc43xx/ssp.h>
4640

47-
//#if (defined HACKRF_ONE || defined PRALINE)
48-
#include "portapack.h"
49-
//#endif
50-
51-
#include "gpio_lpc.h"
52-
53-
#include "platform_gpio.h"
54-
5541
i2c_bus_t i2c0 = {
5642
.obj = (void*) I2C0_BASE,
5743
.start = i2c_lpc_start,

firmware/common/platform_gpio.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,20 @@ const platform_gpio_t* platform_gpio()
229229
break;
230230
}
231231

232+
/* HackRF One r9 clock control */
233+
switch (board_id) {
234+
case BOARD_ID_HACKRF1_R9:
235+
gpio.h1r9_clkin_en = &GPIO5_15;
236+
gpio.h1r9_clkout_en = &GPIO0_9;
237+
gpio.h1r9_mcu_clk_en = &GPIO0_8;
238+
break;
239+
default:
240+
break;
241+
}
242+
232243
/* HackRF One r9 */
233244
switch (board_id) {
234-
case BOARD_ID_HACKRF1_OG:
235245
case BOARD_ID_HACKRF1_R9:
236-
//gpio.h1r9_rx = &GPIO0_7;
237246
gpio.h1r9_1v8_enable = &GPIO2_9;
238247
gpio.h1r9_vaa_disable = &GPIO3_6;
239248
gpio.h1r9_trigger_enable = &GPIO5_5;

firmware/common/platform_gpio.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ typedef struct {
124124
const struct gpio_t* vco_mux; // RAD1O
125125
const struct gpio_t* synt_rfout_en; // RAD1O
126126

127+
/* HackRF One r9 clock control */
128+
const struct gpio_t* h1r9_clkin_en;
129+
const struct gpio_t* h1r9_clkout_en;
130+
const struct gpio_t* h1r9_mcu_clk_en;
131+
127132
/* HackRF One r9 */
128133
//const struct gpio_t* h1r9_rx;
129134
const struct gpio_t* h1r9_1v8_enable;

firmware/common/si5351c.c

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,11 @@
2323
#include "si5351c.h"
2424
#include "clkin.h"
2525
#include "platform_detect.h"
26+
#include "platform_gpio.h"
2627
#include "platform_scu.h"
27-
#include "gpio_lpc.h"
2828
#include "hackrf_core.h"
2929
#include "selftest.h"
3030

31-
/* HackRF One r9 clock control */
32-
// clang-format off
33-
static struct gpio_t gpio_h1r9_clkin_en = GPIO(5, 15);
34-
static struct gpio_t gpio_h1r9_clkout_en = GPIO(0, 9);
35-
static struct gpio_t gpio_h1r9_mcu_clk_en = GPIO(0, 8);
36-
// clang-format on
37-
3831
#include <stdbool.h>
3932

4033
static enum pll_sources active_clock_source = PLL_SOURCE_UNINITIALIZED;
@@ -195,6 +188,7 @@ void si5351c_configure_clock_control(
195188
uint8_t clkout_ctrl;
196189

197190
board_id_t board_id = detected_platform();
191+
const platform_gpio_t* gpio = platform_gpio();
198192

199193
if (board_id == BOARD_ID_RAD1O) {
200194
/* PLLA on XTAL */
@@ -215,13 +209,13 @@ void si5351c_configure_clock_control(
215209
* but externally switches that input to CLKIN.
216210
*/
217211
pll = SI5351C_CLK_PLL_SRC_A;
218-
gpio_set(&gpio_h1r9_clkin_en);
212+
gpio_set(gpio->h1r9_clkin_en);
219213
}
220214
} else {
221215
/* PLLA on XTAL */
222216
pll = SI5351C_CLK_PLL_SRC_A;
223217
if (board_id == BOARD_ID_HACKRF1_R9) {
224-
gpio_clear(&gpio_h1r9_clkin_en);
218+
gpio_clear(gpio->h1r9_clkin_en);
225219
}
226220
}
227221
break;
@@ -298,6 +292,7 @@ void si5351c_enable_clock_outputs(si5351c_driver_t* const drv)
298292
/* 3: External clock output is deactivated by default */
299293

300294
board_id_t board_id = detected_platform();
295+
const platform_gpio_t* gpio = platform_gpio();
301296

302297
uint8_t value;
303298
if (board_id != BOARD_ID_PRALINE) {
@@ -327,10 +322,12 @@ void si5351c_enable_clock_outputs(si5351c_driver_t* const drv)
327322
uint8_t data[] = {SI5351C_REG_OUTPUT_EN, value};
328323
si5351c_write(drv, data, sizeof(data));
329324

330-
if ((clkout_enabled) && (detected_platform() == BOARD_ID_HACKRF1_R9)) {
331-
gpio_set(&gpio_h1r9_clkout_en);
332-
} else {
333-
gpio_clear(&gpio_h1r9_clkout_en);
325+
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
326+
if (clkout_enabled) {
327+
gpio_set(gpio->h1r9_clkout_en);
328+
} else {
329+
gpio_clear(gpio->h1r9_clkout_en);
330+
}
334331
}
335332
}
336333

@@ -424,22 +421,23 @@ void si5351c_init(si5351c_driver_t* const drv)
424421
}
425422

426423
if (detected_platform() == BOARD_ID_HACKRF1_R9) {
424+
const platform_gpio_t* gpio = platform_gpio();
427425
const platform_scu_t* scu = platform_scu();
428426

429427
/* CLKIN_EN */
430428
scu_pinmux(scu->H1R9_CLKIN_EN, SCU_GPIO_FAST | SCU_CONF_FUNCTION4);
431-
gpio_clear(&gpio_h1r9_clkin_en);
432-
gpio_output(&gpio_h1r9_clkin_en);
429+
gpio_clear(gpio->h1r9_clkin_en);
430+
gpio_output(gpio->h1r9_clkin_en);
433431

434432
/* CLKOUT_EN */
435433
scu_pinmux(scu->H1R9_CLKOUT_EN, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
436-
gpio_clear(&gpio_h1r9_clkout_en);
437-
gpio_output(&gpio_h1r9_clkout_en);
434+
gpio_clear(gpio->h1r9_clkout_en);
435+
gpio_output(gpio->h1r9_clkout_en);
438436

439437
/* MCU_CLK_EN */
440438
scu_pinmux(scu->H1R9_MCU_CLK_EN, SCU_GPIO_FAST | SCU_CONF_FUNCTION0);
441-
gpio_clear(&gpio_h1r9_mcu_clk_en);
442-
gpio_output(&gpio_h1r9_mcu_clk_en);
439+
gpio_clear(gpio->h1r9_mcu_clk_en);
440+
gpio_output(gpio->h1r9_mcu_clk_en);
443441
}
444442
(void) drv;
445443
}

0 commit comments

Comments
 (0)