diff options
author | Arnd Bergmann <arnd@arndb.de> | 2011-10-31 09:07:51 -0400 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2011-10-31 09:07:51 -0400 |
commit | 86c1e5a74af11e4817ffa6d7748d9ac1353b5b53 (patch) | |
tree | 377327a40452c4282787f49456122bf1753a0255 /arch/arm/plat-omap/include | |
parent | 6a8d2e2b504ce3d12cfa3934f545c9415441a5c3 (diff) | |
parent | 3ae3e253db7385238dd9d6c67c085afa3e770a56 (diff) |
Merge branch 'omap/dt' into next/dt
Diffstat (limited to 'arch/arm/plat-omap/include')
-rw-r--r-- | arch/arm/plat-omap/include/plat/clock.h | 2 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/common.h | 13 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/cpu.h | 108 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/dmtimer.h | 233 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/io.h | 6 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/mcbsp.h | 208 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap_device.h | 31 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/omap_hwmod.h | 3 | ||||
-rw-r--r-- | arch/arm/plat-omap/include/plat/voltage.h | 20 |
9 files changed, 292 insertions, 332 deletions
diff --git a/arch/arm/plat-omap/include/plat/clock.h b/arch/arm/plat-omap/include/plat/clock.h index df4b9683f17f..197ca03c3f7d 100644 --- a/arch/arm/plat-omap/include/plat/clock.h +++ b/arch/arm/plat-omap/include/plat/clock.h | |||
@@ -80,8 +80,6 @@ struct clkops { | |||
80 | * | 80 | * |
81 | * @div is the divisor that should be applied to the parent clock's rate | 81 | * @div is the divisor that should be applied to the parent clock's rate |
82 | * to produce the current clock's rate. | 82 | * to produce the current clock's rate. |
83 | * | ||
84 | * XXX @flags probably should be replaced with an struct omap_chip. | ||
85 | */ | 83 | */ |
86 | struct clksel_rate { | 84 | struct clksel_rate { |
87 | u32 val; | 85 | u32 val; |
diff --git a/arch/arm/plat-omap/include/plat/common.h b/arch/arm/plat-omap/include/plat/common.h index 4564cc697d7f..abda2c7e499b 100644 --- a/arch/arm/plat-omap/include/plat/common.h +++ b/arch/arm/plat-omap/include/plat/common.h | |||
@@ -45,6 +45,15 @@ extern unsigned long long notrace omap_32k_sched_clock(void); | |||
45 | 45 | ||
46 | extern void omap_reserve(void); | 46 | extern void omap_reserve(void); |
47 | 47 | ||
48 | void omap2420_init_early(void); | ||
49 | void omap2430_init_early(void); | ||
50 | void omap3430_init_early(void); | ||
51 | void omap35xx_init_early(void); | ||
52 | void omap3630_init_early(void); | ||
53 | void am35xx_init_early(void); | ||
54 | void ti816x_init_early(void); | ||
55 | void omap4430_init_early(void); | ||
56 | |||
48 | /* | 57 | /* |
49 | * IO bases for various OMAP processors | 58 | * IO bases for various OMAP processors |
50 | * Except the tap base, rest all the io bases | 59 | * Except the tap base, rest all the io bases |
@@ -74,7 +83,11 @@ void omap2_set_globals_sdrc(struct omap_globals *); | |||
74 | void omap2_set_globals_control(struct omap_globals *); | 83 | void omap2_set_globals_control(struct omap_globals *); |
75 | void omap2_set_globals_prcm(struct omap_globals *); | 84 | void omap2_set_globals_prcm(struct omap_globals *); |
76 | 85 | ||
86 | void omap242x_map_io(void); | ||
87 | void omap243x_map_io(void); | ||
77 | void omap3_map_io(void); | 88 | void omap3_map_io(void); |
89 | void omap4_map_io(void); | ||
90 | |||
78 | 91 | ||
79 | /** | 92 | /** |
80 | * omap_test_timeout - busy-loop, testing a condition | 93 | * omap_test_timeout - busy-loop, testing a condition |
diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h index 67b3d75884cd..2f9026942229 100644 --- a/arch/arm/plat-omap/include/plat/cpu.h +++ b/arch/arm/plat-omap/include/plat/cpu.h | |||
@@ -44,13 +44,6 @@ | |||
44 | 44 | ||
45 | int omap_type(void); | 45 | int omap_type(void); |
46 | 46 | ||
47 | struct omap_chip_id { | ||
48 | u16 oc; | ||
49 | u8 type; | ||
50 | }; | ||
51 | |||
52 | #define OMAP_CHIP_INIT(x) { .oc = x } | ||
53 | |||
54 | /* | 47 | /* |
55 | * omap_rev bits: | 48 | * omap_rev bits: |
56 | * CPU id bits (0730, 1510, 1710, 2422...) [31:16] | 49 | * CPU id bits (0730, 1510, 1710, 2422...) [31:16] |
@@ -60,19 +53,6 @@ struct omap_chip_id { | |||
60 | unsigned int omap_rev(void); | 53 | unsigned int omap_rev(void); |
61 | 54 | ||
62 | /* | 55 | /* |
63 | * Define CPU revision bits | ||
64 | * | ||
65 | * Verbose meaning of the revision bits may be different for a silicon | ||
66 | * family. This difference can be handled separately. | ||
67 | */ | ||
68 | #define OMAP_REVBITS_00 0x00 | ||
69 | #define OMAP_REVBITS_01 0x01 | ||
70 | #define OMAP_REVBITS_02 0x02 | ||
71 | #define OMAP_REVBITS_03 0x03 | ||
72 | #define OMAP_REVBITS_04 0x04 | ||
73 | #define OMAP_REVBITS_05 0x05 | ||
74 | |||
75 | /* | ||
76 | * Get the CPU revision for OMAP devices | 56 | * Get the CPU revision for OMAP devices |
77 | */ | 57 | */ |
78 | #define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff) | 58 | #define GET_OMAP_REVISION() ((omap_rev() >> 8) & 0xff) |
@@ -262,7 +242,7 @@ IS_OMAP_TYPE(2422, 0x2422) | |||
262 | IS_OMAP_TYPE(2423, 0x2423) | 242 | IS_OMAP_TYPE(2423, 0x2423) |
263 | IS_OMAP_TYPE(2430, 0x2430) | 243 | IS_OMAP_TYPE(2430, 0x2430) |
264 | IS_OMAP_TYPE(3430, 0x3430) | 244 | IS_OMAP_TYPE(3430, 0x3430) |
265 | IS_OMAP_TYPE(3505, 0x3505) | 245 | IS_OMAP_TYPE(3505, 0x3517) |
266 | IS_OMAP_TYPE(3517, 0x3517) | 246 | IS_OMAP_TYPE(3517, 0x3517) |
267 | 247 | ||
268 | #define cpu_is_omap310() 0 | 248 | #define cpu_is_omap310() 0 |
@@ -354,8 +334,9 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
354 | (!omap3_has_sgx()) && \ | 334 | (!omap3_has_sgx()) && \ |
355 | (omap3_has_iva())) | 335 | (omap3_has_iva())) |
356 | # define cpu_is_omap3530() (cpu_is_omap3430()) | 336 | # define cpu_is_omap3530() (cpu_is_omap3430()) |
357 | # define cpu_is_omap3505() is_omap3505() | ||
358 | # define cpu_is_omap3517() is_omap3517() | 337 | # define cpu_is_omap3517() is_omap3517() |
338 | # define cpu_is_omap3505() (cpu_is_omap3517() && \ | ||
339 | !omap3_has_sgx()) | ||
359 | # undef cpu_is_omap3630 | 340 | # undef cpu_is_omap3630 |
360 | # define cpu_is_omap3630() is_omap363x() | 341 | # define cpu_is_omap3630() is_omap363x() |
361 | # define cpu_is_ti816x() is_ti816x() | 342 | # define cpu_is_ti816x() is_ti816x() |
@@ -379,35 +360,31 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
379 | /* Various silicon revisions for omap2 */ | 360 | /* Various silicon revisions for omap2 */ |
380 | #define OMAP242X_CLASS 0x24200024 | 361 | #define OMAP242X_CLASS 0x24200024 |
381 | #define OMAP2420_REV_ES1_0 OMAP242X_CLASS | 362 | #define OMAP2420_REV_ES1_0 OMAP242X_CLASS |
382 | #define OMAP2420_REV_ES2_0 (OMAP242X_CLASS | (OMAP_REVBITS_01 << 8)) | 363 | #define OMAP2420_REV_ES2_0 (OMAP242X_CLASS | (0x1 << 8)) |
383 | 364 | ||
384 | #define OMAP243X_CLASS 0x24300024 | 365 | #define OMAP243X_CLASS 0x24300024 |
385 | #define OMAP2430_REV_ES1_0 OMAP243X_CLASS | 366 | #define OMAP2430_REV_ES1_0 OMAP243X_CLASS |
386 | 367 | ||
387 | #define OMAP343X_CLASS 0x34300034 | 368 | #define OMAP343X_CLASS 0x34300034 |
388 | #define OMAP3430_REV_ES1_0 OMAP343X_CLASS | 369 | #define OMAP3430_REV_ES1_0 OMAP343X_CLASS |
389 | #define OMAP3430_REV_ES2_0 (OMAP343X_CLASS | (OMAP_REVBITS_01 << 8)) | 370 | #define OMAP3430_REV_ES2_0 (OMAP343X_CLASS | (0x1 << 8)) |
390 | #define OMAP3430_REV_ES2_1 (OMAP343X_CLASS | (OMAP_REVBITS_02 << 8)) | 371 | #define OMAP3430_REV_ES2_1 (OMAP343X_CLASS | (0x2 << 8)) |
391 | #define OMAP3430_REV_ES3_0 (OMAP343X_CLASS | (OMAP_REVBITS_03 << 8)) | 372 | #define OMAP3430_REV_ES3_0 (OMAP343X_CLASS | (0x3 << 8)) |
392 | #define OMAP3430_REV_ES3_1 (OMAP343X_CLASS | (OMAP_REVBITS_04 << 8)) | 373 | #define OMAP3430_REV_ES3_1 (OMAP343X_CLASS | (0x4 << 8)) |
393 | #define OMAP3430_REV_ES3_1_2 (OMAP343X_CLASS | (OMAP_REVBITS_05 << 8)) | 374 | #define OMAP3430_REV_ES3_1_2 (OMAP343X_CLASS | (0x5 << 8)) |
394 | 375 | ||
395 | #define OMAP363X_CLASS 0x36300034 | 376 | #define OMAP363X_CLASS 0x36300034 |
396 | #define OMAP3630_REV_ES1_0 OMAP363X_CLASS | 377 | #define OMAP3630_REV_ES1_0 OMAP363X_CLASS |
397 | #define OMAP3630_REV_ES1_1 (OMAP363X_CLASS | (OMAP_REVBITS_01 << 8)) | 378 | #define OMAP3630_REV_ES1_1 (OMAP363X_CLASS | (0x1 << 8)) |
398 | #define OMAP3630_REV_ES1_2 (OMAP363X_CLASS | (OMAP_REVBITS_02 << 8)) | 379 | #define OMAP3630_REV_ES1_2 (OMAP363X_CLASS | (0x2 << 8)) |
399 | 380 | ||
400 | #define OMAP35XX_CLASS 0x35000034 | 381 | #define OMAP3517_CLASS 0x35170034 |
401 | #define OMAP3503_REV(v) (OMAP35XX_CLASS | (0x3503 << 16) | (v << 8)) | 382 | #define OMAP3517_REV_ES1_0 OMAP3517_CLASS |
402 | #define OMAP3515_REV(v) (OMAP35XX_CLASS | (0x3515 << 16) | (v << 8)) | 383 | #define OMAP3517_REV_ES1_1 (OMAP3517_CLASS | (0x1 << 8)) |
403 | #define OMAP3525_REV(v) (OMAP35XX_CLASS | (0x3525 << 16) | (v << 8)) | ||
404 | #define OMAP3530_REV(v) (OMAP35XX_CLASS | (0x3530 << 16) | (v << 8)) | ||
405 | #define OMAP3505_REV(v) (OMAP35XX_CLASS | (0x3505 << 16) | (v << 8)) | ||
406 | #define OMAP3517_REV(v) (OMAP35XX_CLASS | (0x3517 << 16) | (v << 8)) | ||
407 | 384 | ||
408 | #define TI816X_CLASS 0x81600034 | 385 | #define TI816X_CLASS 0x81600034 |
409 | #define TI8168_REV_ES1_0 TI816X_CLASS | 386 | #define TI8168_REV_ES1_0 TI816X_CLASS |
410 | #define TI8168_REV_ES1_1 (TI816X_CLASS | (OMAP_REVBITS_01 << 8)) | 387 | #define TI8168_REV_ES1_1 (TI816X_CLASS | (0x1 << 8)) |
411 | 388 | ||
412 | #define OMAP443X_CLASS 0x44300044 | 389 | #define OMAP443X_CLASS 0x44300044 |
413 | #define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8)) | 390 | #define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8)) |
@@ -418,61 +395,6 @@ IS_OMAP_TYPE(3517, 0x3517) | |||
418 | #define OMAP446X_CLASS 0x44600044 | 395 | #define OMAP446X_CLASS 0x44600044 |
419 | #define OMAP4460_REV_ES1_0 (OMAP446X_CLASS | (0x10 << 8)) | 396 | #define OMAP4460_REV_ES1_0 (OMAP446X_CLASS | (0x10 << 8)) |
420 | 397 | ||
421 | /* | ||
422 | * omap_chip bits | ||
423 | * | ||
424 | * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is | ||
425 | * valid on all chips of that type. CHIP_IS_OMAP3430ES{1,2} indicates | ||
426 | * something that is only valid on that particular ES revision. | ||
427 | * | ||
428 | * These bits may be ORed together to indicate structures that are | ||
429 | * available on multiple chip types. | ||
430 | * | ||
431 | * To test whether a particular structure matches the current OMAP chip type, | ||
432 | * use omap_chip_is(). | ||
433 | * | ||
434 | */ | ||
435 | #define CHIP_IS_OMAP2420 (1 << 0) | ||
436 | #define CHIP_IS_OMAP2430 (1 << 1) | ||
437 | #define CHIP_IS_OMAP3430 (1 << 2) | ||
438 | #define CHIP_IS_OMAP3430ES1 (1 << 3) | ||
439 | #define CHIP_IS_OMAP3430ES2 (1 << 4) | ||
440 | #define CHIP_IS_OMAP3430ES3_0 (1 << 5) | ||
441 | #define CHIP_IS_OMAP3430ES3_1 (1 << 6) | ||
442 | #define CHIP_IS_OMAP3630ES1 (1 << 7) | ||
443 | #define CHIP_IS_OMAP4430ES1 (1 << 8) | ||
444 | #define CHIP_IS_OMAP3630ES1_1 (1 << 9) | ||
445 | #define CHIP_IS_OMAP3630ES1_2 (1 << 10) | ||
446 | #define CHIP_IS_OMAP4430ES2 (1 << 11) | ||
447 | #define CHIP_IS_OMAP4430ES2_1 (1 << 12) | ||
448 | #define CHIP_IS_OMAP4430ES2_2 (1 << 13) | ||
449 | #define CHIP_IS_TI816X (1 << 14) | ||
450 | #define CHIP_IS_OMAP4460ES1_0 (1 << 15) | ||
451 | |||
452 | #define CHIP_IS_OMAP24XX (CHIP_IS_OMAP2420 | CHIP_IS_OMAP2430) | ||
453 | |||
454 | #define CHIP_IS_OMAP4430 (CHIP_IS_OMAP4430ES1 | \ | ||
455 | CHIP_IS_OMAP4430ES2 | \ | ||
456 | CHIP_IS_OMAP4430ES2_1 | \ | ||
457 | CHIP_IS_OMAP4430ES2_2 | \ | ||
458 | CHIP_IS_OMAP4460ES1_0) | ||
459 | |||
460 | /* | ||
461 | * "GE" here represents "greater than or equal to" in terms of ES | ||
462 | * levels. So CHIP_GE_OMAP3430ES2 is intended to match all OMAP3430 | ||
463 | * chips at ES2 and beyond, but not, for example, any OMAP lines after | ||
464 | * OMAP3. | ||
465 | */ | ||
466 | #define CHIP_GE_OMAP3430ES2 (CHIP_IS_OMAP3430ES2 | \ | ||
467 | CHIP_IS_OMAP3430ES3_0 | \ | ||
468 | CHIP_GE_OMAP3430ES3_1) | ||
469 | #define CHIP_GE_OMAP3430ES3_1 (CHIP_IS_OMAP3430ES3_1 | \ | ||
470 | CHIP_IS_OMAP3630ES1 | \ | ||
471 | CHIP_GE_OMAP3630ES1_1) | ||
472 | #define CHIP_GE_OMAP3630ES1_1 (CHIP_IS_OMAP3630ES1_1 | \ | ||
473 | CHIP_IS_OMAP3630ES1_2) | ||
474 | |||
475 | int omap_chip_is(struct omap_chip_id oci); | ||
476 | void omap2_check_revision(void); | 398 | void omap2_check_revision(void); |
477 | 399 | ||
478 | /* | 400 | /* |
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index eb5d16c60cd9..d11025e6e7a4 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * arch/arm/plat-omap/include/mach/dmtimer.h | 2 | * arch/arm/plat-omap/include/plat/dmtimer.h |
3 | * | 3 | * |
4 | * OMAP Dual-Mode Timers | 4 | * OMAP Dual-Mode Timers |
5 | * | 5 | * |
@@ -35,6 +35,7 @@ | |||
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 | #include <linux/io.h> |
38 | #include <linux/platform_device.h> | ||
38 | 39 | ||
39 | #ifndef __ASM_ARCH_DMTIMER_H | 40 | #ifndef __ASM_ARCH_DMTIMER_H |
40 | #define __ASM_ARCH_DMTIMER_H | 41 | #define __ASM_ARCH_DMTIMER_H |
@@ -59,12 +60,56 @@ | |||
59 | * in OMAP4 can be distinguished. | 60 | * in OMAP4 can be distinguished. |
60 | */ | 61 | */ |
61 | #define OMAP_TIMER_IP_VERSION_1 0x1 | 62 | #define OMAP_TIMER_IP_VERSION_1 0x1 |
63 | |||
64 | /* timer capabilities used in hwmod database */ | ||
65 | #define OMAP_TIMER_SECURE 0x80000000 | ||
66 | #define OMAP_TIMER_ALWON 0x40000000 | ||
67 | #define OMAP_TIMER_HAS_PWM 0x20000000 | ||
68 | |||
69 | struct omap_timer_capability_dev_attr { | ||
70 | u32 timer_capability; | ||
71 | }; | ||
72 | |||
62 | struct omap_dm_timer; | 73 | struct omap_dm_timer; |
63 | struct clk; | 74 | struct clk; |
64 | 75 | ||
76 | struct timer_regs { | ||
77 | u32 tidr; | ||
78 | u32 tiocp_cfg; | ||
79 | u32 tistat; | ||
80 | u32 tisr; | ||
81 | u32 tier; | ||
82 | u32 twer; | ||
83 | u32 tclr; | ||
84 | u32 tcrr; | ||
85 | u32 tldr; | ||
86 | u32 ttrg; | ||
87 | u32 twps; | ||
88 | u32 tmar; | ||
89 | u32 tcar1; | ||
90 | u32 tsicr; | ||
91 | u32 tcar2; | ||
92 | u32 tpir; | ||
93 | u32 tnir; | ||
94 | u32 tcvr; | ||
95 | u32 tocr; | ||
96 | u32 towr; | ||
97 | }; | ||
98 | |||
99 | struct dmtimer_platform_data { | ||
100 | int (*set_timer_src)(struct platform_device *pdev, int source); | ||
101 | int timer_ip_version; | ||
102 | u32 needs_manual_reset:1; | ||
103 | bool reserved; | ||
104 | |||
105 | bool loses_context; | ||
106 | |||
107 | u32 (*get_context_loss_count)(struct device *dev); | ||
108 | }; | ||
109 | |||
65 | struct omap_dm_timer *omap_dm_timer_request(void); | 110 | struct omap_dm_timer *omap_dm_timer_request(void); |
66 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); | 111 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); |
67 | void omap_dm_timer_free(struct omap_dm_timer *timer); | 112 | int omap_dm_timer_free(struct omap_dm_timer *timer); |
68 | void omap_dm_timer_enable(struct omap_dm_timer *timer); | 113 | void omap_dm_timer_enable(struct omap_dm_timer *timer); |
69 | void omap_dm_timer_disable(struct omap_dm_timer *timer); | 114 | void omap_dm_timer_disable(struct omap_dm_timer *timer); |
70 | 115 | ||
@@ -73,23 +118,23 @@ int omap_dm_timer_get_irq(struct omap_dm_timer *timer); | |||
73 | u32 omap_dm_timer_modify_idlect_mask(u32 inputmask); | 118 | u32 omap_dm_timer_modify_idlect_mask(u32 inputmask); |
74 | struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer); | 119 | struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer); |
75 | 120 | ||
76 | void omap_dm_timer_trigger(struct omap_dm_timer *timer); | 121 | int omap_dm_timer_trigger(struct omap_dm_timer *timer); |
77 | void omap_dm_timer_start(struct omap_dm_timer *timer); | 122 | int omap_dm_timer_start(struct omap_dm_timer *timer); |
78 | void omap_dm_timer_stop(struct omap_dm_timer *timer); | 123 | int omap_dm_timer_stop(struct omap_dm_timer *timer); |
79 | 124 | ||
80 | int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source); | 125 | int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source); |
81 | void omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, unsigned int value); | 126 | int omap_dm_timer_set_load(struct omap_dm_timer *timer, int autoreload, unsigned int value); |
82 | void omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload, unsigned int value); | 127 | int omap_dm_timer_set_load_start(struct omap_dm_timer *timer, int autoreload, unsigned int value); |
83 | void omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable, unsigned int match); | 128 | int omap_dm_timer_set_match(struct omap_dm_timer *timer, int enable, unsigned int match); |
84 | void omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, int trigger); | 129 | int omap_dm_timer_set_pwm(struct omap_dm_timer *timer, int def_on, int toggle, int trigger); |
85 | void omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler); | 130 | int omap_dm_timer_set_prescaler(struct omap_dm_timer *timer, int prescaler); |
86 | 131 | ||
87 | void omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value); | 132 | int omap_dm_timer_set_int_enable(struct omap_dm_timer *timer, unsigned int value); |
88 | 133 | ||
89 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer); | 134 | unsigned int omap_dm_timer_read_status(struct omap_dm_timer *timer); |
90 | void omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value); | 135 | int omap_dm_timer_write_status(struct omap_dm_timer *timer, unsigned int value); |
91 | unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer); | 136 | unsigned int omap_dm_timer_read_counter(struct omap_dm_timer *timer); |
92 | void omap_dm_timer_write_counter(struct omap_dm_timer *timer, unsigned int value); | 137 | int omap_dm_timer_write_counter(struct omap_dm_timer *timer, unsigned int value); |
93 | 138 | ||
94 | int omap_dm_timers_active(void); | 139 | int omap_dm_timers_active(void); |
95 | 140 | ||
@@ -98,12 +143,30 @@ int omap_dm_timers_active(void); | |||
98 | * used by dmtimer.c and sys_timer related code. | 143 | * used by dmtimer.c and sys_timer related code. |
99 | */ | 144 | */ |
100 | 145 | ||
101 | /* register offsets */ | 146 | /* |
102 | #define _OMAP_TIMER_ID_OFFSET 0x00 | 147 | * The interrupt registers are different between v1 and v2 ip. |
103 | #define _OMAP_TIMER_OCP_CFG_OFFSET 0x10 | 148 | * These registers are offsets from timer->iobase. |
104 | #define _OMAP_TIMER_SYS_STAT_OFFSET 0x14 | 149 | */ |
105 | #define _OMAP_TIMER_STAT_OFFSET 0x18 | 150 | #define OMAP_TIMER_ID_OFFSET 0x00 |
106 | #define _OMAP_TIMER_INT_EN_OFFSET 0x1c | 151 | #define OMAP_TIMER_OCP_CFG_OFFSET 0x10 |
152 | |||
153 | #define OMAP_TIMER_V1_SYS_STAT_OFFSET 0x14 | ||
154 | #define OMAP_TIMER_V1_STAT_OFFSET 0x18 | ||
155 | #define OMAP_TIMER_V1_INT_EN_OFFSET 0x1c | ||
156 | |||
157 | #define OMAP_TIMER_V2_IRQSTATUS_RAW 0x24 | ||
158 | #define OMAP_TIMER_V2_IRQSTATUS 0x28 | ||
159 | #define OMAP_TIMER_V2_IRQENABLE_SET 0x2c | ||
160 | #define OMAP_TIMER_V2_IRQENABLE_CLR 0x30 | ||
161 | |||
162 | /* | ||
163 | * The functional registers have a different base on v1 and v2 ip. | ||
164 | * These registers are offsets from timer->func_base. The func_base | ||
165 | * is samae as io_base for v1 and io_base + 0x14 for v2 ip. | ||
166 | * | ||
167 | */ | ||
168 | #define OMAP_TIMER_V2_FUNC_OFFSET 0x14 | ||
169 | |||
107 | #define _OMAP_TIMER_WAKEUP_EN_OFFSET 0x20 | 170 | #define _OMAP_TIMER_WAKEUP_EN_OFFSET 0x20 |
108 | #define _OMAP_TIMER_CTRL_OFFSET 0x24 | 171 | #define _OMAP_TIMER_CTRL_OFFSET 0x24 |
109 | #define OMAP_TIMER_CTRL_GPOCFG (1 << 14) | 172 | #define OMAP_TIMER_CTRL_GPOCFG (1 << 14) |
@@ -147,21 +210,6 @@ int omap_dm_timers_active(void); | |||
147 | /* register offsets with the write pending bit encoded */ | 210 | /* register offsets with the write pending bit encoded */ |
148 | #define WPSHIFT 16 | 211 | #define WPSHIFT 16 |
149 | 212 | ||
150 | #define OMAP_TIMER_ID_REG (_OMAP_TIMER_ID_OFFSET \ | ||
151 | | (WP_NONE << WPSHIFT)) | ||
152 | |||
153 | #define OMAP_TIMER_OCP_CFG_REG (_OMAP_TIMER_OCP_CFG_OFFSET \ | ||
154 | | (WP_NONE << WPSHIFT)) | ||
155 | |||
156 | #define OMAP_TIMER_SYS_STAT_REG (_OMAP_TIMER_SYS_STAT_OFFSET \ | ||
157 | | (WP_NONE << WPSHIFT)) | ||
158 | |||
159 | #define OMAP_TIMER_STAT_REG (_OMAP_TIMER_STAT_OFFSET \ | ||
160 | | (WP_NONE << WPSHIFT)) | ||
161 | |||
162 | #define OMAP_TIMER_INT_EN_REG (_OMAP_TIMER_INT_EN_OFFSET \ | ||
163 | | (WP_NONE << WPSHIFT)) | ||
164 | |||
165 | #define OMAP_TIMER_WAKEUP_EN_REG (_OMAP_TIMER_WAKEUP_EN_OFFSET \ | 213 | #define OMAP_TIMER_WAKEUP_EN_REG (_OMAP_TIMER_WAKEUP_EN_OFFSET \ |
166 | | (WP_NONE << WPSHIFT)) | 214 | | (WP_NONE << WPSHIFT)) |
167 | 215 | ||
@@ -209,49 +257,88 @@ int omap_dm_timers_active(void); | |||
209 | 257 | ||
210 | struct omap_dm_timer { | 258 | struct omap_dm_timer { |
211 | unsigned long phys_base; | 259 | unsigned long phys_base; |
260 | int id; | ||
212 | int irq; | 261 | int irq; |
213 | #ifdef CONFIG_ARCH_OMAP2PLUS | ||
214 | struct clk *iclk, *fclk; | 262 | struct clk *iclk, *fclk; |
215 | #endif | 263 | |
216 | void __iomem *io_base; | 264 | void __iomem *io_base; |
265 | void __iomem *sys_stat; /* TISTAT timer status */ | ||
266 | void __iomem *irq_stat; /* TISR/IRQSTATUS interrupt status */ | ||
267 | void __iomem *irq_ena; /* irq enable */ | ||
268 | void __iomem *irq_dis; /* irq disable, only on v2 ip */ | ||
269 | void __iomem *pend; /* write pending */ | ||
270 | void __iomem *func_base; /* function register base */ | ||
271 | |||
217 | unsigned long rate; | 272 | unsigned long rate; |
218 | unsigned reserved:1; | 273 | unsigned reserved:1; |
219 | unsigned enabled:1; | ||
220 | unsigned posted:1; | 274 | unsigned posted:1; |
275 | struct timer_regs context; | ||
276 | bool loses_context; | ||
277 | int ctx_loss_count; | ||
278 | int revision; | ||
279 | struct platform_device *pdev; | ||
280 | struct list_head node; | ||
281 | |||
282 | u32 (*get_context_loss_count)(struct device *dev); | ||
221 | }; | 283 | }; |
222 | 284 | ||
223 | extern u32 sys_timer_reserved; | 285 | int omap_dm_timer_prepare(struct omap_dm_timer *timer); |
224 | void omap_dm_timer_prepare(struct omap_dm_timer *timer); | ||
225 | 286 | ||
226 | static inline u32 __omap_dm_timer_read(void __iomem *base, u32 reg, | 287 | static inline u32 __omap_dm_timer_read(struct omap_dm_timer *timer, u32 reg, |
227 | int posted) | 288 | int posted) |
228 | { | 289 | { |
229 | if (posted) | 290 | if (posted) |
230 | while (__raw_readl(base + (OMAP_TIMER_WRITE_PEND_REG & 0xff)) | 291 | while (__raw_readl(timer->pend) & (reg >> WPSHIFT)) |
231 | & (reg >> WPSHIFT)) | ||
232 | cpu_relax(); | 292 | cpu_relax(); |
233 | 293 | ||
234 | return __raw_readl(base + (reg & 0xff)); | 294 | return __raw_readl(timer->func_base + (reg & 0xff)); |
235 | } | 295 | } |
236 | 296 | ||
237 | static inline void __omap_dm_timer_write(void __iomem *base, u32 reg, u32 val, | 297 | static inline void __omap_dm_timer_write(struct omap_dm_timer *timer, |
238 | int posted) | 298 | u32 reg, u32 val, int posted) |
239 | { | 299 | { |
240 | if (posted) | 300 | if (posted) |
241 | while (__raw_readl(base + (OMAP_TIMER_WRITE_PEND_REG & 0xff)) | 301 | while (__raw_readl(timer->pend) & (reg >> WPSHIFT)) |
242 | & (reg >> WPSHIFT)) | ||
243 | cpu_relax(); | 302 | cpu_relax(); |
244 | 303 | ||
245 | __raw_writel(val, base + (reg & 0xff)); | 304 | __raw_writel(val, timer->func_base + (reg & 0xff)); |
305 | } | ||
306 | |||
307 | static inline void __omap_dm_timer_init_regs(struct omap_dm_timer *timer) | ||
308 | { | ||
309 | u32 tidr; | ||
310 | |||
311 | /* Assume v1 ip if bits [31:16] are zero */ | ||
312 | tidr = __raw_readl(timer->io_base); | ||
313 | if (!(tidr >> 16)) { | ||
314 | timer->revision = 1; | ||
315 | timer->sys_stat = timer->io_base + | ||
316 | OMAP_TIMER_V1_SYS_STAT_OFFSET; | ||
317 | timer->irq_stat = timer->io_base + OMAP_TIMER_V1_STAT_OFFSET; | ||
318 | timer->irq_ena = timer->io_base + OMAP_TIMER_V1_INT_EN_OFFSET; | ||
319 | timer->irq_dis = 0; | ||
320 | timer->pend = timer->io_base + _OMAP_TIMER_WRITE_PEND_OFFSET; | ||
321 | timer->func_base = timer->io_base; | ||
322 | } else { | ||
323 | timer->revision = 2; | ||
324 | timer->sys_stat = 0; | ||
325 | timer->irq_stat = timer->io_base + OMAP_TIMER_V2_IRQSTATUS; | ||
326 | timer->irq_ena = timer->io_base + OMAP_TIMER_V2_IRQENABLE_SET; | ||
327 | timer->irq_dis = timer->io_base + OMAP_TIMER_V2_IRQENABLE_CLR; | ||
328 | timer->pend = timer->io_base + | ||
329 | _OMAP_TIMER_WRITE_PEND_OFFSET + | ||
330 | OMAP_TIMER_V2_FUNC_OFFSET; | ||
331 | timer->func_base = timer->io_base + OMAP_TIMER_V2_FUNC_OFFSET; | ||
332 | } | ||
246 | } | 333 | } |
247 | 334 | ||
248 | /* Assumes the source clock has been set by caller */ | 335 | /* Assumes the source clock has been set by caller */ |
249 | static inline void __omap_dm_timer_reset(void __iomem *base, int autoidle, | 336 | static inline void __omap_dm_timer_reset(struct omap_dm_timer *timer, |
250 | int wakeup) | 337 | int autoidle, int wakeup) |
251 | { | 338 | { |
252 | u32 l; | 339 | u32 l; |
253 | 340 | ||
254 | l = __omap_dm_timer_read(base, OMAP_TIMER_OCP_CFG_REG, 0); | 341 | l = __raw_readl(timer->io_base + OMAP_TIMER_OCP_CFG_OFFSET); |
255 | l |= 0x02 << 3; /* Set to smart-idle mode */ | 342 | l |= 0x02 << 3; /* Set to smart-idle mode */ |
256 | l |= 0x2 << 8; /* Set clock activity to perserve f-clock on idle */ | 343 | l |= 0x2 << 8; /* Set clock activity to perserve f-clock on idle */ |
257 | 344 | ||
@@ -261,10 +348,10 @@ static inline void __omap_dm_timer_reset(void __iomem *base, int autoidle, | |||
261 | if (wakeup) | 348 | if (wakeup) |
262 | l |= 1 << 2; | 349 | l |= 1 << 2; |
263 | 350 | ||
264 | __omap_dm_timer_write(base, OMAP_TIMER_OCP_CFG_REG, l, 0); | 351 | __raw_writel(l, timer->io_base + OMAP_TIMER_OCP_CFG_OFFSET); |
265 | 352 | ||
266 | /* Match hardware reset default of posted mode */ | 353 | /* Match hardware reset default of posted mode */ |
267 | __omap_dm_timer_write(base, OMAP_TIMER_IF_CTRL_REG, | 354 | __omap_dm_timer_write(timer, OMAP_TIMER_IF_CTRL_REG, |
268 | OMAP_TIMER_CTRL_POSTED, 0); | 355 | OMAP_TIMER_CTRL_POSTED, 0); |
269 | } | 356 | } |
270 | 357 | ||
@@ -286,18 +373,18 @@ static inline int __omap_dm_timer_set_source(struct clk *timer_fck, | |||
286 | return ret; | 373 | return ret; |
287 | } | 374 | } |
288 | 375 | ||
289 | static inline void __omap_dm_timer_stop(void __iomem *base, int posted, | 376 | static inline void __omap_dm_timer_stop(struct omap_dm_timer *timer, |
290 | unsigned long rate) | 377 | int posted, unsigned long rate) |
291 | { | 378 | { |
292 | u32 l; | 379 | u32 l; |
293 | 380 | ||
294 | l = __omap_dm_timer_read(base, OMAP_TIMER_CTRL_REG, posted); | 381 | l = __omap_dm_timer_read(timer, OMAP_TIMER_CTRL_REG, posted); |
295 | if (l & OMAP_TIMER_CTRL_ST) { | 382 | if (l & OMAP_TIMER_CTRL_ST) { |
296 | l &= ~0x1; | 383 | l &= ~0x1; |
297 | __omap_dm_timer_write(base, OMAP_TIMER_CTRL_REG, l, posted); | 384 | __omap_dm_timer_write(timer, OMAP_TIMER_CTRL_REG, l, posted); |
298 | #ifdef CONFIG_ARCH_OMAP2PLUS | 385 | #ifdef CONFIG_ARCH_OMAP2PLUS |
299 | /* Readback to make sure write has completed */ | 386 | /* Readback to make sure write has completed */ |
300 | __omap_dm_timer_read(base, OMAP_TIMER_CTRL_REG, posted); | 387 | __omap_dm_timer_read(timer, OMAP_TIMER_CTRL_REG, posted); |
301 | /* | 388 | /* |
302 | * Wait for functional clock period x 3.5 to make sure that | 389 | * Wait for functional clock period x 3.5 to make sure that |
303 | * timer is stopped | 390 | * timer is stopped |
@@ -307,34 +394,34 @@ static inline void __omap_dm_timer_stop(void __iomem *base, int posted, | |||
307 | } | 394 | } |
308 | 395 | ||
309 | /* Ack possibly pending interrupt */ | 396 | /* Ack possibly pending interrupt */ |
310 | __omap_dm_timer_write(base, OMAP_TIMER_STAT_REG, | 397 | __raw_writel(OMAP_TIMER_INT_OVERFLOW, timer->irq_stat); |
311 | OMAP_TIMER_INT_OVERFLOW, 0); | ||
312 | } | 398 | } |
313 | 399 | ||
314 | static inline void __omap_dm_timer_load_start(void __iomem *base, u32 ctrl, | 400 | static inline void __omap_dm_timer_load_start(struct omap_dm_timer *timer, |
315 | unsigned int load, int posted) | 401 | u32 ctrl, unsigned int load, |
402 | int posted) | ||
316 | { | 403 | { |
317 | __omap_dm_timer_write(base, OMAP_TIMER_COUNTER_REG, load, posted); | 404 | __omap_dm_timer_write(timer, OMAP_TIMER_COUNTER_REG, load, posted); |
318 | __omap_dm_timer_write(base, OMAP_TIMER_CTRL_REG, ctrl, posted); | 405 | __omap_dm_timer_write(timer, OMAP_TIMER_CTRL_REG, ctrl, posted); |
319 | } | 406 | } |
320 | 407 | ||
321 | static inline void __omap_dm_timer_int_enable(void __iomem *base, | 408 | static inline void __omap_dm_timer_int_enable(struct omap_dm_timer *timer, |
322 | unsigned int value) | 409 | unsigned int value) |
323 | { | 410 | { |
324 | __omap_dm_timer_write(base, OMAP_TIMER_INT_EN_REG, value, 0); | 411 | __raw_writel(value, timer->irq_ena); |
325 | __omap_dm_timer_write(base, OMAP_TIMER_WAKEUP_EN_REG, value, 0); | 412 | __omap_dm_timer_write(timer, OMAP_TIMER_WAKEUP_EN_REG, value, 0); |
326 | } | 413 | } |
327 | 414 | ||
328 | static inline unsigned int __omap_dm_timer_read_counter(void __iomem *base, | 415 | static inline unsigned int |
329 | int posted) | 416 | __omap_dm_timer_read_counter(struct omap_dm_timer *timer, int posted) |
330 | { | 417 | { |
331 | return __omap_dm_timer_read(base, OMAP_TIMER_COUNTER_REG, posted); | 418 | return __omap_dm_timer_read(timer, OMAP_TIMER_COUNTER_REG, posted); |
332 | } | 419 | } |
333 | 420 | ||
334 | static inline void __omap_dm_timer_write_status(void __iomem *base, | 421 | static inline void __omap_dm_timer_write_status(struct omap_dm_timer *timer, |
335 | unsigned int value) | 422 | unsigned int value) |
336 | { | 423 | { |
337 | __omap_dm_timer_write(base, OMAP_TIMER_STAT_REG, value, 0); | 424 | __raw_writel(value, timer->irq_stat); |
338 | } | 425 | } |
339 | 426 | ||
340 | #endif /* __ASM_ARCH_DMTIMER_H */ | 427 | #endif /* __ASM_ARCH_DMTIMER_H */ |
diff --git a/arch/arm/plat-omap/include/plat/io.h b/arch/arm/plat-omap/include/plat/io.h index d72ec85c97e6..6591875486d5 100644 --- a/arch/arm/plat-omap/include/plat/io.h +++ b/arch/arm/plat-omap/include/plat/io.h | |||
@@ -228,13 +228,13 @@ | |||
228 | 228 | ||
229 | #define OMAP44XX_EMIF2_PHYS OMAP44XX_EMIF2_BASE | 229 | #define OMAP44XX_EMIF2_PHYS OMAP44XX_EMIF2_BASE |
230 | /* 0x4d000000 --> 0xfd200000 */ | 230 | /* 0x4d000000 --> 0xfd200000 */ |
231 | #define OMAP44XX_EMIF2_VIRT (OMAP44XX_EMIF2_PHYS + OMAP4_L3_PER_IO_OFFSET) | ||
232 | #define OMAP44XX_EMIF2_SIZE SZ_1M | 231 | #define OMAP44XX_EMIF2_SIZE SZ_1M |
232 | #define OMAP44XX_EMIF2_VIRT (OMAP44XX_EMIF1_VIRT + OMAP44XX_EMIF1_SIZE) | ||
233 | 233 | ||
234 | #define OMAP44XX_DMM_PHYS OMAP44XX_DMM_BASE | 234 | #define OMAP44XX_DMM_PHYS OMAP44XX_DMM_BASE |
235 | /* 0x4e000000 --> 0xfd300000 */ | 235 | /* 0x4e000000 --> 0xfd300000 */ |
236 | #define OMAP44XX_DMM_VIRT (OMAP44XX_DMM_PHYS + OMAP4_L3_PER_IO_OFFSET) | ||
237 | #define OMAP44XX_DMM_SIZE SZ_1M | 236 | #define OMAP44XX_DMM_SIZE SZ_1M |
237 | #define OMAP44XX_DMM_VIRT (OMAP44XX_EMIF2_VIRT + OMAP44XX_EMIF2_SIZE) | ||
238 | /* | 238 | /* |
239 | * ---------------------------------------------------------------------------- | 239 | * ---------------------------------------------------------------------------- |
240 | * Omap specific register access | 240 | * Omap specific register access |
@@ -300,7 +300,7 @@ static inline void omap44xx_map_common_io(void) | |||
300 | #endif | 300 | #endif |
301 | 301 | ||
302 | extern void omap2_init_common_infrastructure(void); | 302 | extern void omap2_init_common_infrastructure(void); |
303 | extern void omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0, | 303 | extern void omap_sdrc_init(struct omap_sdrc_params *sdrc_cs0, |
304 | struct omap_sdrc_params *sdrc_cs1); | 304 | struct omap_sdrc_params *sdrc_cs1); |
305 | 305 | ||
306 | #define __arch_ioremap omap_ioremap | 306 | #define __arch_ioremap omap_ioremap |
diff --git a/arch/arm/plat-omap/include/plat/mcbsp.h b/arch/arm/plat-omap/include/plat/mcbsp.h index 9882c657b2d4..8fa74e2c9d6e 100644 --- a/arch/arm/plat-omap/include/plat/mcbsp.h +++ b/arch/arm/plat-omap/include/plat/mcbsp.h | |||
@@ -25,9 +25,7 @@ | |||
25 | #define __ASM_ARCH_OMAP_MCBSP_H | 25 | #define __ASM_ARCH_OMAP_MCBSP_H |
26 | 26 | ||
27 | #include <linux/spinlock.h> | 27 | #include <linux/spinlock.h> |
28 | 28 | #include <linux/clk.h> | |
29 | #include <mach/hardware.h> | ||
30 | #include <plat/clock.h> | ||
31 | 29 | ||
32 | /* macro for building platform_device for McBSP ports */ | 30 | /* macro for building platform_device for McBSP ports */ |
33 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ | 31 | #define OMAP_MCBSP_PLATFORM_DEVICE(port_nr) \ |
@@ -40,104 +38,60 @@ static struct platform_device omap_mcbsp##port_nr = { \ | |||
40 | #define MCBSP_CONFIG_TYPE3 0x3 | 38 | #define MCBSP_CONFIG_TYPE3 0x3 |
41 | #define MCBSP_CONFIG_TYPE4 0x4 | 39 | #define MCBSP_CONFIG_TYPE4 0x4 |
42 | 40 | ||
43 | #define OMAP7XX_MCBSP1_BASE 0xfffb1000 | 41 | /* McBSP register numbers. Register address offset = num * reg_step */ |
44 | #define OMAP7XX_MCBSP2_BASE 0xfffb1800 | 42 | enum { |
45 | 43 | /* Common registers */ | |
46 | #define OMAP1510_MCBSP1_BASE 0xe1011800 | 44 | OMAP_MCBSP_REG_SPCR2 = 4, |
47 | #define OMAP1510_MCBSP2_BASE 0xfffb1000 | 45 | OMAP_MCBSP_REG_SPCR1, |
48 | #define OMAP1510_MCBSP3_BASE 0xe1017000 | 46 | OMAP_MCBSP_REG_RCR2, |
49 | 47 | OMAP_MCBSP_REG_RCR1, | |
50 | #define OMAP1610_MCBSP1_BASE 0xe1011800 | 48 | OMAP_MCBSP_REG_XCR2, |
51 | #define OMAP1610_MCBSP2_BASE 0xfffb1000 | 49 | OMAP_MCBSP_REG_XCR1, |
52 | #define OMAP1610_MCBSP3_BASE 0xe1017000 | 50 | OMAP_MCBSP_REG_SRGR2, |
53 | 51 | OMAP_MCBSP_REG_SRGR1, | |
54 | #ifdef CONFIG_ARCH_OMAP1 | 52 | OMAP_MCBSP_REG_MCR2, |
55 | 53 | OMAP_MCBSP_REG_MCR1, | |
56 | #define OMAP_MCBSP_REG_DRR2 0x00 | 54 | OMAP_MCBSP_REG_RCERA, |
57 | #define OMAP_MCBSP_REG_DRR1 0x02 | 55 | OMAP_MCBSP_REG_RCERB, |
58 | #define OMAP_MCBSP_REG_DXR2 0x04 | 56 | OMAP_MCBSP_REG_XCERA, |
59 | #define OMAP_MCBSP_REG_DXR1 0x06 | 57 | OMAP_MCBSP_REG_XCERB, |
60 | #define OMAP_MCBSP_REG_DRR 0x02 | 58 | OMAP_MCBSP_REG_PCR0, |
61 | #define OMAP_MCBSP_REG_DXR 0x06 | 59 | OMAP_MCBSP_REG_RCERC, |
62 | #define OMAP_MCBSP_REG_SPCR2 0x08 | 60 | OMAP_MCBSP_REG_RCERD, |
63 | #define OMAP_MCBSP_REG_SPCR1 0x0a | 61 | OMAP_MCBSP_REG_XCERC, |
64 | #define OMAP_MCBSP_REG_RCR2 0x0c | 62 | OMAP_MCBSP_REG_XCERD, |
65 | #define OMAP_MCBSP_REG_RCR1 0x0e | 63 | OMAP_MCBSP_REG_RCERE, |
66 | #define OMAP_MCBSP_REG_XCR2 0x10 | 64 | OMAP_MCBSP_REG_RCERF, |
67 | #define OMAP_MCBSP_REG_XCR1 0x12 | 65 | OMAP_MCBSP_REG_XCERE, |
68 | #define OMAP_MCBSP_REG_SRGR2 0x14 | 66 | OMAP_MCBSP_REG_XCERF, |
69 | #define OMAP_MCBSP_REG_SRGR1 0x16 | 67 | OMAP_MCBSP_REG_RCERG, |
70 | #define OMAP_MCBSP_REG_MCR2 0x18 | 68 | OMAP_MCBSP_REG_RCERH, |
71 | #define OMAP_MCBSP_REG_MCR1 0x1a | 69 | OMAP_MCBSP_REG_XCERG, |
72 | #define OMAP_MCBSP_REG_RCERA 0x1c | 70 | OMAP_MCBSP_REG_XCERH, |
73 | #define OMAP_MCBSP_REG_RCERB 0x1e | 71 | |
74 | #define OMAP_MCBSP_REG_XCERA 0x20 | 72 | /* OMAP1-OMAP2420 registers */ |
75 | #define OMAP_MCBSP_REG_XCERB 0x22 | 73 | OMAP_MCBSP_REG_DRR2 = 0, |
76 | #define OMAP_MCBSP_REG_PCR0 0x24 | 74 | OMAP_MCBSP_REG_DRR1, |
77 | #define OMAP_MCBSP_REG_RCERC 0x26 | 75 | OMAP_MCBSP_REG_DXR2, |
78 | #define OMAP_MCBSP_REG_RCERD 0x28 | 76 | OMAP_MCBSP_REG_DXR1, |
79 | #define OMAP_MCBSP_REG_XCERC 0x2A | 77 | |
80 | #define OMAP_MCBSP_REG_XCERD 0x2C | 78 | /* OMAP2430 and onwards */ |
81 | #define OMAP_MCBSP_REG_RCERE 0x2E | 79 | OMAP_MCBSP_REG_DRR = 0, |
82 | #define OMAP_MCBSP_REG_RCERF 0x30 | 80 | OMAP_MCBSP_REG_DXR = 2, |
83 | #define OMAP_MCBSP_REG_XCERE 0x32 | 81 | OMAP_MCBSP_REG_SYSCON = 35, |
84 | #define OMAP_MCBSP_REG_XCERF 0x34 | 82 | OMAP_MCBSP_REG_THRSH2, |
85 | #define OMAP_MCBSP_REG_RCERG 0x36 | 83 | OMAP_MCBSP_REG_THRSH1, |
86 | #define OMAP_MCBSP_REG_RCERH 0x38 | 84 | OMAP_MCBSP_REG_IRQST = 40, |
87 | #define OMAP_MCBSP_REG_XCERG 0x3A | 85 | OMAP_MCBSP_REG_IRQEN, |
88 | #define OMAP_MCBSP_REG_XCERH 0x3C | 86 | OMAP_MCBSP_REG_WAKEUPEN, |
89 | 87 | OMAP_MCBSP_REG_XCCR, | |
90 | /* Dummy defines, these are not available on omap1 */ | 88 | OMAP_MCBSP_REG_RCCR, |
91 | #define OMAP_MCBSP_REG_XCCR 0x00 | 89 | OMAP_MCBSP_REG_XBUFFSTAT, |
92 | #define OMAP_MCBSP_REG_RCCR 0x00 | 90 | OMAP_MCBSP_REG_RBUFFSTAT, |
93 | 91 | OMAP_MCBSP_REG_SSELCR, | |
94 | #else | 92 | }; |
95 | |||
96 | #define OMAP_MCBSP_REG_DRR2 0x00 | ||
97 | #define OMAP_MCBSP_REG_DRR1 0x04 | ||
98 | #define OMAP_MCBSP_REG_DXR2 0x08 | ||
99 | #define OMAP_MCBSP_REG_DXR1 0x0C | ||
100 | #define OMAP_MCBSP_REG_DRR 0x00 | ||
101 | #define OMAP_MCBSP_REG_DXR 0x08 | ||
102 | #define OMAP_MCBSP_REG_SPCR2 0x10 | ||
103 | #define OMAP_MCBSP_REG_SPCR1 0x14 | ||
104 | #define OMAP_MCBSP_REG_RCR2 0x18 | ||
105 | #define OMAP_MCBSP_REG_RCR1 0x1C | ||
106 | #define OMAP_MCBSP_REG_XCR2 0x20 | ||
107 | #define OMAP_MCBSP_REG_XCR1 0x24 | ||
108 | #define OMAP_MCBSP_REG_SRGR2 0x28 | ||
109 | #define OMAP_MCBSP_REG_SRGR1 0x2C | ||
110 | #define OMAP_MCBSP_REG_MCR2 0x30 | ||
111 | #define OMAP_MCBSP_REG_MCR1 0x34 | ||
112 | #define OMAP_MCBSP_REG_RCERA 0x38 | ||
113 | #define OMAP_MCBSP_REG_RCERB 0x3C | ||
114 | #define OMAP_MCBSP_REG_XCERA 0x40 | ||
115 | #define OMAP_MCBSP_REG_XCERB 0x44 | ||
116 | #define OMAP_MCBSP_REG_PCR0 0x48 | ||
117 | #define OMAP_MCBSP_REG_RCERC 0x4C | ||
118 | #define OMAP_MCBSP_REG_RCERD 0x50 | ||
119 | #define OMAP_MCBSP_REG_XCERC 0x54 | ||
120 | #define OMAP_MCBSP_REG_XCERD 0x58 | ||
121 | #define OMAP_MCBSP_REG_RCERE 0x5C | ||
122 | #define OMAP_MCBSP_REG_RCERF 0x60 | ||
123 | #define OMAP_MCBSP_REG_XCERE 0x64 | ||
124 | #define OMAP_MCBSP_REG_XCERF 0x68 | ||
125 | #define OMAP_MCBSP_REG_RCERG 0x6C | ||
126 | #define OMAP_MCBSP_REG_RCERH 0x70 | ||
127 | #define OMAP_MCBSP_REG_XCERG 0x74 | ||
128 | #define OMAP_MCBSP_REG_XCERH 0x78 | ||
129 | #define OMAP_MCBSP_REG_SYSCON 0x8C | ||
130 | #define OMAP_MCBSP_REG_THRSH2 0x90 | ||
131 | #define OMAP_MCBSP_REG_THRSH1 0x94 | ||
132 | #define OMAP_MCBSP_REG_IRQST 0xA0 | ||
133 | #define OMAP_MCBSP_REG_IRQEN 0xA4 | ||
134 | #define OMAP_MCBSP_REG_WAKEUPEN 0xA8 | ||
135 | #define OMAP_MCBSP_REG_XCCR 0xAC | ||
136 | #define OMAP_MCBSP_REG_RCCR 0xB0 | ||
137 | #define OMAP_MCBSP_REG_XBUFFSTAT 0xB4 | ||
138 | #define OMAP_MCBSP_REG_RBUFFSTAT 0xB8 | ||
139 | #define OMAP_MCBSP_REG_SSELCR 0xBC | ||
140 | 93 | ||
94 | /* OMAP3 sidetone control registers */ | ||
141 | #define OMAP_ST_REG_REV 0x00 | 95 | #define OMAP_ST_REG_REV 0x00 |
142 | #define OMAP_ST_REG_SYSCONFIG 0x10 | 96 | #define OMAP_ST_REG_SYSCONFIG 0x10 |
143 | #define OMAP_ST_REG_IRQSTATUS 0x18 | 97 | #define OMAP_ST_REG_IRQSTATUS 0x18 |
@@ -146,8 +100,6 @@ static struct platform_device omap_mcbsp##port_nr = { \ | |||
146 | #define OMAP_ST_REG_SFIRCR 0x28 | 100 | #define OMAP_ST_REG_SFIRCR 0x28 |
147 | #define OMAP_ST_REG_SSELCR 0x2C | 101 | #define OMAP_ST_REG_SSELCR 0x2C |
148 | 102 | ||
149 | #endif | ||
150 | |||
151 | /************************** McBSP SPCR1 bit definitions ***********************/ | 103 | /************************** McBSP SPCR1 bit definitions ***********************/ |
152 | #define RRST 0x0001 | 104 | #define RRST 0x0001 |
153 | #define RRDY 0x0002 | 105 | #define RRDY 0x0002 |
@@ -344,20 +296,20 @@ typedef enum { | |||
344 | struct omap_mcbsp_ops { | 296 | struct omap_mcbsp_ops { |
345 | void (*request)(unsigned int); | 297 | void (*request)(unsigned int); |
346 | void (*free)(unsigned int); | 298 | void (*free)(unsigned int); |
347 | int (*set_clks_src)(u8, u8); | ||
348 | }; | 299 | }; |
349 | 300 | ||
350 | struct omap_mcbsp_platform_data { | 301 | struct omap_mcbsp_platform_data { |
351 | unsigned long phys_base; | ||
352 | u8 dma_rx_sync, dma_tx_sync; | ||
353 | u16 rx_irq, tx_irq; | ||
354 | struct omap_mcbsp_ops *ops; | 302 | struct omap_mcbsp_ops *ops; |
355 | #ifdef CONFIG_ARCH_OMAP3 | ||
356 | /* Sidetone block for McBSP 2 and 3 */ | ||
357 | unsigned long phys_base_st; | ||
358 | #endif | ||
359 | u16 buffer_size; | 303 | u16 buffer_size; |
360 | unsigned int mcbsp_config_type; | 304 | u8 reg_size; |
305 | u8 reg_step; | ||
306 | |||
307 | /* McBSP platform and instance specific features */ | ||
308 | bool has_wakeup; /* Wakeup capability */ | ||
309 | bool has_ccr; /* Transceiver has configuration control registers */ | ||
310 | int (*enable_st_clock)(unsigned int, bool); | ||
311 | int (*set_clk_src)(struct device *dev, struct clk *clk, const char *src); | ||
312 | int (*mux_signal)(struct device *dev, const char *signal, const char *src); | ||
361 | }; | 313 | }; |
362 | 314 | ||
363 | struct omap_mcbsp_st_data { | 315 | struct omap_mcbsp_st_data { |
@@ -389,14 +341,12 @@ struct omap_mcbsp { | |||
389 | spinlock_t lock; | 341 | spinlock_t lock; |
390 | struct omap_mcbsp_platform_data *pdata; | 342 | struct omap_mcbsp_platform_data *pdata; |
391 | struct clk *fclk; | 343 | struct clk *fclk; |
392 | #ifdef CONFIG_ARCH_OMAP3 | ||
393 | struct omap_mcbsp_st_data *st_data; | 344 | struct omap_mcbsp_st_data *st_data; |
394 | int dma_op_mode; | 345 | int dma_op_mode; |
395 | u16 max_tx_thres; | 346 | u16 max_tx_thres; |
396 | u16 max_rx_thres; | 347 | u16 max_rx_thres; |
397 | #endif | ||
398 | void *reg_cache; | 348 | void *reg_cache; |
399 | unsigned int mcbsp_config_type; | 349 | int reg_cache_size; |
400 | }; | 350 | }; |
401 | 351 | ||
402 | /** | 352 | /** |
@@ -408,16 +358,10 @@ struct omap_mcbsp_dev_attr { | |||
408 | }; | 358 | }; |
409 | 359 | ||
410 | extern struct omap_mcbsp **mcbsp_ptr; | 360 | extern struct omap_mcbsp **mcbsp_ptr; |
411 | extern int omap_mcbsp_count, omap_mcbsp_cache_size; | 361 | extern int omap_mcbsp_count; |
412 | |||
413 | #define omap_mcbsp_check_valid_id(id) (id < omap_mcbsp_count) | ||
414 | #define id_to_mcbsp_ptr(id) mcbsp_ptr[id]; | ||
415 | 362 | ||
416 | int omap_mcbsp_init(void); | 363 | int omap_mcbsp_init(void); |
417 | void omap_mcbsp_register_board_cfg(struct resource *res, int res_count, | ||
418 | struct omap_mcbsp_platform_data *config, int size); | ||
419 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); | 364 | void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config); |
420 | #ifdef CONFIG_ARCH_OMAP3 | ||
421 | void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold); | 365 | void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold); |
422 | void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold); | 366 | void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold); |
423 | u16 omap_mcbsp_get_max_tx_threshold(unsigned int id); | 367 | u16 omap_mcbsp_get_max_tx_threshold(unsigned int id); |
@@ -426,18 +370,6 @@ u16 omap_mcbsp_get_fifo_size(unsigned int id); | |||
426 | u16 omap_mcbsp_get_tx_delay(unsigned int id); | 370 | u16 omap_mcbsp_get_tx_delay(unsigned int id); |
427 | u16 omap_mcbsp_get_rx_delay(unsigned int id); | 371 | u16 omap_mcbsp_get_rx_delay(unsigned int id); |
428 | int omap_mcbsp_get_dma_op_mode(unsigned int id); | 372 | int omap_mcbsp_get_dma_op_mode(unsigned int id); |
429 | #else | ||
430 | static inline void omap_mcbsp_set_tx_threshold(unsigned int id, u16 threshold) | ||
431 | { } | ||
432 | static inline void omap_mcbsp_set_rx_threshold(unsigned int id, u16 threshold) | ||
433 | { } | ||
434 | static inline u16 omap_mcbsp_get_max_tx_threshold(unsigned int id) { return 0; } | ||
435 | static inline u16 omap_mcbsp_get_max_rx_threshold(unsigned int id) { return 0; } | ||
436 | static inline u16 omap_mcbsp_get_fifo_size(unsigned int id) { return 0; } | ||
437 | static inline u16 omap_mcbsp_get_tx_delay(unsigned int id) { return 0; } | ||
438 | static inline u16 omap_mcbsp_get_rx_delay(unsigned int id) { return 0; } | ||
439 | static inline int omap_mcbsp_get_dma_op_mode(unsigned int id) { return 0; } | ||
440 | #endif | ||
441 | int omap_mcbsp_request(unsigned int id); | 373 | int omap_mcbsp_request(unsigned int id); |
442 | void omap_mcbsp_free(unsigned int id); | 374 | void omap_mcbsp_free(unsigned int id); |
443 | void omap_mcbsp_start(unsigned int id, int tx, int rx); | 375 | void omap_mcbsp_start(unsigned int id, int tx, int rx); |
@@ -453,21 +385,11 @@ void omap2_mcbsp1_mux_fsr_src(u8 mux); | |||
453 | int omap_mcbsp_dma_ch_params(unsigned int id, unsigned int stream); | 385 | int omap_mcbsp_dma_ch_params(unsigned int id, unsigned int stream); |
454 | int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream); | 386 | int omap_mcbsp_dma_reg_params(unsigned int id, unsigned int stream); |
455 | 387 | ||
456 | #ifdef CONFIG_ARCH_OMAP3 | ||
457 | /* Sidetone specific API */ | 388 | /* Sidetone specific API */ |
458 | int omap_st_set_chgain(unsigned int id, int channel, s16 chgain); | 389 | int omap_st_set_chgain(unsigned int id, int channel, s16 chgain); |
459 | int omap_st_get_chgain(unsigned int id, int channel, s16 *chgain); | 390 | int omap_st_get_chgain(unsigned int id, int channel, s16 *chgain); |
460 | int omap_st_enable(unsigned int id); | 391 | int omap_st_enable(unsigned int id); |
461 | int omap_st_disable(unsigned int id); | 392 | int omap_st_disable(unsigned int id); |
462 | int omap_st_is_enabled(unsigned int id); | 393 | int omap_st_is_enabled(unsigned int id); |
463 | #else | ||
464 | static inline int omap_st_set_chgain(unsigned int id, int channel, | ||
465 | s16 chgain) { return 0; } | ||
466 | static inline int omap_st_get_chgain(unsigned int id, int channel, | ||
467 | s16 *chgain) { return 0; } | ||
468 | static inline int omap_st_enable(unsigned int id) { return 0; } | ||
469 | static inline int omap_st_disable(unsigned int id) { return 0; } | ||
470 | static inline int omap_st_is_enabled(unsigned int id) { return 0; } | ||
471 | #endif | ||
472 | 394 | ||
473 | #endif | 395 | #endif |
diff --git a/arch/arm/plat-omap/include/plat/omap_device.h b/arch/arm/plat-omap/include/plat/omap_device.h index ee405b36df4b..12c5b0c345bf 100644 --- a/arch/arm/plat-omap/include/plat/omap_device.h +++ b/arch/arm/plat-omap/include/plat/omap_device.h | |||
@@ -68,7 +68,7 @@ extern struct device omap_device_parent; | |||
68 | * | 68 | * |
69 | */ | 69 | */ |
70 | struct omap_device { | 70 | struct omap_device { |
71 | struct platform_device pdev; | 71 | struct platform_device *pdev; |
72 | struct omap_hwmod **hwmods; | 72 | struct omap_hwmod **hwmods; |
73 | struct omap_device_pm_latency *pm_lats; | 73 | struct omap_device_pm_latency *pm_lats; |
74 | u32 dev_wakeup_lat; | 74 | u32 dev_wakeup_lat; |
@@ -88,25 +88,20 @@ int omap_device_shutdown(struct platform_device *pdev); | |||
88 | 88 | ||
89 | /* Core code interface */ | 89 | /* Core code interface */ |
90 | 90 | ||
91 | int omap_device_count_resources(struct omap_device *od); | 91 | struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, |
92 | int omap_device_fill_resources(struct omap_device *od, struct resource *res); | ||
93 | |||
94 | struct omap_device *omap_device_build(const char *pdev_name, int pdev_id, | ||
95 | struct omap_hwmod *oh, void *pdata, | 92 | struct omap_hwmod *oh, void *pdata, |
96 | int pdata_len, | 93 | int pdata_len, |
97 | struct omap_device_pm_latency *pm_lats, | 94 | struct omap_device_pm_latency *pm_lats, |
98 | int pm_lats_cnt, int is_early_device); | 95 | int pm_lats_cnt, int is_early_device); |
99 | 96 | ||
100 | struct omap_device *omap_device_build_ss(const char *pdev_name, int pdev_id, | 97 | struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, |
101 | struct omap_hwmod **oh, int oh_cnt, | 98 | struct omap_hwmod **oh, int oh_cnt, |
102 | void *pdata, int pdata_len, | 99 | void *pdata, int pdata_len, |
103 | struct omap_device_pm_latency *pm_lats, | 100 | struct omap_device_pm_latency *pm_lats, |
104 | int pm_lats_cnt, int is_early_device); | 101 | int pm_lats_cnt, int is_early_device); |
105 | 102 | ||
106 | int omap_device_register(struct omap_device *od); | ||
107 | int omap_early_device_register(struct omap_device *od); | ||
108 | |||
109 | void __iomem *omap_device_get_rt_va(struct omap_device *od); | 103 | void __iomem *omap_device_get_rt_va(struct omap_device *od); |
104 | struct device *omap_device_get_by_hwmod_name(const char *oh_name); | ||
110 | 105 | ||
111 | /* OMAP PM interface */ | 106 | /* OMAP PM interface */ |
112 | int omap_device_align_pm_lat(struct platform_device *pdev, | 107 | int omap_device_align_pm_lat(struct platform_device *pdev, |
@@ -122,11 +117,6 @@ int omap_device_enable_hwmods(struct omap_device *od); | |||
122 | int omap_device_disable_clocks(struct omap_device *od); | 117 | int omap_device_disable_clocks(struct omap_device *od); |
123 | int omap_device_enable_clocks(struct omap_device *od); | 118 | int omap_device_enable_clocks(struct omap_device *od); |
124 | 119 | ||
125 | static inline void omap_device_disable_idle_on_suspend(struct omap_device *od) | ||
126 | { | ||
127 | od->flags |= OMAP_DEVICE_NO_IDLE_ON_SUSPEND; | ||
128 | } | ||
129 | |||
130 | /* | 120 | /* |
131 | * Entries should be kept in latency order ascending | 121 | * Entries should be kept in latency order ascending |
132 | * | 122 | * |
@@ -157,6 +147,17 @@ struct omap_device_pm_latency { | |||
157 | #define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1) | 147 | #define OMAP_DEVICE_LATENCY_AUTO_ADJUST BIT(1) |
158 | 148 | ||
159 | /* Get omap_device pointer from platform_device pointer */ | 149 | /* Get omap_device pointer from platform_device pointer */ |
160 | #define to_omap_device(x) container_of((x), struct omap_device, pdev) | 150 | static inline struct omap_device *to_omap_device(struct platform_device *pdev) |
151 | { | ||
152 | return pdev ? pdev->archdata.od : NULL; | ||
153 | } | ||
154 | |||
155 | static inline | ||
156 | void omap_device_disable_idle_on_suspend(struct platform_device *pdev) | ||
157 | { | ||
158 | struct omap_device *od = to_omap_device(pdev); | ||
159 | |||
160 | od->flags |= OMAP_DEVICE_NO_IDLE_ON_SUSPEND; | ||
161 | } | ||
161 | 162 | ||
162 | #endif | 163 | #endif |
diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 0e329ca88a70..5419f1a2aaa4 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h | |||
@@ -496,7 +496,6 @@ struct omap_hwmod_class { | |||
496 | * @_state: internal-use hwmod state | 496 | * @_state: internal-use hwmod state |
497 | * @_postsetup_state: internal-use state to leave the hwmod in after _setup() | 497 | * @_postsetup_state: internal-use state to leave the hwmod in after _setup() |
498 | * @flags: hwmod flags (documented below) | 498 | * @flags: hwmod flags (documented below) |
499 | * @omap_chip: OMAP chips this hwmod is present on | ||
500 | * @_lock: spinlock serializing operations on this hwmod | 499 | * @_lock: spinlock serializing operations on this hwmod |
501 | * @node: list node for hwmod list (internal use) | 500 | * @node: list node for hwmod list (internal use) |
502 | * | 501 | * |
@@ -526,7 +525,6 @@ struct omap_hwmod { | |||
526 | char *clkdm_name; | 525 | char *clkdm_name; |
527 | struct clockdomain *clkdm; | 526 | struct clockdomain *clkdm; |
528 | char *vdd_name; | 527 | char *vdd_name; |
529 | struct voltagedomain *voltdm; | ||
530 | struct omap_hwmod_ocp_if **masters; /* connect to *_IA */ | 528 | struct omap_hwmod_ocp_if **masters; /* connect to *_IA */ |
531 | struct omap_hwmod_ocp_if **slaves; /* connect to *_TA */ | 529 | struct omap_hwmod_ocp_if **slaves; /* connect to *_TA */ |
532 | void *dev_attr; | 530 | void *dev_attr; |
@@ -545,7 +543,6 @@ struct omap_hwmod { | |||
545 | u8 _int_flags; | 543 | u8 _int_flags; |
546 | u8 _state; | 544 | u8 _state; |
547 | u8 _postsetup_state; | 545 | u8 _postsetup_state; |
548 | const struct omap_chip_id omap_chip; | ||
549 | }; | 546 | }; |
550 | 547 | ||
551 | int omap_hwmod_register(struct omap_hwmod **ohs); | 548 | int omap_hwmod_register(struct omap_hwmod **ohs); |
diff --git a/arch/arm/plat-omap/include/plat/voltage.h b/arch/arm/plat-omap/include/plat/voltage.h new file mode 100644 index 000000000000..0a6a482ec014 --- /dev/null +++ b/arch/arm/plat-omap/include/plat/voltage.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * OMAP Voltage Management Routines | ||
3 | * | ||
4 | * Copyright (C) 2011, Texas Instruments, Inc. | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #ifndef __ARCH_ARM_OMAP_VOLTAGE_H | ||
12 | #define __ARCH_ARM_OMAP_VOLTAGE_H | ||
13 | |||
14 | struct voltagedomain; | ||
15 | |||
16 | struct voltagedomain *voltdm_lookup(const char *name); | ||
17 | int voltdm_scale(struct voltagedomain *voltdm, unsigned long target_volt); | ||
18 | unsigned long voltdm_get_voltage(struct voltagedomain *voltdm); | ||
19 | |||
20 | #endif | ||