1 From da7a0c9d99ac42332cab5fcc961006a56531e1c4 Mon Sep 17 00:00:00 2001
2 From: Tuukka Toivonen <tuukka.o.toivonen@nokia.com>
3 Date: Thu, 2 Jul 2009 16:17:55 +0200
4 Subject: [PATCH 17/28] omap3isp: set CAM_MCLK to 172.8 MHz, allows exact 9.6 MHz for camera xclka/b
6 Camera cam_xclka and cam_xclkb clocks are generated by dividing
7 CAM_MCLK with an integer. We want to use 9.6 MHz for cameras,
8 so CAM_MCLK should be multiple of it. Otherwise the generated
9 frequency is slightly off due to rounding.
11 Signed-off-by: Tuukka Toivonen <tuukka.o.toivonen@nokia.com>
13 drivers/media/video/isp/isp.c | 14 ++++++++++++++
14 drivers/media/video/isp/isp.h | 1 +
15 drivers/media/video/isp/ispreg.h | 2 +-
16 3 files changed, 16 insertions(+), 1 deletions(-)
18 diff --git a/drivers/media/video/isp/isp.c b/drivers/media/video/isp/isp.c
19 index ceed870..9d46c01 100644
20 --- a/drivers/media/video/isp/isp.c
21 +++ b/drivers/media/video/isp/isp.c
22 @@ -2333,6 +2333,11 @@ static int isp_enable_clocks(struct device *dev)
23 dev_err(dev, "clk_enable cam_ick failed\n");
24 goto out_clk_enable_ick;
26 + r = clk_set_rate(isp->dpll4_m5_ck, CM_CAM_MCLK_HZ/2);
28 + dev_err(dev, "clk_set_rate for dpll4_m5_ck failed\n");
29 + goto out_clk_enable_mclk;
31 r = clk_enable(isp->cam_mclk);
33 dev_err(dev, "clk_enable cam_mclk failed\n");
34 @@ -2499,6 +2504,7 @@ static int isp_remove(struct platform_device *pdev)
36 clk_put(isp->cam_ick);
37 clk_put(isp->cam_mclk);
38 + clk_put(isp->dpll4_m5_ck);
39 clk_put(isp->csi2_fck);
42 @@ -2674,6 +2680,12 @@ static int isp_probe(struct platform_device *pdev)
43 ret_err = PTR_ERR(isp->cam_mclk);
44 goto out_clk_get_mclk;
46 + isp->dpll4_m5_ck = clk_get(&camera_dev, "dpll4_m5_ck");
47 + if (IS_ERR(isp->dpll4_m5_ck)) {
48 + dev_err(isp->dev, "clk_get dpll4_m5_ck failed\n");
49 + ret_err = PTR_ERR(isp->dpll4_m5_ck);
50 + goto out_clk_get_dpll4_m5_ck;
52 isp->csi2_fck = clk_get(&camera_dev, "csi2_96m_fck");
53 if (IS_ERR(isp->csi2_fck)) {
54 dev_err(isp->dev, "clk_get csi2_96m_fck failed\n");
55 @@ -2734,6 +2746,8 @@ out_request_irq:
57 clk_put(isp->csi2_fck);
58 out_clk_get_csi2_fclk:
59 + clk_put(isp->dpll4_m5_ck);
60 +out_clk_get_dpll4_m5_ck:
61 clk_put(isp->cam_mclk);
63 clk_put(isp->cam_ick);
64 diff --git a/drivers/media/video/isp/isp.h b/drivers/media/video/isp/isp.h
65 index dc85d61..6b100b6 100644
66 --- a/drivers/media/video/isp/isp.h
67 +++ b/drivers/media/video/isp/isp.h
68 @@ -414,6 +414,7 @@ struct isp_device {
72 + struct clk *dpll4_m5_ck;
75 struct isp_interface_config *config;
76 diff --git a/drivers/media/video/isp/ispreg.h b/drivers/media/video/isp/ispreg.h
77 index 676a33d..1240e0e 100644
78 --- a/drivers/media/video/isp/ispreg.h
79 +++ b/drivers/media/video/isp/ispreg.h
81 #define ISP_32B_BOUNDARY_BUF 0xFFFFFFE0
82 #define ISP_32B_BOUNDARY_OFFSET 0x0000FFE0
84 -#define CM_CAM_MCLK_HZ 216000000
85 +#define CM_CAM_MCLK_HZ 172800000 /* Hz */
87 /* ISP Submodules offset */