From 87534c75f03e517611c29a165a5bccad19ceab68 Mon Sep 17 00:00:00 2001 From: Hauke Petersen Date: Tue, 8 Nov 2016 18:41:38 +0100 Subject: [PATCH] drivers/encx24j600: adapted to SPI API changes --- drivers/encx24j600/encx24j600.c | 54 +++++++++++--------------------- drivers/include/encx24j600.h | 1 - tests/driver_encx24j600/Makefile | 4 +-- 3 files changed, 21 insertions(+), 38 deletions(-) diff --git a/drivers/encx24j600/encx24j600.c b/drivers/encx24j600/encx24j600.c index 96542bdeb2..d46fa63d2b 100644 --- a/drivers/encx24j600/encx24j600.c +++ b/drivers/encx24j600/encx24j600.c @@ -37,18 +37,19 @@ #define ENABLE_DEBUG (0) #include "debug.h" -#define ENCX24J600_SPI_SPEED SPI_SPEED_1MHZ +#define SPI_CLK SPI_CLK_1MHZ +#define SPI_MODE SPI_MODE_0 -#define ENCX24J600_INIT_DELAY 100000U +#define ENCX24J600_INIT_DELAY (100000U) -#define ENC_BUFFER_START 0x0000 -#define ENC_BUFFER_SIZE 0x6000 -#define ENC_BUFFER_END 0x5FFF -#define RX_BUFFER_START (0x5340) /* Default value */ -#define RX_BUFFER_END (ENC_BUFFER_END) -#define TX_BUFFER_LEN (0x2000) -#define TX_BUFFER_END (RX_BUFFER_START) -#define TX_BUFFER_START (TX_BUFFER_END - TX_BUFFER_LEN) +#define ENC_BUFFER_START (0x0000) +#define ENC_BUFFER_SIZE (0x6000) +#define ENC_BUFFER_END (0x5FFF) +#define RX_BUFFER_START (0x5340) /* Default value */ +#define RX_BUFFER_END (ENC_BUFFER_END) +#define TX_BUFFER_LEN (0x2000) +#define TX_BUFFER_END (RX_BUFFER_START) +#define TX_BUFFER_START (TX_BUFFER_END - TX_BUFFER_LEN) static void cmd(encx24j600_t *dev, char cmd); static void reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value); @@ -75,11 +76,11 @@ const static netdev2_driver_t netdev2_driver_encx24j600 = { }; static inline void lock(encx24j600_t *dev) { - mutex_lock(&dev->mutex); + spi_acquire(dev->spi, dev->cs, SPI_MODE, SPI_CLK); } static inline void unlock(encx24j600_t *dev) { - mutex_unlock(&dev->mutex); + spi_release(dev->spi); } void encx24j600_setup(encx24j600_t *dev, const encx24j600_params_t *params) @@ -89,8 +90,6 @@ void encx24j600_setup(encx24j600_t *dev, const encx24j600_params_t *params) dev->cs = params->cs_pin; dev->int_pin = params->int_pin; dev->rx_next_ptr = RX_BUFFER_START; - - mutex_init(&dev->mutex); } static void encx24j600_isr(void *arg) @@ -147,11 +146,7 @@ static void _isr(netdev2_t *netdev) static inline void enc_spi_transfer(encx24j600_t *dev, char *out, char *in, int len) { - spi_acquire(dev->spi); - gpio_clear(dev->cs); - spi_transfer_bytes(dev->spi, out, in, len); - gpio_set(dev->cs); - spi_release(dev->spi); + spi_transfer_bytes(dev->spi, dev->cs, false, out, in, len); } static inline uint16_t reg_get(encx24j600_t *dev, uint8_t reg) @@ -170,20 +165,12 @@ static void phy_reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value) { } static void cmd(encx24j600_t *dev, char cmd) { - spi_acquire(dev->spi); - gpio_clear(dev->cs); - spi_transfer_byte(dev->spi, cmd, NULL); - gpio_set(dev->cs); - spi_release(dev->spi); + spi_transfer_byte(dev->spi, dev->cs, false, (uint8_t)cmd); } static void cmdn(encx24j600_t *dev, uint8_t cmd, char *out, char *in, int len) { - spi_acquire(dev->spi); - gpio_clear(dev->cs); - spi_transfer_byte(dev->spi, cmd, NULL); - spi_transfer_bytes(dev->spi, out, in, len); - gpio_set(dev->cs); - spi_release(dev->spi); + spi_transfer_byte(dev->spi, dev->cs, true, cmd); + spi_transfer_bytes(dev->spi, dev->cs, false, out, in, len); } static void reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value) @@ -249,13 +236,10 @@ static int _init(netdev2_t *encdev) DEBUG("encx24j600: starting initialization...\n"); /* setup IO */ - gpio_init(dev->cs, GPIO_OUT); - gpio_set(dev->cs); - gpio_init_int(dev->int_pin, GPIO_IN_PU, GPIO_FALLING, encx24j600_isr, (void*)dev); - - if (spi_init_master(dev->spi, SPI_CONF_FIRST_RISING, ENCX24J600_SPI_SPEED) < 0) { + if (spi_init_cs(dev->spi, dev->cs) != SPI_OK) { return -1; } + gpio_init_int(dev->int_pin, GPIO_IN_PU, GPIO_FALLING, encx24j600_isr, (void*)dev); lock(dev); diff --git a/drivers/include/encx24j600.h b/drivers/include/encx24j600.h index 683b6c1efc..a4ab05c40e 100644 --- a/drivers/include/encx24j600.h +++ b/drivers/include/encx24j600.h @@ -41,7 +41,6 @@ typedef struct { gpio_t cs; /**< SPI chip select pin */ gpio_t int_pin; /**< SPI interrupt pin */ uint16_t rx_next_ptr; /**< ptr to next packet whithin devices memory */ - mutex_t mutex; /**< mutex used to lock device access */ } encx24j600_t; /** diff --git a/tests/driver_encx24j600/Makefile b/tests/driver_encx24j600/Makefile index 5fee139815..b18ef44a88 100644 --- a/tests/driver_encx24j600/Makefile +++ b/tests/driver_encx24j600/Makefile @@ -22,13 +22,13 @@ CFLAGS += -DGNRC_PKTBUF_SIZE=2048 ifneq (,$(filter nucleo-f334,$(BOARD))) # these settings are probably valid for PoEll-i on most nucelo boards, but # tested only on nucleo-f334 - ENC_SPI ?= SPI_0 + ENC_SPI ?= SPI_DEV\(0\) ENC_CS ?= GPIO_PIN\(PORT_C,10\) ENC_INT ?= GPIO_PIN\(PORT_D,2\) endif # fallback: set SPI bus and pins to default values -ENC_SPI ?= SPI_0 +ENC_SPI ?= SPI_DEV\(0\) ENC_CS ?= GPIO_PIN\(0,0\) ENC_INT ?= GPIO_PIN\(0,1\) # export SPI and pins