драйвер conexant cx25821 для работы с чипами cx25853 появился в новых ядрах 3.1.4 и выше

522 views
Skip to first unread message

vasvk vasvk

unread,
Jan 26, 2012, 1:32:54 PM1/26/12
to avreg-users
Добрый день. Как-то листая форумы Zoneminder обнаружил информацию, что
драйвер на самый желаемый видеочип conexant cx25853 (точнее
непосредственно драйвер работы с передачей данных по PCI шине cx25821
после обработки видеосигнала вышеуказанным чипом) появился в релизах
ядра начиная с версии ядра 3.1.4 и выше. Сказано-сделано, обновляю
ядро вплоть до версии 3.2.0 и в папке с модулями видеодрайвера и
впрямь появляется папка с драйвером cx25821. Вставляю первую
попавшуюся видеоплату с данным чипом далее sudo modprobe cx25821 b
ghjdthz.
~$ lsmod
Module Size Used by
cx25821 72591 0
videodev 86260 1 cx25821
videobuf_dma_sg 18786 1 cx25821
videobuf_core 25189 2 cx25821,videobuf_dma_sg
btcx_risc 13400 1 cx25821
tveeprom 17010 1 cx25821
rfcomm 37611 0

еще
lsmod | grep cx
cx25821 72591 0
videodev 86260 1 cx25821
videobuf_dma_sg 18786 1 cx25821
videobuf_core 25189 2 cx25821,videobuf_dma_sg
btcx_risc 13400 1 cx25821
tveeprom 17010 1 cx25821

А вот так должно быть
lsmod | grep cx
cx25821 108646 0
v4l2_common 17329 1 cx25821
videodev 43098 2 cx25821,v4l2_common
videobuf_dma_sg 9806 1 cx25821
videobuf_core 16907 2 cx25821,videobuf_dma_sg
btcx_risc 3636 1 cx25821
tveeprom 11178 1 cx25821


Ага, уже что-то появилось. В устройствах /dev отсутствуют устройства
типа video0 и т.д.
Читаю на буржуйских сайтах, что нужно точнее задать параметры платы
(типа PCI_ID и еще чего-то), но в данном виде найти инфу не
получается.
Покопавшись в инете пришло мнение, что нужно накатить некие патчи
на драйвера, или использовать некий staging driver in latest linux
kernels, где есть полноценная поддержка cx25821 типа
http://www.spinics.net/lists/vfl/msg42417.html
Вот страница для ядра 2.6
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=02b20b0b4cde011f7ad6b5363fb88b93f7ad4e5b

В-общем интернет уже пестрит сообщениями о данных драйверах. Помогите
разобраться с данной ситуацией и с примером, как прикрутить cx25821
хоть со staging драйверами.

vasvk vasvk

unread,
Jan 26, 2012, 1:37:17 PM1/26/12
to avreg-users
Вот некий сайт с драйверами для ядра 3.x.x
http://codebrowse.net/xref/linux-3.0/drivers/staging/cx25821/
только подскажите на примере, чего делать.

vasvk vasvk

unread,
Feb 4, 2012, 2:10:07 PM2/4/12
to avreg-users
С понятием staging driver разобрался (это такой недоделанный драйвер
лежит в папке .../staging, так-сказать бета-версия). В убунте, как я
понял, staging драйвера по возможности подгружаются. У меня не
выводятся в конечном результате устройства /dev/videox Ниже
приводится процесс загрузки драйвера cx25821. У кого есть опыт, на что
обратить внимание (может какой патч известный или проверенный для
определенного ядра имеется).

