mcp23s08.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  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. void *context; /* param to setup/teardown */
  22. int (*setup)(struct spi_device *spi,
  23. int gpio, unsigned ngpio,
  24. void *context);
  25. int (*teardown)(struct spi_device *spi,
  26. int gpio, unsigned ngpio,
  27. void *context);
  28. };