From e39268899c9d313866bbee85cff9628491c83157 Mon Sep 17 00:00:00 2001 From: Thomas Ingleby Date: Mon, 3 Nov 2014 16:20:02 +0000 Subject: [PATCH] spi: move spi setup from core into module Signed-off-by: Thomas Ingleby --- include/mraa_internal.h | 6 ----- src/mraa.c | 47 ------------------------------------ src/spi/spi.c | 53 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 48 insertions(+), 58 deletions(-) diff --git a/include/mraa_internal.h b/include/mraa_internal.h index 964f34a..fa026ff 100644 --- a/include/mraa_internal.h +++ b/include/mraa_internal.h @@ -45,12 +45,6 @@ extern mraa_board_t* plat; */ mraa_result_t mraa_setup_mux_mapped(mraa_pin_t meta); -/** Setup spi interface, sets up multiplexer on device. - * - * @return spi bus type - */ -mraa_spi_bus_t* mraa_setup_spi(int bus); - /** * Will check input is valid for pwm and will also setup required multiplexers. * IF the pin also does gpio (strong chance), DO NOTHING, REV D quirk diff --git a/src/mraa.c b/src/mraa.c index 2457d0c..f1cf70c 100644 --- a/src/mraa.c +++ b/src/mraa.c @@ -165,53 +165,6 @@ mraa_setup_mux_mapped(mraa_pin_t meta) return MRAA_SUCCESS; } -mraa_spi_bus_t* -mraa_setup_spi(int bus) -{ - if (plat == NULL) - return NULL; - - if (plat->spi_bus_count >! 0) { - syslog(LOG_ERR, "No spi buses defined in platform"); - return NULL; - } - if (plat->spi_bus_count == 1) { - bus = plat->def_spi_bus; - } - if (bus >= plat->spi_bus_count) { - syslog(LOG_ERR, "Above spi bus count"); - return NULL; - } - - int pos = plat->spi_bus[bus].sclk; - if (plat->pins[pos].spi.mux_total > 0) - if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) - return NULL; - - pos = plat->spi_bus[bus].mosi; - if (plat->pins[pos].spi.mux_total > 0) - if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) - return NULL; - - pos = plat->spi_bus[bus].miso; - if (plat->pins[pos].spi.mux_total > 0) - if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) - return NULL; - - pos = plat->spi_bus[bus].cs; - if (plat->pins[pos].spi.mux_total > 0) - if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) - return NULL; - - pos = plat->spi_bus[bus].cs; - if (plat->pins[pos].spi.mux_total > 0) - if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) - return NULL; - - mraa_spi_bus_t *spi = &(plat->spi_bus[bus]); - return spi; -} - mraa_pin_t* mraa_setup_pwm(int pin) { diff --git a/src/spi/spi.c b/src/spi/spi.c index 67f3ccd..87c8399 100644 --- a/src/spi/spi.c +++ b/src/spi/spi.c @@ -52,21 +52,64 @@ struct _spi { mraa_spi_context mraa_spi_init(int bus) { + if (plat == NULL) { + syslog(LOG_ERR, "spi: Platform Not Initialised"); + return NULL; + } + if (plat->spi_bus_count >! 0) { + syslog(LOG_ERR, "spi: no spi buses defined in platform"); + return NULL; + } + if (plat->spi_bus_count == 1) { + bus = plat->def_spi_bus; + } + if (bus >= plat->spi_bus_count) { + syslog(LOG_ERR, "spi: requested bus above spi bus count"); + return NULL; + } if (advance_func->spi_init_pre != NULL) { if (advance_func->spi_init_pre(bus) != MRAA_SUCCESS) return NULL; } - mraa_spi_bus_t *spi = mraa_setup_spi(bus); - if (bus < 0) { - syslog(LOG_ERR, "spi: Failed. SPI platform Error"); - return NULL; + int pos = plat->spi_bus[bus].sclk; + if (plat->pins[pos].spi.mux_total > 0) { + if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { + syslog(LOG_ERR, "spi: failed to set-up spi sclk multiplexer"); + return NULL; + } } + + pos = plat->spi_bus[bus].mosi; + if (plat->pins[pos].spi.mux_total > 0) { + if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { + syslog(LOG_ERR, "spi: failed to set-up spi mosi multiplexer"); + return NULL; + } + } + + pos = plat->spi_bus[bus].miso; + if (plat->pins[pos].spi.mux_total > 0) { + if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { + syslog(LOG_ERR, "spi: failed to set-up spi miso multiplexer"); + return NULL; + } + } + + pos = plat->spi_bus[bus].cs; + if (plat->pins[pos].spi.mux_total > 0) { + if (mraa_setup_mux_mapped(plat->pins[pos].spi) != MRAA_SUCCESS) { + syslog(LOG_ERR, "spi: failed to set-up spi cs multiplexer"); + return NULL; + } + } + mraa_spi_context dev = (mraa_spi_context) malloc(sizeof(struct _spi)); memset(dev, 0, sizeof(struct _spi)); char path[MAX_SIZE]; - sprintf(path, "/dev/spidev%u.%u", spi->bus_id, spi->slave_s); + sprintf(path, "/dev/spidev%u.%u", + plat->spi_bus[bus].bus_id, plat->spi_bus[bus].slave_s); dev->devfd = open(path, O_RDWR); if (dev->devfd < 0) {