Bug 12259 - Неустойчивая идентификация звука на TV-тюнерах (tvaudio), основанных на чипах bt878
: Неустойчивая идентификация звука на TV-тюнерах (tvaudio), основанных на чипах...
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/kernel-image-std-smp)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2007-07-07 20:32 by
Modified: 2008-01-30 09:47 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-07-07 20:32:13
Имеется TV-тюнер основанный на чипе Bt878:
//----------------------------------------------------------------//
04:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture 
(rev 11)
04:08.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 
11)
//----------------------------------------------------------------//
Традиционно этот тюнер обслуживался драйвером bttv с параметрами 
инициализации:
install bttv /sbin/modprobe tvaudio; /sbin/modprobe -i bttv
options bttv radio=1 card=10 tuner=5
options tvaudio  pic16c54=1
И всё работало в: ASP7.2, 7.3, 9.0, ALT2.4, ALT3.0.
Но в ALT4.0 радио (опция radio=1) перестало инициироваться, фактически 
файл /dev/radio не создаётся:
//-------------------- dmesg ---------------------------------//
[root@roman etc]# dmesg | grep bttv
bttv: driver version 0.9.16 loaded
bttv: using 8 buffers with 2080k (520 pages) each for capture
bttv: Bt8xx card found (0).
bttv0: Bt878 (rev 17) at 0000:04:08.0, irq: 50, latency: 32, mmio: 0xfdaff000
bttv0: using: Hauppauge (bt878) [card=10,insmod option]
bttv0: gpio: en=00000000, out=00000000 in=00ffffff [init]
bttv0: Hauppauge/Voodoo msp34xx: reset line init [5]
bttv0: Hauppauge eeprom indicates model#0
bttv0: using tuner=5
bttv0: i2c: checking for MSP34xx @ 0x80... not found
bttv0: i2c: checking for TDA9875 @ 0xb0... not found
bttv0: i2c: checking for TDA7432 @ 0x8a... not found
bttv0: i2c: checking for TDA9887 @ 0x86... not found
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: PLL: 28636363 => 35468950 .. ok
//-----------------------------------------------------//
В сети находил информацию, что это версию bttv 0.9.16 сломали.
------- Comment #1 From 2007-07-07 22:35:07 -------
(In reply to comment #0)

> 04:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture 
> (rev 11)
Покажите вывод lspci -vvnn -s 04:08.0, а также точную модель карты (название на
коробке или на самой карте).

> [root@roman etc]# dmesg | grep bttv
grep bttv мало - нужны ещё сообщения, выдаваемые другими модулями (в частности,
модулем tveeprom). Покажите кусок dmesg, начиная со строки "bttv: driver version
0.9.16 loaded", полностью.

> bttv0: using: Hauppauge (bt878) [card=10,insmod option]
Если на самом деле карта не от Hauppauge, вероятно, этот тип указывать не стоит,
поскольку карты Hauppauge имеют EEPROM с данными специфического формата, которые
разбираются модулем tveeprom и в некоторых случаях перекрывают информацию,
заданную другими параметрами модуля bttv.

> В сети находил информацию, что это версию bttv 0.9.16 сломали.
После просмотра кода модуля tveeprom у меня создалось впечатление, что его как
раз починили - в версии из 2.6.12 возвращаемая структура предварительно не
очищалась, поэтому, если данные в EEPROM были неполными (или просто не
соответствовали формату, использующемуся в картах Hauppauge), возвращался мусор;
вероятно, в этом мусоре флаг наличия радио был установлен. В текущей версии
очистка производится правильно, поэтому при отсутствии в EEPROM информации о
наличии радио соответствующее устройство не инициализируется.

Можно попробовать вместо card=10 указать card=26 svhs=2 pll=28 - такие настройки
почти совпадают с card=10, за исключением того, что для этого типа не
используется EEPROM и отличается gpiomask (7 вместо 0x0f).
------- Comment #2 From 2007-07-08 17:25:33 -------
(In reply to comment #1)
> (In reply to comment #0)
> 
> > 04:08.0 Multimedia video controller: Brooktree Corporation Bt878 Video 
Capture 
> > (rev 11)
> Покажите вывод lspci -vvnn -s 04:08.0, а также точную модель карты (название 
на
> коробке или на самой карте).
04:08.0 Multimedia video controller [0400]: Brooktree Corporation Bt878 Video 
Capture [109e:036e] (rev 11)
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
Stepping- SERR- FastB2B-
        Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- 
<TAbort- <MAbort- >SERR- <PERR-
        Latency: 32 (4000ns min, 10000ns max)
        Interrupt: pin A routed to IRQ 50
        Region 0: Memory at fdaff000 (32-bit, prefetchable) [size=4K]
        Capabilities: [44] Vital Product Data
        Capabilities: [4c] Power Management version 2
                Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA 
PME(D0-,D1-,D2-,D3hot-,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-

Коробки уже нет, на карте и в мануале ничего вменяемого не написано, какая-то 
безымянная поделка. Написано просто TV/FM capture cardTF.

> > [root@roman etc]# dmesg | grep bttv
> grep bttv мало - нужны ещё сообщения, выдаваемые другими модулями (в 
частности,
> модулем tveeprom). Покажите кусок dmesg, начиная со строки "bttv: driver 
version
> 0.9.16 loaded", полностью.
bttv: driver version 0.9.16 loaded
bttv: using 8 buffers with 2080k (520 pages) each for capture
bttv: Bt8xx card found (0).
ACPI: PCI Interrupt Link [APC1] enabled at IRQ 16
ACPI: PCI Interrupt 0000:04:08.0[A] -> Link [APC1] -> GSI 16 (level, low) -> 
IRQ 50
bttv0: Bt878 (rev 17) at 0000:04:08.0, irq: 50, latency: 32, mmio: 0xfdaff000
bttv0: using: Askey CPH05X/06X (bt878) [many vendors] [card=24,insmod option]
bttv0: gpio: en=00000000, out=00000000 in=00ffffff [init]
tvaudio 2-004b: pic16c54 (PV951) found @ 0x96 (bt878 #0 [sw])
bttv0: using tuner=5
bttv0: i2c: checking for MSP34xx @ 0x80... not found
bttv0: i2c: checking for TDA9875 @ 0xb0... not found
bttv0: i2c: checking for TDA7432 @ 0x8a... not found
bttv0: i2c: checking for TDA9887 @ 0x86... not found
tuner 2-0060: All bytes are equal. It is not a TEA5767
tuner 2-0060: chip found @ 0xc0 (bt878 #0 [sw])
tuner 2-0060: type set to 5 (Philips PAL_BG (FI1216 and compatibles))
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: registered device radio0
bttv0: PLL: 28636363 => 35468950 .. ok
input: bttv IR (card=24) as /class/input/input2
bttv-input: bttv IR (card=24) detected at pci-0000:04:08.0/ir0
bt878: AUDIO driver version 0.0.0 loaded
bt878: Bt878 AUDIO function found (0).
ACPI: PCI Interrupt 0000:04:08.1[A] -> Link [APC1] -> GSI 16 (level, low) -> 
IRQ 50
bt878_probe: card id=[0x0],[ <NULL> ] has DVB functions.
bt878(0): Bt878 (rev 17) at 04:08.1, irq: 50, latency: 32, memory: 0xfdafe000

> > bttv0: using: Hauppauge (bt878) [card=10,insmod option]
> Если на самом деле карта не от Hauppauge, вероятно, этот тип указывать не 
стоит,
> поскольку карты Hauppauge имеют EEPROM с данными специфического формата, 
которые
> разбираются модулем tveeprom и в некоторых случаях перекрывают информацию,
> заданную другими параметрами модуля bttv.
> 
> > В сети находил информацию, что это версию bttv 0.9.16 сломали.
> После просмотра кода модуля tveeprom у меня создалось впечатление, что его 
как
> раз починили - в версии из 2.6.12 возвращаемая структура предварительно не
> очищалась, поэтому, если данные в EEPROM были неполными (или просто не
> соответствовали формату, использующемуся в картах Hauppauge), возвращался 
мусор;
> вероятно, в этом мусоре флаг наличия радио был установлен. В текущей версии
> очистка производится правильно, поэтому при отсутствии в EEPROM информации о
> наличии радио соответствующее устройство не инициализируется.
> 
> Можно попробовать вместо card=10 указать card=26 svhs=2 pll=28 - такие 
настройки
> почти совпадают с card=10, за исключением того, что для этого типа не
> используется EEPROM и отличается gpiomask (7 вместо 0x0f).

В указанной Вами карте звук не работает, а радио увидело. Поставил card=24, 
как минимум радио уже работает. :)
------- Comment #3 From 2007-07-11 15:58:33 -------
Оказывается там инициализация не устойчивая. И звук на 26 не заработал именно 
по этой причине. Похоже он иногда ошибается в идентификации типа звуковой 
микросхемы. И в место tvaudio грузит tda9887:
i2c_adapter i2c-2: sendbytes: error - bailout.
tda9887 2-004b: i2c i/o error: rc == -14 (should be 4)
i2c_adapter i2c-2: sendbytes: error - bailout.
tda9887 2-004b: i2c i/o error: rc == -14 (should be 4)
i2c_adapter i2c-2: sendbytes: error - bailout.
tda9887 2-004b: i2c i/o error: rc == -14 (should be 4)

Причём предварительная загрузка tvaudio не гарантирует его использования.
------- Comment #4 From 2007-08-13 08:40:40 -------
На ALT4.0 Desktop RC 1, где ядро 2.6.18-std-smp-alt7 по умолчанию.
Модуль tvaudio не грузится вообще, без сообщений об ошибке.
Рядом лежащее 2.6.18-wks-smp-alt2 грузит этот модуль нормально.
------- Comment #5 From 2007-08-16 23:47:43 -------
Оказывается на 2.6.18-std-smp-alt7 звук, всёже иногда появляется.
Но неустойчивая идентификация аудио на bttv тюнерах очевидна!
------- Comment #6 From 2007-08-18 10:29:48 -------
Кроме того, bttv валит систему, если попытаться его выгрузить/перегрузить.
По команде: rmmod tvaudio bt878 bttv, начинают генерироваться событие нажатия 
клавиши "Enter", или блокируется её код отжатия после вызова rmmod. Через 
какое-то время система может вообще зависнуть, возможно с предсмертным 
появлением звука.
------- Comment #7 From 2008-01-27 18:45:11 -------
(In reply to comment #6)
> Кроме того, bttv валит систему, если попытаться его выгрузить/перегрузить.
> По команде: rmmod tvaudio bt878 bttv, начинают генерироваться событие нажатия 
> клавиши "Enter", или блокируется её код отжатия после вызова rmmod. Через 
> какое-то время система может вообще зависнуть, возможно с предсмертным 
> появлением звука.
Подвисать система, на последних ядрах из branch, перестала. При этом перегрузка 
bttv помогает, но далеко не всегда. Так-же замечено такое интересное 
обстоятельство: Если загрузчик lilo праздничный, то tvaudio поднимается 
нормально и звук есть, если-же нет, то чаще всего tvaudio не поднимается, т.е. 
сткладывается впечатление, что тюнер у меня работает только по праздникам. :)
------- Comment #8 From 2008-01-30 09:47:03 -------
В одном форуме народ с таким-же TV-тюнером нашёл решение этой проблеме. Как я 
и подозревал где-то не хватало таймаута на детект интерфейс звука, что и 
приводило к неуверенной идентификации. Вобщем опция bttv i2c_udelay=128 
исправляет проблему. Уже раз пять включал и включаемость TV-тюнера составила 
100%.
Ставил следующие опции к bttv, для своей карты:
options bttv card=65 tuner=5 radio=1 i2c_udelay=128
options bttv card=42 tuner=2 radio=1 i2c_udelay=128

Обе конфигурации работают нормально и устойчиво.
В связи с чем багу закрываю.