Title: [6475] branches/2009R1/arch/blackfin/kernel/time-ts.c: Fix bug [#5163], disable gptimer0 when reprogram the pwidth
- Revision
- 6475
- Author
- gyang
- Date
- 2009-05-26 04:53:11 -0500 (Tue, 26 May 2009)
Log Message
Fix bug [#5163], disable gptimer0 when reprogram the pwidth
Modified Paths
Diff
Modified: branches/2009R1/arch/blackfin/kernel/time-ts.c (6474 => 6475)
--- branches/2009R1/arch/blackfin/kernel/time-ts.c 2009-05-26 08:38:30 UTC (rev 6474)
+++ branches/2009R1/arch/blackfin/kernel/time-ts.c 2009-05-26 09:53:11 UTC (rev 6475)
@@ -182,6 +182,8 @@
static int bfin_timer_set_next_event(unsigned long cycles,
struct clock_event_device *evt)
{
+ disable_gptimers(TIMER0bit);
+
/* it starts counting three SCLK cycles after the TIMENx bit is set */
set_gptimer_pwidth(TIMER0_id, cycles - 3);
enable_gptimers(TIMER0bit);
@@ -198,17 +200,14 @@
TIMER_PERIOD_CNT | TIMER_MODE_PWM);
set_gptimer_period(TIMER0_id, get_sclk() / HZ);
set_gptimer_pwidth(TIMER0_id, get_sclk() / HZ - 1);
- SSYNC();
enable_gptimers(TIMER0bit);
break;
}
case CLOCK_EVT_MODE_ONESHOT:
+ disable_gptimers(TIMER0bit);
set_gptimer_config(TIMER0_id, \
TIMER_OUT_DIS | TIMER_IRQ_ENA | TIMER_MODE_PWM);
set_gptimer_period(TIMER0_id, 0);
- set_gptimer_pwidth(TIMER0_id, get_sclk() / HZ);
- SSYNC();
- enable_gptimers(TIMER0bit);
break;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
@@ -240,31 +239,35 @@
static int bfin_timer_set_next_event(unsigned long cycles,
struct clock_event_device *evt)
{
+ bfin_write_TCNTL(TMPWR);
+ CSYNC();
bfin_write_TCOUNT(cycles);
CSYNC();
+ bfin_write_TCNTL(TMPWR | TMREN);
return 0;
}
static void bfin_timer_set_mode(enum clock_event_mode mode,
- struct clock_event_device *evt)
+ struct clock_event_device *evt)
{
switch (mode) {
case CLOCK_EVT_MODE_PERIODIC: {
unsigned long tcount = ((get_cclk() / (HZ * TIME_SCALE)) - 1);
bfin_write_TCNTL(TMPWR);
+ CSYNC();
bfin_write_TSCALE(TIME_SCALE - 1);
- CSYNC();
bfin_write_TPERIOD(tcount);
bfin_write_TCOUNT(tcount);
+ CSYNC();
bfin_write_TCNTL(TMPWR | TMREN | TAUTORLD);
- CSYNC();
break;
}
case CLOCK_EVT_MODE_ONESHOT:
+ bfin_write_TCNTL(TMPWR);
+ CSYNC();
bfin_write_TSCALE(TIME_SCALE - 1);
+ bfin_write_TPERIOD(0);
bfin_write_TCOUNT(0);
- bfin_write_TCNTL(TMPWR | TMREN);
- CSYNC();
break;
case CLOCK_EVT_MODE_UNUSED:
case CLOCK_EVT_MODE_SHUTDOWN:
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits