Card detection problems with Rolf's patched dvb-0.8.2
driver
Patches (level 8) created by Rolf
Siebrecht for the dvb-0.8.2 drivers include a automatic detection
for the card that one has in the computer.
However, some manufacturers (or maybe just some batches of cards) are
improperly configured at the factory.
Each card has an onboard EEPROM which stores various information about
the card.
- subdevice ID (bytes
0, 1)
- subvendor ID (bytes
2, 3)
(big-endian order). Some cards have an illconfigured subdevice ID :
- a DVB-T card reported subdevice
ID = 0x1002 (reported on the dvb-list, according to Rolf)
- a Technisat SkyStar 1 PCB revision 1.3 reported subdevice
ID = 0x1002 (my own card)
- a similar pattern was found by Rolf in a Technisat MediafocusII
(analogue satellite receiver)
Having the ID's wrong makes the detection of these cards impossible by
the dvb-0.8.2-patch-8 although the same card works
fine with the original driver.
Because of this, future releases of Rolf's patches may include a module
parameter that will force detection of the card even if it has such a
wierd ID.
Symptoms
- Drivers will not load with message "Device or resource busy"
- Check the logs! You will find :
kernel: dvb: no DVB card type detected on saa7146(0).
kernel: dvb: no (working) dvb found!
- The following may appear with some debugging turned on: (see module
parameters)
kernel: saa7146_core: ==> saa7146_core_init
saa7146_core: ==> saa7146_probe
kernel: saa7146_core: saa7146(0) @ pci 00:12.0; \
rev=1; mem=0xe1000000; irq=10; subsys=0x13c2,0x1002.
kernel: saa7146_core: saa7146(0): \
using 2 capture buffers of 1728 KBytes each (3456 KBytes total)
kernel: saa7146_core: saa7146(0): \
latency=32 clks; threshold=32 dwrds; burst=128 dwrds.
kernel: saa7146_core: 1 SAA7146 chipset(s) found.
- As marked above, the second word in subsys is the culprit.
-
lsmod will list
some of the modules loaded, but not all.
Workaround
- Look in dvb.c at the definition of get_card_subtype()
at the first case clause.
If your subdevice ID is not in that list, add it as suggested below
: (this example is for my Skystar 1 as suggested by Rolf
Siebrecht.)
switch (subdevice) { case 0x0000: case 0x1002: subtype = DVB_CARD_TT_SIEMENS_S_1_3;
- This will allow the card to be detected and the modules will load.
You will also need to fix the subdevice ID in the card's EEPROM.
Look in dvb.c at the list of device ID's and try to find the one that
matches your card. Remember it.
If you don't find anything close enough, ask on the mailing list, or
Rolf Siebrecht for a
suggestion.
- Compile and load the changed drivers
- Go into the tools directory and look at dumpee
- Edit the last part of it like this :
if (open_device (device, &fd)) { exit (-1); }
put_ee_byte (fd, 0, 0x00);
put_ee_byte (fd, 1, 0x00);
dump_eeprom (fd);
close_device (fd);
exit (0);
- Remember that the ID values are stored as big-endian.
- Recompile dumpee and
run it. The eeprom will be updated.
- Edit dvb.c and from get_card_subtype()
delete the original ID of your card. (undo the modifications).
- Recompile. Everything should be working now...
|