• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 /* FIXME driver should be able to handle IRQs...  */
3 
4 struct mcp23s08_chip_info {
5 	bool		is_present;	/* true if populated */
6 	unsigned	pullups;	/* BIT(x) means enable pullup x */
7 };
8 
9 struct mcp23s08_platform_data {
10 	/* For mcp23s08, up to 4 slaves (numbered 0..3) can share one SPI
11 	 * chipselect, each providing 1 gpio_chip instance with 8 gpios.
12 	 * For mpc23s17, up to 8 slaves (numbered 0..7) can share one SPI
13 	 * chipselect, each providing 1 gpio_chip (port A + port B) with
14 	 * 16 gpios.
15 	 */
16 	struct mcp23s08_chip_info	chip[8];
17 
18 	/* "base" is the number of the first GPIO.  Dynamic assignment is
19 	 * not currently supported, and even if there are gaps in chip
20 	 * addressing the GPIO numbers are sequential .. so for example
21 	 * if only slaves 0 and 3 are present, their GPIOs range from
22 	 * base to base+15 (or base+31 for s17 variant).
23 	 */
24 	unsigned	base;
25 	/* Marks the device as a interrupt controller.
26 	 * NOTE: The interrupt functionality is only supported for i2c
27 	 * versions of the chips. The spi chips can also do the interrupts,
28 	 * but this is not supported by the linux driver yet.
29 	 */
30 	bool		irq_controller;
31 
32 	/* Sets the mirror flag in the IOCON register. Devices
33 	 * with two interrupt outputs (these are the devices ending with 17 and
34 	 * those that have 16 IOs) have two IO banks: IO 0-7 form bank 1 and
35 	 * IO 8-15 are bank 2. These chips have two different interrupt outputs:
36 	 * One for bank 1 and another for bank 2. If irq-mirror is set, both
37 	 * interrupts are generated regardless of the bank that an input change
38 	 * occurred on. If it is not set, the interrupt are only generated for
39 	 * the bank they belong to.
40 	 * On devices with only one interrupt output this property is useless.
41 	 */
42 	bool		mirror;
43 };
44