1. 26 7月, 2008 1 次提交
    • D
      gpio: mcp23s08 handles multiple chips per chipselect · 8f1cc3b1
      David Brownell 提交于
      Teach the mcp23s08 driver about a curious feature of these chips: up to
      four of them can share the same chipselect, with the SPI signals wired in
      parallel, by matching two bits in the first protocol byte against two
      address lines on the chip.
      
      This is handled by three software changes:
      
        * Platform data now holds an array of per-chip structs, not
          just one chip's address and pullup configuration.
      
        * Probe() and remove() now use another level of structure,
          wrapping an instance of the original structure for each
          mcp23s08 chip sharing that chipselect.
      
        * The HAEN bit is set, so that the hardware address bits can no
          longer be ignored (boot firmware may not have enabled them).
      
      The "one struct per chip" preserves the guts of the current code,
      but platform_data will need minor changes.
      
          OLD:
      	/* incorrect "slave" ID may not have mattered */
      	.slave = 3,
      	.pullups = BIT(3) | BIT(1) | BIT(0),
      
          NEW:
      	/* slave address _must_ match chip's wiring */
      	.chip[3] = {
      		.is_present = true,
      		.pullups = BIT(3) | BIT(1) | BIT(0),
      	},
      
      There's no change in how things _behave_ for spi_device nodes with a
      single mcp23s08 chip.  New multi-chip configurations assign GPIOs in
      sequence, without holes.  The spi_device just resembles a bigger
      controller, but internally it has multiple gpio_chip instances.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      8f1cc3b1
  2. 06 2月, 2008 1 次提交