current_byte = send_data[i];
switch (current_byte) {
case SPI_BYTE_IDLE:
- *p++ = SPI_BYTE_IDLE;
+ *p++ = SPI_BYTE_ESC;
*p++ = xor_20(current_byte);
break;
case SPI_BYTE_ESC:
{
int ret;
- pthread_mutex_lock(&dev->lock);
+ pthread_mutex_lock(dev->mutex);
ret = do_transaction(dev, addr, size, data,
(size > SPI_REG_BYTES) ?
SPI_TRAN_SEQ_READ : SPI_TRAN_NON_SEQ_READ);
- pthread_mutex_unlock(&dev->lock);
+ pthread_mutex_unlock(dev->mutex);
return ret;
}
{
int ret;
- pthread_mutex_lock(&dev->lock);
+ pthread_mutex_lock(dev->mutex);
ret = do_transaction(dev, addr, size, data,
(size > SPI_REG_BYTES) ?
SPI_TRAN_SEQ_WRITE : SPI_TRAN_NON_SEQ_WRITE);
- pthread_mutex_unlock(&dev->lock);
+ pthread_mutex_unlock(dev->mutex);
return ret;
}
dev_err(spi_tran_dev, "fail to init mutex lock\n");
goto err;
}
+ if (dev->mutex) {
+ dev_info(NULL, "use multi-process mutex in spi\n");
+ spi_tran_dev->mutex = dev->mutex;
+ } else {
+ dev_info(NULL, "use multi-thread mutex in spi\n");
+ spi_tran_dev->mutex = &spi_tran_dev->lock;
+ }
return spi_tran_dev;