kernel_optimize_test/drivers
David Brownell 8f1cc3b10e gpio: mcp23s08 handles multiple chips per chipselect
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: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-25 10:53:30 -07:00
..
accessibility
acpi Merge branch 'release-2.6.27' of git://git.kernel.org/pub/scm/linux/kernel/git/ak/linux-acpi-2.6 2008-07-24 13:57:37 -07:00
amba
ata
atm atm: [fore200e] use MODULE_FIRMWARE() and other suggested cleanups 2008-07-23 20:29:21 -07:00
auxdisplay auxdisplay: small cleanups 2008-07-24 10:47:41 -07:00
base memory-hotplug: add sysfs removable attribute for hotplug memory remove 2008-07-24 10:47:21 -07:00
block virtio_blk: check for hardsector size from host 2008-07-25 12:06:05 +10:00
bluetooth
cdrom
char remove some more tipar bits 2008-07-25 10:53:28 -07:00
clocksource
connector
cpufreq Merge branch 'cpus4096-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2008-07-23 18:37:44 -07:00
cpuidle
crypto
dca Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx 2008-07-23 12:03:18 -07:00
dio
dma I/OAT: I/OAT version 3.0 support 2008-07-22 17:30:57 -07:00
edac
eisa
firewire
firmware
gpio gpio: mcp23s08 handles multiple chips per chipselect 2008-07-25 10:53:30 -07:00
gpu
hid Merge branches 'upstream' and 'upstream-fixes' into for-linus 2008-07-23 15:26:10 +02:00
hwmon
i2c gpio: sysfs interface 2008-07-25 10:53:30 -07:00
ide ide: use proper printk() KERN_* levels in ide-probe.c 2008-07-24 22:53:36 +02:00
ieee1394 PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
infiniband Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband 2008-07-24 12:56:07 -07:00
input Undo duplicate "m68k: drivers/input/serio/hp_sdc.c needs <linux/semaphore.h>" 2008-07-25 09:19:36 -07:00
isdn Rename WARN() to WARNING() to clear the namespace 2008-07-25 10:53:29 -07:00
leds leds: Ensure led->trigger is set earlier 2008-07-23 09:49:56 +01:00
lguest virtio: Add transport feature handling stub for virtio_ring. 2008-07-25 12:06:14 +10:00
macintosh
mca
md
media PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
memstick
message I2O: handle sysfs_create_link() failures 2008-07-24 10:47:30 -07:00
mfd gpio: sysfs interface 2008-07-25 10:53:30 -07:00
misc drivers/misc/hpilo.c needs CONFIG_PCI 2008-07-25 10:53:29 -07:00
mmc sdhci: highmem capable PIO routines 2008-07-23 14:42:09 +02:00
mtd PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
net virtio: Recycle unused recv buffer pages for large skbs in net driver 2008-07-25 12:06:02 +10:00
nubus
of
oprofile
parisc
parport parport: fix platform driver hotplug/coldplug 2008-07-25 10:53:28 -07:00
pci Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6 2008-07-24 13:57:13 -07:00
pcmcia PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
pnp
power drivers/power: fix platform driver hotplug/coldplug 2008-07-25 10:53:28 -07:00
ps3
rapidio
rtc rtc-vr41xx: add irq_set_freq() and irq_set_state() 2008-07-24 10:47:34 -07:00
s390 virtio: Add transport feature handling stub for virtio_ring. 2008-07-25 12:06:14 +10:00
sbus
scsi Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6 2008-07-24 14:55:09 -07:00
serial cpm1: don't send break on TX_STOP, don't interrupt RX/TX when adjusting termios parameters 2008-07-24 10:47:30 -07:00
sh
sn
spi spi: au1550_spi: improve pio transfer mode 2008-07-24 10:47:30 -07:00
ssb
tc
telephony
thermal
uio
usb Rename WARN() to WARNING() to clear the namespace 2008-07-25 10:53:29 -07:00
video Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight 2008-07-24 12:16:40 -07:00
virtio virtio: Add transport feature handling stub for virtio_ring. 2008-07-25 12:06:14 +10:00
w1
watchdog remove the v850 port 2008-07-24 10:47:24 -07:00
xen
zorro move memory_read_from_buffer() from fs.h to string.h 2008-07-24 10:47:13 -07:00
Kconfig
Makefile