1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs 4 * Copyright (C) 2013, 2021 Intel Corporation 5 */ 6 7 #ifndef SPI_PXA2XX_H 8 #define SPI_PXA2XX_H 9 10 #include <linux/dmaengine.h> 11 #include <linux/irqreturn.h> 12 #include <linux/types.h> 13 #include <linux/sizes.h> 14 15 #include <linux/pxa2xx_ssp.h> 16 17 struct gpio_desc; 18 19 /* 20 * The platform data for SSP controller devices 21 * (resides in device.platform_data). 22 */ 23 struct pxa2xx_spi_controller { 24 u8 num_chipselect; 25 u8 enable_dma; 26 u8 dma_burst_size; 27 bool is_target; 28 29 /* DMA engine specific config */ 30 dma_filter_fn dma_filter; 31 void *tx_param; 32 void *rx_param; 33 34 /* For non-PXA arches */ 35 struct ssp_device ssp; 36 }; 37 38 struct spi_controller; 39 struct spi_device; 40 struct spi_transfer; 41 42 struct driver_data { 43 /* SSP Info */ 44 struct ssp_device *ssp; 45 46 /* SPI framework hookup */ 47 enum pxa_ssp_type ssp_type; 48 struct spi_controller *controller; 49 50 /* PXA hookup */ 51 struct pxa2xx_spi_controller *controller_info; 52 53 /* SSP masks*/ 54 u32 dma_cr1; 55 u32 int_cr1; 56 u32 clear_sr; 57 u32 mask_sr; 58 59 /* DMA engine support */ 60 atomic_t dma_running; 61 62 /* Current transfer state info */ 63 void *tx; 64 void *tx_end; 65 void *rx; 66 void *rx_end; 67 u8 n_bytes; 68 int (*write)(struct driver_data *drv_data); 69 int (*read)(struct driver_data *drv_data); 70 irqreturn_t (*transfer_handler)(struct driver_data *drv_data); 71 72 void __iomem *lpss_base; 73 74 /* Optional slave FIFO ready signal */ 75 struct gpio_desc *gpiod_ready; 76 }; 77 78 static inline u32 pxa2xx_spi_read(const struct driver_data *drv_data, u32 reg) 79 { 80 return pxa_ssp_read_reg(drv_data->ssp, reg); 81 } 82 83 static inline void pxa2xx_spi_write(const struct driver_data *drv_data, u32 reg, u32 val) 84 { 85 pxa_ssp_write_reg(drv_data->ssp, reg, val); 86 } 87 88 #define DMA_ALIGNMENT 8 89 90 static inline int pxa25x_ssp_comp(const struct driver_data *drv_data) 91 { 92 switch (drv_data->ssp_type) { 93 case PXA25x_SSP: 94 case CE4100_SSP: 95 case QUARK_X1000_SSP: 96 return 1; 97 default: 98 return 0; 99 } 100 } 101 102 static inline void clear_SSCR1_bits(const struct driver_data *drv_data, u32 bits) 103 { 104 pxa2xx_spi_write(drv_data, SSCR1, pxa2xx_spi_read(drv_data, SSCR1) & ~bits); 105 } 106 107 static inline u32 read_SSSR_bits(const struct driver_data *drv_data, u32 bits) 108 { 109 return pxa2xx_spi_read(drv_data, SSSR) & bits; 110 } 111 112 static inline void write_SSSR_CS(const struct driver_data *drv_data, u32 val) 113 { 114 if (drv_data->ssp_type == CE4100_SSP || 115 drv_data->ssp_type == QUARK_X1000_SSP) 116 val |= read_SSSR_bits(drv_data, SSSR_ALT_FRM_MASK); 117 118 pxa2xx_spi_write(drv_data, SSSR, val); 119 } 120 121 extern int pxa2xx_spi_flush(struct driver_data *drv_data); 122 123 #define MAX_DMA_LEN SZ_64K 124 #define DEFAULT_DMA_CR1 (SSCR1_TSRE | SSCR1_RSRE | SSCR1_TRAIL) 125 126 extern irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data); 127 extern int pxa2xx_spi_dma_prepare(struct driver_data *drv_data, 128 struct spi_transfer *xfer); 129 extern void pxa2xx_spi_dma_start(struct driver_data *drv_data); 130 extern void pxa2xx_spi_dma_stop(struct driver_data *drv_data); 131 extern int pxa2xx_spi_dma_setup(struct driver_data *drv_data); 132 extern void pxa2xx_spi_dma_release(struct driver_data *drv_data); 133 134 #endif /* SPI_PXA2XX_H */ 135