mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 06:34:12 +08:00
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>
This commit is contained in:
parent
e1f16b0493
commit
46336966bf
41
drivers/spi/internals.h
Normal file
41
drivers/spi/internals.h
Normal file
@ -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 */
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user