LINUX.ORG.RU

Работа с adv7280-M

 , , ,


1

2

Всем привет!

Ребят, кто-нибудь дружил отладочный борд Sabrelite с ADV7280-M? Имею проблему, в том что не создается файл устройства /dev/videoN, и как следствие не могу захватить видеопоток.

Имею комплект плат Sabrelite с процессором IMX6Q и ADV7280-M. ADV7280-M являет собой отладочный комплект для оцифровки аналового видео. SabreLite и ADV7280-M подключены через MIPI-CSI2 интерфейс.

Подключал согласно такой схеме

Управляется adv7280-M через драйвер, под названием adv7280_mipi_tvin. По коду драйвера понятно, что он обслуживает только i2c и по ней выполняет конфигурацию adv7280M.

Я загружаю модуль ядра mxc_v4l2_capture, который тянет за собой еще модули как зависимые. По идеи должен был появиться файл устройства в /dev/videoN. Появляется только два файла устройства /dev/video0, /dev/video1, но они будут и без подключения к ADV. Нового файла устройства, для adv7280-M не появляется.

root@linaro-alip:/home/bat# lsmod
Module                  Size  Used by
adv7280_mipi_tvin       3916  0 
mxc_v4l2_capture       22202  0 
ipu_bg_overlay_sdc      3885  1 mxc_v4l2_capture
ipu_still               1644  1 mxc_v4l2_capture
ipu_prp_enc             4586  1 mxc_v4l2_capture
ipu_csi_enc             2889  1 mxc_v4l2_capture
ipu_fg_overlay_sdc      4864  1 mxc_v4l2_capture
vivante                  947  0 
drm                   140255  1 vivante
Использую ядро от производителя комплекта, версия 3.0.35-g713b67f-dirty. Включена поддержка MIPI-CSI2, VPU и adv7280, так же ov5640 и ov8820 использующие MIPI-CSI2 на всякий случай.

Для того, что бы ядро понимало, какой адрес i2c обслeживается дрaйвером adv7280, и автоматически загрузило драйвер, пришлось редкатировать файл board-mx6_nitrogen6x.c. добавив немного кода, брал по аналогии с adv7180 и конфигурации для другого борда.

// без этой структуры при вызове метода драйвера adv7280_i2c_probe указатель на platform_data == NULL.
static struct fsl_mxc_tvin_platform_data adv7280_data = {
	.dvddio_reg	= NULL,
	.dvdd_reg	= NULL,
	.avdd_reg	= NULL,
	.pvdd_reg	= NULL,
	.pwdn		= NULL,
	.cvbs		= true,
	.io_init    = mx6q_mipi_csi1_io_init,
	/* csi slave reg address */
        // в коде драйвера адрес выставляется на 0x50(?), и используется в случае если он не определен в этой структуре. 
	.csi_tx_addr = 0x52,
};

static void mx6q_mipi_csi1_io_init(void)
{
	mxc_iomux_set_gpr_register(13, 3, 3, 1);
}

static struct mipi_csi2_platform_data mipi_csi2_pdata = {
	.ipu_id	 = 0,
	.csi_id = 0,
	.v_channel = 0,
	.lanes = 2,
	.dphy_clk = "mipi_pllref_clk",
	.pixel_clk = "emi_clk",
};


static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {
	{
		I2C_BOARD_INFO("mxc_hdmi_i2c", 0x50),
	},
#ifdef CSI0_CAMERA
	{
		I2C_BOARD_INFO("ov5642", 0x3d),
		.platform_data = (void *)&ov564x_data,
	},
#endif
#ifdef MIPI_CAMERA
	{
		I2C_BOARD_INFO("ov5640_mipi", 0x3e),
		.platform_data = (void *)&ov5640_mipi_data,
	},
	// !!!!!!!!!!!!!!!
	{
		I2C_BOARD_INFO("adv7280", 0x21),
		.platform_data = (void *)&adv7280_data,
	},
#endif
};

adv7280_mipi_tvin отрабатывает по i2c, видно на осциллографе, никаких ошибок не демонстрирует (я повтыкал выводов через printk, все норм).

Куда копать не знаю. Да и опыта большого нет с ядром и железом.

При обращении к уже созданным файлам устройства /dev/video0 или /dev/video1, которые создаются и без подключения платы, в dmesg падает сообщение: mxc_v4l_open: Mxc Camera no sensor ipu0/csi0 mxc_v4l_open: Mxc Camera no sensor ipu1/csi1



Последнее исправление: batchar (всего исправлений: 2)

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

Да, есть такая вещь. Насколько я понял, эти платы совместимы между собой.

Я собирал ядро с этим файлом, путем выполнения make imx6_defconfig. Тогда этот файл вместо nitrogen включается в сборку. Но ровным счетом ничего не изменилось. Файл содержал также мои изменения. Брал за основу своих модификаций конфиг от sabreauto.

batchar
() автор топика
23 февраля 2016 г.

Я так понимаю что у вас не прошёл adv7280_i2c_probe. Поставьте дебаг сообщения и посмотрите на каком шаге вылетает. Кроме того, это драйвер для adv7280, а не для 7280-

savva777
()

а не для adv7280-m. Не проверял на сколько они совместимы, но возможно что какие-то отличия будут.

savva777
()

У меня сейчас задача «завести» драйвер для adv7280 для нашей платы на базе imx6. И на сколько я понял драйвер для adv7280 не поддерживает v4l интерфейс для работы с видео. Этот интерфейс есть в adv7180.c для примера.

Так что скорее всего придётся повозиться, чтобы его прикрутить к 7280.

Интересны какие у вас результаты на данный момент.

savva777
()
23 июня 2016 г.
Ответ на: комментарий от savva777

adv7280-M

Не получилось, взял adv7180. Все заработало. Но, как позже выяснислось оно не вполне удовлетворяет новым требованиям к оборудованию - внезапно потребовалось еще и FullHD оцифровывать. Но, это другая история уже.

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