1
#ifndef __SPI_BITBANG_H
2
#define __SPI_BITBANG_H
4
#include <linux/workqueue.h>
7
struct workqueue_struct *workqueue;
8
struct work_struct work;
11
struct list_head queue;
14
u8 flags; /* extra spi->mode support */
16
struct spi_master *master;
18
/* setup_transfer() changes clock and/or wordsize to match settings
19
* for this transfer; zeroes restore defaults from spi_device.
21
int (*setup_transfer)(struct spi_device *spi,
22
struct spi_transfer *t);
24
void (*chipselect)(struct spi_device *spi, int is_on);
25
#define BITBANG_CS_ACTIVE 1 /* normally nCS, active low */
26
#define BITBANG_CS_INACTIVE 0
28
/* txrx_bufs() may handle dma mapping for transfers that don't
29
* already have one (transfer.{tx,rx}_dma is zero), or use PIO
31
int (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t);
33
/* txrx_word[SPI_MODE_*]() just looks like a shift register */
34
u32 (*txrx_word[4])(struct spi_device *spi,
39
/* you can call these default bitbang->master methods from your custom
40
* methods, if you like.
42
extern int spi_bitbang_setup(struct spi_device *spi);
43
extern void spi_bitbang_cleanup(struct spi_device *spi);
44
extern int spi_bitbang_transfer(struct spi_device *spi, struct spi_message *m);
45
extern int spi_bitbang_setup_transfer(struct spi_device *spi,
46
struct spi_transfer *t);
48
/* start or stop queue processing */
49
extern int spi_bitbang_start(struct spi_bitbang *spi);
50
extern int spi_bitbang_stop(struct spi_bitbang *spi);
52
#endif /* __SPI_BITBANG_H */