diff options
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-.patch | 91 |
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 @@ | |||
1 | From fc6044176be3518fee98430ebe36cc144d6feed2 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/75] omap3isp: set CAM_MCLK to 172.8 MHz, allows exact 9.6 MHz for camera xclka/b | ||
5 | |||
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. | ||
10 | |||
11 | Signed-off-by: Tuukka Toivonen <tuukka.o.toivonen@nokia.com> | ||
12 | --- | ||
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(-) | ||
17 | |||
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; | ||
25 | } | ||
26 | + r = clk_set_rate(isp->dpll4_m5_ck, CM_CAM_MCLK_HZ/2); | ||
27 | + if (r) { | ||
28 | + dev_err(dev, "clk_set_rate for dpll4_m5_ck failed\n"); | ||
29 | + goto out_clk_enable_mclk; | ||
30 | + } | ||
31 | r = clk_enable(isp->cam_mclk); | ||
32 | if (r) { | ||
33 | dev_err(dev, "clk_enable cam_mclk failed\n"); | ||
34 | @@ -2499,6 +2504,7 @@ static int isp_remove(struct platform_device *pdev) | ||
35 | |||
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); | ||
40 | clk_put(isp->l3_ick); | ||
41 | |||
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; | ||
45 | } | ||
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; | ||
51 | + } | ||
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: | ||
56 | out_clk_get_l3_ick: | ||
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); | ||
62 | out_clk_get_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 { | ||
69 | int ref_count; | ||
70 | struct clk *cam_ick; | ||
71 | struct clk *cam_mclk; | ||
72 | + struct clk *dpll4_m5_ck; | ||
73 | struct clk *csi2_fck; | ||
74 | struct clk *l3_ick; | ||
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 | ||
80 | @@ -116,7 +116,7 @@ | ||
81 | #define ISP_32B_BOUNDARY_BUF 0xFFFFFFE0 | ||
82 | #define ISP_32B_BOUNDARY_OFFSET 0x0000FFE0 | ||
83 | |||
84 | -#define CM_CAM_MCLK_HZ 216000000 | ||
85 | +#define CM_CAM_MCLK_HZ 172800000 /* Hz */ | ||
86 | |||
87 | /* ISP Submodules offset */ | ||
88 | |||
89 | -- | ||
90 | 1.6.6.1 | ||
91 | |||