diff options
Diffstat (limited to 'include/linux/spi')
| -rw-r--r-- | include/linux/spi/spi_gpio.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/include/linux/spi/spi_gpio.h b/include/linux/spi/spi_gpio.h new file mode 100644 index 000000000000..0f01a0f1f40c --- /dev/null +++ b/include/linux/spi/spi_gpio.h | |||
| @@ -0,0 +1,60 @@ | |||
| 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 | * | ||
| 28 | * If the bitbanged bus is later switched to a "native" controller, | ||
| 29 | * that platform_device and controller_data should be removed. | ||
| 30 | */ | ||
| 31 | |||
| 32 | /** | ||
| 33 | * struct spi_gpio_platform_data - parameter for bitbanged SPI master | ||
| 34 | * @sck: number of the GPIO used for clock output | ||
| 35 | * @mosi: number of the GPIO used for Master Output, Slave In (MOSI) data | ||
| 36 | * @miso: number of the GPIO used for Master Input, Slave Output (MISO) data | ||
| 37 | * @num_chipselect: how many slaves to allow | ||
| 38 | * | ||
| 39 | * All GPIO signals used with the SPI bus managed through this driver | ||
| 40 | * (chipselects, MOSI, MISO, SCK) must be configured as GPIOs, instead | ||
| 41 | * of some alternate function. | ||
| 42 | * | ||
| 43 | * It can be convenient to use this driver with pins that have alternate | ||
| 44 | * functions associated with a "native" SPI controller if a driver for that | ||
| 45 | * controller is not available, or is missing important functionality. | ||
| 46 | * | ||
| 47 | * On platforms which can do so, configure MISO with a weak pullup unless | ||
| 48 | * there's an external pullup on that signal. That saves power by avoiding | ||
| 49 | * floating signals. (A weak pulldown would save power too, but many | ||
| 50 | * drivers expect to see all-ones data as the no slave "response".) | ||
| 51 | */ | ||
| 52 | struct spi_gpio_platform_data { | ||
| 53 | unsigned sck; | ||
| 54 | unsigned mosi; | ||
| 55 | unsigned miso; | ||
| 56 | |||
| 57 | u16 num_chipselect; | ||
| 58 | }; | ||
| 59 | |||
| 60 | #endif /* __LINUX_SPI_GPIO_H */ | ||
