spi: Get rid of the spi_flash_read() API
This API has been replaced by the spi_mem_xx() one, its only user (spi-nor) has been converted to spi_mem_xx() and all SPI controller drivers that were implementing the ->spi_flash_xxx() hooks are also implementing the spi_mem ones. So we can safely get rid of this API. Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> Reviewed-by: Frieder Schrempf <frieder.schrempf@exceet.de> Tested-by: Frieder Schrempf <frieder.schrempf@exceet.de> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
4120f8d158
commit
c1f5ba70de
|
@ -531,44 +531,6 @@ static void ti_qspi_setup_mmap_read(struct spi_device *spi, u8 opcode,
|
|||
QSPI_SPI_SETUP_REG(spi->chip_select));
|
||||
}
|
||||
|
||||
static bool ti_qspi_spi_flash_can_dma(struct spi_device *spi,
|
||||
struct spi_flash_read_message *msg)
|
||||
{
|
||||
return virt_addr_valid(msg->buf);
|
||||
}
|
||||
|
||||
static int ti_qspi_spi_flash_read(struct spi_device *spi,
|
||||
struct spi_flash_read_message *msg)
|
||||
{
|
||||
struct ti_qspi *qspi = spi_master_get_devdata(spi->master);
|
||||
int ret = 0;
|
||||
|
||||
mutex_lock(&qspi->list_lock);
|
||||
|
||||
if (!qspi->mmap_enabled)
|
||||
ti_qspi_enable_memory_map(spi);
|
||||
ti_qspi_setup_mmap_read(spi, msg->read_opcode, msg->data_nbits,
|
||||
msg->addr_width, msg->dummy_bytes);
|
||||
|
||||
if (qspi->rx_chan) {
|
||||
if (msg->cur_msg_mapped)
|
||||
ret = ti_qspi_dma_xfer_sg(qspi, msg->rx_sg, msg->from);
|
||||
else
|
||||
ret = ti_qspi_dma_bounce_buffer(qspi, msg->from,
|
||||
msg->buf, msg->len);
|
||||
if (ret)
|
||||
goto err_unlock;
|
||||
} else {
|
||||
memcpy_fromio(msg->buf, qspi->mmap_base + msg->from, msg->len);
|
||||
}
|
||||
msg->retlen = msg->len;
|
||||
|
||||
err_unlock:
|
||||
mutex_unlock(&qspi->list_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ti_qspi_exec_mem_op(struct spi_mem *mem,
|
||||
const struct spi_mem_op *op)
|
||||
{
|
||||
|
@ -727,7 +689,6 @@ static int ti_qspi_probe(struct platform_device *pdev)
|
|||
master->dev.of_node = pdev->dev.of_node;
|
||||
master->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(16) |
|
||||
SPI_BPW_MASK(8);
|
||||
master->spi_flash_read = ti_qspi_spi_flash_read;
|
||||
master->mem_ops = &ti_qspi_mem_ops;
|
||||
|
||||
if (!of_property_read_u32(np, "num-cs", &num_cs))
|
||||
|
@ -827,7 +788,6 @@ static int ti_qspi_probe(struct platform_device *pdev)
|
|||
dma_release_channel(qspi->rx_chan);
|
||||
goto no_dma;
|
||||
}
|
||||
master->spi_flash_can_dma = ti_qspi_spi_flash_can_dma;
|
||||
master->dma_rx = qspi->rx_chan;
|
||||
init_completion(&qspi->transfer_complete);
|
||||
if (res_mmap)
|
||||
|
@ -841,7 +801,6 @@ no_dma:
|
|||
"mmap failed with error %ld using PIO mode\n",
|
||||
PTR_ERR(qspi->mmap_base));
|
||||
qspi->mmap_base = NULL;
|
||||
master->spi_flash_read = NULL;
|
||||
master->mem_ops = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3055,63 +3055,6 @@ int spi_async_locked(struct spi_device *spi, struct spi_message *message)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(spi_async_locked);
|
||||
|
||||
|
||||
int spi_flash_read(struct spi_device *spi,
|
||||
struct spi_flash_read_message *msg)
|
||||
|
||||
{
|
||||
struct spi_controller *master = spi->controller;
|
||||
struct device *rx_dev = NULL;
|
||||
int ret;
|
||||
|
||||
if ((msg->opcode_nbits == SPI_NBITS_DUAL ||
|
||||
msg->addr_nbits == SPI_NBITS_DUAL) &&
|
||||
!(spi->mode & (SPI_TX_DUAL | SPI_TX_QUAD)))
|
||||
return -EINVAL;
|
||||
if ((msg->opcode_nbits == SPI_NBITS_QUAD ||
|
||||
msg->addr_nbits == SPI_NBITS_QUAD) &&
|
||||
!(spi->mode & SPI_TX_QUAD))
|
||||
return -EINVAL;
|
||||
if (msg->data_nbits == SPI_NBITS_DUAL &&
|
||||
!(spi->mode & (SPI_RX_DUAL | SPI_RX_QUAD)))
|
||||
return -EINVAL;
|
||||
if (msg->data_nbits == SPI_NBITS_QUAD &&
|
||||
!(spi->mode & SPI_RX_QUAD))
|
||||
return -EINVAL;
|
||||
|
||||
if (master->auto_runtime_pm) {
|
||||
ret = pm_runtime_get_sync(master->dev.parent);
|
||||
if (ret < 0) {
|
||||
dev_err(&master->dev, "Failed to power device: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
mutex_lock(&master->bus_lock_mutex);
|
||||
mutex_lock(&master->io_mutex);
|
||||
if (master->dma_rx && master->spi_flash_can_dma(spi, msg)) {
|
||||
rx_dev = master->dma_rx->device->dev;
|
||||
ret = spi_map_buf(master, rx_dev, &msg->rx_sg,
|
||||
msg->buf, msg->len,
|
||||
DMA_FROM_DEVICE);
|
||||
if (!ret)
|
||||
msg->cur_msg_mapped = true;
|
||||
}
|
||||
ret = master->spi_flash_read(spi, msg);
|
||||
if (msg->cur_msg_mapped)
|
||||
spi_unmap_buf(master, rx_dev, &msg->rx_sg,
|
||||
DMA_FROM_DEVICE);
|
||||
mutex_unlock(&master->io_mutex);
|
||||
mutex_unlock(&master->bus_lock_mutex);
|
||||
|
||||
if (master->auto_runtime_pm)
|
||||
pm_runtime_put(master->dev.parent);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(spi_flash_read);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Utility methods for SPI protocol drivers, layered on
|
||||
|
|
|
@ -26,7 +26,6 @@ struct dma_chan;
|
|||
struct property_entry;
|
||||
struct spi_controller;
|
||||
struct spi_transfer;
|
||||
struct spi_flash_read_message;
|
||||
struct spi_controller_mem_ops;
|
||||
|
||||
/*
|
||||
|
@ -382,11 +381,6 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv)
|
|||
* controller has native support for memory like operations.
|
||||
* @unprepare_message: undo any work done by prepare_message().
|
||||
* @slave_abort: abort the ongoing transfer request on an SPI slave controller
|
||||
* @spi_flash_read: to support spi-controller hardwares that provide
|
||||
* accelerated interface to read from flash devices.
|
||||
* @spi_flash_can_dma: analogous to can_dma() interface, but for
|
||||
* controllers implementing spi_flash_read.
|
||||
* @flash_read_supported: spi device supports flash read
|
||||
* @cs_gpios: Array of GPIOs to use as chip select lines; one per CS
|
||||
* number. Any individual value may be -ENOENT for CS lines that
|
||||
* are not GPIOs (driven by the SPI controller itself).
|
||||
|
@ -552,11 +546,6 @@ struct spi_controller {
|
|||
int (*unprepare_message)(struct spi_controller *ctlr,
|
||||
struct spi_message *message);
|
||||
int (*slave_abort)(struct spi_controller *ctlr);
|
||||
int (*spi_flash_read)(struct spi_device *spi,
|
||||
struct spi_flash_read_message *msg);
|
||||
bool (*spi_flash_can_dma)(struct spi_device *spi,
|
||||
struct spi_flash_read_message *msg);
|
||||
bool (*flash_read_supported)(struct spi_device *spi);
|
||||
|
||||
/*
|
||||
* These hooks are for drivers that use a generic implementation
|
||||
|
@ -1190,48 +1179,6 @@ static inline ssize_t spi_w8r16be(struct spi_device *spi, u8 cmd)
|
|||
return be16_to_cpu(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* struct spi_flash_read_message - flash specific information for
|
||||
* spi-masters that provide accelerated flash read interfaces
|
||||
* @buf: buffer to read data
|
||||
* @from: offset within the flash from where data is to be read
|
||||
* @len: length of data to be read
|
||||
* @retlen: actual length of data read
|
||||
* @read_opcode: read_opcode to be used to communicate with flash
|
||||
* @addr_width: number of address bytes
|
||||
* @dummy_bytes: number of dummy bytes
|
||||
* @opcode_nbits: number of lines to send opcode
|
||||
* @addr_nbits: number of lines to send address
|
||||
* @data_nbits: number of lines for data
|
||||
* @rx_sg: Scatterlist for receive data read from flash
|
||||
* @cur_msg_mapped: message has been mapped for DMA
|
||||
*/
|
||||
struct spi_flash_read_message {
|
||||
void *buf;
|
||||
loff_t from;
|
||||
size_t len;
|
||||
size_t retlen;
|
||||
u8 read_opcode;
|
||||
u8 addr_width;
|
||||
u8 dummy_bytes;
|
||||
u8 opcode_nbits;
|
||||
u8 addr_nbits;
|
||||
u8 data_nbits;
|
||||
struct sg_table rx_sg;
|
||||
bool cur_msg_mapped;
|
||||
};
|
||||
|
||||
/* SPI core interface for flash read support */
|
||||
static inline bool spi_flash_read_supported(struct spi_device *spi)
|
||||
{
|
||||
return spi->controller->spi_flash_read &&
|
||||
(!spi->controller->flash_read_supported ||
|
||||
spi->controller->flash_read_supported(spi));
|
||||
}
|
||||
|
||||
int spi_flash_read(struct spi_device *spi,
|
||||
struct spi_flash_read_message *msg);
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue