LINUX.ORG.RU

bttv & 2.6.19 - нет звука


0

0

Может кто сталкивался: есть карточка на bt878, модули bttv, tuner и tvaudio загружены. В ядрах >= 2.6.19 звук напрочь отсутствует. Если загрузиться с ядром постарше, всё работает; в dmesg никаких подозрительных сообщений, всё то же самое.

anonymous

у меня 2.6.19.1, все работает, модули такие:

dvb_bt8xx              17092  1
nxt6000                 7748  1 dvb_bt8xx
mt352                   6852  1 dvb_bt8xx
sp887x                  7684  1 dvb_bt8xx
dst_ca                 14464  1 dvb_bt8xx
dst                    29640  2 dvb_bt8xx,dst_ca
dvb_pll                14916  1 dvb_bt8xx
or51211                 9988  1 dvb_bt8xx
zl10353                 5572  1 dvb_bt8xx
lgdt330x                8540  1 dvb_bt8xx
cx24110                 8132  1 dvb_bt8xx
dvb_core               84200  3 dvb_bt8xx,dst_ca,dst
it87                   23980  0
hwmon_vid               3200  1 it87
i2c_isa                 5376  1 it87
eeprom                  7568  0
cpufreq_ondemand        7740  1
bt878                  11084  2 dvb_bt8xx,dst
bttv                  174268  2 dvb_bt8xx,bt878
video_buf              25796  1 bttv
ir_common              29572  1 bttv
compat_ioctl32          1344  1 bttv
i2c_algo_bit            8520  1 bttv
btcx_risc               5128  1 bttv
tveeprom               15056  1 bttv
videodev               26944  1 bttv
nvidia               6823828  22
snd_emu10k1           126016  6
snd_rawmidi            25504  1 snd_emu10k1
snd_ac97_codec        100384  1 snd_emu10k1
snd_ac97_bus            2304  1 snd_ac97_codec
snd_pcm                83080  5 snd_emu10k1,snd_ac97_codec
snd_seq_device          7304  2 snd_emu10k1,snd_rawmidi
snd_timer              23620  2 snd_emu10k1,snd_pcm
snd_page_alloc         10504  2 snd_emu10k1,snd_pcm
snd_util_mem            4864  1 snd_emu10k1
snd_hwdep               9668  1 snd_emu10k1
v4l1_compat            15428  1 videodev
k8temp                  5952  0
hwmon                   3412  2 it87,k8temp
i2c_nforce2             7296  0
snd                    53888  16 snd_emu10k1,snd_rawmidi,snd_ac97_codec,snd_pcm,snd_seq_device,snd_timer,snd_hwde
p
v4l2_common            23296  2 bttv,videodev
soundcore               8096  1 snd
i2c_core               22992  18 dvb_bt8xx,nxt6000,mt352,sp887x,dst,dvb_pll,or51211,zl10353,lgdt330x,cx24110,it87
,i2c_isa,eeprom,bttv,i2c_algo_bit,tveeprom,nvidia,i2c_nforce2

anonymous
()

А там разве snd-bt87x не нужен ? Насколько мне известно у этой карты есть что-то типа встроенной звуковухи. У многих надо отдельно тюнер проводом либо в line_in втыкать либо во внутренний aux.

uragan
()
Ответ на: комментарий от uragan

>А там разве snd-bt87x не нужен ?

afaik, только для записи в обход line-in; пробовал также и с ним (он автоматом udev'ом поднимается), всё равно звука на 2.6.19.x и 2.6.20.rcX нет :(

anonymous
()
Ответ на: комментарий от anonymous

to anonymous: спасибо за списочек, дома ещё раз перепроверю, хотя по памяти, всё что касается *bt* идентично

anonymous
()

Похоже на тенденцию Acorp 9y878f tvaudio не пашет, ядро 2.6.19.2 до этого было 2.17.xx.x всё работало.

anonymous
()
Ответ на: комментарий от anonymous

> afaik, только для записи в обход line-in; пробовал также и с ним (он автоматом udev'ом поднимается), всё равно звука на 2.6.19.x и 2.6.20.rcX нет :(

Тоесть даже если ты втыкаешь в linein звука нет ? У меня была проблема что не включался звук в mencoder или vlc, написал програмку, которая тупо звук включает и выключает.

#include <stdio.h>
#include <asm/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>
#include <stdlib.h>


#define _LINUX_TIME_H 1
#include <linux/videodev2.h>

int main(int argc, char **argv)
{
        struct v4l2_input input;
        struct v4l2_audioout a;
        struct v4l2_frequency freq;
        int index;
        int fd;
        int vinput=0;
    struct v4l2_control control;
    control.id = V4L2_CID_AUDIO_MUTE;
    control.value = 0;


        fd = open("/dev/v4l/video0", O_RDWR);

        if(argc==1) {
                if (-1 == ioctl (fd, VIDIOC_S_CTRL, &control)) {
                perror ("VIDIOC_G_AUDIO");
                exit (-1);
                }
        } else if(argc==2) {
                if(argv[1][0]=='0')
                    control.value = 1;

                if (-1 == ioctl (fd, VIDIOC_S_CTRL, &control)) {
                perror ("VIDIOC_G_AUDIO");
                exit (-1);
                }
        }
        close(fd);
        return 0;
}

uragan
()

Блин, сразу недоглядел, вот какая штука:

$ diff -C0 dmesg*
*** dmesg-2.6.18.6      2007-01-15 23:17:02.000000000 +0200
--- dmesg-2.6.19.2      2007-01-15 23:19:03.000000000 +0200
***************
*** 4 ****
! bttv0: Bt878 (rev 2) at 0000:00:0b.0, irq: 19, latency: 32, mmio: 0xe0100000
--- 4 ----
! bttv0: Bt878 (rev 2) at 0000:00:0b.0, irq: 20, latency: 32, mmio: 0xe0100000
***************
*** 14 ****
--- 15,16 ----
+ tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x10)
+ tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x10)

т.е. в 2.6.19 _сразу_ после загрузки модуля появляются ошибки ввода/вывода.
Самое интересное, что в 2.6.18 они тоже начинают сыпаться (код ошибки совпадает),
но после запуска прикладной программы, модуль грузится "чисто".
И ещё: может быть причина в прерывании?

rm
()
Ответ на: комментарий от uragan

>Тоесть даже если ты втыкаешь в linein звука нет ?

да, из тюнера в аудиовход идёт шнурок

>написал програмку, которая тупо звук включает и выключает

$ ./audio 1
VIDIOC_G_AUDIO: Bad file descriptor

rm
()

Нет, дело определённо не в прерывании, да и спать уже пора, а то глупости начинаю писать :) Всем ответившим - спасибо!

rm
()
Ответ на: комментарий от rm

>$ ./audio 0 >VIDIOC_G_AUDIO: Bad file descriptor

Вставь проверку того, что возвращает open()

Скорее всего делов правах на /dev/video0

sS ★★★★★
()
Ответ на: комментарий от sS

>Скорее всего делов правах на /dev/video0 от рута то же самое

>Вставь проверку того, что возвращает open() хотя я с сями даже не на "вы", но попробую :)

anonymous
()
Ответ на: комментарий от anonymous

>Кстати, почему video0 создается в /dev, а не в /dev/dvb/adapter0/ согласно стандарту?

а Бог/чорт его знает :) Наверное, глупый ответ, но "всегда так было" :)

anonymous
()
Ответ на: комментарий от anonymous

>Кстати, почему video0 создается в /dev, а не в /dev/dvb/adapter0/ согласно стандарту?

Оно создается там где ты укажешь это сделать udev-у и в том количестве, в котором ты закажешь. Можно хоть руками в /tmp и под любым именем но с нужными major и minor номерами (если приложение позволяет явно задать путь к устройство).

PS: стандарт де-факто это /dev/video0 обычно сейчас это симлинк на реальное устройство в /dev/dvb или /dev/v4l Если приложение ищет его в другом месте просто напиши правило для udev или создай его там руками

sS ★★★★★
()
Ответ на: комментарий от uragan

Блин, такую глупую ошибку сделал; конечно утилитка работает, только звука на новом ядре нет :)
Если включать звук, в системный лог сыпятся три ошибки подряд:

tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x60)
tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x60)
tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x60)

Если выключать, то такие:

tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x10)
tvaudio 0-004b: pic16c54 (PV951): I/O error (write reg2=0x10)

На старом ядре тоже лезут идентичные ошибки, только по одной на операцию, вот и вся разница.

Чтож, видать не судьба :) Ещё раз спасибо всем.

rm
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.