| From d56e188e7f9f51759079aadfc08fa40662848e26 Mon Sep 17 00:00:00 2001 |
| From: Boris Brezillon <boris.brezillon@bootlin.com> |
| Date: Sun, 22 Apr 2018 20:35:14 +0200 |
| Subject: [PATCH 1274/1795] spi: Expose spi_{map,unmap}_buf() for internal use |
| |
| spi_{map,unmap}_buf() are needed by the spi-mem logic that is about to |
| be introduced to prepare data buffer for DMA operations. |
| |
| Remove the static specifier on these functions and add their prototypes |
| to drivers/spi/internals.h. We do not export the symbols here because |
| both SPI_MEM and SPI can't be enabled as modules and we'd like to |
| prevent controller/device drivers from using these functions. |
| |
| Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| (cherry picked from commit 46336966bf0852d76f76c1292c057635b05dbb1b) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/spi/internals.h | 41 +++++++++++++++++++++++++++++++++++++++++ |
| drivers/spi/spi.c | 25 +++++++------------------ |
| 2 files changed, 48 insertions(+), 18 deletions(-) |
| create mode 100644 drivers/spi/internals.h |
| |
| diff --git a/drivers/spi/internals.h b/drivers/spi/internals.h |
| new file mode 100644 |
| index 000000000000..dbe56c77b464 |
| --- /dev/null |
| +++ b/drivers/spi/internals.h |
| @@ -0,0 +1,41 @@ |
| +/* SPDX-License-Identifier: GPL-2.0+ */ |
| +/* |
| + * Copyright (C) 2018 Exceet Electronics GmbH |
| + * Copyright (C) 2018 Bootlin |
| + * |
| + * Author: Boris Brezillon <boris.brezillon@bootlin.com> |
| + * |
| + * Helpers needed by the spi or spi-mem logic. Should not be used outside of |
| + * spi-mem.c and spi.c. |
| + */ |
| + |
| +#ifndef __LINUX_SPI_INTERNALS_H |
| +#define __LINUX_SPI_INTERNALS_H |
| + |
| +#include <linux/device.h> |
| +#include <linux/dma-direction.h> |
| +#include <linux/scatterlist.h> |
| +#include <linux/spi/spi.h> |
| + |
| +#ifdef CONFIG_HAS_DMA |
| +int spi_map_buf(struct spi_controller *ctlr, struct device *dev, |
| + struct sg_table *sgt, void *buf, size_t len, |
| + enum dma_data_direction dir); |
| +void spi_unmap_buf(struct spi_controller *ctlr, struct device *dev, |
| + struct sg_table *sgt, enum dma_data_direction dir); |
| +#else /* !CONFIG_HAS_DMA */ |
| +static inline int spi_map_buf(struct spi_controller *ctlr, struct device *dev, |
| + struct sg_table *sgt, void *buf, size_t len, |
| + enum dma_data_direction dir) |
| +{ |
| + return -EINVAL; |
| +} |
| + |
| +static inline void spi_unmap_buf(struct spi_controller *ctlr, |
| + struct device *dev, struct sg_table *sgt, |
| + enum dma_data_direction dir) |
| +{ |
| +} |
| +#endif /* CONFIG_HAS_DMA */ |
| + |
| +#endif /* __LINUX_SPI_INTERNALS_H */ |
| diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c |
| index 670dbb7a8500..5800b1bb6fd1 100644 |
| --- a/drivers/spi/spi.c |
| +++ b/drivers/spi/spi.c |
| @@ -46,6 +46,8 @@ |
| #define CREATE_TRACE_POINTS |
| #include <trace/events/spi.h> |
| |
| +#include "internals.h" |
| + |
| static DEFINE_IDR(spi_master_idr); |
| |
| static void spidev_release(struct device *dev) |
| @@ -740,9 +742,9 @@ static void spi_set_cs(struct spi_device *spi, bool enable) |
| } |
| |
| #ifdef CONFIG_HAS_DMA |
| -static int spi_map_buf(struct spi_controller *ctlr, struct device *dev, |
| - struct sg_table *sgt, void *buf, size_t len, |
| - enum dma_data_direction dir) |
| +int spi_map_buf(struct spi_controller *ctlr, struct device *dev, |
| + struct sg_table *sgt, void *buf, size_t len, |
| + enum dma_data_direction dir) |
| { |
| const bool vmalloced_buf = is_vmalloc_addr(buf); |
| unsigned int max_seg_size = dma_get_max_seg_size(dev); |
| @@ -821,8 +823,8 @@ static int spi_map_buf(struct spi_controller *ctlr, struct device *dev, |
| return 0; |
| } |
| |
| -static void spi_unmap_buf(struct spi_controller *ctlr, struct device *dev, |
| - struct sg_table *sgt, enum dma_data_direction dir) |
| +void spi_unmap_buf(struct spi_controller *ctlr, struct device *dev, |
| + struct sg_table *sgt, enum dma_data_direction dir) |
| { |
| if (sgt->orig_nents) { |
| dma_unmap_sg(dev, sgt->sgl, sgt->orig_nents, dir); |
| @@ -907,19 +909,6 @@ static int __spi_unmap_msg(struct spi_controller *ctlr, struct spi_message *msg) |
| return 0; |
| } |
| #else /* !CONFIG_HAS_DMA */ |
| -static inline int spi_map_buf(struct spi_controller *ctlr, struct device *dev, |
| - struct sg_table *sgt, void *buf, size_t len, |
| - enum dma_data_direction dir) |
| -{ |
| - return -EINVAL; |
| -} |
| - |
| -static inline void spi_unmap_buf(struct spi_controller *ctlr, |
| - struct device *dev, struct sg_table *sgt, |
| - enum dma_data_direction dir) |
| -{ |
| -} |
| - |
| static inline int __spi_map_msg(struct spi_controller *ctlr, |
| struct spi_message *msg) |
| { |
| -- |
| 2.19.0 |
| |