浏览代码

sh: heartbeat double 0 fix.

This implements stricter and more compliant knightrider strobing in the
heartbeat handler. While there still seems to be some debate as to
whether the double 0 is "more" correct or not, this updated version
appears to have general consensus. Fixes a long-term "bug".

Signed-off-by: Takashi YOSHII <takashi.yoshii.ze@hitachi.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Takashi YOSHII 18 年之前
父节点
当前提交
f6072896e3
共有 1 个文件被更改,包括 3 次插入10 次删除
  1. 3 10
      arch/sh/drivers/heartbeat.c

+ 3 - 10
arch/sh/drivers/heartbeat.c

@@ -40,16 +40,9 @@ static void heartbeat_timer(unsigned long data)
 	static unsigned bit = 0, up = 1;
 
 	ctrl_outw(1 << hd->bit_pos[bit], (unsigned long)hd->base);
-	if (up)
-		if (bit == (ARRAY_SIZE(hd->bit_pos) - 1)) {
-			bit--;
-			up = 0;
-		} else
-			bit++;
-	else if (bit == 0)
-		up = 1;
-	else
-		bit--;
+	bit += up;
+	if ((bit == 0) || (bit == ARRAY_SIZE(hd->bit_pos)-1))
+		up = -up;
 
 	mod_timer(&hd->timer, jiffies + (110 - ((300 << FSHIFT) /
 			((avenrun[0] / 5) + (3 << FSHIFT)))));