diff options
Diffstat (limited to 'include/linux/spi/spi-mem.h')
| -rw-r--r-- | include/linux/spi/spi-mem.h | 25 | 
1 files changed, 20 insertions, 5 deletions
diff --git a/include/linux/spi/spi-mem.h b/include/linux/spi/spi-mem.h index bb4bd15ae1f6..69ee30456864 100644 --- a/include/linux/spi/spi-mem.h +++ b/include/linux/spi/spi-mem.h @@ -3,7 +3,9 @@   * Copyright (C) 2018 Exceet Electronics GmbH   * Copyright (C) 2018 Bootlin   * - * Author: Boris Brezillon <boris.brezillon@bootlin.com> + * Author: + *	Peter Pan <peterpandong@micron.com> + *	Boris Brezillon <boris.brezillon@bootlin.com>   */  #ifndef __LINUX_SPI_MEM_H @@ -79,8 +81,10 @@ enum spi_mem_data_dir {   * @dummy.buswidth: number of IO lanes used to transmit the dummy bytes   * @data.buswidth: number of IO lanes used to send/receive the data   * @data.dir: direction of the transfer - * @data.buf.in: input buffer - * @data.buf.out: output buffer + * @data.nbytes: number of data bytes to send/receive. Can be zero if the + *		 operation does not involve transferring data + * @data.buf.in: input buffer (must be DMA-able) + * @data.buf.out: output buffer (must be DMA-able)   */  struct spi_mem_op {  	struct { @@ -103,7 +107,6 @@ struct spi_mem_op {  		u8 buswidth;  		enum spi_mem_data_dir dir;  		unsigned int nbytes; -		/* buf.{in,out} must be DMA-able. */  		union {  			void *in;  			const void *out; @@ -122,7 +125,8 @@ struct spi_mem_op {  /**   * struct spi_mem - describes a SPI memory device   * @spi: the underlying SPI device - * @drvpriv: spi_mem_drviver private data + * @drvpriv: spi_mem_driver private data + * @name: name of the SPI memory device   *   * Extra information that describe the SPI memory device and may be needed by   * the controller to properly handle this device should be placed here. @@ -133,6 +137,7 @@ struct spi_mem_op {  struct spi_mem {  	struct spi_device *spi;  	void *drvpriv; +	const char *name;  };  /** @@ -165,6 +170,13 @@ static inline void *spi_mem_get_drvdata(struct spi_mem *mem)   *		    limitations)   * @supports_op: check if an operation is supported by the controller   * @exec_op: execute a SPI memory operation + * @get_name: get a custom name for the SPI mem device from the controller. + *	      This might be needed if the controller driver has been ported + *	      to use the SPI mem layer and a custom name is used to keep + *	      mtdparts compatible. + *	      Note that if the implementation of this function allocates memory + *	      dynamically, then it should do so with devm_xxx(), as we don't + *	      have a ->free_name() function.   *   * This interface should be implemented by SPI controllers providing an   * high-level interface to execute SPI memory operation, which is usually the @@ -176,6 +188,7 @@ struct spi_controller_mem_ops {  			    const struct spi_mem_op *op);  	int (*exec_op)(struct spi_mem *mem,  		       const struct spi_mem_op *op); +	const char *(*get_name)(struct spi_mem *mem);  };  /** @@ -234,6 +247,8 @@ bool spi_mem_supports_op(struct spi_mem *mem,  int spi_mem_exec_op(struct spi_mem *mem,  		    const struct spi_mem_op *op); +const char *spi_mem_get_name(struct spi_mem *mem); +  int spi_mem_driver_register_with_owner(struct spi_mem_driver *drv,  				       struct module *owner);  | 
