diff options
author | Dong Aisheng <b29396@freescale.com> | 2011-11-22 10:54:23 -0500 |
---|---|---|
committer | Shawn Guo <shawn.guo@linaro.org> | 2011-12-02 00:57:14 -0500 |
commit | 4e1b4ecaa23108a8422c84c602b308d21948d642 (patch) | |
tree | a7f707494ed4985808553ec6b3b9944d1820ac68 /arch/arm/mach-mxs | |
parent | 778825801d9dc3745417d295344b5b1e27de0d86 (diff) |
ARM: mxs: add saif clkmux functions
Signed-off-by: Dong Aisheng <b29396@freescale.com>
Acked-by: Marek Vasut <marek.vasut@gmail.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Wolfram Sang <w.sang@pengutronix.de>
Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: Liam Girdwood <lrg@ti.com>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Diffstat (limited to 'arch/arm/mach-mxs')
-rw-r--r-- | arch/arm/mach-mxs/clock-mx28.c | 29 | ||||
-rw-r--r-- | arch/arm/mach-mxs/include/mach/common.h | 1 | ||||
-rw-r--r-- | arch/arm/mach-mxs/include/mach/digctl.h | 21 |
3 files changed, 51 insertions, 0 deletions
diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c index da6e4aad177c..60c189a441b7 100644 --- a/arch/arm/mach-mxs/clock-mx28.c +++ b/arch/arm/mach-mxs/clock-mx28.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
23 | #include <linux/jiffies.h> | 23 | #include <linux/jiffies.h> |
24 | #include <linux/clkdev.h> | 24 | #include <linux/clkdev.h> |
25 | #include <linux/spinlock.h> | ||
25 | 26 | ||
26 | #include <asm/clkdev.h> | 27 | #include <asm/clkdev.h> |
27 | #include <asm/div64.h> | 28 | #include <asm/div64.h> |
@@ -29,6 +30,7 @@ | |||
29 | #include <mach/mx28.h> | 30 | #include <mach/mx28.h> |
30 | #include <mach/common.h> | 31 | #include <mach/common.h> |
31 | #include <mach/clock.h> | 32 | #include <mach/clock.h> |
33 | #include <mach/digctl.h> | ||
32 | 34 | ||
33 | #include "regs-clkctrl-mx28.h" | 35 | #include "regs-clkctrl-mx28.h" |
34 | 36 | ||
@@ -43,6 +45,33 @@ static struct clk emi_clk; | |||
43 | static struct clk saif0_clk; | 45 | static struct clk saif0_clk; |
44 | static struct clk saif1_clk; | 46 | static struct clk saif1_clk; |
45 | static struct clk clk32k_clk; | 47 | static struct clk clk32k_clk; |
48 | static DEFINE_SPINLOCK(clkmux_lock); | ||
49 | |||
50 | /* | ||
51 | * HW_SAIF_CLKMUX_SEL: | ||
52 | * DIRECT(0x0): SAIF0 clock pins selected for SAIF0 input clocks, and SAIF1 | ||
53 | * clock pins selected for SAIF1 input clocks. | ||
54 | * CROSSINPUT(0x1): SAIF1 clock inputs selected for SAIF0 input clocks, and | ||
55 | * SAIF0 clock inputs selected for SAIF1 input clocks. | ||
56 | * EXTMSTR0(0x2): SAIF0 clock pin selected for both SAIF0 and SAIF1 input | ||
57 | * clocks. | ||
58 | * EXTMSTR1(0x3): SAIF1 clock pin selected for both SAIF0 and SAIF1 input | ||
59 | * clocks. | ||
60 | */ | ||
61 | int mxs_saif_clkmux_select(unsigned int clkmux) | ||
62 | { | ||
63 | if (clkmux > 0x3) | ||
64 | return -EINVAL; | ||
65 | |||
66 | spin_lock(&clkmux_lock); | ||
67 | __raw_writel(BM_DIGCTL_CTRL_SAIF_CLKMUX, | ||
68 | DIGCTRL_BASE_ADDR + HW_DIGCTL_CTRL + MXS_CLR_ADDR); | ||
69 | __raw_writel(clkmux << BP_DIGCTL_CTRL_SAIF_CLKMUX, | ||
70 | DIGCTRL_BASE_ADDR + HW_DIGCTL_CTRL + MXS_SET_ADDR); | ||
71 | spin_unlock(&clkmux_lock); | ||
72 | |||
73 | return 0; | ||
74 | } | ||
46 | 75 | ||
47 | static int _raw_clk_enable(struct clk *clk) | 76 | static int _raw_clk_enable(struct clk *clk) |
48 | { | 77 | { |
diff --git a/arch/arm/mach-mxs/include/mach/common.h b/arch/arm/mach-mxs/include/mach/common.h index 635bb5d9a20a..3bbb94f4bbe1 100644 --- a/arch/arm/mach-mxs/include/mach/common.h +++ b/arch/arm/mach-mxs/include/mach/common.h | |||
@@ -16,6 +16,7 @@ struct clk; | |||
16 | extern const u32 *mxs_get_ocotp(void); | 16 | extern const u32 *mxs_get_ocotp(void); |
17 | extern int mxs_reset_block(void __iomem *); | 17 | extern int mxs_reset_block(void __iomem *); |
18 | extern void mxs_timer_init(struct clk *, int); | 18 | extern void mxs_timer_init(struct clk *, int); |
19 | extern int mxs_saif_clkmux_select(unsigned int clkmux); | ||
19 | 20 | ||
20 | extern int mx23_register_gpios(void); | 21 | extern int mx23_register_gpios(void); |
21 | extern int mx23_clocks_init(void); | 22 | extern int mx23_clocks_init(void); |
diff --git a/arch/arm/mach-mxs/include/mach/digctl.h b/arch/arm/mach-mxs/include/mach/digctl.h new file mode 100644 index 000000000000..49a888c65d6d --- /dev/null +++ b/arch/arm/mach-mxs/include/mach/digctl.h | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * Copyright 2011 Freescale Semiconductor, Inc. All Rights Reserved. | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | #ifndef __MACH_DIGCTL_H__ | ||
10 | #define __MACH_DIGCTL_H__ | ||
11 | |||
12 | /* MXS DIGCTL SAIF CLKMUX */ | ||
13 | #define MXS_DIGCTL_SAIF_CLKMUX_DIRECT 0x0 | ||
14 | #define MXS_DIGCTL_SAIF_CLKMUX_CROSSINPUT 0x1 | ||
15 | #define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR0 0x2 | ||
16 | #define MXS_DIGCTL_SAIF_CLKMUX_EXTMSTR1 0x3 | ||
17 | |||
18 | #define HW_DIGCTL_CTRL 0x0 | ||
19 | #define BP_DIGCTL_CTRL_SAIF_CLKMUX 10 | ||
20 | #define BM_DIGCTL_CTRL_SAIF_CLKMUX (0x3 << 10) | ||
21 | #endif | ||