Имеется 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 сломали.
(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).
(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, как минимум радио уже работает. :)
Оказывается там инициализация не устойчивая. И звук на 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 не гарантирует его использования.
На ALT4.0 Desktop RC 1, где ядро 2.6.18-std-smp-alt7 по умолчанию. Модуль tvaudio не грузится вообще, без сообщений об ошибке. Рядом лежащее 2.6.18-wks-smp-alt2 грузит этот модуль нормально.
Оказывается на 2.6.18-std-smp-alt7 звук, всёже иногда появляется. Но неустойчивая идентификация аудио на bttv тюнерах очевидна!
Кроме того, bttv валит систему, если попытаться его выгрузить/перегрузить. По команде: rmmod tvaudio bt878 bttv, начинают генерироваться событие нажатия клавиши "Enter", или блокируется её код отжатия после вызова rmmod. Через какое-то время система может вообще зависнуть, возможно с предсмертным появлением звука.
(In reply to comment #6) > Кроме того, bttv валит систему, если попытаться его выгрузить/перегрузить. > По команде: rmmod tvaudio bt878 bttv, начинают генерироваться событие нажатия > клавиши "Enter", или блокируется её код отжатия после вызова rmmod. Через > какое-то время система может вообще зависнуть, возможно с предсмертным > появлением звука. Подвисать система, на последних ядрах из branch, перестала. При этом перегрузка bttv помогает, но далеко не всегда. Так-же замечено такое интересное обстоятельство: Если загрузчик lilo праздничный, то tvaudio поднимается нормально и звук есть, если-же нет, то чаще всего tvaudio не поднимается, т.е. сткладывается впечатление, что тюнер у меня работает только по праздникам. :)
В одном форуме народ с таким-же 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 Обе конфигурации работают нормально и устойчиво. В связи с чем багу закрываю.