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
+