подключение SK-VideoADC-Plug
Slavian
Пункты: 1888
Регистрация: 21.05.2010
Здравствуйте такой вопрос, не получается получить картинку SK-VideoADC-Plug с платой SK-AT91SAM9260.
Собственно мои действия
SK-VideoADC-Plug подключил к разъему X11
Скачал последнее ядро 2.6.34.1
По аналогии с at91sam9263 сделал следующие:
В файле at91sam9260_devices.c добавил
Цитата
struct resource isi_resources[] = {
[0] = {
.start = AT91SAM9260_BASE_ISI,
.end = AT91SAM9260_BASE_ISI + SZ_16K - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = AT91SAM9260_ID_ISI,
.end = AT91SAM9260_ID_ISI,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device at91sam9260_isi_device = {
.name = "at91_isi",
.id = -1,
.resource = isi_resources,
.num_resources = ARRAY_SIZE(isi_resources),
};
void __init at91_add_device_isi(void)
{
at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */
at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */
at91_set_A_periph(AT91_PIN_PE2, 0); /* ISI_D2 */
at91_set_A_periph(AT91_PIN_PE3, 0); /* ISI_D3 */
at91_set_A_periph(AT91_PIN_PE4, 0); /* ISI_D4 */
at91_set_A_periph(AT91_PIN_PE5, 0); /* ISI_D5 */
at91_set_A_periph(AT91_PIN_PE6, 0); /* ISI_D6 */
at91_set_A_periph(AT91_PIN_PE7, 0); /* ISI_D7 */
at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */
at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */
at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */
at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */
at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */
at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */
at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */
at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */
}
В board-sam9260ek.c
Цитата
static void __init ek_board_init(void)
{
………………………………………….
at91_add_device_isi();
В конфиге для сборки ядра добавил
#
# Multimedia core support
#
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2_COMMON=y
CONFIG_VIDEO_ALLOW_V4L1=y
CONFIG_VIDEO_V4L1_COMPAT=y
CONFIG_DVB_CORE=y
CONFIG_VIDEO_MEDIA=y
#
# Multimedia drivers
#
CONFIG_IR_CORE=y
CONFIG_VIDEO_IR=y
# CONFIG_MEDIA_ATTACH is not set
CONFIG_MEDIA_TUNER=y
# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
CONFIG_MEDIA_TUNER_SIMPLE=y
CONFIG_MEDIA_TUNER_TDA8290=y
CONFIG_MEDIA_TUNER_TDA9887=y
CONFIG_MEDIA_TUNER_TEA5761=y
CONFIG_MEDIA_TUNER_TEA5767=y
CONFIG_MEDIA_TUNER_MT20XX=y
CONFIG_MEDIA_TUNER_XC2028=y
CONFIG_MEDIA_TUNER_XC5000=y
CONFIG_MEDIA_TUNER_MC44S803=y
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L1=y
CONFIG_VIDEOBUF_GEN=y
CONFIG_VIDEOBUF_VMALLOC=y
CONFIG_VIDEO_CAPTURE_DRIVERS=y
CONFIG_VIDEO_ADV_DEBUG=y
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
CONFIG_VIDEO_IR_I2C=y
Так же подключил драйвер 7180
Цитата
#
# Video decoders
#
CONFIG_VIDEO_ADV7180=y
Собрал ядро, залил на плату, в логе загрузки пишется
Цитата
Linux video capture interface: v2.00
cpia2: V4L-Driver for Vision CPiA2 based cameras v2.0.0
usbcore: registered new interface driver cpia2
vivi-000: V4L2 device registered as video0
Video Technology Magazine Virtual Video Capture Board ver 0.6.0 successfully loa
ded.
Но файл /dev/video0 отсутствует.
Strijar
Группа: Клиенты
Пункты: 1618
Регистрация: 21.04.2009
Пол: Мужчина
Slavian
Пункты: 1888
Регистрация: 21.05.2010
Взял патч 2.6.27-at91-exp.2.patch, в самом драйвере ISI пришлось поменять только две функции kfifo_get, kfifo_put на
kfifo_out_locked , kfifo_in_locked, все остальное скомпилировалось.
Дальше делал по аналогии с 963 файлом вот изменения в
at91sam9260_devices.c
Цитата
static u64 isi_dmamask = DMA_BIT_MASK(32);
static struct isi_platform_data isi_data;
struct resource isi_resources[] = {
[0] = {
.start = AT91SAM9260_BASE_ISI,
.end = AT91SAM9260_BASE_ISI + SZ_16K - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = AT91SAM9260_ID_ISI,
.end = AT91SAM9260_ID_ISI,
.flags = IORESOURCE_IRQ,
},
};
static struct platform_device at91sam9260_isi_device = {
.name = "atmel_isi",
.id = -1,
.dev = {
.dma_mask = &isi_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32),
.platform_data = &isi_data,
},
.resource = isi_resources,
.num_resources = ARRAY_SIZE(isi_resources),
};
void __init at91_add_device_isi(struct isi_platform_data * data)
{
struct platform_device *pdev;
if (!data)
return;
at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */
at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */
at91_set_A_periph(AT91_PIN_PE2, 0); /* ISI_D2 */
at91_set_A_periph(AT91_PIN_PE5, 0); /* ISI_D5 */
at91_set_A_periph(AT91_PIN_PE6, 0); /* ISI_D6 */
at91_set_A_periph(AT91_PIN_PE7, 0); /* ISI_D7 */
at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */
at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */
at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */
at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */
at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */
at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */
at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */
//at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */
pdev = &at91sam9260_isi_device;
isi_data = *data;
platform_device_register(pdev);
}
в board-sam9260ek.c
Цитата
static struct isi_platform_data __initdata isi_data = {
.image_hsize = 320,
.image_vsize = 240,
.prev_hsize = 320,
.prev_vsize = 240,
.frate = 7,
.pixfmt = ATMEL_ISI_PIXFMT_YCbYCr,
.capture_v4l2_fmt = V4L2_PIX_FMT_YUYV,
.streaming_v4l2_fmt = V4L2_PIX_FMT_YUYV,
/* to use codec and preview path simultaneously */
.cr1_flags = ISI_FULL,
};
static void __init isi_set_clk(void)
{
struct clk *pck3 = 0;
struct clk *pllb = 0;
pck3 = clk_get(NULL, "pck3");
pllb = clk_get(NULL, "pllb");
/* Sensor MCK Clock */
at91_set_A_periph(AT91_PIN_PE11, 0); /* ISI_MCK */
clk_set_parent(pck3, pllb);
clk_set_rate(pck3, 12000000);
clk_enable(pck3);
}
static void __init ek_board_init(void)
{
.......................................
isi_set_clk();
at91_add_device_isi(&isi_data);
}
Происходит падение ядра
Цитата
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
NET: Registered protocol family 16
Unable to handle kernel NULL pointer dereference at virtual address 0000002a
pgd = c0004000
[0000002a] *pgd=00000000
Internal error: Oops: 5 [#1]
last sysfs file:
Modules linked in:
CPU: 0 Not tainted (2.6.34.1 #20)
PC is at clk_set_parent+0xc/0x90
LR is at ek_board_init+0x128/0x1b8
pc : [<c018a734>] lr : [<c000f144>] psr: 60000013
sp : c3c19f74 ip : c3c19f88 fp : c3c19f84
r10: 00000000 r9 : 00000000 r8 : 00000000
r7 : c000ba64 r6 : 00000000 r5 : c0418420 r4 : fffffffe
r3 : c0419efc r2 : 60000013 r1 : c0418420 r0 : fffffffe
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
Control: 0005317f Table: 20004000 DAC: 00000017
Process swapper (pid: 1, stack limit = 0xc3c18260)
Падение происходит в функции clk_set_parent(pck3, pllb), хотя pck3 и pllb не нулевые.
Jury093
Пункты: 54259
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Код at91_set_A_periph(AT91_PIN_PE11, 0); /* ISI_MCK */
я думаю, вот тут ошибка - если у вас плата 9260, то там другой пин PIN_175 PB28..
На любой вопрос есть любой ответ.
Slavian
Пункты: 1888
Регистрация: 21.05.2010
[quote]
Код at91_set_A_periph(AT91_PIN_PE11, 0); /* ISI_MCK */
я думаю, вот тут ошибка - если у вас плата 9260, то там другой пин PIN_175 PB28..[/quote]
Действительно сейчас посмотрел документацию, получается что
Цитата
at91_set_A_periph(AT91_PIN_PE0, 0); /* ISI_D0 */
at91_set_A_periph(AT91_PIN_PE1, 0); /* ISI_D1 */
at91_set_A_periph(AT91_PIN_PE2, 0); /* ISI_D2 */
at91_set_A_periph(AT91_PIN_PE5, 0); /* ISI_D5 */
at91_set_A_periph(AT91_PIN_PE6, 0); /* ISI_D6 */
at91_set_A_periph(AT91_PIN_PE7, 0); /* ISI_D7 */
at91_set_B_periph(AT91_PIN_PE12, 0); /* ISI_PD8 */
at91_set_B_periph(AT91_PIN_PE13, 0); /* ISI_PD9 */
at91_set_B_periph(AT91_PIN_PE14, 0); /* ISI_PD10 */
at91_set_B_periph(AT91_PIN_PE15, 0); /* ISI_PD11 */
at91_set_A_periph(AT91_PIN_PE8, 0); /* ISI_PCK */
at91_set_A_periph(AT91_PIN_PE9, 0); /* ISI_HSYNC */
at91_set_A_periph(AT91_PIN_PE10, 0); /* ISI_VSYNC */
//at91_set_B_periph(AT91_PIN_PE11, 0); /* ISI_MCK (PCK3) */
не правильна, все прины ISI сидят на Peripheral B, и начинаются PB20
Slavian
Пункты: 1888
Регистрация: 21.05.2010
Драйвер запустился, функция atmel_isi_probe, выполнилась без ошибок в консоль выводит
Цитата
atmel_isi atmel_isi: Reading configuration
atmel_isi atmel_isi: video buffer: 155648 bytes at ffcec000 (phys 22140000)
atmel_isi atmel_isi: video buffer: 155648 bytes at ffd12000 (phys 22180000)
atmel_isi atmel_isi: video buffer: 155648 bytes at ffd38000 (phys 221c0000)
atmel_isi atmel_isi: video buffer: 155648 bytes at ffd5e000 (phys 22300000)
atmel_isi atmel_isi: capture buffer: 962560 bytes at ffc01000 (phys 0x22200000)
atmel_isi atmel_isi: Atmel ISI V4L2 device at 0xfffc0000
после этого делаю mknod /dev/video0 c 81 0, и запускаю программу capture, при открытии устройства :
Цитата
......................................................
char *input_name = "/dev/video0";
infd = open(input_name, O_RDONLY);
if (infd < 0) {
...................................................
получаю ошибку Failed to open video device: Connection timed out
в самом драйвере это в функции atmel_isi_init
Цитата
static int atmel_isi_init(struct atmel_isi *isi){
unsigned long timeout;
/*
* Reset the controller and wait for completion.
* The reset will only succeed if we have a
* pixel clock from the camera.
*/
init_completion(&isi->reset_complete);
if(atmelisi_is_isi_v2()) {
isi_writel(isi, V2_INTEN, ISI_BIT(V2_SRST));
isi_writel(isi, V2_CTRL, ISI_BIT(V2_SRST));
} else {
isi_writel(isi, IER, ISI_BIT(SOFTRST));
isi_writel(isi, CR1, ISI_BIT(RST));
}
timeout = wait_for_completion_timeout(&isi->reset_complete,
msecs_to_jiffies(100));
if (timeout == 0) {
return -ETIMEDOUT;
}
timeout равен нулю. Сама плата АЦП подключена, и к ней шнур S-Video сигнал по нему идет. Еще такой вопрос, в консоли я не увидел ни где информации об инициализации драйвера adv7180, он вроде определен как MODULE_DEVICE_TABLE(i2c, adv7180_id),
Pavel Ivanchenko
Admin
Пункты: 92091
Регистрация: 24.03.2009
Пол: Мужчина
Ковыряюсь сейчас с AT91SAM9G45, в "родной" BSP так же нет ISI драйвера, решил добавить (пока в ядро 2.6.34.1).
Цитата Взял патч 2.6.27-at91-exp.2.patch, в самом драйвере ISI пришлось поменять только две функции kfifo_get, kfifo_put на
kfifo_out_locked , kfifo_in_locked, все остальное скомпилировалось.
А почему решили заменить kfifo_get на kfifo_out_locked, а не на kfifo_out?
Я заменил на kfifo_in(out), но драйвер все равно не собирается:
Код drivers/media/video/atmel-isi.c:1443: error: incompatible type for argument 1 of 'spin_lock_irq'
drivers/media/video/atmel-isi.c:1518: error: incompatible type for argument 1 of 'spin_unlock_irq'
Slavian
Пункты: 1888
Регистрация: 21.05.2010
Цитата Ковыряюсь сейчас с AT91SAM9G45, в "родной" BSP так же нет ISI драйвера, решил добавить (пока в ядро 2.6.34.1).
На самом деле там побольше изменений, просто я сначала не обращал внимание на варнинги
,
Насчет kfifo_get я так понимаю можно и kfifo_out ,
Slavian
Пункты: 1888
Регистрация: 21.05.2010
Pavel Ivanchenko
Admin
Пункты: 92091
Регистрация: 24.03.2009
Пол: Мужчина
По поводу добавления в at91sam9260_devices.c, еще хидер меняли?
У меня в таком виде ядро не собирается.