From 503e47bea764a26f63b47b6f65e48a942a1314b8 Mon Sep 17 00:00:00 2001 From: Marcel Ziswiler Date: Tue, 11 Jun 2013 18:38:21 +0200 Subject: apalis_t30: v4l2: adv7180 and max9526 integration Integrate ADV7180 and MAX9526 video decoder support and prepare for drivers as modules. The following gstreamer pipeline shows a preview window: gst-launch v4l2src ! deinterlace tff=1 method=4 ! nv_omx_videomixer ! nv_gl_eglimagesink --- arch/arm/configs/apalis_t30_defconfig | 5 +++ arch/arm/mach-tegra/board-apalis_t30.c | 75 +++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/arch/arm/configs/apalis_t30_defconfig b/arch/arm/configs/apalis_t30_defconfig index 2989436bfddd..18e234b4e15f 100644 --- a/arch/arm/configs/apalis_t30_defconfig +++ b/arch/arm/configs/apalis_t30_defconfig @@ -241,10 +241,15 @@ CONFIG_REGULATOR_TPS62360=y CONFIG_REGULATOR_TPS6591X=y CONFIG_MEDIA_SUPPORT=y CONFIG_VIDEO_DEV=y +CONFIG_VIDEO_V4L2=y # CONFIG_TEGRA_AVP is not set # CONFIG_TEGRA_MEDIASERVER is not set CONFIG_TEGRA_NVAVP=y +# CONFIG_TEGRA_CAMERA is not set # CONFIG_TEGRA_DTV is not set +CONFIG_SOC_CAMERA=y +CONFIG_SOC_CAMERA_MAX9526=y +CONFIG_VIDEO_TEGRA=y CONFIG_USB_VIDEO_CLASS=y # CONFIG_RADIO_ADAPTERS is not set # CONFIG_VGA_ARB is not set diff --git a/arch/arm/mach-tegra/board-apalis_t30.c b/arch/arm/mach-tegra/board-apalis_t30.c index d9504f8fca1b..7af2c8f9e90b 100644 --- a/arch/arm/mach-tegra/board-apalis_t30.c +++ b/arch/arm/mach-tegra/board-apalis_t30.c @@ -38,6 +38,9 @@ #include #include +#include +#include + #include "board-apalis_t30.h" #include "board.h" #include "clock.h" @@ -87,14 +90,74 @@ static struct platform_device apalis_t30_audio_sgtl5000_device = { }, }; -#ifdef CONFIG_TEGRA_CAMERA /* Camera */ + +#ifdef CONFIG_TEGRA_CAMERA static struct platform_device tegra_camera = { .name = "tegra_camera", .id = -1, }; #endif /* CONFIG_TEGRA_CAMERA */ +#if defined(CONFIG_VIDEO_TEGRA) || defined(CONFIG_VIDEO_TEGRA_MODULE) +static void tegra_camera_disable(struct nvhost_device *ndev) +{ +} + +static int tegra_camera_enable(struct nvhost_device *ndev) +{ + return 0; +} + +static struct tegra_camera_platform_data tegra_camera_platform_data = { + .disable_camera = tegra_camera_disable, + .enable_camera = tegra_camera_enable, + .flip_h = 0, + .flip_v = 0, + .port = TEGRA_CAMERA_PORT_VIP, +}; + +#if defined(CONFIG_SOC_CAMERA_MAX9526) || defined(CONFIG_SOC_CAMERA_MAX9526_MODULE) +static struct i2c_board_info camera_i2c_max9526 = { + I2C_BOARD_INFO("max9526", 0x21), +}; + +static struct soc_camera_link iclink_max9526 = { + .board_info = &camera_i2c_max9526, + .bus_id = -1, /* This must match the .id of tegra_vi01_device */ + .i2c_adapter_id = 2, +}; + +static struct platform_device soc_camera_max9526 = { + .name = "soc-camera-pdrv", + .id = 0, + .dev = { + .platform_data = &iclink_max9526, + }, +}; +#endif /* CONFIG_SOC_CAMERA_MAX9526 | CONFIG_SOC_CAMERA_MAX9526_MODULE */ + +#if defined(CONFIG_VIDEO_ADV7180) || defined(CONFIG_VIDEO_ADV7180_MODULE) +static struct i2c_board_info camera_i2c_adv7180 = { + I2C_BOARD_INFO("adv7180", 0x21), +}; + +static struct soc_camera_link iclink_adv7180 = { + .board_info = &camera_i2c_adv7180, + .bus_id = -1, /* This must match the .id of tegra_vi01_device */ + .i2c_adapter_id = 2, +}; + +static struct platform_device soc_camera_adv7180 = { + .name = "soc-camera-pdrv", + .id = 1, + .dev = { + .platform_data = &iclink_adv7180, + }, +}; +#endif /* CONFIG_VIDEO_ADV7180 | CONFIG_VIDEO_ADV7180_MODULE */ +#endif /* CONFIG_VIDEO_TEGRA | CONFIG_VIDEO_TEGRA_MODULE */ + /* CAN */ #if defined(CONFIG_CAN_MCP251X) || defined(CONFIG_CAN_MCP251X_MODULE) @@ -1205,6 +1268,16 @@ static void __init apalis_t30_init(void) apalis_t30_emc_init(); apalis_t30_register_spidev(); +#if defined(CONFIG_VIDEO_TEGRA) || defined(CONFIG_VIDEO_TEGRA_MODULE) + t30_get_tegra_vi01_device()->dev.platform_data = &tegra_camera_platform_data; +#if defined(CONFIG_SOC_CAMERA_MAX9526) || defined(CONFIG_SOC_CAMERA_MAX9526_MODULE) + platform_device_register(&soc_camera_max9526); +#endif +#if defined(CONFIG_VIDEO_ADV7180) || defined(CONFIG_VIDEO_ADV7180_MODULE) + platform_device_register(&soc_camera_adv7180); +#endif +#endif /* CONFIG_VIDEO_TEGRA | CONFIG_VIDEO_TEGRA_MODULE */ + tegra_release_bootloader_fb(); apalis_t30_pci_init(); #ifdef CONFIG_TEGRA_WDT_RECOVERY -- cgit v1.2.3