include/linux/spi/spi_gpio.h
author Florian Westphal <fw@strlen.de>
Thu, 09 Apr 2009 12:07:21 +0200
changeset 2 d1f6d8b6f81c
permissions -rw-r--r--
Linux 2.6.29 for NSC 0.5.0.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     1
#ifndef __LINUX_SPI_GPIO_H
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     2
#define __LINUX_SPI_GPIO_H
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     3
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     4
/*
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     5
 * For each bitbanged SPI bus, set up a platform_device node with:
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     6
 *   - name "spi_gpio"
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     7
 *   - id the same as the SPI bus number it implements
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     8
 *   - dev.platform data pointing to a struct spi_gpio_platform_data
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
     9
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    10
 * Or, see the driver code for information about speedups that are
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    11
 * possible on platforms that support inlined access for GPIOs (no
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    12
 * spi_gpio_platform_data is used).
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    13
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    14
 * Use spi_board_info with these busses in the usual way, being sure
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    15
 * that the controller_data being the GPIO used for each device's
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    16
 * chipselect:
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    17
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    18
 *	static struct spi_board_info ... [] = {
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    19
 *	...
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    20
 *		// this slave uses GPIO 42 for its chipselect
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    21
 *		.controller_data = (void *) 42,
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    22
 *	...
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    23
 *		// this one uses GPIO 86 for its chipselect
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    24
 *		.controller_data = (void *) 86,
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    25
 *	...
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    26
 *	};
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    27
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    28
 * If the bitbanged bus is later switched to a "native" controller,
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    29
 * that platform_device and controller_data should be removed.
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    30
 */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    31
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    32
/**
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    33
 * struct spi_gpio_platform_data - parameter for bitbanged SPI master
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    34
 * @sck: number of the GPIO used for clock output
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    35
 * @mosi: number of the GPIO used for Master Output, Slave In (MOSI) data
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    36
 * @miso: number of the GPIO used for Master Input, Slave Output (MISO) data
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    37
 * @num_chipselect: how many slaves to allow
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    38
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    39
 * All GPIO signals used with the SPI bus managed through this driver
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    40
 * (chipselects, MOSI, MISO, SCK) must be configured as GPIOs, instead
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    41
 * of some alternate function.
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    42
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    43
 * It can be convenient to use this driver with pins that have alternate
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    44
 * functions associated with a "native" SPI controller if a driver for that
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    45
 * controller is not available, or is missing important functionality.
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    46
 *
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    47
 * On platforms which can do so, configure MISO with a weak pullup unless
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    48
 * there's an external pullup on that signal.  That saves power by avoiding
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    49
 * floating signals.  (A weak pulldown would save power too, but many
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    50
 * drivers expect to see all-ones data as the no slave "response".)
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    51
 */
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    52
struct spi_gpio_platform_data {
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    53
	unsigned	sck;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    54
	unsigned	mosi;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    55
	unsigned	miso;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    56
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    57
	u16		num_chipselect;
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    58
};
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    59
d1f6d8b6f81c Linux 2.6.29 for NSC 0.5.0.
Florian Westphal <fw@strlen.de>
parents:
diff changeset
    60
#endif /* __LINUX_SPI_GPIO_H */