Так вот что сообщает мой dmesg по этому поводу
dmesg | grep cx*
cx25821video:drivers/staging/cx25821/cx25821-video-upstream.c | 121 ++
+++++++++----------
cx25821video:diff --git a/drivers/staging/cx25821/cx25821-video-
upstream.c b/drivers/staging/cx25821/cx25821-video-upstream.c
cx25821video:--- a/drivers/staging/cx25821/cx25821-video-upstream.c
cx25821video:+++ b/drivers/staging/cx25821/cx25821-video-upstream.c
cx25821video: MODULE_DESCRIPTION("v4l2 driver module for cx25821 based
TV cards");
cx25821video:@@ -59,9 +59,8 @@ int
cx25821_sram_channel_setup_upstream(struct cx25821_dev *dev,
cx25821video:@@ -96,7 +95,7 @@ int
cx25821_sram_channel_setup_upstream(struct cx25821_dev *dev,
cx25821video: static __le32 *cx25821_update_riscprogram(struct
cx25821_dev *dev,
cx25821video:@@ -107,9 +106,8 @@ static __le32
*cx25821_update_riscprogram(struct cx25821_dev *dev,
cx25821video:@@ -139,14 +137,12 @@ static __le32
*cx25821_risc_field_upstream(struct cx25821_dev *dev, __le32 * rp,
cx25821video:@@ -156,12 +152,13 @@ static __le32
*cx25821_risc_field_upstream(struct cx25821_dev *dev, __le32 * rp,
cx25821video:@@ -180,7 +177,8 @@ int
cx25821_risc_buffer_upstream(struct cx25821_dev *dev,
cx25821video:@@ -224,7 +222,7 @@ int
cx25821_risc_buffer_upstream(struct cx25821_dev *dev,
cx25821video: rp = cx25821_risc_field_upstream(dev,
rp,
cx25821video:@@ -240,7 +238,9 @@ int
cx25821_risc_buffer_upstream(struct cx25821_dev *dev,
cx25821video:@@ -257,18 +257,18 @@ void
cx25821_stop_upstream_video_ch1(struct cx25821_dev *dev)
cx25821video:- ("cx25821: No video file is currently
running so return!\n");
cx25821video:+ ("cx25821: No video file is currently
running so return!\n");
cx25821video: tmp = cx_read(sram_ch->int_msk);
cx25821video: cx_write(sram_ch->int_msk, tmp & ~_intr_msk);
cx25821video: tmp = cx_read(sram_ch->dma_ctl);
cx25821video: cx_write(sram_ch->dma_ctl, tmp &
~(FLD_VID_FIFO_EN | FLD_VID_RISC_EN));
cx25821video:@@ -291,9 +291,8 @@ void
cx25821_stop_upstream_video_ch1(struct cx25821_dev *dev)
cx25821video: void cx25821_free_mem_upstream_ch1(struct cx25821_dev
*dev)
cx25821video: cx25821_stop_upstream_video_ch1(dev);
cx25821video:@@ -346,7 +345,7 @@ int cx25821_get_frame(struct
cx25821_dev *dev, struct sram_channel *sram_ch)
cx25821video:@@ -411,7 +410,7 @@ static void
cx25821_vidups_handler(struct work_struct *work)
cx25821video: container_of(work, struct cx25821_dev,
_irq_work_entry);
cx25821video:@@ -437,7 +436,7 @@ int cx25821_openfile(struct
cx25821_dev *dev, struct sram_channel *sram_ch)
cx25821video:@@ -489,9 +488,8 @@ int cx25821_openfile(struct
cx25821_dev *dev, struct sram_channel *sram_ch)
cx25821video:@@ -531,7 +529,7 @@ int
cx25821_upstream_buffer_prepare(struct cx25821_dev *dev,
cx25821video:@@ -539,7 +537,7 @@ int
cx25821_upstream_buffer_prepare(struct cx25821_dev *dev,
cx25821video:@@ -552,26 +550,26 @@ int
cx25821_upstream_buffer_prepare(struct cx25821_dev *dev,
cx25821video: ret = cx25821_openfile(dev, sram_ch);
cx25821video: cx25821_risc_buffer_upstream(dev, dev->pci,
0, bpl,
cx25821video:- "cx25821: Failed creating Video
Upstream Risc programs! \n");
cx25821video:+ "cx25821: Failed creating Video
Upstream Risc programs!\n");
cx25821video:@@ -587,10 +585,11 @@ int
cx25821_video_upstream_irq(struct cx25821_dev *dev, int chan_num,
cx25821video: u32 prog_cnt = cx_read(channel->gpcnt);
cx25821video: int_msk_tmp = cx_read(channel->int_msk);
cx25821video: cx_write(channel->int_msk, int_msk_tmp &
~_intr_msk);
cx25821video: cx_write(channel->int_stat, _intr_msk);
cx25821video:@@ -631,7 +630,7 @@ int cx25821_video_upstream_irq(struct
cx25821_dev *dev, int chan_num,
cx25821video:@@ -659,7 +658,7 @@ int cx25821_video_upstream_irq(struct
cx25821_dev *dev, int chan_num,
cx25821video: int_msk_tmp = cx_read(channel->int_msk);
cx25821video: cx_write(channel->int_msk, int_msk_tmp |=
_intr_msk);
cx25821video:@@ -684,17 +683,16 @@ static irqreturn_t
cx25821_upstream_irq(int irq, void *dev_id)
cx25821video: msk_stat = cx_read(sram_ch->int_mstat);
cx25821video: vid_status = cx_read(sram_ch->int_stat);
cx25821video: cx25821_video_upstream_irq(dev,
channel_num, vid_status);
cx25821video: cx25821_stop_upstream_video_ch1(dev);
cx25821video:@@ -713,19 +711,19 @@ void cx25821_set_pixelengine(struct
cx25821_dev *dev, struct sram_channel *ch,
cx25821video: cx_write(ch->vid_fmt_ctl, value);
cx25821video: cx_write(ch->vid_active_ctl1, width);
cx25821video: cx_write(ch->vid_active_ctl2, value);
cx25821video: cx_write(ch->vid_cdt_size, VID_CDT_SIZE >> 3);
cx25821video:@@ -737,21 +735,26 @@ int
cx25821_start_video_dma_upstream(struct cx25821_dev *dev,
cx25821video: tmp = cx_read(VID_CH_MODE_SEL);
cx25821video: cx_write(VID_CH_MODE_SEL, tmp | 0x1B0001FF);
cx25821video: cx_write(sram_ch->cmds_start + 0, dev-
>_dma_phys_addr);
cx25821video:- cx_write(sram_ch->cmds_start + 4, 0); /*
Risc IPC High 64 bits 63-32 */
cx25821video:+ cx_write(sram_ch->cmds_start + 4, 0);
cx25821video: cx_write(sram_ch->gpcnt_ctl, 3);
cx25821video: cx_write(sram_ch->int_stat, _intr_msk);
cx25821video: cx_set(PCI_INT_MSK, cx_read(PCI_INT_MSK) | (1 <<
sram_ch->irq_bit));
cx25821video: tmp = cx_read(sram_ch->int_msk);
cx25821video: cx_write(sram_ch->int_msk, tmp |= _intr_msk);
cx25821video:@@ -765,7 +768,7 @@ int
cx25821_start_video_dma_upstream(struct cx25821_dev *dev,
cx25821video: tmp = cx_read(sram_ch->dma_ctl);
cx25821video: cx_set(sram_ch->dma_ctl, tmp | FLD_VID_RISC_EN);
cx25821video:@@ -774,7 +777,7 @@ int
cx25821_start_video_dma_upstream(struct cx25821_dev *dev,
cx25821video: cx25821_dev_unregister(dev);
cx25821video:@@ -806,7 +809,9 @@ int
cx25821_vidupstream_init_ch1(struct cx25821_dev *dev, int
channel_select,
cx25821video: ("cx25821:
create_singlethread_workqueue() for Video FAILED!\n");
cx25821video: tmp = cx_read(VID_CH_MODE_SEL);
cx25821video: cx_write(VID_CH_MODE_SEL, tmp | 0x1B0001FF);
cx25821video:@@ -840,7 +845,7 @@ int
cx25821_vidupstream_init_ch1(struct cx25821_dev *dev, int
channel_select,
cx25821video:@@ -874,7 +879,7 @@ int
cx25821_vidupstream_init_ch1(struct cx25821_dev *dev, int
channel_select,
cx25821video: retval = cx25821_upstream_buffer_prepare(dev,
sram_ch, dev->_line_size);
cx25821video:@@ -887,7 +892,7 @@ int
cx25821_vidupstream_init_ch1(struct cx25821_dev *dev, int
channel_select,
cx25821video: cx25821_dev_unregister(dev);

triada123

unread,
Feb 5, 2012, 4:54:30 AM2/5/12
to avreg-users
тут http://comments.gmane.org/gmane.linux.drivers.video-input-infrastructure/32827
пробовали, не работает, говорят драйвер не все платы держит.

triada123

unread,
Feb 5, 2012, 5:08:24 AM2/5/12
to avreg-users
Дело в том, что видеозахват идет через cx25853, а cx25821 это PCI-E
бридж. Под cx25853 драйвера нет, поэтому все эксперименты бесполезны.

vasvk vasvk

unread,
Feb 10, 2012, 3:39:57 AM2/10/12
to avreg-users
> Дело в том, что видеозахват идет через cx25853, а cx25821 это PCI-E
> бридж. Под cx25853 драйвера нет, поэтому все эксперименты бесполезны.
Не совсем так. К-примеру, в виндовс-драйверах на данные видеоплаты вы
не найдете упоминаний типа cx25853. Перерыв много информации по
данному вопросу, выявилось, что чип cx25853 самостоятельно (без всяких
драйверов) захватывает и оцифровывает аналоговое видео в MJPEG, но
посредником в организации и пробросе видео- и аудиопотоков на шину PCI
является второй чип cx25821, для которого как раз нужен драйвер. Так,
например, установив ядро v3.2-rc4-oneiric с поддержкой cx25821, в
логах dmesg я обнаружил жалобы на неудачные попытки создать файлы
устройств /dev/videoN... Опять порывшись в инете и сопоставив
исходники драйверов в т.ч. для других чипов, я понял, что в драйвере
отсутствуют параметры для запуска конкретных моделей плат (кроме неких
card0 и card1). Для подобных случаев есть способы "вручную" записать
данные драйвера http://www.opennet.ru/base/X/video_capture.txt.html
(правда на примере SAA Philips). Получается, что данный драйвер
нуждается в модернизации под конкретные видеоплаты (о чем и говорится
в вышеуказанном сообщении на буржуйском сайте).
Reply all
Reply to author
Forward
0 new messages