Всем привет!
Ребят, кто-нибудь дружил отладочный борд 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
Для того, что бы ядро понимало, какой адрес 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