drivers/ethernet: No need of semaphore for spi in enc28j60

SPI API is reentrant.

Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This commit is contained in:
Tomasz Bursztyka 2018-03-28 10:53:03 +02:00 committed by Carles Cufí
commit b702236d1a
2 changed files with 0 additions and 30 deletions

View file

@ -60,8 +60,6 @@ static void eth_enc28j60_set_bank(struct device *dev, u16_t reg_addr)
u8_t rx_buf[2]; u8_t rx_buf[2];
int ret; int ret;
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_RCR | ENC28J60_REG_ECON1; tx_buf[0] = ENC28J60_SPI_RCR | ENC28J60_REG_ECON1;
tx_buf[1] = 0x0; tx_buf[1] = 0x0;
@ -81,8 +79,6 @@ static void eth_enc28j60_set_bank(struct device *dev, u16_t reg_addr)
} else { } else {
SYS_LOG_DBG("Failure while setting bank to %d", reg_addr); SYS_LOG_DBG("Failure while setting bank to %d", reg_addr);
} }
k_sem_give(&context->spi_sem);
} }
static void eth_enc28j60_write_reg(struct device *dev, u16_t reg_addr, static void eth_enc28j60_write_reg(struct device *dev, u16_t reg_addr,
@ -101,13 +97,10 @@ static void eth_enc28j60_write_reg(struct device *dev, u16_t reg_addr,
.count = ARRAY_SIZE(tx_bufs) .count = ARRAY_SIZE(tx_bufs)
}; };
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_WCR | (reg_addr & 0xFF); tx_buf[0] = ENC28J60_SPI_WCR | (reg_addr & 0xFF);
tx_buf[1] = value; tx_buf[1] = value;
spi_write(context->spi, &context->spi_cfg, &tx); spi_write(context->spi, &context->spi_cfg, &tx);
k_sem_give(&context->spi_sem);
} }
static void eth_enc28j60_read_reg(struct device *dev, u16_t reg_addr, static void eth_enc28j60_read_reg(struct device *dev, u16_t reg_addr,
@ -138,8 +131,6 @@ static void eth_enc28j60_read_reg(struct device *dev, u16_t reg_addr,
u8_t rx_size = 2; u8_t rx_size = 2;
int ret; int ret;
k_sem_take(&context->spi_sem, K_FOREVER);
if (reg_addr & 0xF000) { if (reg_addr & 0xF000) {
rx_size = 3; rx_size = 3;
} }
@ -156,8 +147,6 @@ static void eth_enc28j60_read_reg(struct device *dev, u16_t reg_addr,
SYS_LOG_DBG("Failure while reading register %d", reg_addr); SYS_LOG_DBG("Failure while reading register %d", reg_addr);
*value = 0; *value = 0;
} }
k_sem_give(&context->spi_sem);
} }
static void eth_enc28j60_set_eth_reg(struct device *dev, u16_t reg_addr, static void eth_enc28j60_set_eth_reg(struct device *dev, u16_t reg_addr,
@ -176,14 +165,10 @@ static void eth_enc28j60_set_eth_reg(struct device *dev, u16_t reg_addr,
.count = ARRAY_SIZE(tx_bufs) .count = ARRAY_SIZE(tx_bufs)
}; };
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_BFS | (reg_addr & 0xFF); tx_buf[0] = ENC28J60_SPI_BFS | (reg_addr & 0xFF);
tx_buf[1] = value; tx_buf[1] = value;
spi_write(context->spi, &context->spi_cfg, &tx); spi_write(context->spi, &context->spi_cfg, &tx);
k_sem_give(&context->spi_sem);
} }
@ -203,14 +188,10 @@ static void eth_enc28j60_clear_eth_reg(struct device *dev, u16_t reg_addr,
.count = ARRAY_SIZE(tx_bufs) .count = ARRAY_SIZE(tx_bufs)
}; };
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_BFC | (reg_addr & 0xFF); tx_buf[0] = ENC28J60_SPI_BFC | (reg_addr & 0xFF);
tx_buf[1] = value; tx_buf[1] = value;
spi_write(context->spi, &context->spi_cfg, &tx); spi_write(context->spi, &context->spi_cfg, &tx);
k_sem_give(&context->spi_sem);
} }
static void eth_enc28j60_write_mem(struct device *dev, u8_t *data_buffer, static void eth_enc28j60_write_mem(struct device *dev, u8_t *data_buffer,
@ -230,8 +211,6 @@ static void eth_enc28j60_write_mem(struct device *dev, u8_t *data_buffer,
num_segments = buf_len / MAX_BUFFER_LENGTH; num_segments = buf_len / MAX_BUFFER_LENGTH;
num_remaining = buf_len - MAX_BUFFER_LENGTH * num_segments; num_remaining = buf_len - MAX_BUFFER_LENGTH * num_segments;
k_sem_take(&context->spi_sem, K_FOREVER);
for (int i = 0; i < num_segments; for (int i = 0; i < num_segments;
++i, index_buf += MAX_BUFFER_LENGTH) { ++i, index_buf += MAX_BUFFER_LENGTH) {
context->mem_buf[0] = ENC28J60_SPI_WBM; context->mem_buf[0] = ENC28J60_SPI_WBM;
@ -250,8 +229,6 @@ static void eth_enc28j60_write_mem(struct device *dev, u8_t *data_buffer,
spi_write(context->spi, &context->spi_cfg, &tx); spi_write(context->spi, &context->spi_cfg, &tx);
} }
k_sem_give(&context->spi_sem);
} }
static void eth_enc28j60_read_mem(struct device *dev, u8_t *data_buffer, static void eth_enc28j60_read_mem(struct device *dev, u8_t *data_buffer,
@ -270,8 +247,6 @@ static void eth_enc28j60_read_mem(struct device *dev, u8_t *data_buffer,
num_segments = buf_len / MAX_BUFFER_LENGTH; num_segments = buf_len / MAX_BUFFER_LENGTH;
num_remaining = buf_len - MAX_BUFFER_LENGTH * num_segments; num_remaining = buf_len - MAX_BUFFER_LENGTH * num_segments;
k_sem_take(&context->spi_sem, K_FOREVER);
for (int i = 0; i < num_segments; for (int i = 0; i < num_segments;
++i, data_buffer += MAX_BUFFER_LENGTH) { ++i, data_buffer += MAX_BUFFER_LENGTH) {
context->mem_buf[0] = ENC28J60_SPI_RBM; context->mem_buf[0] = ENC28J60_SPI_RBM;
@ -306,8 +281,6 @@ static void eth_enc28j60_read_mem(struct device *dev, u8_t *data_buffer,
SYS_LOG_DBG("Failed to read memory"); SYS_LOG_DBG("Failed to read memory");
} }
} }
k_sem_give(&context->spi_sem);
} }
static void eth_enc28j60_write_phy(struct device *dev, u16_t reg_addr, static void eth_enc28j60_write_phy(struct device *dev, u16_t reg_addr,
@ -452,8 +425,6 @@ static int eth_enc28j60_init(struct device *dev)
const struct eth_enc28j60_config *config = dev->config->config_info; const struct eth_enc28j60_config *config = dev->config->config_info;
struct eth_enc28j60_runtime *context = dev->driver_data; struct eth_enc28j60_runtime *context = dev->driver_data;
k_sem_init(&context->spi_sem, 1, UINT_MAX);
/* SPI config */ /* SPI config */
context->spi_cfg.operation = SPI_WORD_SET(8); context->spi_cfg.operation = SPI_WORD_SET(8);
context->spi_cfg.frequency = config->spi_freq; context->spi_cfg.frequency = config->spi_freq;

View file

@ -240,7 +240,6 @@ struct eth_enc28j60_runtime {
u8_t rx_rsv[RSV_SIZE]; u8_t rx_rsv[RSV_SIZE];
struct k_sem tx_rx_sem; struct k_sem tx_rx_sem;
struct k_sem int_sem; struct k_sem int_sem;
struct k_sem spi_sem;
}; };
#endif /*_ENC28J60_*/ #endif /*_ENC28J60_*/