mcp23s08.h 1.7 KB

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