~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to include/linux/spi/spi_bitbang.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef __SPI_BITBANG_H
 
2
#define __SPI_BITBANG_H
 
3
 
 
4
#include <linux/workqueue.h>
 
5
 
 
6
struct spi_bitbang {
 
7
        struct workqueue_struct *workqueue;
 
8
        struct work_struct      work;
 
9
 
 
10
        spinlock_t              lock;
 
11
        struct list_head        queue;
 
12
        u8                      busy;
 
13
        u8                      use_dma;
 
14
        u8                      flags;          /* extra spi->mode support */
 
15
 
 
16
        struct spi_master       *master;
 
17
 
 
18
        /* setup_transfer() changes clock and/or wordsize to match settings
 
19
         * for this transfer; zeroes restore defaults from spi_device.
 
20
         */
 
21
        int     (*setup_transfer)(struct spi_device *spi,
 
22
                        struct spi_transfer *t);
 
23
 
 
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
 
27
 
 
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
 
30
         */
 
31
        int     (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t);
 
32
 
 
33
        /* txrx_word[SPI_MODE_*]() just looks like a shift register */
 
34
        u32     (*txrx_word[4])(struct spi_device *spi,
 
35
                        unsigned nsecs,
 
36
                        u32 word, u8 bits);
 
37
};
 
38
 
 
39
/* you can call these default bitbang->master methods from your custom
 
40
 * methods, if you like.
 
41
 */
 
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);
 
47
 
 
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);
 
51
 
 
52
#endif  /* __SPI_BITBANG_H */