diff options
author | Arnd Bergmann <arnd@arndb.de> | 2011-07-11 17:53:01 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2011-07-11 17:53:01 -0400 |
commit | c2fda22207e2977d0b80eac58a9004b6f8beed6d (patch) | |
tree | 0c82957b9d6fb53aafe0f9a9d54de6015484e3e6 /arch/arm/plat-omap | |
parent | fdcc205fb9ba006bcd37f72e1b1b904704257351 (diff) | |
parent | e4609747a33b903c03346eea20d811fafd462269 (diff) |
Merge branch 'fixes-part-2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6 into omap/fixes
Diffstat (limited to 'arch/arm/plat-omap')
-rw-r--r-- | arch/arm/plat-omap/Kconfig | 3 | ||||
-rw-r--r-- | arch/arm/plat-omap/counter_32k.c | 121 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/clock.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/dmtimer.h | 1 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/i2c.h | 6 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/mcbsp.h | 12 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap-pm.h | 8 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap_hwmod.h | 21 | ||||
-rw-r--r-- | arch/arm/plat-omap/mcbsp.c | 30 | ||||
-rw-r--r-- | arch/arm/plat-omap/omap_device.c | 15 |
10 files changed, 82 insertions, 137 deletions
diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig index 49a4c75243fc..6e6735f04ee3 100644 --- a/arch/arm/plat-omap/Kconfig +++ b/arch/arm/plat-omap/Kconfig | |||
@@ -211,9 +211,6 @@ choice | |||
211 | depends on ARCH_OMAP | 211 | depends on ARCH_OMAP |
212 | default OMAP_PM_NOOP | 212 | default OMAP_PM_NOOP |
213 | 213 | ||
214 | config OMAP_PM_NONE | ||
215 | bool "No PM layer" | ||
216 | |||
217 | config OMAP_PM_NOOP | 214 | config OMAP_PM_NOOP |
218 | bool "No-op/debug PM layer" | 215 | bool "No-op/debug PM layer" |
219 | 216 | ||
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index c13bc3d3eb2c..a6cbb712da51 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/err.h> | 18 | #include <linux/err.h> |
19 | #include <linux/io.h> | 19 | #include <linux/io.h> |
20 | #include <linux/sched.h> | 20 | #include <linux/sched.h> |
21 | #include <linux/clocksource.h> | ||
21 | 22 | ||
22 | #include <asm/sched_clock.h> | 23 | #include <asm/sched_clock.h> |
23 | 24 | ||
@@ -26,87 +27,16 @@ | |||
26 | 27 | ||
27 | #include <plat/clock.h> | 28 | #include <plat/clock.h> |
28 | 29 | ||
29 | |||
30 | /* | 30 | /* |
31 | * 32KHz clocksource ... always available, on pretty most chips except | 31 | * 32KHz clocksource ... always available, on pretty most chips except |
32 | * OMAP 730 and 1510. Other timers could be used as clocksources, with | 32 | * OMAP 730 and 1510. Other timers could be used as clocksources, with |
33 | * higher resolution in free-running counter modes (e.g. 12 MHz xtal), | 33 | * higher resolution in free-running counter modes (e.g. 12 MHz xtal), |
34 | * but systems won't necessarily want to spend resources that way. | 34 | * but systems won't necessarily want to spend resources that way. |
35 | */ | 35 | */ |
36 | static void __iomem *timer_32k_base; | ||
36 | 37 | ||
37 | #define OMAP16XX_TIMER_32K_SYNCHRONIZED 0xfffbc410 | 38 | #define OMAP16XX_TIMER_32K_SYNCHRONIZED 0xfffbc410 |
38 | 39 | ||
39 | #include <linux/clocksource.h> | ||
40 | |||
41 | /* | ||
42 | * offset_32k holds the init time counter value. It is then subtracted | ||
43 | * from every counter read to achieve a counter that counts time from the | ||
44 | * kernel boot (needed for sched_clock()). | ||
45 | */ | ||
46 | static u32 offset_32k __read_mostly; | ||
47 | |||
48 | #ifdef CONFIG_ARCH_OMAP16XX | ||
49 | static cycle_t notrace omap16xx_32k_read(struct clocksource *cs) | ||
50 | { | ||
51 | return omap_readl(OMAP16XX_TIMER_32K_SYNCHRONIZED) - offset_32k; | ||
52 | } | ||
53 | #else | ||
54 | #define omap16xx_32k_read NULL | ||
55 | #endif | ||
56 | |||
57 | #ifdef CONFIG_SOC_OMAP2420 | ||
58 | static cycle_t notrace omap2420_32k_read(struct clocksource *cs) | ||
59 | { | ||
60 | return omap_readl(OMAP2420_32KSYNCT_BASE + 0x10) - offset_32k; | ||
61 | } | ||
62 | #else | ||
63 | #define omap2420_32k_read NULL | ||
64 | #endif | ||
65 | |||
66 | #ifdef CONFIG_SOC_OMAP2430 | ||
67 | static cycle_t notrace omap2430_32k_read(struct clocksource *cs) | ||
68 | { | ||
69 | return omap_readl(OMAP2430_32KSYNCT_BASE + 0x10) - offset_32k; | ||
70 | } | ||
71 | #else | ||
72 | #define omap2430_32k_read NULL | ||
73 | #endif | ||
74 | |||
75 | #ifdef CONFIG_ARCH_OMAP3 | ||
76 | static cycle_t notrace omap34xx_32k_read(struct clocksource *cs) | ||
77 | { | ||
78 | return omap_readl(OMAP3430_32KSYNCT_BASE + 0x10) - offset_32k; | ||
79 | } | ||
80 | #else | ||
81 | #define omap34xx_32k_read NULL | ||
82 | #endif | ||
83 | |||
84 | #ifdef CONFIG_ARCH_OMAP4 | ||
85 | static cycle_t notrace omap44xx_32k_read(struct clocksource *cs) | ||
86 | { | ||
87 | return omap_readl(OMAP4430_32KSYNCT_BASE + 0x10) - offset_32k; | ||
88 | } | ||
89 | #else | ||
90 | #define omap44xx_32k_read NULL | ||
91 | #endif | ||
92 | |||
93 | /* | ||
94 | * Kernel assumes that sched_clock can be called early but may not have | ||
95 | * things ready yet. | ||
96 | */ | ||
97 | static cycle_t notrace omap_32k_read_dummy(struct clocksource *cs) | ||
98 | { | ||
99 | return 0; | ||
100 | } | ||
101 | |||
102 | static struct clocksource clocksource_32k = { | ||
103 | .name = "32k_counter", | ||
104 | .rating = 250, | ||
105 | .read = omap_32k_read_dummy, | ||
106 | .mask = CLOCKSOURCE_MASK(32), | ||
107 | .flags = CLOCK_SOURCE_IS_CONTINUOUS, | ||
108 | }; | ||
109 | |||
110 | /* | 40 | /* |
111 | * Returns current time from boot in nsecs. It's OK for this to wrap | 41 | * Returns current time from boot in nsecs. It's OK for this to wrap |
112 | * around for now, as it's just a relative time stamp. | 42 | * around for now, as it's just a relative time stamp. |
@@ -122,7 +52,7 @@ static DEFINE_CLOCK_DATA(cd); | |||
122 | 52 | ||
123 | static inline unsigned long long notrace _omap_32k_sched_clock(void) | 53 | static inline unsigned long long notrace _omap_32k_sched_clock(void) |
124 | { | 54 | { |
125 | u32 cyc = clocksource_32k.read(&clocksource_32k); | 55 | u32 cyc = timer_32k_base ? __raw_readl(timer_32k_base) : 0; |
126 | return cyc_to_fixed_sched_clock(&cd, cyc, (u32)~0, SC_MULT, SC_SHIFT); | 56 | return cyc_to_fixed_sched_clock(&cd, cyc, (u32)~0, SC_MULT, SC_SHIFT); |
127 | } | 57 | } |
128 | 58 | ||
@@ -140,7 +70,7 @@ unsigned long long notrace omap_32k_sched_clock(void) | |||
140 | 70 | ||
141 | static void notrace omap_update_sched_clock(void) | 71 | static void notrace omap_update_sched_clock(void) |
142 | { | 72 | { |
143 | u32 cyc = clocksource_32k.read(&clocksource_32k); | 73 | u32 cyc = timer_32k_base ? __raw_readl(timer_32k_base) : 0; |
144 | update_sched_clock(&cd, cyc, (u32)~0); | 74 | update_sched_clock(&cd, cyc, (u32)~0); |
145 | } | 75 | } |
146 | 76 | ||
@@ -153,6 +83,7 @@ static void notrace omap_update_sched_clock(void) | |||
153 | */ | 83 | */ |
154 | static struct timespec persistent_ts; | 84 | static struct timespec persistent_ts; |
155 | static cycles_t cycles, last_cycles; | 85 | static cycles_t cycles, last_cycles; |
86 | static unsigned int persistent_mult, persistent_shift; | ||
156 | void read_persistent_clock(struct timespec *ts) | 87 | void read_persistent_clock(struct timespec *ts) |
157 | { | 88 | { |
158 | unsigned long long nsecs; | 89 | unsigned long long nsecs; |
@@ -160,11 +91,10 @@ void read_persistent_clock(struct timespec *ts) | |||
160 | struct timespec *tsp = &persistent_ts; | 91 | struct timespec *tsp = &persistent_ts; |
161 | 92 | ||
162 | last_cycles = cycles; | 93 | last_cycles = cycles; |
163 | cycles = clocksource_32k.read(&clocksource_32k); | 94 | cycles = timer_32k_base ? __raw_readl(timer_32k_base) : 0; |
164 | delta = cycles - last_cycles; | 95 | delta = cycles - last_cycles; |
165 | 96 | ||
166 | nsecs = clocksource_cyc2ns(delta, | 97 | nsecs = clocksource_cyc2ns(delta, persistent_mult, persistent_shift); |
167 | clocksource_32k.mult, clocksource_32k.shift); | ||
168 | 98 | ||
169 | timespec_add_ns(tsp, nsecs); | 99 | timespec_add_ns(tsp, nsecs); |
170 | *ts = *tsp; | 100 | *ts = *tsp; |
@@ -176,29 +106,46 @@ int __init omap_init_clocksource_32k(void) | |||
176 | "%s: can't register clocksource!\n"; | 106 | "%s: can't register clocksource!\n"; |
177 | 107 | ||
178 | if (cpu_is_omap16xx() || cpu_class_is_omap2()) { | 108 | if (cpu_is_omap16xx() || cpu_class_is_omap2()) { |
109 | u32 pbase; | ||
110 | unsigned long size = SZ_4K; | ||
111 | void __iomem *base; | ||
179 | struct clk *sync_32k_ick; | 112 | struct clk *sync_32k_ick; |
180 | 113 | ||
181 | if (cpu_is_omap16xx()) | 114 | if (cpu_is_omap16xx()) { |
182 | clocksource_32k.read = omap16xx_32k_read; | 115 | pbase = OMAP16XX_TIMER_32K_SYNCHRONIZED; |
183 | else if (cpu_is_omap2420()) | 116 | size = SZ_1K; |
184 | clocksource_32k.read = omap2420_32k_read; | 117 | } else if (cpu_is_omap2420()) |
118 | pbase = OMAP2420_32KSYNCT_BASE + 0x10; | ||
185 | else if (cpu_is_omap2430()) | 119 | else if (cpu_is_omap2430()) |
186 | clocksource_32k.read = omap2430_32k_read; | 120 | pbase = OMAP2430_32KSYNCT_BASE + 0x10; |
187 | else if (cpu_is_omap34xx()) | 121 | else if (cpu_is_omap34xx()) |
188 | clocksource_32k.read = omap34xx_32k_read; | 122 | pbase = OMAP3430_32KSYNCT_BASE + 0x10; |
189 | else if (cpu_is_omap44xx()) | 123 | else if (cpu_is_omap44xx()) |
190 | clocksource_32k.read = omap44xx_32k_read; | 124 | pbase = OMAP4430_32KSYNCT_BASE + 0x10; |
191 | else | 125 | else |
192 | return -ENODEV; | 126 | return -ENODEV; |
193 | 127 | ||
128 | /* For this to work we must have a static mapping in io.c for this area */ | ||
129 | base = ioremap(pbase, size); | ||
130 | if (!base) | ||
131 | return -ENODEV; | ||
132 | |||
194 | sync_32k_ick = clk_get(NULL, "omap_32ksync_ick"); | 133 | sync_32k_ick = clk_get(NULL, "omap_32ksync_ick"); |
195 | if (!IS_ERR(sync_32k_ick)) | 134 | if (!IS_ERR(sync_32k_ick)) |
196 | clk_enable(sync_32k_ick); | 135 | clk_enable(sync_32k_ick); |
197 | 136 | ||
198 | offset_32k = clocksource_32k.read(&clocksource_32k); | 137 | timer_32k_base = base; |
138 | |||
139 | /* | ||
140 | * 120000 rough estimate from the calculations in | ||
141 | * __clocksource_updatefreq_scale. | ||
142 | */ | ||
143 | clocks_calc_mult_shift(&persistent_mult, &persistent_shift, | ||
144 | 32768, NSEC_PER_SEC, 120000); | ||
199 | 145 | ||
200 | if (clocksource_register_hz(&clocksource_32k, 32768)) | 146 | if (clocksource_mmio_init(base, "32k_counter", 32768, 250, 32, |
201 | printk(err, clocksource_32k.name); | 147 | clocksource_mmio_readl_up)) |
148 | printk(err, "32k_counter"); | ||
202 | 149 | ||
203 | init_fixed_sched_clock(&cd, omap_update_sched_clock, 32, | 150 | init_fixed_sched_clock(&cd, omap_update_sched_clock, 32, |
204 | 32768, SC_MULT, SC_SHIFT); | 151 | 32768, SC_MULT, SC_SHIFT); |
diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h index 006e599c6613..f57e0649ab30 100644 --- a/arch/arm/plat-omap/include/plat/clock.h +++ b/arch/arm/plat-omap/include/plat/clock.h | |||
@@ -152,7 +152,7 @@ struct dpll_data { | |||
152 | u16 max_multiplier; | 152 | u16 max_multiplier; |
153 | u8 last_rounded_n; | 153 | u8 last_rounded_n; |
154 | u8 min_divider; | 154 | u8 min_divider; |
155 | u8 max_divider; | 155 | u16 max_divider; |
156 | u8 modes; | 156 | u8 modes; |
157 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) | 157 | #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4) |
158 | void __iomem *autoidle_reg; | 158 | void __iomem *autoidle_reg; |
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index d0f3a2d22fd3..eb5d16c60cd9 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -34,6 +34,7 @@ | |||
34 | 34 | ||
35 | #include <linux/clk.h> | 35 | #include <linux/clk.h> |
36 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
37 | #include <linux/io.h> | ||
37 | 38 | ||
38 | #ifndef __ASM_ARCH_DMTIMER_H | 39 | #ifndef __ASM_ARCH_DMTIMER_H |
39 | #define __ASM_ARCH_DMTIMER_H | 40 | #define __ASM_ARCH_DMTIMER_H |
diff --git a/arch/arm/plat-omap/include/plat/i2c.h b/arch/arm/plat-omap/include/plat/i2c.h index 878d632c4092..7c22b9e10dc3 100644 --- a/arch/arm/plat-omap/include/plat/i2c.h +++ b/arch/arm/plat-omap/include/plat/i2c.h | |||
@@ -22,6 +22,7 @@ | |||
22 | #define __ASM__ARCH_OMAP_I2C_H | 22 | #define __ASM__ARCH_OMAP_I2C_H |
23 | 23 | ||
24 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
25 | #include <linux/i2c-omap.h> | ||
25 | 26 | ||
26 | #if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE) | 27 | #if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE) |
27 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, | 28 | extern int omap_register_i2c_bus(int bus_id, u32 clkrate, |
@@ -46,10 +47,13 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate, | |||
46 | */ | 47 | */ |
47 | struct omap_i2c_dev_attr { | 48 | struct omap_i2c_dev_attr { |
48 | u8 fifo_depth; | 49 | u8 fifo_depth; |
49 | u8 flags; | 50 | u32 flags; |
50 | }; | 51 | }; |
51 | 52 | ||
52 | void __init omap1_i2c_mux_pins(int bus_id); | 53 | void __init omap1_i2c_mux_pins(int bus_id); |
53 | void __init omap2_i2c_mux_pins(int bus_id); | 54 | void __init omap2_i2c_mux_pins(int bus_id); |
54 | 55 | ||
56 | struct omap_hwmod; | ||
57 | int omap_i2c_reset(struct omap_hwmod *oh); | ||
58 | |||
55 | #endif /* __ASM__ARCH_OMAP_I2C_H */ | 59 | #endif /* __ASM__ARCH_OMAP_I2C_H */ |
diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h index 6c5350832407..9882c657b2d4 100644 --- a/arch/arm/plat-omap/include/plat/mcbsp.h +++ b/arch/arm/plat-omap/include/plat/mcbsp.h | |||
@@ -33,7 +33,7 @@ | |||
33 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ | 33 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ |
34 | static struct platform_device omap_mcbsp##port_nr = { \ | 34 | static struct platform_device omap_mcbsp##port_nr = { \ |
35 | .name = "omap-mcbsp-dai", \ | 35 | .name = "omap-mcbsp-dai", \ |
36 | .id = OMAP_MCBSP##port_nr, \ | 36 | .id = port_nr - 1, \ |
37 | } | 37 | } |
38 | 38 | ||
39 | #define MCBSP_CONFIG_TYPE2 0x2 | 39 | #define MCBSP_CONFIG_TYPE2 0x2 |
@@ -332,14 +332,6 @@ struct omap_mcbsp_reg_cfg { | |||
332 | }; | 332 | }; |
333 | 333 | ||
334 | typedef enum { | 334 | typedef enum { |
335 | OMAP_MCBSP1 = 0, | ||
336 | OMAP_MCBSP2, | ||
337 | OMAP_MCBSP3, | ||
338 | OMAP_MCBSP4, | ||
339 | OMAP_MCBSP5 | ||
340 | } omap_mcbsp_id; | ||
341 | |||
342 | typedef enum { | ||
343 | OMAP_MCBSP_WORD_8 = 0, | 335 | OMAP_MCBSP_WORD_8 = 0, |
344 | OMAP_MCBSP_WORD_12, | 336 | OMAP_MCBSP_WORD_12, |
345 | OMAP_MCBSP_WORD_16, | 337 | OMAP_MCBSP_WORD_16, |
@@ -385,8 +377,6 @@ struct omap_mcbsp { | |||
385 | void __iomem *io_base; | 377 | void __iomem *io_base; |
386 | u8 id; | 378 | u8 id; |
387 | u8 free; | 379 | u8 free; |
388 | omap_mcbsp_word_length rx_word_length; | ||
389 | omap_mcbsp_word_length tx_word_length; | ||
390 | 380 | ||
391 | int rx_irq; | 381 | int rx_irq; |
392 | int tx_irq; | 382 | int tx_irq; |
diff --git a/arch/arm/plat-omap/include/plat/omap-pm.h b/arch/arm/plat-omap/include/plat/omap-pm.h index c0a752053039..0840df813f4f 100644 --- a/arch/arm/plat-omap/include/plat/omap-pm.h +++ b/arch/arm/plat-omap/include/plat/omap-pm.h | |||
@@ -40,11 +40,7 @@ | |||
40 | * framework starts. The "_if_" is to avoid name collisions with the | 40 | * framework starts. The "_if_" is to avoid name collisions with the |
41 | * PM idle-loop code. | 41 | * PM idle-loop code. |
42 | */ | 42 | */ |
43 | #ifdef CONFIG_OMAP_PM_NONE | ||
44 | #define omap_pm_if_early_init() 0 | ||
45 | #else | ||
46 | int __init omap_pm_if_early_init(void); | 43 | int __init omap_pm_if_early_init(void); |
47 | #endif | ||
48 | 44 | ||
49 | /** | 45 | /** |
50 | * omap_pm_if_init - OMAP PM init code called after clock fw init | 46 | * omap_pm_if_init - OMAP PM init code called after clock fw init |
@@ -52,11 +48,7 @@ int __init omap_pm_if_early_init(void); | |||
52 | * The main initialization code. OPP tables are passed in here. The | 48 | * The main initialization code. OPP tables are passed in here. The |
53 | * "_if_" is to avoid name collisions with the PM idle-loop code. | 49 | * "_if_" is to avoid name collisions with the PM idle-loop code. |
54 | */ | 50 | */ |
55 | #ifdef CONFIG_OMAP_PM_NONE | ||
56 | #define omap_pm_if_init() 0 | ||
57 | #else | ||
58 | int __init omap_pm_if_init(void); | 51 | int __init omap_pm_if_init(void); |
59 | #endif | ||
60 | 52 | ||
61 | /** | 53 | /** |
62 | * omap_pm_if_exit - OMAP PM exit code | 54 | * omap_pm_if_exit - OMAP PM exit code |
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 1adea9c62984..fafdfe3c8d4e 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h | |||
@@ -77,7 +77,6 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2; | |||
77 | #define HWMOD_IDLEMODE_FORCE (1 << 0) | 77 | #define HWMOD_IDLEMODE_FORCE (1 << 0) |
78 | #define HWMOD_IDLEMODE_NO (1 << 1) | 78 | #define HWMOD_IDLEMODE_NO (1 << 1) |
79 | #define HWMOD_IDLEMODE_SMART (1 << 2) | 79 | #define HWMOD_IDLEMODE_SMART (1 << 2) |
80 | /* Slave idle mode flag only */ | ||
81 | #define HWMOD_IDLEMODE_SMART_WKUP (1 << 3) | 80 | #define HWMOD_IDLEMODE_SMART_WKUP (1 << 3) |
82 | 81 | ||
83 | /** | 82 | /** |
@@ -98,7 +97,7 @@ struct omap_hwmod_mux_info { | |||
98 | /** | 97 | /** |
99 | * struct omap_hwmod_irq_info - MPU IRQs used by the hwmod | 98 | * struct omap_hwmod_irq_info - MPU IRQs used by the hwmod |
100 | * @name: name of the IRQ channel (module local name) | 99 | * @name: name of the IRQ channel (module local name) |
101 | * @irq_ch: IRQ channel ID | 100 | * @irq: IRQ channel ID (should be non-negative except -1 = terminator) |
102 | * | 101 | * |
103 | * @name should be something short, e.g., "tx" or "rx". It is for use | 102 | * @name should be something short, e.g., "tx" or "rx". It is for use |
104 | * by platform_get_resource_byname(). It is defined locally to the | 103 | * by platform_get_resource_byname(). It is defined locally to the |
@@ -106,13 +105,13 @@ struct omap_hwmod_mux_info { | |||
106 | */ | 105 | */ |
107 | struct omap_hwmod_irq_info { | 106 | struct omap_hwmod_irq_info { |
108 | const char *name; | 107 | const char *name; |
109 | u16 irq; | 108 | s16 irq; |
110 | }; | 109 | }; |
111 | 110 | ||
112 | /** | 111 | /** |
113 | * struct omap_hwmod_dma_info - DMA channels used by the hwmod | 112 | * struct omap_hwmod_dma_info - DMA channels used by the hwmod |
114 | * @name: name of the DMA channel (module local name) | 113 | * @name: name of the DMA channel (module local name) |
115 | * @dma_req: DMA request ID | 114 | * @dma_req: DMA request ID (should be non-negative except -1 = terminator) |
116 | * | 115 | * |
117 | * @name should be something short, e.g., "tx" or "rx". It is for use | 116 | * @name should be something short, e.g., "tx" or "rx". It is for use |
118 | * by platform_get_resource_byname(). It is defined locally to the | 117 | * by platform_get_resource_byname(). It is defined locally to the |
@@ -120,7 +119,7 @@ struct omap_hwmod_irq_info { | |||
120 | */ | 119 | */ |
121 | struct omap_hwmod_dma_info { | 120 | struct omap_hwmod_dma_info { |
122 | const char *name; | 121 | const char *name; |
123 | u16 dma_req; | 122 | s16 dma_req; |
124 | }; | 123 | }; |
125 | 124 | ||
126 | /** | 125 | /** |
@@ -220,7 +219,6 @@ struct omap_hwmod_addr_space { | |||
220 | * @clk: interface clock: OMAP clock name | 219 | * @clk: interface clock: OMAP clock name |
221 | * @_clk: pointer to the interface struct clk (filled in at runtime) | 220 | * @_clk: pointer to the interface struct clk (filled in at runtime) |
222 | * @fw: interface firewall data | 221 | * @fw: interface firewall data |
223 | * @addr_cnt: ARRAY_SIZE(@addr) | ||
224 | * @width: OCP data width | 222 | * @width: OCP data width |
225 | * @user: initiators using this interface (see OCP_USER_* macros above) | 223 | * @user: initiators using this interface (see OCP_USER_* macros above) |
226 | * @flags: OCP interface flags (see OCPIF_* macros above) | 224 | * @flags: OCP interface flags (see OCPIF_* macros above) |
@@ -239,7 +237,6 @@ struct omap_hwmod_ocp_if { | |||
239 | union { | 237 | union { |
240 | struct omap_hwmod_omap2_firewall omap2; | 238 | struct omap_hwmod_omap2_firewall omap2; |
241 | } fw; | 239 | } fw; |
242 | u8 addr_cnt; | ||
243 | u8 width; | 240 | u8 width; |
244 | u8 user; | 241 | u8 user; |
245 | u8 flags; | 242 | u8 flags; |
@@ -258,6 +255,7 @@ struct omap_hwmod_ocp_if { | |||
258 | #define MSTANDBY_FORCE (HWMOD_IDLEMODE_FORCE << MASTER_STANDBY_SHIFT) | 255 | #define MSTANDBY_FORCE (HWMOD_IDLEMODE_FORCE << MASTER_STANDBY_SHIFT) |
259 | #define MSTANDBY_NO (HWMOD_IDLEMODE_NO << MASTER_STANDBY_SHIFT) | 256 | #define MSTANDBY_NO (HWMOD_IDLEMODE_NO << MASTER_STANDBY_SHIFT) |
260 | #define MSTANDBY_SMART (HWMOD_IDLEMODE_SMART << MASTER_STANDBY_SHIFT) | 257 | #define MSTANDBY_SMART (HWMOD_IDLEMODE_SMART << MASTER_STANDBY_SHIFT) |
258 | #define MSTANDBY_SMART_WKUP (HWMOD_IDLEMODE_SMART_WKUP << MASTER_STANDBY_SHIFT) | ||
261 | 259 | ||
262 | /* omap_hwmod_sysconfig.sysc_flags capability flags */ | 260 | /* omap_hwmod_sysconfig.sysc_flags capability flags */ |
263 | #define SYSC_HAS_AUTOIDLE (1 << 0) | 261 | #define SYSC_HAS_AUTOIDLE (1 << 0) |
@@ -468,8 +466,8 @@ struct omap_hwmod_class { | |||
468 | * @name: name of the hwmod | 466 | * @name: name of the hwmod |
469 | * @class: struct omap_hwmod_class * to the class of this hwmod | 467 | * @class: struct omap_hwmod_class * to the class of this hwmod |
470 | * @od: struct omap_device currently associated with this hwmod (internal use) | 468 | * @od: struct omap_device currently associated with this hwmod (internal use) |
471 | * @mpu_irqs: ptr to an array of MPU IRQs (see also mpu_irqs_cnt) | 469 | * @mpu_irqs: ptr to an array of MPU IRQs |
472 | * @sdma_reqs: ptr to an array of System DMA request IDs (see sdma_reqs_cnt) | 470 | * @sdma_reqs: ptr to an array of System DMA request IDs |
473 | * @prcm: PRCM data pertaining to this hwmod | 471 | * @prcm: PRCM data pertaining to this hwmod |
474 | * @main_clk: main clock: OMAP clock name | 472 | * @main_clk: main clock: OMAP clock name |
475 | * @_clk: pointer to the main struct clk (filled in at runtime) | 473 | * @_clk: pointer to the main struct clk (filled in at runtime) |
@@ -482,8 +480,6 @@ struct omap_hwmod_class { | |||
482 | * @_sysc_cache: internal-use hwmod flags | 480 | * @_sysc_cache: internal-use hwmod flags |
483 | * @_mpu_rt_va: cached register target start address (internal use) | 481 | * @_mpu_rt_va: cached register target start address (internal use) |
484 | * @_mpu_port_index: cached MPU register target slave ID (internal use) | 482 | * @_mpu_port_index: cached MPU register target slave ID (internal use) |
485 | * @mpu_irqs_cnt: number of @mpu_irqs | ||
486 | * @sdma_reqs_cnt: number of @sdma_reqs | ||
487 | * @opt_clks_cnt: number of @opt_clks | 483 | * @opt_clks_cnt: number of @opt_clks |
488 | * @master_cnt: number of @master entries | 484 | * @master_cnt: number of @master entries |
489 | * @slaves_cnt: number of @slave entries | 485 | * @slaves_cnt: number of @slave entries |
@@ -531,8 +527,6 @@ struct omap_hwmod { | |||
531 | u16 flags; | 527 | u16 flags; |
532 | u8 _mpu_port_index; | 528 | u8 _mpu_port_index; |
533 | u8 response_lat; | 529 | u8 response_lat; |
534 | u8 mpu_irqs_cnt; | ||
535 | u8 sdma_reqs_cnt; | ||
536 | u8 rst_lines_cnt; | 530 | u8 rst_lines_cnt; |
537 | u8 opt_clks_cnt; | 531 | u8 opt_clks_cnt; |
538 | u8 masters_cnt; | 532 | u8 masters_cnt; |
@@ -572,6 +566,7 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh); | |||
572 | 566 | ||
573 | void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs); | 567 | void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs); |
574 | u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs); | 568 | u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs); |
569 | int omap_hwmod_softreset(struct omap_hwmod *oh); | ||
575 | 570 | ||
576 | int omap_hwmod_count_resources(struct omap_hwmod *oh); | 571 | int omap_hwmod_count_resources(struct omap_hwmod *oh); |
577 | int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res); | 572 | int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res); |
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index 455eadcd820c..6c62af108710 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c | |||
@@ -869,9 +869,6 @@ void omap_mcbsp_start(unsigned int id, int tx, int rx) | |||
869 | if (cpu_is_omap34xx()) | 869 | if (cpu_is_omap34xx()) |
870 | omap_st_start(mcbsp); | 870 | omap_st_start(mcbsp); |
871 | 871 | ||
872 | mcbsp->rx_word_length = (MCBSP_READ_CACHE(mcbsp, RCR1) >> 5) & 0x7; | ||
873 | mcbsp->tx_word_length = (MCBSP_READ_CACHE(mcbsp, XCR1) >> 5) & 0x7; | ||
874 | |||
875 | /* Only enable SRG, if McBSP is master */ | 872 | /* Only enable SRG, if McBSP is master */ |
876 | w = MCBSP_READ_CACHE(mcbsp, PCR0); | 873 | w = MCBSP_READ_CACHE(mcbsp, PCR0); |
877 | if (w & (FSXM | FSRM | CLKXM | CLKRM)) | 874 | if (w & (FSXM | FSRM | CLKXM | CLKRM)) |
@@ -969,6 +966,33 @@ void omap_mcbsp_stop(unsigned int id, int tx, int rx) | |||
969 | } | 966 | } |
970 | EXPORT_SYMBOL(omap_mcbsp_stop); | 967 | EXPORT_SYMBOL(omap_mcbsp_stop); |
971 | 968 | ||
969 | /* | ||
970 | * The following functions are only required on an OMAP1-only build. | ||
971 | * mach-omap2/mcbsp.c contains the real functions | ||
972 | */ | ||
973 | #ifndef CONFIG_ARCH_OMAP2PLUS | ||
974 | int omap2_mcbsp_set_clks_src(u8 id, u8 fck_src_id) | ||
975 | { | ||
976 | WARN(1, "%s: should never be called on an OMAP1-only kernel\n", | ||
977 | __func__); | ||
978 | return -EINVAL; | ||
979 | } | ||
980 | |||
981 | void omap2_mcbsp1_mux_clkr_src(u8 mux) | ||
982 | { | ||
983 | WARN(1, "%s: should never be called on an OMAP1-only kernel\n", | ||
984 | __func__); | ||
985 | return; | ||
986 | } | ||
987 | |||
988 | void omap2_mcbsp1_mux_fsr_src(u8 mux) | ||
989 | { | ||
990 | WARN(1, "%s: should never be called on an OMAP1-only kernel\n", | ||
991 | __func__); | ||
992 | return; | ||
993 | } | ||
994 | #endif | ||
995 | |||
972 | #ifdef CONFIG_ARCH_OMAP3 | 996 | #ifdef CONFIG_ARCH_OMAP3 |
973 | #define max_thres(m) (mcbsp->pdata->buffer_size) | 997 | #define max_thres(m) (mcbsp->pdata->buffer_size) |
974 | #define valid_threshold(m, val) ((val) <= max_thres(m)) | 998 | #define valid_threshold(m, val) ((val) <= max_thres(m)) |
diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index 49fc0df0c21f..c8b9cd1716ba 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c | |||
@@ -236,11 +236,6 @@ static int _omap_device_deactivate(struct omap_device *od, u8 ignore_lat) | |||
236 | return 0; | 236 | return 0; |
237 | } | 237 | } |
238 | 238 | ||
239 | static inline struct omap_device *_find_by_pdev(struct platform_device *pdev) | ||
240 | { | ||
241 | return container_of(pdev, struct omap_device, pdev); | ||
242 | } | ||
243 | |||
244 | /** | 239 | /** |
245 | * _add_optional_clock_clkdev - Add clkdev entry for hwmod optional clocks | 240 | * _add_optional_clock_clkdev - Add clkdev entry for hwmod optional clocks |
246 | * @od: struct omap_device *od | 241 | * @od: struct omap_device *od |
@@ -316,7 +311,7 @@ u32 omap_device_get_context_loss_count(struct platform_device *pdev) | |||
316 | struct omap_device *od; | 311 | struct omap_device *od; |
317 | u32 ret = 0; | 312 | u32 ret = 0; |
318 | 313 | ||
319 | od = _find_by_pdev(pdev); | 314 | od = to_omap_device(pdev); |
320 | 315 | ||
321 | if (od->hwmods_cnt) | 316 | if (od->hwmods_cnt) |
322 | ret = omap_hwmod_get_context_loss_count(od->hwmods[0]); | 317 | ret = omap_hwmod_get_context_loss_count(od->hwmods[0]); |
@@ -611,7 +606,7 @@ int omap_device_enable(struct platform_device *pdev) | |||
611 | int ret; | 606 | int ret; |
612 | struct omap_device *od; | 607 | struct omap_device *od; |
613 | 608 | ||
614 | od = _find_by_pdev(pdev); | 609 | od = to_omap_device(pdev); |
615 | 610 | ||
616 | if (od->_state == OMAP_DEVICE_STATE_ENABLED) { | 611 | if (od->_state == OMAP_DEVICE_STATE_ENABLED) { |
617 | WARN(1, "omap_device: %s.%d: %s() called from invalid state %d\n", | 612 | WARN(1, "omap_device: %s.%d: %s() called from invalid state %d\n", |
@@ -650,7 +645,7 @@ int omap_device_idle(struct platform_device *pdev) | |||
650 | int ret; | 645 | int ret; |
651 | struct omap_device *od; | 646 | struct omap_device *od; |
652 | 647 | ||
653 | od = _find_by_pdev(pdev); | 648 | od = to_omap_device(pdev); |
654 | 649 | ||
655 | if (od->_state != OMAP_DEVICE_STATE_ENABLED) { | 650 | if (od->_state != OMAP_DEVICE_STATE_ENABLED) { |
656 | WARN(1, "omap_device: %s.%d: %s() called from invalid state %d\n", | 651 | WARN(1, "omap_device: %s.%d: %s() called from invalid state %d\n", |
@@ -681,7 +676,7 @@ int omap_device_shutdown(struct platform_device *pdev) | |||
681 | int ret, i; | 676 | int ret, i; |
682 | struct omap_device *od; | 677 | struct omap_device *od; |
683 | 678 | ||
684 | od = _find_by_pdev(pdev); | 679 | od = to_omap_device(pdev); |
685 | 680 | ||
686 | if (od->_state != OMAP_DEVICE_STATE_ENABLED && | 681 | if (od->_state != OMAP_DEVICE_STATE_ENABLED && |
687 | od->_state != OMAP_DEVICE_STATE_IDLE) { | 682 | od->_state != OMAP_DEVICE_STATE_IDLE) { |
@@ -722,7 +717,7 @@ int omap_device_align_pm_lat(struct platform_device *pdev, | |||
722 | int ret = -EINVAL; | 717 | int ret = -EINVAL; |
723 | struct omap_device *od; | 718 | struct omap_device *od; |
724 | 719 | ||
725 | od = _find_by_pdev(pdev); | 720 | od = to_omap_device(pdev); |
726 | 721 | ||
727 | if (new_wakeup_lat_limit == od->dev_wakeup_lat) | 722 | if (new_wakeup_lat_limit == od->dev_wakeup_lat) |
728 | return 0; | 723 | return 0; |