Commit | Line | Data |
---|---|---|
d29389de DB |
1 | #ifndef __LINUX_SPI_GPIO_H |
2 | #define __LINUX_SPI_GPIO_H | |
3 | ||
4 | /* | |
5 | * For each bitbanged SPI bus, set up a platform_device node with: | |
6 | * - name "spi_gpio" | |
7 | * - id the same as the SPI bus number it implements | |
8 | * - dev.platform data pointing to a struct spi_gpio_platform_data | |
9 | * | |
10 | * Or, see the driver code for information about speedups that are | |
11 | * possible on platforms that support inlined access for GPIOs (no | |
12 | * spi_gpio_platform_data is used). | |
13 | * | |
14 | * Use spi_board_info with these busses in the usual way, being sure | |
15 | * that the controller_data being the GPIO used for each device's | |
16 | * chipselect: | |
17 | * | |
18 | * static struct spi_board_info ... [] = { | |
19 | * ... | |
20 | * // this slave uses GPIO 42 for its chipselect | |
21 | * .controller_data = (void *) 42, | |
22 | * ... | |
23 | * // this one uses GPIO 86 for its chipselect | |
24 | * .controller_data = (void *) 86, | |
25 | * ... | |
26 | * }; | |
27 | * | |
bfb9bcdb MB |
28 | * If chipselect is not used (there's only one device on the bus), assign |
29 | * SPI_GPIO_NO_CHIPSELECT to the controller_data: | |
30 | * .controller_data = (void *) SPI_GPIO_NO_CHIPSELECT; | |
31 | * | |
3c8e1a84 MS |
32 | * If the MISO or MOSI pin is not available then it should be set to |
33 | * SPI_GPIO_NO_MISO or SPI_GPIO_NO_MOSI. | |
34 | * | |
d29389de DB |
35 | * If the bitbanged bus is later switched to a "native" controller, |
36 | * that platform_device and controller_data should be removed. | |
37 | */ | |
38 | ||
bfb9bcdb | 39 | #define SPI_GPIO_NO_CHIPSELECT ((unsigned long)-1l) |
3c8e1a84 MS |
40 | #define SPI_GPIO_NO_MISO ((unsigned long)-1l) |
41 | #define SPI_GPIO_NO_MOSI ((unsigned long)-1l) | |
bfb9bcdb | 42 | |
d29389de DB |
43 | /** |
44 | * struct spi_gpio_platform_data - parameter for bitbanged SPI master | |
45 | * @sck: number of the GPIO used for clock output | |
46 | * @mosi: number of the GPIO used for Master Output, Slave In (MOSI) data | |
47 | * @miso: number of the GPIO used for Master Input, Slave Output (MISO) data | |
48 | * @num_chipselect: how many slaves to allow | |
49 | * | |
50 | * All GPIO signals used with the SPI bus managed through this driver | |
51 | * (chipselects, MOSI, MISO, SCK) must be configured as GPIOs, instead | |
52 | * of some alternate function. | |
53 | * | |
54 | * It can be convenient to use this driver with pins that have alternate | |
55 | * functions associated with a "native" SPI controller if a driver for that | |
56 | * controller is not available, or is missing important functionality. | |
57 | * | |
58 | * On platforms which can do so, configure MISO with a weak pullup unless | |
59 | * there's an external pullup on that signal. That saves power by avoiding | |
60 | * floating signals. (A weak pulldown would save power too, but many | |
61 | * drivers expect to see all-ones data as the no slave "response".) | |
62 | */ | |
63 | struct spi_gpio_platform_data { | |
64 | unsigned sck; | |
d560040f MR |
65 | unsigned long mosi; |
66 | unsigned long miso; | |
d29389de DB |
67 | |
68 | u16 num_chipselect; | |
69 | }; | |
70 | ||
71 | #endif /* __LINUX_SPI_GPIO_H */ |