Bullshit! It's not universal! Only work for 2.6 kernel. Universal one is modify kmod-diag for read the bytton state:
Index: package/broadcom-diag/src/diag.c
===================================================================
--- package/broadcom-diag/src/diag.c (revision 14605)
+++ package/broadcom-diag/src/diag.c (working copy)
@@ -910,9 +910,25 @@
static void register_buttons(struct button_t *b)
{
- for (; b->name; b++)
+ buttons = proc_mkdir("button", diag);
+ if (!buttons)
+ return;
+
+ for (; b->name; b++) {
+ struct proc_dir_entry *p;
platform.button_mask |= b->gpio;
+ if (b->gpio & gpiomask)
+ continue;
+
+ if ((p = create_proc_entry(b->name, S_IRUSR, buttons))) {
+ b->proc.type = PROC_BUTTON;
+ b->proc.ptr = b;
+ p->data = (void *) &b->proc;
+ p->proc_fops = &diag_proc_fops;
+ }
+ }
+
platform.button_mask &= ~gpiomask;
gpio_outen(platform.button_mask, 0);
@@ -926,6 +942,9 @@
static void unregister_buttons(struct button_t *b)
{
+ for(; b->name; b++)
+ remove_proc_entry(b->name, buttons);
+
gpio_intmask(platform.button_mask, 0);
gpio_set_irqenable(0, button_handler);
@@ -1179,6 +1198,12 @@
}
break;
}
+ case PROC_BUTTON: {
+ struct button_t * button = (struct button_t *) handler->ptr;
+ u32 in = (gpio_in() & button->gpio ? 1 : 0);
+ len = sprintf(page, "%d\n", in);
+ break;
+ }
case PROC_MODEL:
len = sprintf(page, "%s\n", platform.name);
break;
Index: package/broadcom-diag/src/diag.h
===================================================================
--- package/broadcom-diag/src/diag.h (revision 14605)
+++ package/broadcom-diag/src/diag.h (working copy)
@@ -125,7 +125,7 @@
/* proc */
-static struct proc_dir_entry *diag, *leds;
+static struct proc_dir_entry *diag, *leds, *buttons;
static ssize_t diag_proc_read(struct file *file, char *buf, size_t count, loff_t *ppos);
static ssize_t diag_proc_write(struct file *file, const char *buf, size_t count, loff_t *ppos);
or install this module(for bcm2.4): http://strelok-burn.narod.ru/kmod-diag_ … cm-2.4.ipk