[PATCH 2/2] n2100: reduce power button timer to 1 Hz

Mikael Pettersson mikpe at it.uu.se
Sat Sep 26 15:53:55 EDT 2009


The power button on the n2100 apparently does not generate
an interrupt when pressed, so the board support code sets
up a periodic timer to sample it.

This timer operates at 10 Hz, which makes it the third worst
cause of timeouts in my kernel when idle.

10 Hz seems excessive, so this patch adds a compile-time option
to reduce the polling frequency to 1 Hz.

(This change could possibly be handled via a kernel boot option,
or even be made unconditional, but I opted for a compile-time
option for now.)

Signed-off-by: Mikael Pettersson <mikpe at it.uu.se>
---
 arch/arm/mach-iop32x/Kconfig |   12 ++++++++++++
 arch/arm/mach-iop32x/n2100.c |   10 ++++++++--
 2 files changed, 20 insertions(+), 2 deletions(-)

diff -rupN linux-2.6.31.arm-n2100-1-xint1-uart/arch/arm/mach-iop32x/Kconfig linux-2.6.31.arm-n2100-2-pbpt-hz1/arch/arm/mach-iop32x/Kconfig
--- linux-2.6.31.arm-n2100-1-xint1-uart/arch/arm/mach-iop32x/Kconfig	2009-09-26 13:39:20.000000000 +0200
+++ linux-2.6.31.arm-n2100-2-pbpt-hz1/arch/arm/mach-iop32x/Kconfig	2009-09-26 13:56:05.000000000 +0200
@@ -64,4 +64,16 @@ config N2100_XINT1_UART
 
 	  Say Y if tickless operation is important for you.
 
+config N2100_PBPT_HZ1
+	bool "Set Thecus n2100 power button poll timer frequency to 1 Hz"
+	depends on MACH_N2100 && NO_HZ
+	help
+	  The Thecus n2100 power button does not generate an interrupt,
+	  so it is polled by a timer, by default at 10 Hz.
+
+	  This option reduces the polling frequency to 1 Hz, which helps
+	  tickless systems keep the timer interrupt rate low.
+
+	  Say Y if tickless operation is important for you.
+
 endif
diff -rupN linux-2.6.31.arm-n2100-1-xint1-uart/arch/arm/mach-iop32x/n2100.c linux-2.6.31.arm-n2100-2-pbpt-hz1/arch/arm/mach-iop32x/n2100.c
--- linux-2.6.31.arm-n2100-1-xint1-uart/arch/arm/mach-iop32x/n2100.c	2009-09-26 13:49:18.000000000 +0200
+++ linux-2.6.31.arm-n2100-2-pbpt-hz1/arch/arm/mach-iop32x/n2100.c	2009-09-26 13:56:43.000000000 +0200
@@ -307,6 +307,12 @@ static void n2100_power_off(void)
 
 static struct timer_list power_button_poll_timer;
 
+#ifdef CONFIG_N2100_PBPT_HZ1
+#define N2100_PBPT_DELTA	(HZ)
+#else
+#define N2100_PBPT_DELTA	(HZ / 10)
+#endif
+
 static void power_button_poll(unsigned long dummy)
 {
 	if (gpio_line_get(N2100_POWER_BUTTON) == 0) {
@@ -314,7 +320,7 @@ static void power_button_poll(unsigned l
 		return;
 	}
 
-	power_button_poll_timer.expires = jiffies + (HZ / 10);
+	power_button_poll_timer.expires = jiffies + N2100_PBPT_DELTA;
 	add_timer(&power_button_poll_timer);
 }
 
@@ -334,7 +340,7 @@ static void __init n2100_init_machine(vo
 
 	init_timer(&power_button_poll_timer);
 	power_button_poll_timer.function = power_button_poll;
-	power_button_poll_timer.expires = jiffies + (HZ / 10);
+	power_button_poll_timer.expires = jiffies + N2100_PBPT_DELTA;
 	add_timer(&power_button_poll_timer);
 }
 



More information about the linux-arm-kernel mailing list