[PATCH] dvb: documentation update
commit1a6b6b96e254039cf0b3261e397b4d4f7cf0f5e0
authorMichael Hunold <hunold@linuxtv.org>
Tue, 7 Dec 2004 08:19:34 +0000 (7 00:19 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 7 Dec 2004 08:19:34 +0000 (7 00:19 -0800)
tree0e008f4526caed265fbff83797d1037d80178d3f
parentcb5f814b17dab73c8faa678ce4bb9544a584aefe
[PATCH] dvb: documentation update

Start of a big DVB update.

The reasons for revamping the DVB frontend architecture:

Just as analog TV cards, DVB cards need some sort of tuner to tune to the
desired frequency of the digital transponder.  Tuning alone doesn't give you a
digital DVB datastream, however, you need a demodulator as well.  The
combination of tuner and demodulator is called frontend in the DVB world.
Tuner and demodulator are both accessed via the serial i2c bus on all DVB
cards out there.  So, technically a frontend consists of two i2c helper
chipsets.

In former times when there was only a handful of different DVB cards, the
frontend was encapsulated in one tin box.  Some people had the idea that there
should be one "frontend driver" instead of dedicated tuner and demodulator
drivers.  A bad idea.

As time went on, different manufacturers used the same tuner and demodulator
combination, but used a different wiring for the tuner or did other technical
changes.  The only possibility to support different cards with one combined
frontend driver was to add hardware dependent tuner code inside the generic
i2c frontend drivers.  Yuck.

So there was a need for communication between the i2c frontend driver and the
hardware depenedent driver, for example to exchange initialization code for
the tuner.  Unfortunately, the i2c infrastructure is one way, from the i2c
client to the i2c adapter using a non-typesafe ioctl() like interface, which
is ugly by itself.  Greg K-H and others refused the idea to add an iotctl()
like interface from the i2c adapter to the i2c client and instead proposed to
use a typesafe interface instead.  We all agreed with that.

The existing i2c infrastructure heavily depends on the probing facility, ie.
clients probe for their existence on i2c busses.  This is dumb for most i2c
busses out there that sit on dedicated hardware.  A DVB card is uniquely
identified with pci or usb subvendor and subsystem ids, so on that particular
bus we exactly *know* which kinds of i2c helper chipsets sit on there.

Up to now this wasn't a problem, because we could fix all conflicts manually
until half a year ago.  By that date, we found two different DVB designs which
used different demodulators that unfortunately use the same i2c address and
which cannot be distinguished by hardware tricks (ie.  different number of
registers, some fixed hw dependent register,...)

Getting a usable DVB card depended on the load order of the modules, because
the i2c core probed the demodulator drivers one after another and the first
one won the race.  Compiling all drivers statically into the kernel resulted
in non-working cards.

Our solution is as follows: we agreed to keep the basic underlying kernel i2c
infrastructure, but we decided not to register our bussed and chipsets to the
kernel i2c "probing" infrastructure.  Instead, we killed the tuner parts of
the frontend drivers and put them into the dedicated hardware drivers (this is
were they technically belong, they are highly hardware dependent) and we
changed the frontend drivers to pure demodulator drivers (which are hardware
independend).  There is now a type-safe functional dependency between the
drivers and the demodulator drivers, the drivers explicitely ask the
demodulator drivers to attach to their i2c bus.  The only negative aspect of
that approach is that for some hardware there are now more dependencies to
demodulator drivers than needed, ie.  a small amount of memory is wasted.

This patch:

- [DVB] cards.txt: added the USB devices to the card-list
- [DVB] README.dibusb: follow changes in dibusb-driver

Signed-off-by: Michael Hunold <hunold@linuxtv.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Documentation/dvb/README.dibusb
Documentation/dvb/cards.txt