aboutsummaryrefslogtreecommitdiff
path: root/arch/blackfin/kernel/gptimers.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-30 08:39:20 -0700
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-30 08:39:20 -0700
commitfb7267acfef1de3e49d4e0c80be3cc603e974b3b (patch)
tree555f4c02309c08f3dd0d918aaf0c7c374f1ad70a /arch/blackfin/kernel/gptimers.c
parent2d175d438f297bcd75a7b88baf3a304137047af6 (diff)
parent2ea4649b3634b9dbd098d0d8be65304eb2ea3a9c (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/blackfin-2.6: Blackfin arch: use a less common define name in BF549 Blackfin arch: Add missing definitions for BF561 Blackfin arch: reclaim a few bytes from the end of our init section Blackfin arch: fix libata data struct member from irq_type to irq_flags Blackfin arch: Do not pollute name space used in linux-2.6.x/sound Blackfin arch: Fix bug set correct baud for spi mmc and enable SPI after DMA. Blackfin arch: update board defconfig files according to latest information from ADI datasheet Blackfin arch: ensure that speculative loads of bad pointers don't cause us to do bad things. Blackfin arch: Add missing definitions of BF54x Blackfin arch: Fix random crash issue found by Michael. Blackfin arch: fix bug: tell users if the kernel is recovering from a fault condition Blackfin arch: add support for checking/clearing overruns in generic purpose Timer API Blackfin arch: cleanup arch/blackfin/kernel/traps.c handling code. Blackfin arch: Apply Bluetchnix vendor patch provided by Harald Krapfenbauer Blackfin arch: fix bug BlueTechnix CM-BF537 board config uses wrong IRQ for net2272 driver Blackfin arch: fix bug: kernel prints out error message twice Blackfin arch: add NFC driver support in BF527-EZKIT board Blackfin arch: Added support for HV Sistemas H8606 board
Diffstat (limited to 'arch/blackfin/kernel/gptimers.c')
-rw-r--r--arch/blackfin/kernel/gptimers.c47
1 files changed, 40 insertions, 7 deletions
diff --git a/arch/blackfin/kernel/gptimers.c b/arch/blackfin/kernel/gptimers.c
index cb7ba9bfc79c..5cf4bdb1df3b 100644
--- a/arch/blackfin/kernel/gptimers.c
+++ b/arch/blackfin/kernel/gptimers.c
@@ -20,8 +20,7 @@
#else
# define tassert(expr) \
if (!(expr)) \
- printk(KERN_DEBUG "%s:%s:%i: Assertion failed: " #expr "\n", \
- __FILE__, __func__, __LINE__);
+ printk(KERN_DEBUG "%s:%s:%i: Assertion failed: " #expr "\n", __FILE__, __func__, __LINE__);
#endif
#define BFIN_TIMER_NUM_GROUP (BFIN_TIMER_OCTET(MAX_BLACKFIN_GPTIMERS - 1) + 1)
@@ -70,7 +69,7 @@ static volatile GPTIMER_group_regs *const group_regs[BFIN_TIMER_NUM_GROUP] =
#endif
};
-static uint32_t const dis_mask[MAX_BLACKFIN_GPTIMERS] =
+static uint32_t const trun_mask[MAX_BLACKFIN_GPTIMERS] =
{
TIMER_STATUS_TRUN0,
TIMER_STATUS_TRUN1,
@@ -90,7 +89,27 @@ static uint32_t const dis_mask[MAX_BLACKFIN_GPTIMERS] =
#endif
};
-static uint32_t const irq_mask[MAX_BLACKFIN_GPTIMERS] =
+static uint32_t const tovf_mask[MAX_BLACKFIN_GPTIMERS] =
+{
+ TIMER_STATUS_TOVF0,
+ TIMER_STATUS_TOVF1,
+ TIMER_STATUS_TOVF2,
+#if (MAX_BLACKFIN_GPTIMERS > 3)
+ TIMER_STATUS_TOVF3,
+ TIMER_STATUS_TOVF4,
+ TIMER_STATUS_TOVF5,
+ TIMER_STATUS_TOVF6,
+ TIMER_STATUS_TOVF7,
+#endif
+#if (MAX_BLACKFIN_GPTIMERS > 8)
+ TIMER_STATUS_TOVF8,
+ TIMER_STATUS_TOVF9,
+ TIMER_STATUS_TOVF10,
+ TIMER_STATUS_TOVF11,
+#endif
+};
+
+static uint32_t const timil_mask[MAX_BLACKFIN_GPTIMERS] =
{
TIMER_STATUS_TIMIL0,
TIMER_STATUS_TIMIL1,
@@ -165,17 +184,31 @@ EXPORT_SYMBOL(set_gptimer_status);
uint16_t get_gptimer_intr(int timer_id)
{
tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
- return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & irq_mask[timer_id]) ? 1 : 0;
+ return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & timil_mask[timer_id]) ? 1 : 0;
}
EXPORT_SYMBOL(get_gptimer_intr);
void clear_gptimer_intr(int timer_id)
{
tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
- group_regs[BFIN_TIMER_OCTET(timer_id)]->status = irq_mask[timer_id];
+ group_regs[BFIN_TIMER_OCTET(timer_id)]->status = timil_mask[timer_id];
}
EXPORT_SYMBOL(clear_gptimer_intr);
+uint16_t get_gptimer_over(int timer_id)
+{
+ tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
+ return (group_regs[BFIN_TIMER_OCTET(timer_id)]->status & tovf_mask[timer_id]) ? 1 : 0;
+}
+EXPORT_SYMBOL(get_gptimer_over);
+
+void clear_gptimer_over(int timer_id)
+{
+ tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
+ group_regs[BFIN_TIMER_OCTET(timer_id)]->status = tovf_mask[timer_id];
+}
+EXPORT_SYMBOL(clear_gptimer_over);
+
void set_gptimer_config(int timer_id, uint16_t config)
{
tassert(timer_id < MAX_BLACKFIN_GPTIMERS);
@@ -214,7 +247,7 @@ void disable_gptimers(uint16_t mask)
}
for (i = 0; i < MAX_BLACKFIN_GPTIMERS; ++i)
if (mask & (1 << i))
- group_regs[BFIN_TIMER_OCTET(i)]->status |= dis_mask[i];
+ group_regs[BFIN_TIMER_OCTET(i)]->status |= trun_mask[i];
SSYNC();
}
EXPORT_SYMBOL(disable_gptimers);