diff --git a/patch.sh b/patch.sh index ba8e043f35e205860c12fdd551b4f1dac677d0ee..541097f2340788cd7afc03c911b15f94fb05ef4f 100644 --- a/patch.sh +++ b/patch.sh @@ -68,6 +68,9 @@ beagle () { ${git} "${DIR}/patches/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch" ${git} "${DIR}/patches/beagle/expansion/0008-Enable-buddy-spidev.patch" + #note: had to revert a few omap3isp patches to make this work... + ${git} "${DIR}/patches/beagle/expansion/0009-Beagle-Camera-add-MT9P031-Aptina-image-sensor-driver.patch" + #v3.5: looks to be removed: (might want to revert it back in...) #http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=commit;h=b6e695abe710ee1ae248463d325169efac487e17 #git am "${DIR}/patches/beagle/0001-beagleboard-reinstate-usage-of-hi-speed-PLL-divider.patch" @@ -142,6 +145,15 @@ debug () { ${git} "${DIR}/patches/debug/0001-beagle_xm-cpufreq-debug.patch" } +omap3isp () { + #omap3isp: Revert to v3.4.x, till we figure out, how to actually set the 'pixel rate control' + #"no pixel rate control in subdev %s\n"," + ${git} "${DIR}/patches/omap3isp/0001-Revert-media-omap3isp-Move-CCDC-link-validation-to-c.patch" + ${git} "${DIR}/patches/omap3isp/0002-Revert-media-omap3isp-Default-link-validation-for-cc.patch" + ${git} "${DIR}/patches/omap3isp/0003-Revert-media-omap3isp-Use-external-rate-instead-of-v.patch" + ${git} "${DIR}/patches/omap3isp/0004-Revert-media-omap3isp-Introduce-isp_video_check_exte.patch" +} + pm () { echo "omap: pm patches" #git pull git://gitorious.org/~kristo/omap-pm/omap-pm-work.git mainline-3.6-rc5-omap-auto-ret-v7 @@ -213,7 +225,7 @@ omap_fixes sgx mainline_fixes #debug -#pm +omap3isp echo "patch.sh ran successful" diff --git a/patches/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch b/patches/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch index 22d97cad9b3c1b52356433ca14c72b7cd3d4cde6..dcab2eb3e5b774aa34c406df05dfd4b01cfc9094 100644 --- a/patches/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch +++ b/patches/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch @@ -1,7 +1,7 @@ From da412a43a5fa28a78831ac206a2a28dd40fe24c6 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> Date: Mon, 10 Oct 2011 11:12:40 -0500 -Subject: [PATCH 1/8] Beagle: expansion: add buddy param for expansionboard +Subject: [PATCH 1/9] Beagle: expansion: add buddy param for expansionboard names Signed-off-by: Robert Nelson <robertcnelson@gmail.com> @@ -10,7 +10,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 14 insertions(+) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 580fd17..7f790f3 100644 +index 6202fc7..aac3b29 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -21,6 +21,7 @@ diff --git a/patches/beagle/expansion/0002-Beagle-expansion-add-zippy.patch b/patches/beagle/expansion/0002-Beagle-expansion-add-zippy.patch index f0c62b48dedebfb97f2b64c66327f88a0967ee80..101b227171d66d4acde9943b46d8bfb34443392d 100644 --- a/patches/beagle/expansion/0002-Beagle-expansion-add-zippy.patch +++ b/patches/beagle/expansion/0002-Beagle-expansion-add-zippy.patch @@ -1,7 +1,7 @@ From 77ed7e226774b4bdd3fc944d092d52b8770ce660 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> Date: Tue, 22 May 2012 15:04:46 -0500 -Subject: [PATCH 2/8] Beagle: expansion: add zippy +Subject: [PATCH 2/9] Beagle: expansion: add zippy Signed-off-by: Robert Nelson <robertcnelson@gmail.com> --- @@ -9,7 +9,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 155 insertions(+), 6 deletions(-) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 7f790f3..c5ba8f2 100644 +index aac3b29..01b1adb 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -163,6 +163,86 @@ static void __init omap3_beagle_init_rev(void) diff --git a/patches/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch b/patches/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch index 0072b28aaec5c2a023b05c2f6964e47914fd6748..a83b184c83f323f358d779cbb2cfe9dba86211f2 100644 --- a/patches/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch +++ b/patches/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch @@ -1,7 +1,7 @@ From 450124a1f560566d4a4f246a83b8354b48370140 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> Date: Tue, 22 May 2012 15:09:04 -0500 -Subject: [PATCH 3/8] Beagle: expansion: add zippy2 +Subject: [PATCH 3/9] Beagle: expansion: add zippy2 Signed-off-by: Robert Nelson <robertcnelson@gmail.com> --- @@ -9,7 +9,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index c5ba8f2..70c8d33 100644 +index 01b1adb..fb697e2 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -243,6 +243,46 @@ static void __init omap3beagle_enc28j60_init(void) diff --git a/patches/beagle/expansion/0004-Beagle-expansion-add-trainer.patch b/patches/beagle/expansion/0004-Beagle-expansion-add-trainer.patch index 445a3985f3e5a5ff7faa4acfc97c0fe7c90f0439..8cec1fe6e1e2d2565f4ebc067648c1291ad1d30b 100644 --- a/patches/beagle/expansion/0004-Beagle-expansion-add-trainer.patch +++ b/patches/beagle/expansion/0004-Beagle-expansion-add-trainer.patch @@ -1,7 +1,7 @@ From aa3f5f8006f0c3ba62c2fc8458afee625fe05bb3 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> Date: Tue, 22 May 2012 15:11:30 -0500 -Subject: [PATCH 4/8] Beagle: expansion: add trainer +Subject: [PATCH 4/9] Beagle: expansion: add trainer Signed-off-by: Robert Nelson <robertcnelson@gmail.com> --- @@ -9,7 +9,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 31 insertions(+) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 70c8d33..3acd816 100644 +index fb697e2..e0e7b98 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -722,6 +722,37 @@ static void __init omap3_beagle_init(void) diff --git a/patches/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch b/patches/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch index d0355e628b69328d0f9cc6994cdc2fbaa131dca4..e0ddce3f427b54f69acf62d35f722f9c3c1d031c 100644 --- a/patches/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch +++ b/patches/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch @@ -1,7 +1,7 @@ From c32ea0c7c8b6778f2c123da68ba23c14ab0a3118 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> Date: Tue, 22 May 2012 15:18:27 -0500 -Subject: [PATCH 5/8] Beagle: expansion: add CircuitCo ulcd Support +Subject: [PATCH 5/9] Beagle: expansion: add CircuitCo ulcd Support This of a cleanup, squashed both ulcd commits into one: @@ -249,7 +249,7 @@ index e0e7b98..e39846c 100644 MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c -index bc5af25..da5ab7a 100644 +index bc5af25..0e329d4 100644 --- a/drivers/video/omap2/displays/panel-generic-dpi.c +++ b/drivers/video/omap2/displays/panel-generic-dpi.c @@ -538,6 +538,33 @@ static struct panel_config generic_dpi_panels[] = { diff --git a/patches/beagle/expansion/0006-Beagle-expansion-add-wifi.patch b/patches/beagle/expansion/0006-Beagle-expansion-add-wifi.patch index c5753af3772605c67b163f9605187a0cbcdbcec1..ca583a5a12c106379df88f2969004183a9616def 100644 --- a/patches/beagle/expansion/0006-Beagle-expansion-add-wifi.patch +++ b/patches/beagle/expansion/0006-Beagle-expansion-add-wifi.patch @@ -1,7 +1,7 @@ From 6d416c259bd7d514368f53064e6a8794c6bcf4ff Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> Date: Tue, 22 May 2012 15:31:43 -0500 -Subject: [PATCH 6/8] Beagle: expansion: add wifi +Subject: [PATCH 6/9] Beagle: expansion: add wifi Signed-off-by: Robert Nelson <robertcnelson@gmail.com> --- @@ -9,7 +9,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 113 insertions(+) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 5947f0a..c3f9be5 100644 +index e39846c..524cd18 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -189,6 +189,71 @@ static struct { diff --git a/patches/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch b/patches/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch index 4cecbc365a06686645c1eb27ae64470c8e40307d..e900e6ea23a007177f5a593dc92868f7ea2d86da 100644 --- a/patches/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch +++ b/patches/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch @@ -1,7 +1,7 @@ From 809bc79efc73221d88489e5c5a92fc2edb411a74 Mon Sep 17 00:00:00 2001 From: Bas van der Doorn <bas@doornvd.com> Date: Sat, 19 May 2012 17:09:28 +0200 -Subject: [PATCH 7/8] Beagle: expansion: add beaglefpga +Subject: [PATCH 7/9] Beagle: expansion: add beaglefpga Added SPI dev and McBSP 3 mux when FPGA is detected @@ -12,7 +12,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 72 insertions(+) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index c3f9be5..8a3de4b 100644 +index 524cd18..d434ef3 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -39,6 +39,7 @@ diff --git a/patches/beagle/expansion/0008-Enable-buddy-spidev.patch b/patches/beagle/expansion/0008-Enable-buddy-spidev.patch index de4d5e7d5be8e79997415c663572d9cb4032548f..4eef013eb117f1907e5465014ee49cfc8a917568 100644 --- a/patches/beagle/expansion/0008-Enable-buddy-spidev.patch +++ b/patches/beagle/expansion/0008-Enable-buddy-spidev.patch @@ -1,7 +1,7 @@ From a5e2c5218d32157fde573697f56d2520fcaea2e0 Mon Sep 17 00:00:00 2001 From: Russell Hay <russell.hay@gmail.com> Date: Mon, 28 May 2012 09:45:24 -0700 -Subject: [PATCH 8/8] Enable buddy=spidev +Subject: [PATCH 8/9] Enable buddy=spidev Signed-off-by: Russell Hay <russell.hay@gmail.com> Signed-off-by: Robert Nelson <robertcnelson@gmail.com> @@ -10,7 +10,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> 1 file changed, 8 insertions(+) diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c -index 8a3de4b..e15798a 100644 +index d434ef3..ff13498 100644 --- a/arch/arm/mach-omap2/board-omap3beagle.c +++ b/arch/arm/mach-omap2/board-omap3beagle.c @@ -1072,6 +1072,14 @@ static void __init omap3_beagle_init(void) diff --git a/patches/beagle/expansion/0009-Beagle-Camera-add-MT9P031-Aptina-image-sensor-driver.patch b/patches/beagle/expansion/0009-Beagle-Camera-add-MT9P031-Aptina-image-sensor-driver.patch new file mode 100644 index 0000000000000000000000000000000000000000..ba5452641ac43892acbff321480a1a9ef1159893 --- /dev/null +++ b/patches/beagle/expansion/0009-Beagle-Camera-add-MT9P031-Aptina-image-sensor-driver.patch @@ -0,0 +1,219 @@ +From 3b6000a45e771c4a22ae160bc600feadccd7ee5e Mon Sep 17 00:00:00 2001 +From: Robert Nelson <robertcnelson@gmail.com> +Date: Tue, 9 Oct 2012 16:18:13 -0500 +Subject: [PATCH 9/9] Beagle: Camera: add MT9P031 Aptina image sensor driver + +Based on: +https://github.com/Aptina/BeagleBoard-xM/blob/master/tools/0266-Adding-MT9P031-Support-files.patch + +And on Max Galemin's patch +https://github.com/MaxGalemin/buildroot/blob/master/board/beagleboard/xm/kernel-patches/linux-0003-Add-support-for-MT9P031-Aptina-image-sensor-driver.patch + +And Koen Kooi Previous work's +https://github.com/beagleboard/kernel/blob/beagleboard-3.2/patches/camera/0003-beagleboard-fix-i2c2-init.patch + +Signed-off-by: Robert Nelson <robertcnelson@gmail.com> +--- + arch/arm/mach-omap2/board-omap3beagle.c | 144 +++++++++++++++++++++++++++++++ + 1 file changed, 144 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index ff13498..f8b606d 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -169,6 +169,7 @@ static void __init omap3_beagle_init_rev(void) + + char expansionboard_name[16]; + char expansionboard2_name[16]; ++char camera_name[16]; + + enum { + EXPANSION_MMC_NONE = 0, +@@ -521,6 +522,14 @@ static struct regulator_consumer_supply beagle_vsim_supply[] = { + REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"), + }; + ++static struct regulator_consumer_supply beagle_vaux3_supply = { ++ .supply = "cam_1v8", ++}; ++ ++static struct regulator_consumer_supply beagle_vaux4_supply = { ++ .supply = "cam_2v8", ++}; ++ + static struct gpio_led gpio_leds[]; + + static int beagle_twl_gpio_setup(struct device *dev, +@@ -632,11 +641,43 @@ static struct regulator_init_data beagle_vsim = { + .consumer_supplies = beagle_vsim_supply, + }; + ++/* VAUX3 for CAM_1V8 */ ++static struct regulator_init_data beagle_vaux3 = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .apply_uV = true, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &beagle_vaux3_supply, ++}; ++ ++/* VAUX4 for CAM_2V8 */ ++static struct regulator_init_data beagle_vaux4 = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .apply_uV = true, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &beagle_vaux4_supply, ++}; ++ + static struct twl4030_platform_data beagle_twldata = { + /* platform_data for children goes here */ + .gpio = &beagle_gpio_data, + .vmmc1 = &beagle_vmmc1, + .vsim = &beagle_vsim, ++ .vaux3 = &beagle_vaux3, ++ .vaux4 = &beagle_vaux4, + }; + + static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { +@@ -700,6 +741,65 @@ static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {}; + static void __init omap3beagle_tsc2007_init(void) { return; } + #endif + ++#if defined(CONFIG_VIDEO_MT9P031) ++#include <media/mt9p031.h> ++#include <asm/mach-types.h> ++#include "devices.h" ++#include "../../../drivers/media/video/omap3isp/isp.h" ++ ++#define MT9P031_RESET_GPIO 98 ++#define MT9P031_XCLK ISP_XCLK_A ++#define MT9P031_EXT_FREQ 21000000 ++ ++static struct regulator *reg_1v8, *reg_2v8; ++ ++static int beagle_cam_set_xclk(struct v4l2_subdev *subdev, int hz) ++{ ++ struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev); ++ ++ return isp->platform_cb.set_xclk(isp, hz, MT9P031_XCLK); ++} ++ ++static struct mt9p031_platform_data beagle_mt9p031_platform_data = { ++ .set_xclk = beagle_cam_set_xclk, ++ .reset = MT9P031_RESET_GPIO, ++ .ext_freq = MT9P031_EXT_FREQ, ++ .target_freq = 48000000, ++}; ++ ++static struct i2c_board_info mt9p031_camera_i2c_device = { ++ I2C_BOARD_INFO("mt9p031", 0x48), ++ .platform_data = &beagle_mt9p031_platform_data, ++}; ++ ++static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = { ++ { ++ .board_info = &mt9p031_camera_i2c_device, ++ .i2c_adapter_id = 2, ++ }, ++ { NULL, 0, }, ++}; ++ ++static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = { ++ { ++ .subdevs = mt9p031_camera_subdevs, ++ .interface = ISP_INTERFACE_PARALLEL, ++ .bus = { ++ .parallel = { ++ .data_lane_shift = 0, ++ .clk_pol = 1, ++ .bridge = ISPCTRL_PAR_BRIDGE_DISABLE, ++ } ++ }, ++ }, ++ { }, ++}; ++ ++static struct isp_platform_data beagle_isp_platform_data = { ++ .subdevs = beagle_camera_subdevs, ++}; ++#endif ++ + static int __init omap3_beagle_i2c_init(void) + { + omap3_pmic_get_config(&beagle_twldata, +@@ -830,6 +930,15 @@ static int __init expansionboard2_setup(char *str) + return 0; + } + ++static int __init camera_setup(char *str) ++{ ++ if (!str) ++ return -EINVAL; ++ strncpy(camera_name, str, 16); ++ printk(KERN_INFO "Beagle camera: %s\n", camera_name); ++ return 0; ++} ++ + static void __init beagle_opp_init(void) + { + int r = 0; +@@ -1095,8 +1204,43 @@ static void __init omap3_beagle_init(void) + beagle_opp_init(); + } + ++static int __init omap3_beagle_late_initcall(void) ++{ ++#if defined(CONFIG_VIDEO_MT9P031) ++ int ret = 0; ++ ++ if ((!strcmp(camera_name, "lbcm5m1")) || (!strcmp(camera_name, "li5m03"))) ++ { ++ if (!cpu_is_omap3630()) ++ return 0; ++ ++ pr_info("Beagle camera: MT9P031 init"); ++ ++ reg_1v8 = regulator_get(NULL, "cam_1v8"); ++ if (IS_ERR(reg_1v8)) ++ pr_err("%s: cannot get cam_1v8 regulator\n", __func__); ++ else ++ regulator_enable(reg_1v8); ++ ++ reg_2v8 = regulator_get(NULL, "cam_2v8"); ++ if (IS_ERR(reg_2v8)) ++ pr_err("%s: cannot get cam_2v8 regulator\n", __func__); ++ else ++ regulator_enable(reg_2v8); ++ ++ ret = omap3_init_camera(&beagle_isp_platform_data); ++ if (ret < 0) ++ pr_warn("Beagle camera: MT9P031: Failed registering camera device!\n"); ++ } ++#endif ++ return 0; ++} ++ + early_param("buddy", expansionboard_setup); + early_param("buddy2", expansionboard2_setup); ++early_param("camera", camera_setup); ++ ++late_initcall(omap3_beagle_late_initcall); + + MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") + /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ +-- +1.7.10.4 + diff --git a/patches/defconfig b/patches/defconfig index 46c8aa2f246b58545349ea9d71930297a87188b9..35ae1ac4209383d2c887b3d38a5da58ad6fe0a44 100644 --- a/patches/defconfig +++ b/patches/defconfig @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.6.0-rc7 Kernel Configuration +# Linux/arm 3.6.0 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -2751,19 +2751,21 @@ CONFIG_VIDEO_AK881X=m # # Camera sensor devices # +CONFIG_VIDEO_APTINA_PLL=y +CONFIG_VIDEO_SMIAPP_PLL=m CONFIG_VIDEO_OV7670=m CONFIG_VIDEO_VS6624=m -# CONFIG_VIDEO_MT9M032 is not set -# CONFIG_VIDEO_MT9P031 is not set -# CONFIG_VIDEO_MT9T001 is not set +CONFIG_VIDEO_MT9M032=m +CONFIG_VIDEO_MT9P031=y +CONFIG_VIDEO_MT9T001=m CONFIG_VIDEO_MT9V011=m -# CONFIG_VIDEO_MT9V032 is not set +CONFIG_VIDEO_MT9V032=m CONFIG_VIDEO_TCM825X=m CONFIG_VIDEO_SR030PC30=m -# CONFIG_VIDEO_NOON010PC30 is not set -# CONFIG_VIDEO_M5MOLS is not set -# CONFIG_VIDEO_S5K6AA is not set -# CONFIG_VIDEO_SMIAPP is not set +CONFIG_VIDEO_NOON010PC30=m +CONFIG_VIDEO_M5MOLS=m +CONFIG_VIDEO_S5K6AA=m +CONFIG_VIDEO_SMIAPP=m # # Flash devices @@ -2878,8 +2880,8 @@ CONFIG_VIDEO_VPFE_CAPTURE=m CONFIG_VIDEO_OMAP2_VOUT_VRFB=y CONFIG_VIDEO_OMAP2_VOUT=m CONFIG_VIDEO_TIMBERDALE=m -CONFIG_VIDEO_OMAP3=m -# CONFIG_VIDEO_OMAP3_DEBUG is not set +CONFIG_VIDEO_OMAP3=y +CONFIG_VIDEO_OMAP3_DEBUG=y CONFIG_SOC_CAMERA=m CONFIG_SOC_CAMERA_IMX074=m CONFIG_SOC_CAMERA_MT9M001=m @@ -4028,8 +4030,8 @@ CONFIG_IOMMU_API=y CONFIG_IOMMU_SUPPORT=y CONFIG_OF_IOMMU=y CONFIG_OMAP_IOMMU=y -CONFIG_OMAP_IOVMM=m -# CONFIG_OMAP_IOMMU_DEBUG is not set +CONFIG_OMAP_IOVMM=y +CONFIG_OMAP_IOMMU_DEBUG=y # # Remoteproc drivers (EXPERIMENTAL) diff --git a/patches/omap3isp/0001-Revert-media-omap3isp-Move-CCDC-link-validation-to-c.patch b/patches/omap3isp/0001-Revert-media-omap3isp-Move-CCDC-link-validation-to-c.patch new file mode 100644 index 0000000000000000000000000000000000000000..b264aa1aba7b83327d5a5b30f7ed5d66a456aa2d --- /dev/null +++ b/patches/omap3isp/0001-Revert-media-omap3isp-Move-CCDC-link-validation-to-c.patch @@ -0,0 +1,252 @@ +From f069021fb3eab2a6f493bd0fa9482bfc986bfefd Mon Sep 17 00:00:00 2001 +From: Robert Nelson <robertcnelson@gmail.com> +Date: Tue, 9 Oct 2012 15:54:41 -0500 +Subject: [PATCH 1/4] Revert "[media] omap3isp: Move CCDC link validation to + ccdc_link_validate()" + +This reverts commit a6d7a62dcd1fccb3140100551b205315491eadc5. + +Signed-off-by: Robert Nelson <robertcnelson@gmail.com> +--- + drivers/media/video/omap3isp/ispccdc.c | 65 --------------------- + drivers/media/video/omap3isp/ispvideo.c | 95 +++++++++++++++++++++++++++---- + 2 files changed, 84 insertions(+), 76 deletions(-) + +diff --git a/drivers/media/video/omap3isp/ispccdc.c b/drivers/media/video/omap3isp/ispccdc.c +index f1220d3..c1a0e89 100644 +--- a/drivers/media/video/omap3isp/ispccdc.c ++++ b/drivers/media/video/omap3isp/ispccdc.c +@@ -2155,69 +2155,6 @@ static int ccdc_set_format(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh, + } + + /* +- * Decide whether desired output pixel code can be obtained with +- * the lane shifter by shifting the input pixel code. +- * @in: input pixelcode to shifter +- * @out: output pixelcode from shifter +- * @additional_shift: # of bits the sensor's LSB is offset from CAMEXT[0] +- * +- * return true if the combination is possible +- * return false otherwise +- */ +-static bool ccdc_is_shiftable(enum v4l2_mbus_pixelcode in, +- enum v4l2_mbus_pixelcode out, +- unsigned int additional_shift) +-{ +- const struct isp_format_info *in_info, *out_info; +- +- if (in == out) +- return true; +- +- in_info = omap3isp_video_format_info(in); +- out_info = omap3isp_video_format_info(out); +- +- if ((in_info->flavor == 0) || (out_info->flavor == 0)) +- return false; +- +- if (in_info->flavor != out_info->flavor) +- return false; +- +- return in_info->bpp - out_info->bpp + additional_shift <= 6; +-} +- +-static int ccdc_link_validate(struct v4l2_subdev *sd, +- struct media_link *link, +- struct v4l2_subdev_format *source_fmt, +- struct v4l2_subdev_format *sink_fmt) +-{ +- struct isp_ccdc_device *ccdc = v4l2_get_subdevdata(sd); +- unsigned long parallel_shift; +- +- /* Check if the two ends match */ +- if (source_fmt->format.width != sink_fmt->format.width || +- source_fmt->format.height != sink_fmt->format.height) +- return -EPIPE; +- +- /* We've got a parallel sensor here. */ +- if (ccdc->input == CCDC_INPUT_PARALLEL) { +- struct isp_parallel_platform_data *pdata = +- &((struct isp_v4l2_subdevs_group *) +- media_entity_to_v4l2_subdev(link->source->entity) +- ->host_priv)->bus.parallel; +- parallel_shift = pdata->data_lane_shift * 2; +- } else { +- parallel_shift = 0; +- } +- +- /* Lane shifter may be used to drop bits on CCDC sink pad */ +- if (!ccdc_is_shiftable(source_fmt->format.code, +- sink_fmt->format.code, parallel_shift)) +- return -EPIPE; +- +- return 0; +-} +- +-/* + * ccdc_init_formats - Initialize formats on all pads + * @sd: ISP CCDC V4L2 subdevice + * @fh: V4L2 subdev file handle +@@ -2261,7 +2198,6 @@ static const struct v4l2_subdev_pad_ops ccdc_v4l2_pad_ops = { + .set_fmt = ccdc_set_format, + .get_selection = ccdc_get_selection, + .set_selection = ccdc_set_selection, +- .link_validate = ccdc_link_validate, + }; + + /* V4L2 subdev operations */ +@@ -2371,7 +2307,6 @@ static int ccdc_link_setup(struct media_entity *entity, + /* media operations */ + static const struct media_entity_operations ccdc_media_ops = { + .link_setup = ccdc_link_setup, +- .link_validate = v4l2_subdev_link_validate, + }; + + void omap3isp_ccdc_unregister_entities(struct isp_ccdc_device *ccdc) +diff --git a/drivers/media/video/omap3isp/ispvideo.c b/drivers/media/video/omap3isp/ispvideo.c +index b37379d..66bc674 100644 +--- a/drivers/media/video/omap3isp/ispvideo.c ++++ b/drivers/media/video/omap3isp/ispvideo.c +@@ -130,6 +130,37 @@ omap3isp_video_format_info(enum v4l2_mbus_pixelcode code) + } + + /* ++ * Decide whether desired output pixel code can be obtained with ++ * the lane shifter by shifting the input pixel code. ++ * @in: input pixelcode to shifter ++ * @out: output pixelcode from shifter ++ * @additional_shift: # of bits the sensor's LSB is offset from CAMEXT[0] ++ * ++ * return true if the combination is possible ++ * return false otherwise ++ */ ++static bool isp_video_is_shiftable(enum v4l2_mbus_pixelcode in, ++ enum v4l2_mbus_pixelcode out, ++ unsigned int additional_shift) ++{ ++ const struct isp_format_info *in_info, *out_info; ++ ++ if (in == out) ++ return true; ++ ++ in_info = omap3isp_video_format_info(in); ++ out_info = omap3isp_video_format_info(out); ++ ++ if ((in_info->flavor == 0) || (out_info->flavor == 0)) ++ return false; ++ ++ if (in_info->flavor != out_info->flavor) ++ return false; ++ ++ return in_info->bpp - out_info->bpp + additional_shift <= 6; ++} ++ ++/* + * isp_video_mbus_to_pix - Convert v4l2_mbus_framefmt to v4l2_pix_format + * @video: ISP video instance + * @mbus: v4l2_mbus_framefmt format (input) +@@ -284,24 +315,51 @@ static int isp_video_get_graph_data(struct isp_video *video, + static int isp_video_validate_pipeline(struct isp_pipeline *pipe) + { + struct isp_device *isp = pipe->output->isp; ++ struct v4l2_subdev_format fmt_source; ++ struct v4l2_subdev_format fmt_sink; + struct media_pad *pad; + struct v4l2_subdev *subdev; ++ int ret; + + subdev = isp_video_remote_subdev(pipe->output, NULL); + if (subdev == NULL) + return -EPIPE; + + while (1) { ++ unsigned int shifter_link; ++ + /* Retrieve the sink format */ + pad = &subdev->entity.pads[0]; + if (!(pad->flags & MEDIA_PAD_FL_SINK)) + break; + ++ fmt_sink.pad = pad->index; ++ fmt_sink.which = V4L2_SUBDEV_FORMAT_ACTIVE; ++ ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt_sink); ++ if (ret < 0 && ret != -ENOIOCTLCMD) ++ return -EPIPE; ++ + /* Update the maximum frame rate */ + if (subdev == &isp->isp_res.subdev) + omap3isp_resizer_max_rate(&isp->isp_res, + &pipe->max_rate); + ++ /* Check ccdc maximum data rate when data comes from sensor ++ * TODO: Include ccdc rate in pipe->max_rate and compare the ++ * total pipe rate with the input data rate from sensor. ++ */ ++ if (subdev == &isp->isp_ccdc.subdev && pipe->input == NULL) { ++ unsigned int rate = UINT_MAX; ++ ++ omap3isp_ccdc_max_rate(&isp->isp_ccdc, &rate); ++ if (pipe->external_rate > rate) ++ return -ENOSPC; ++ } ++ ++ /* If sink pad is on CCDC, the link has the lane shifter ++ * in the middle of it. */ ++ shifter_link = subdev == &isp->isp_ccdc.subdev; ++ + /* Retrieve the source format. Return an error if no source + * entity can be found, and stop checking the pipeline if the + * source entity isn't a subdev. +@@ -314,6 +372,32 @@ static int isp_video_validate_pipeline(struct isp_pipeline *pipe) + break; + + subdev = media_entity_to_v4l2_subdev(pad->entity); ++ ++ fmt_source.pad = pad->index; ++ fmt_source.which = V4L2_SUBDEV_FORMAT_ACTIVE; ++ ret = v4l2_subdev_call(subdev, pad, get_fmt, NULL, &fmt_source); ++ if (ret < 0 && ret != -ENOIOCTLCMD) ++ return -EPIPE; ++ ++ /* Check if the two ends match */ ++ if (fmt_source.format.width != fmt_sink.format.width || ++ fmt_source.format.height != fmt_sink.format.height) ++ return -EPIPE; ++ ++ if (shifter_link) { ++ unsigned int parallel_shift = 0; ++ if (isp->isp_ccdc.input == CCDC_INPUT_PARALLEL) { ++ struct isp_parallel_platform_data *pdata = ++ &((struct isp_v4l2_subdevs_group *) ++ subdev->host_priv)->bus.parallel; ++ parallel_shift = pdata->data_lane_shift * 2; ++ } ++ if (!isp_video_is_shiftable(fmt_source.format.code, ++ fmt_sink.format.code, ++ parallel_shift)) ++ return -EPIPE; ++ } else if (fmt_source.format.code != fmt_sink.format.code) ++ return -EPIPE; + } + + return 0; +@@ -940,17 +1024,6 @@ static int isp_video_check_external_subdevs(struct isp_video *video, + + pipe->external_rate = ctrl.value64; + +- if (pipe->entities & (1 << isp->isp_ccdc.subdev.entity.id)) { +- unsigned int rate = UINT_MAX; +- /* +- * Check that maximum allowed CCDC pixel rate isn't +- * exceeded by the pixel rate. +- */ +- omap3isp_ccdc_max_rate(&isp->isp_ccdc, &rate); +- if (pipe->external_rate > rate) +- return -ENOSPC; +- } +- + return 0; + } + +-- +1.7.10.4 + diff --git a/patches/omap3isp/0002-Revert-media-omap3isp-Default-link-validation-for-cc.patch b/patches/omap3isp/0002-Revert-media-omap3isp-Default-link-validation-for-cc.patch new file mode 100644 index 0000000000000000000000000000000000000000..3d2fa716327780da7040e254dae52d4e7a3d4d6a --- /dev/null +++ b/patches/omap3isp/0002-Revert-media-omap3isp-Default-link-validation-for-cc.patch @@ -0,0 +1,67 @@ +From 4b1efbb9fb576221f5acdbf170c0c15ab0bcdcfd Mon Sep 17 00:00:00 2001 +From: Robert Nelson <robertcnelson@gmail.com> +Date: Tue, 9 Oct 2012 15:54:56 -0500 +Subject: [PATCH 2/4] Revert "[media] omap3isp: Default link validation for + ccp2, csi2, preview and resizer" + +This reverts commit 20d4ab7bea8e79bb330c2d52da9c245911ea29ed. + +Signed-off-by: Robert Nelson <robertcnelson@gmail.com> +--- + drivers/media/video/omap3isp/ispccp2.c | 1 - + drivers/media/video/omap3isp/ispcsi2.c | 1 - + drivers/media/video/omap3isp/isppreview.c | 1 - + drivers/media/video/omap3isp/ispresizer.c | 1 - + 4 files changed, 4 deletions(-) + +diff --git a/drivers/media/video/omap3isp/ispccp2.c b/drivers/media/video/omap3isp/ispccp2.c +index 85f0de8..ee7dcda 100644 +--- a/drivers/media/video/omap3isp/ispccp2.c ++++ b/drivers/media/video/omap3isp/ispccp2.c +@@ -998,7 +998,6 @@ static int ccp2_link_setup(struct media_entity *entity, + /* media operations */ + static const struct media_entity_operations ccp2_media_ops = { + .link_setup = ccp2_link_setup, +- .link_validate = v4l2_subdev_link_validate, + }; + + /* +diff --git a/drivers/media/video/omap3isp/ispcsi2.c b/drivers/media/video/omap3isp/ispcsi2.c +index a172436..75ac6d4 100644 +--- a/drivers/media/video/omap3isp/ispcsi2.c ++++ b/drivers/media/video/omap3isp/ispcsi2.c +@@ -1167,7 +1167,6 @@ static int csi2_link_setup(struct media_entity *entity, + /* media operations */ + static const struct media_entity_operations csi2_media_ops = { + .link_setup = csi2_link_setup, +- .link_validate = v4l2_subdev_link_validate, + }; + + void omap3isp_csi2_unregister_entities(struct isp_csi2_device *csi2) +diff --git a/drivers/media/video/omap3isp/isppreview.c b/drivers/media/video/omap3isp/isppreview.c +index 53f5a70..3257d38 100644 +--- a/drivers/media/video/omap3isp/isppreview.c ++++ b/drivers/media/video/omap3isp/isppreview.c +@@ -2217,7 +2217,6 @@ static int preview_link_setup(struct media_entity *entity, + /* media operations */ + static const struct media_entity_operations preview_media_ops = { + .link_setup = preview_link_setup, +- .link_validate = v4l2_subdev_link_validate, + }; + + void omap3isp_preview_unregister_entities(struct isp_prev_device *prev) +diff --git a/drivers/media/video/omap3isp/ispresizer.c b/drivers/media/video/omap3isp/ispresizer.c +index ae17d91..e4668ad 100644 +--- a/drivers/media/video/omap3isp/ispresizer.c ++++ b/drivers/media/video/omap3isp/ispresizer.c +@@ -1641,7 +1641,6 @@ static int resizer_link_setup(struct media_entity *entity, + /* media operations */ + static const struct media_entity_operations resizer_media_ops = { + .link_setup = resizer_link_setup, +- .link_validate = v4l2_subdev_link_validate, + }; + + void omap3isp_resizer_unregister_entities(struct isp_res_device *res) +-- +1.7.10.4 + diff --git a/patches/omap3isp/0003-Revert-media-omap3isp-Use-external-rate-instead-of-v.patch b/patches/omap3isp/0003-Revert-media-omap3isp-Use-external-rate-instead-of-v.patch new file mode 100644 index 0000000000000000000000000000000000000000..3afe80ebd9e83a37327d58f66fd013e5836ea1c2 --- /dev/null +++ b/patches/omap3isp/0003-Revert-media-omap3isp-Use-external-rate-instead-of-v.patch @@ -0,0 +1,136 @@ +From 4d0593d60f3d51c241f42f4dee6844fe509cdc2a Mon Sep 17 00:00:00 2001 +From: Robert Nelson <robertcnelson@gmail.com> +Date: Tue, 9 Oct 2012 15:55:15 -0500 +Subject: [PATCH 3/4] Revert "[media] omap3isp: Use external rate instead of + vpcfg" + +This reverts commit c6c01f97b1733ba110993ec51600c06961e41bfe. + +Signed-off-by: Robert Nelson <robertcnelson@gmail.com> +--- + drivers/media/video/omap3isp/isp.c | 14 ++++++++++++++ + drivers/media/video/omap3isp/isp.h | 1 + + drivers/media/video/omap3isp/ispccdc.c | 6 ++++-- + drivers/media/video/omap3isp/ispccdc.h | 10 ++++++++++ + drivers/media/video/omap3isp/ispvideo.c | 2 +- + 5 files changed, 30 insertions(+), 3 deletions(-) + +diff --git a/drivers/media/video/omap3isp/isp.c b/drivers/media/video/omap3isp/isp.c +index 1c34763..0307ac3 100644 +--- a/drivers/media/video/omap3isp/isp.c ++++ b/drivers/media/video/omap3isp/isp.c +@@ -329,6 +329,19 @@ void omap3isp_configure_bridge(struct isp_device *isp, + isp_reg_writel(isp, ispctrl_val, OMAP3_ISP_IOMEM_MAIN, ISP_CTRL); + } + ++/** ++ * isp_set_pixel_clock - Configures the ISP pixel clock ++ * @isp: OMAP3 ISP device ++ * @pixelclk: Average pixel clock in Hz ++ * ++ * Set the average pixel clock required by the sensor. The ISP will use the ++ * lowest possible memory bandwidth settings compatible with the clock. ++ **/ ++static void isp_set_pixel_clock(struct isp_device *isp, unsigned int pixelclk) ++{ ++ isp->isp_ccdc.vpcfg.pixelclk = pixelclk; ++} ++ + void omap3isp_hist_dma_done(struct isp_device *isp) + { + if (omap3isp_ccdc_busy(&isp->isp_ccdc) || +@@ -2064,6 +2077,7 @@ static int __devinit isp_probe(struct platform_device *pdev) + + isp->autoidle = autoidle; + isp->platform_cb.set_xclk = isp_set_xclk; ++ isp->platform_cb.set_pixel_clock = isp_set_pixel_clock; + + mutex_init(&isp->isp_mutex); + spin_lock_init(&isp->stat_lock); +diff --git a/drivers/media/video/omap3isp/isp.h b/drivers/media/video/omap3isp/isp.h +index fc7af3e..38c6619 100644 +--- a/drivers/media/video/omap3isp/isp.h ++++ b/drivers/media/video/omap3isp/isp.h +@@ -129,6 +129,7 @@ struct isp_platform_callback { + int (*csiphy_config)(struct isp_csiphy *phy, + struct isp_csiphy_dphy_cfg *dphy, + struct isp_csiphy_lanes_cfg *lanes); ++ void (*set_pixel_clock)(struct isp_device *isp, unsigned int pixelclk); + }; + + /* +diff --git a/drivers/media/video/omap3isp/ispccdc.c b/drivers/media/video/omap3isp/ispccdc.c +index c1a0e89..267d15e 100644 +--- a/drivers/media/video/omap3isp/ispccdc.c ++++ b/drivers/media/video/omap3isp/ispccdc.c +@@ -839,8 +839,8 @@ static void ccdc_config_vp(struct isp_ccdc_device *ccdc) + + if (pipe->input) + div = DIV_ROUND_UP(l3_ick, pipe->max_rate); +- else if (pipe->external_rate) +- div = l3_ick / pipe->external_rate; ++ else if (ccdc->vpcfg.pixelclk) ++ div = l3_ick / ccdc->vpcfg.pixelclk; + + div = clamp(div, 2U, max_div); + fmtcfg_vp |= (div - 2) << ISPCCDC_FMTCFG_VPIF_FRQ_SHIFT; +@@ -2433,6 +2433,8 @@ int omap3isp_ccdc_init(struct isp_device *isp) + ccdc->clamp.oblen = 0; + ccdc->clamp.dcsubval = 0; + ++ ccdc->vpcfg.pixelclk = 0; ++ + ccdc->update = OMAP3ISP_CCDC_BLCLAMP; + ccdc_apply_controls(ccdc); + +diff --git a/drivers/media/video/omap3isp/ispccdc.h b/drivers/media/video/omap3isp/ispccdc.h +index 890f6b3..966bbf8 100644 +--- a/drivers/media/video/omap3isp/ispccdc.h ++++ b/drivers/media/video/omap3isp/ispccdc.h +@@ -80,6 +80,14 @@ struct ispccdc_syncif { + u8 bt_r656_en; + }; + ++/* ++ * struct ispccdc_vp - Structure for Video Port parameters ++ * @pixelclk: Input pixel clock in Hz ++ */ ++struct ispccdc_vp { ++ unsigned int pixelclk; ++}; ++ + enum ispccdc_lsc_state { + LSC_STATE_STOPPED = 0, + LSC_STATE_STOPPING = 1, +@@ -154,6 +162,7 @@ struct ispccdc_lsc { + * @update: Bitmask of controls to update during the next interrupt + * @shadow_update: Controls update in progress by userspace + * @syncif: Interface synchronization configuration ++ * @vpcfg: Video port configuration + * @underrun: A buffer underrun occurred and a new buffer has been queued + * @state: Streaming state + * @lock: Serializes shadow_update with interrupt handler +@@ -183,6 +192,7 @@ struct isp_ccdc_device { + unsigned int shadow_update; + + struct ispccdc_syncif syncif; ++ struct ispccdc_vp vpcfg; + + unsigned int underrun:1; + enum isp_pipeline_stream_state state; +diff --git a/drivers/media/video/omap3isp/ispvideo.c b/drivers/media/video/omap3isp/ispvideo.c +index 66bc674..ffad91e 100644 +--- a/drivers/media/video/omap3isp/ispvideo.c ++++ b/drivers/media/video/omap3isp/ispvideo.c +@@ -352,7 +352,7 @@ static int isp_video_validate_pipeline(struct isp_pipeline *pipe) + unsigned int rate = UINT_MAX; + + omap3isp_ccdc_max_rate(&isp->isp_ccdc, &rate); +- if (pipe->external_rate > rate) ++ if (isp->isp_ccdc.vpcfg.pixelclk > rate) + return -ENOSPC; + } + +-- +1.7.10.4 + diff --git a/patches/omap3isp/0004-Revert-media-omap3isp-Introduce-isp_video_check_exte.patch b/patches/omap3isp/0004-Revert-media-omap3isp-Introduce-isp_video_check_exte.patch new file mode 100644 index 0000000000000000000000000000000000000000..ab13302683382dca7588b8202777bcd33e841ca0 --- /dev/null +++ b/patches/omap3isp/0004-Revert-media-omap3isp-Introduce-isp_video_check_exte.patch @@ -0,0 +1,113 @@ +From a8584843d668a9a40cca8c3bcfd7fb42b929b299 Mon Sep 17 00:00:00 2001 +From: Robert Nelson <robertcnelson@gmail.com> +Date: Tue, 9 Oct 2012 16:03:52 -0500 +Subject: [PATCH 4/4] Revert "[media] omap3isp: Introduce + isp_video_check_external_subdevs()" + +This reverts commit ccddd916dcde141a6fb5612da622a8ae060c12b8. + +Signed-off-by: Robert Nelson <robertcnelson@gmail.com> +--- + drivers/media/video/omap3isp/ispvideo.c | 79 ------------------------------- + 1 file changed, 79 deletions(-) + +diff --git a/drivers/media/video/omap3isp/ispvideo.c b/drivers/media/video/omap3isp/ispvideo.c +index ffad91e..3f5065a 100644 +--- a/drivers/media/video/omap3isp/ispvideo.c ++++ b/drivers/media/video/omap3isp/ispvideo.c +@@ -952,81 +952,6 @@ isp_video_dqbuf(struct file *file, void *fh, struct v4l2_buffer *b) + file->f_flags & O_NONBLOCK); + } + +-static int isp_video_check_external_subdevs(struct isp_video *video, +- struct isp_pipeline *pipe) +-{ +- struct isp_device *isp = video->isp; +- struct media_entity *ents[] = { +- &isp->isp_csi2a.subdev.entity, +- &isp->isp_csi2c.subdev.entity, +- &isp->isp_ccp2.subdev.entity, +- &isp->isp_ccdc.subdev.entity +- }; +- struct media_pad *source_pad; +- struct media_entity *source = NULL; +- struct media_entity *sink; +- struct v4l2_subdev_format fmt; +- struct v4l2_ext_controls ctrls; +- struct v4l2_ext_control ctrl; +- unsigned int i; +- int ret = 0; +- +- for (i = 0; i < ARRAY_SIZE(ents); i++) { +- /* Is the entity part of the pipeline? */ +- if (!(pipe->entities & (1 << ents[i]->id))) +- continue; +- +- /* ISP entities have always sink pad == 0. Find source. */ +- source_pad = media_entity_remote_source(&ents[i]->pads[0]); +- if (source_pad == NULL) +- continue; +- +- source = source_pad->entity; +- sink = ents[i]; +- break; +- } +- +- if (!source) { +- dev_warn(isp->dev, "can't find source, failing now\n"); +- return ret; +- } +- +- if (media_entity_type(source) != MEDIA_ENT_T_V4L2_SUBDEV) +- return 0; +- +- pipe->external = media_entity_to_v4l2_subdev(source); +- +- fmt.pad = source_pad->index; +- fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; +- ret = v4l2_subdev_call(media_entity_to_v4l2_subdev(sink), +- pad, get_fmt, NULL, &fmt); +- if (unlikely(ret < 0)) { +- dev_warn(isp->dev, "get_fmt returned null!\n"); +- return ret; +- } +- +- pipe->external_bpp = omap3isp_video_format_info(fmt.format.code)->bpp; +- +- memset(&ctrls, 0, sizeof(ctrls)); +- memset(&ctrl, 0, sizeof(ctrl)); +- +- ctrl.id = V4L2_CID_PIXEL_RATE; +- +- ctrls.count = 1; +- ctrls.controls = &ctrl; +- +- ret = v4l2_g_ext_ctrls(pipe->external->ctrl_handler, &ctrls); +- if (ret < 0) { +- dev_warn(isp->dev, "no pixel rate control in subdev %s\n", +- pipe->external->name); +- return ret; +- } +- +- pipe->external_rate = ctrl.value64; +- +- return 0; +-} +- + /* + * Stream management + * +@@ -1114,10 +1039,6 @@ isp_video_streamon(struct file *file, void *fh, enum v4l2_buf_type type) + else + state = ISP_PIPELINE_STREAM_INPUT | ISP_PIPELINE_IDLE_INPUT; + +- ret = isp_video_check_external_subdevs(video, pipe); +- if (ret < 0) +- goto err_check_format; +- + /* Validate the pipeline and update its state. */ + ret = isp_video_validate_pipeline(pipe); + if (ret < 0) +-- +1.7.10.4 +