aboutsummaryrefslogtreecommitdiffstats
path: root/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch')
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch
new file mode 100644
index 00000000..78f7296a
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch
@@ -0,0 +1,91 @@
+From fc6044176be3518fee98430ebe36cc144d6feed2 Mon Sep 17 00:00:00 2001
+From: Tuukka Toivonen <tuukka.o.toivonen@nokia.com>
+Date: Thu, 2 Jul 2009 16:17:55 +0200
+Subject: [PATCH 17/75] omap3isp: set CAM_MCLK to 172.8 MHz, allows exact 9.6 MHz for camera xclka/b
+
+Camera cam_xclka and cam_xclkb clocks are generated by dividing
+CAM_MCLK with an integer. We want to use 9.6 MHz for cameras,
+so CAM_MCLK should be multiple of it. Otherwise the generated
+frequency is slightly off due to rounding.
+
+Signed-off-by: Tuukka Toivonen <tuukka.o.toivonen@nokia.com>
+---
+ drivers/media/video/isp/isp.c | 14 ++++++++++++++
+ drivers/media/video/isp/isp.h | 1 +
+ drivers/media/video/isp/ispreg.h | 2 +-
+ 3 files changed, 16 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/media/video/isp/isp.c b/drivers/media/video/isp/isp.c
+index ceed870..9d46c01 100644
+--- a/drivers/media/video/isp/isp.c
++++ b/drivers/media/video/isp/isp.c
+@@ -2333,6 +2333,11 @@ static int isp_enable_clocks(struct device *dev)
+ dev_err(dev, "clk_enable cam_ick failed\n");
+ goto out_clk_enable_ick;
+ }
++ r = clk_set_rate(isp->dpll4_m5_ck, CM_CAM_MCLK_HZ/2);
++ if (r) {
++ dev_err(dev, "clk_set_rate for dpll4_m5_ck failed\n");
++ goto out_clk_enable_mclk;
++ }
+ r = clk_enable(isp->cam_mclk);
+ if (r) {
+ dev_err(dev, "clk_enable cam_mclk failed\n");
+@@ -2499,6 +2504,7 @@ static int isp_remove(struct platform_device *pdev)
+
+ clk_put(isp->cam_ick);
+ clk_put(isp->cam_mclk);
++ clk_put(isp->dpll4_m5_ck);
+ clk_put(isp->csi2_fck);
+ clk_put(isp->l3_ick);
+
+@@ -2674,6 +2680,12 @@ static int isp_probe(struct platform_device *pdev)
+ ret_err = PTR_ERR(isp->cam_mclk);
+ goto out_clk_get_mclk;
+ }
++ isp->dpll4_m5_ck = clk_get(&camera_dev, "dpll4_m5_ck");
++ if (IS_ERR(isp->dpll4_m5_ck)) {
++ dev_err(isp->dev, "clk_get dpll4_m5_ck failed\n");
++ ret_err = PTR_ERR(isp->dpll4_m5_ck);
++ goto out_clk_get_dpll4_m5_ck;
++ }
+ isp->csi2_fck = clk_get(&camera_dev, "csi2_96m_fck");
+ if (IS_ERR(isp->csi2_fck)) {
+ dev_err(isp->dev, "clk_get csi2_96m_fck failed\n");
+@@ -2734,6 +2746,8 @@ out_request_irq:
+ out_clk_get_l3_ick:
+ clk_put(isp->csi2_fck);
+ out_clk_get_csi2_fclk:
++ clk_put(isp->dpll4_m5_ck);
++out_clk_get_dpll4_m5_ck:
+ clk_put(isp->cam_mclk);
+ out_clk_get_mclk:
+ clk_put(isp->cam_ick);
+diff --git a/drivers/media/video/isp/isp.h b/drivers/media/video/isp/isp.h
+index dc85d61..6b100b6 100644
+--- a/drivers/media/video/isp/isp.h
++++ b/drivers/media/video/isp/isp.h
+@@ -414,6 +414,7 @@ struct isp_device {
+ int ref_count;
+ struct clk *cam_ick;
+ struct clk *cam_mclk;
++ struct clk *dpll4_m5_ck;
+ struct clk *csi2_fck;
+ struct clk *l3_ick;
+ struct isp_interface_config *config;
+diff --git a/drivers/media/video/isp/ispreg.h b/drivers/media/video/isp/ispreg.h
+index 676a33d..1240e0e 100644
+--- a/drivers/media/video/isp/ispreg.h
++++ b/drivers/media/video/isp/ispreg.h
+@@ -116,7 +116,7 @@
+ #define ISP_32B_BOUNDARY_BUF 0xFFFFFFE0
+ #define ISP_32B_BOUNDARY_OFFSET 0x0000FFE0
+
+-#define CM_CAM_MCLK_HZ 216000000
++#define CM_CAM_MCLK_HZ 172800000 /* Hz */
+
+ /* ISP Submodules offset */
+
+--
+1.6.6.1
+