From 579f8212a652f305275c85abb0cdfdc6ddfc0112 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 9 Nov 2014 12:21:21 -0800 Subject: [PATCH] MAX2837: Finish SPI abstraction. Conflicts: firmware/common/hackrf_core.c --- firmware/common/hackrf_core.c | 10 ++++++++-- firmware/common/max2837.c | 7 +++---- firmware/common/max2837_spi.c | 19 ++++++++++++++----- firmware/common/max2837_spi.h | 1 + 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/firmware/common/hackrf_core.c b/firmware/common/hackrf_core.c index 76a46347..5cb7bd4f 100644 --- a/firmware/common/hackrf_core.c +++ b/firmware/common/hackrf_core.c @@ -38,8 +38,14 @@ #define WAIT_CPU_CLOCK_INIT_DELAY (10000) +spi_t max2837_spi = { + .init = max2837_spi_init, + .transfer = max2837_spi_transfer, + .transfer_gather = max2837_spi_transfer_gather, +}; + max2837_driver_t max2837 = { - .spi = NULL, /* TODO */ + .spi = &max2837_spi, }; @@ -537,7 +543,7 @@ void ssp1_init(void) void ssp1_set_mode_max2837(void) { - max2837_spi_init(max2837.spi); + spi_init(max2837.spi); } void ssp1_set_mode_max5864(void) diff --git a/firmware/common/max2837.c b/firmware/common/max2837.c index 1fa87755..fa3b9786 100644 --- a/firmware/common/max2837.c +++ b/firmware/common/max2837.c @@ -31,7 +31,6 @@ #include #include #include "max2837.h" -#include "max2837_spi.h" #include "max2837_target.h" #include "max2837_regs.def" // private register def macros @@ -80,7 +79,7 @@ static const uint16_t max2837_regs_default[MAX2837_NUM_REGS] = { /* Set up all registers according to defaults specified in docs. */ static void max2837_init(max2837_driver_t* const drv) { - max2837_spi_init(drv->spi); + spi_init(drv->spi); max2837_mode_shutdown(drv); max2837_target_init(drv); @@ -126,13 +125,13 @@ void max2837_setup(max2837_driver_t* const drv) static uint16_t max2837_read(max2837_driver_t* const drv, uint8_t r) { uint16_t value = (1 << 15) | (r << 10); - max2837_spi_transfer(drv->spi, &value, 1); + spi_transfer(drv->spi, &value, 1); return value & 0x3ff; } static void max2837_write(max2837_driver_t* const drv, uint8_t r, uint16_t v) { uint16_t value = (r << 10) | (v & 0x3ff); - max2837_spi_transfer(drv->spi, &value, 1); + spi_transfer(drv->spi, &value, 1); } uint16_t max2837_reg_read(max2837_driver_t* const drv, uint8_t r) diff --git a/firmware/common/max2837_spi.c b/firmware/common/max2837_spi.c index f2fce0a1..911fbbf6 100644 --- a/firmware/common/max2837_spi.c +++ b/firmware/common/max2837_spi.c @@ -57,14 +57,23 @@ void max2837_spi_init(spi_t* const spi) { scu_pinmux(SCU_SSP1_SCK, (SCU_SSP_IO | SCU_CONF_FUNCTION1)); } -void max2837_spi_transfer(spi_t* const spi, void* const _data, const size_t count) { +void max2837_spi_transfer_gather(spi_t* const spi, const spi_transfer_t* const transfers, const size_t count) { (void)spi; - - uint16_t* const data = _data; gpio_clear(PORT_XCVR_CS, PIN_XCVR_CS); for(size_t i=0; i