Blame view
drivers/spi/spi-pxa2xx.h
3.35 KB
d2912cb15 treewide: Replace... |
1 |
/* SPDX-License-Identifier: GPL-2.0-only */ |
cd7bed003 spi/pxa2xx: break... |
2 3 4 |
/* * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs * Copyright (C) 2013, Intel Corporation |
cd7bed003 spi/pxa2xx: break... |
5 6 7 8 |
*/ #ifndef SPI_PXA2XX_H #define SPI_PXA2XX_H |
5928808ef spi/pxa2xx: add s... |
9 10 |
#include <linux/atomic.h> #include <linux/dmaengine.h> |
cd7bed003 spi/pxa2xx: break... |
11 12 13 14 15 |
#include <linux/errno.h> #include <linux/io.h> #include <linux/interrupt.h> #include <linux/platform_device.h> #include <linux/pxa2xx_ssp.h> |
5928808ef spi/pxa2xx: add s... |
16 17 |
#include <linux/scatterlist.h> #include <linux/sizes.h> |
cd7bed003 spi/pxa2xx: break... |
18 19 20 21 22 23 24 25 26 27 28 29 |
#include <linux/spi/spi.h> #include <linux/spi/pxa2xx_spi.h> struct driver_data { /* Driver model hookup */ struct platform_device *pdev; /* SSP Info */ struct ssp_device *ssp; /* SPI framework hookup */ enum pxa_ssp_type ssp_type; |
51eea52d2 pxa2xx: replace s... |
30 |
struct spi_controller *controller; |
cd7bed003 spi/pxa2xx: break... |
31 32 |
/* PXA hookup */ |
51eea52d2 pxa2xx: replace s... |
33 |
struct pxa2xx_spi_controller *controller_info; |
cd7bed003 spi/pxa2xx: break... |
34 |
|
cd7bed003 spi/pxa2xx: break... |
35 36 |
/* SSP register addresses */ void __iomem *ioaddr; |
7956fadd4 spi: pxa2xx: Allo... |
37 |
phys_addr_t ssdr_physical; |
cd7bed003 spi/pxa2xx: break... |
38 39 40 41 42 43 |
/* SSP masks*/ u32 dma_cr1; u32 int_cr1; u32 clear_sr; u32 mask_sr; |
5928808ef spi/pxa2xx: add s... |
44 |
/* DMA engine support */ |
5928808ef spi/pxa2xx: add s... |
45 |
atomic_t dma_running; |
d5898e19c spi: pxa2xx: Use ... |
46 |
/* Current transfer state info */ |
cd7bed003 spi/pxa2xx: break... |
47 48 49 50 |
void *tx; void *tx_end; void *rx; void *rx_end; |
cd7bed003 spi/pxa2xx: break... |
51 52 53 54 55 |
u8 n_bytes; int (*write)(struct driver_data *drv_data); int (*read)(struct driver_data *drv_data); irqreturn_t (*transfer_handler)(struct driver_data *drv_data); void (*cs_control)(u32 command); |
a0d2642e9 spi/pxa2xx: add s... |
56 57 |
void __iomem *lpss_base; |
99f499cd6 spi: pxa2xx: Add ... |
58 59 60 |
/* GPIOs for chip selects */ struct gpio_desc **cs_gpiods; |
77d33897c spi: pxa2xx: Add ... |
61 62 63 |
/* Optional slave FIFO ready signal */ struct gpio_desc *gpiod_ready; |
cd7bed003 spi/pxa2xx: break... |
64 65 66 |
}; struct chip_data { |
cd7bed003 spi/pxa2xx: break... |
67 |
u32 cr1; |
e5262d056 spi: spi-pxa2xx: ... |
68 |
u32 dds_rate; |
cd7bed003 spi/pxa2xx: break... |
69 70 71 72 73 |
u32 timeout; u8 n_bytes; u32 dma_burst_size; u32 threshold; u32 dma_threshold; |
a0d2642e9 spi/pxa2xx: add s... |
74 75 |
u16 lpss_rx_threshold; u16 lpss_tx_threshold; |
cd7bed003 spi/pxa2xx: break... |
76 |
u8 enable_dma; |
cd7bed003 spi/pxa2xx: break... |
77 |
union { |
c18d925fc spi: pxa2xx: Conv... |
78 |
struct gpio_desc *gpiod_cs; |
cd7bed003 spi/pxa2xx: break... |
79 80 81 82 83 84 85 |
unsigned int frm; }; int gpio_cs_inverted; int (*write)(struct driver_data *drv_data); int (*read)(struct driver_data *drv_data); void (*cs_control)(u32 command); }; |
c039dd275 spi: pxa2xx: Clea... |
86 87 88 89 90 91 92 93 94 95 96 |
static inline u32 pxa2xx_spi_read(const struct driver_data *drv_data, unsigned reg) { return __raw_readl(drv_data->ioaddr + reg); } static inline void pxa2xx_spi_write(const struct driver_data *drv_data, unsigned reg, u32 val) { __raw_writel(val, drv_data->ioaddr + reg); } |
cd7bed003 spi/pxa2xx: break... |
97 |
|
cd7bed003 spi/pxa2xx: break... |
98 99 100 101 |
#define DMA_ALIGNMENT 8 static inline int pxa25x_ssp_comp(struct driver_data *drv_data) { |
e5262d056 spi: spi-pxa2xx: ... |
102 103 104 105 |
switch (drv_data->ssp_type) { case PXA25x_SSP: case CE4100_SSP: case QUARK_X1000_SSP: |
cd7bed003 spi/pxa2xx: break... |
106 |
return 1; |
e5262d056 spi: spi-pxa2xx: ... |
107 108 109 |
default: return 0; } |
cd7bed003 spi/pxa2xx: break... |
110 111 112 113 |
} static inline void write_SSSR_CS(struct driver_data *drv_data, u32 val) { |
e5262d056 spi: spi-pxa2xx: ... |
114 115 |
if (drv_data->ssp_type == CE4100_SSP || drv_data->ssp_type == QUARK_X1000_SSP) |
c039dd275 spi: pxa2xx: Clea... |
116 |
val |= pxa2xx_spi_read(drv_data, SSSR) & SSSR_ALT_FRM_MASK; |
cd7bed003 spi/pxa2xx: break... |
117 |
|
c039dd275 spi: pxa2xx: Clea... |
118 |
pxa2xx_spi_write(drv_data, SSSR, val); |
cd7bed003 spi/pxa2xx: break... |
119 120 121 |
} extern int pxa2xx_spi_flush(struct driver_data *drv_data); |
cd7bed003 spi/pxa2xx: break... |
122 |
|
5928808ef spi/pxa2xx: add s... |
123 124 |
#define MAX_DMA_LEN SZ_64K #define DEFAULT_DMA_CR1 (SSCR1_TSRE | SSCR1_RSRE | SSCR1_TRAIL) |
5928808ef spi/pxa2xx: add s... |
125 |
|
cd7bed003 spi/pxa2xx: break... |
126 |
extern irqreturn_t pxa2xx_spi_dma_transfer(struct driver_data *drv_data); |
d5898e19c spi: pxa2xx: Use ... |
127 128 |
extern int pxa2xx_spi_dma_prepare(struct driver_data *drv_data, struct spi_transfer *xfer); |
cd7bed003 spi/pxa2xx: break... |
129 |
extern void pxa2xx_spi_dma_start(struct driver_data *drv_data); |
d5898e19c spi: pxa2xx: Use ... |
130 |
extern void pxa2xx_spi_dma_stop(struct driver_data *drv_data); |
cd7bed003 spi/pxa2xx: break... |
131 132 |
extern int pxa2xx_spi_dma_setup(struct driver_data *drv_data); extern void pxa2xx_spi_dma_release(struct driver_data *drv_data); |
cd7bed003 spi/pxa2xx: break... |
133 134 135 136 137 |
extern int pxa2xx_spi_set_dma_burst_and_threshold(struct chip_data *chip, struct spi_device *spi, u8 bits_per_word, u32 *burst_code, u32 *threshold); |
cd7bed003 spi/pxa2xx: break... |
138 139 |
#endif /* SPI_PXA2XX_H */ |