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];
int ret;
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_RCR | ENC28J60_REG_ECON1;
tx_buf[1] = 0x0;
@ -81,8 +79,6 @@ static void eth_enc28j60_set_bank(struct device *dev, u16_t reg_addr)
} else {
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,
@ -101,13 +97,10 @@ static void eth_enc28j60_write_reg(struct device *dev, u16_t reg_addr,
.count = ARRAY_SIZE(tx_bufs)
};
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_WCR | (reg_addr & 0xFF);
tx_buf[1] = value;
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,
@ -138,8 +131,6 @@ static void eth_enc28j60_read_reg(struct device *dev, u16_t reg_addr,
u8_t rx_size = 2;
int ret;
k_sem_take(&context->spi_sem, K_FOREVER);
if (reg_addr & 0xF000) {
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);
*value = 0;
}
k_sem_give(&context->spi_sem);
}
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)
};
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_BFS | (reg_addr & 0xFF);
tx_buf[1] = value;
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)
};
k_sem_take(&context->spi_sem, K_FOREVER);
tx_buf[0] = ENC28J60_SPI_BFC | (reg_addr & 0xFF);
tx_buf[1] = value;
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,
@ -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_remaining = buf_len - MAX_BUFFER_LENGTH * num_segments;
k_sem_take(&context->spi_sem, K_FOREVER);
for (int i = 0; i < num_segments;
++i, index_buf += MAX_BUFFER_LENGTH) {
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);
}
k_sem_give(&context->spi_sem);
}
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_remaining = buf_len - MAX_BUFFER_LENGTH * num_segments;
k_sem_take(&context->spi_sem, K_FOREVER);
for (int i = 0; i < num_segments;
++i, data_buffer += MAX_BUFFER_LENGTH) {
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");
}
}
k_sem_give(&context->spi_sem);
}
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;
struct eth_enc28j60_runtime *context = dev->driver_data;
k_sem_init(&context->spi_sem, 1, UINT_MAX);
/* SPI config */
context->spi_cfg.operation = SPI_WORD_SET(8);
context->spi_cfg.frequency = config->spi_freq;

View file

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