firewire: fix use of multiple AV/C devices, allow multiple FCP listeners
authorClemens Ladisch <cladisch@fastmail.net>
Thu, 24 Dec 2009 11:05:58 +0000 (12:05 +0100)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Tue, 29 Dec 2009 18:58:16 +0000 (19:58 +0100)
commitdb5d247ae811f49185a71e703b65acad845e4b18
tree630586f3bdeea2df01c349d3cf27fb2e6317370c
parent6b7b284958d47b77d06745b36bc7f36dab769d9b
firewire: fix use of multiple AV/C devices, allow multiple FCP listeners

Control of more than one AV/C device at once --- e.g. camcorders, tape
decks, audio devices, TV tuners --- failed or worked only unreliably,
depending on driver implementation.  This affected kernelspace and
userspace drivers alike and was caused by firewire-core's inability to
accept multiple registrations of FCP listeners.

The fix allows multiple address handlers to be registered for the FCP
command and response registers.  When a request for these registers is
received, all handlers are invoked, and the Firewire response is
generated by the core and not by any handler.

The cdev API does not change, i.e., userspace is still expected to send
a response for FCP requests; this response is silently ignored.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (changelog, rebased, whitespace)
drivers/firewire/core-cdev.c
drivers/firewire/core-transaction.c
drivers/media/dvb/firewire/firedtv-fw.c
include/linux/firewire-cdev.h
include/linux/firewire.h