[PATCH 4/4] leds-clevo-mail: hw acceleration for Clevo mail LED driver

2007-10-28 Thread Németh Márton
From: Márton Németh <[EMAIL PROTECTED]>

Add support for hardware accelerated LED blinking for the mail LED
commonly found on Clevo notebooks.

Signed-off-by: Márton Németh <[EMAIL PROTECTED]>
---
diff -uprN linux-2.6.24-rc1.c/drivers/leds/Kconfig 
linux-2.6.24-rc1.d/drivers/leds/Kconfig
--- linux-2.6.24-rc1.c/drivers/leds/Kconfig 2007-10-28 09:09:45.0 
+0100
+++ linux-2.6.24-rc1.d/drivers/leds/Kconfig 2007-10-28 09:09:25.0 
+0100
@@ -122,9 +122,11 @@ config LEDS_CLEVO_MAIL
  programs through the leds subsystem. This LED have three
  known mode: off, blink at 0.5Hz and blink at 1Hz.

- As this LED cannot change it's brightness it blinks instead.
- The brightness value 0 means off, 1..127 means blink at 0.5Hz
- and 128..255 means blink at 1Hz.
+ The driver supports two kinds of interface: using ledtrig-timer
+ or through /sys/class/leds/clevo::mail/brightness. As this LED
+ cannot change it's brightness it blinks instead. The brightness
+ value 0 means off, 1..127 means blink at 0.5Hz and 128..255 means
+ blink at 1Hz.

  This module can drive the mail LED for the following notebooks:

diff -uprN linux-2.6.24-rc1.c/drivers/leds/leds-clevo-mail.c 
linux-2.6.24-rc1.d/drivers/leds/leds-clevo-mail.c
--- linux-2.6.24-rc1.c/drivers/leds/leds-clevo-mail.c   2007-10-28 
10:20:49.0 +0100
+++ linux-2.6.24-rc1.d/drivers/leds/leds-clevo-mail.c   2007-10-28 
10:20:55.0 +0100
@@ -92,9 +92,46 @@ static void clevo_mail_led_set(struct le

 }

+static int clevo_mail_led_blink(struct led_classdev *led_cdev,
+   unsigned long* delay_on,
+   unsigned long* delay_off)
+{
+   int status = -EINVAL;
+
+   if (*delay_on == 0 /* ms */ && *delay_off == 0 /* ms */) {
+   /* Special case: the leds subsystem requested us to
+* chose one user friendly blinking of the LED, and
+* start it. Let's blink the led slowly (0.5Hz).
+*/
+   *delay_on = 1000; /* ms */
+   *delay_off = 1000; /* ms */
+   i8042_command(NULL, CLEVO_MAIL_LED_BLINK_0_5HZ);
+   status = 0;
+
+   } else if (*delay_on == 500 /* ms */ && *delay_off == 500 /* ms */) {
+   /* blink the led with 1Hz */
+   i8042_command(NULL, CLEVO_MAIL_LED_BLINK_1HZ);
+   status = 0;
+
+   } else if (*delay_on == 1000 /* ms */ && *delay_off == 1000 /* ms */) {
+   /* blink the led with 0.5Hz */
+   i8042_command(NULL, CLEVO_MAIL_LED_BLINK_0_5HZ);
+   status = 0;
+
+   } else {
+   printk(KERN_DEBUG KBUILD_MODNAME
+  ": clevo_mail_led_blink(..., %lu, %lu),"
+  " returning -EINVAL (unsupported)\n",
+  *delay_on, *delay_off);
+   }
+
+   return status;
+}
+
 static struct led_classdev clevo_mail_led = {
.name   = "clevo::mail",
.brightness_set = clevo_mail_led_set,
+   .blink_set  = clevo_mail_led_blink,
 };

 static int __init clevo_mail_led_probe(struct platform_device *pdev)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 4/4] leds-clevo-mail: hw acceleration for Clevo mail LED driver

2007-10-28 Thread Németh Márton
From: Márton Németh [EMAIL PROTECTED]

Add support for hardware accelerated LED blinking for the mail LED
commonly found on Clevo notebooks.

Signed-off-by: Márton Németh [EMAIL PROTECTED]
---
diff -uprN linux-2.6.24-rc1.c/drivers/leds/Kconfig 
linux-2.6.24-rc1.d/drivers/leds/Kconfig
--- linux-2.6.24-rc1.c/drivers/leds/Kconfig 2007-10-28 09:09:45.0 
+0100
+++ linux-2.6.24-rc1.d/drivers/leds/Kconfig 2007-10-28 09:09:25.0 
+0100
@@ -122,9 +122,11 @@ config LEDS_CLEVO_MAIL
  programs through the leds subsystem. This LED have three
  known mode: off, blink at 0.5Hz and blink at 1Hz.

- As this LED cannot change it's brightness it blinks instead.
- The brightness value 0 means off, 1..127 means blink at 0.5Hz
- and 128..255 means blink at 1Hz.
+ The driver supports two kinds of interface: using ledtrig-timer
+ or through /sys/class/leds/clevo::mail/brightness. As this LED
+ cannot change it's brightness it blinks instead. The brightness
+ value 0 means off, 1..127 means blink at 0.5Hz and 128..255 means
+ blink at 1Hz.

  This module can drive the mail LED for the following notebooks:

diff -uprN linux-2.6.24-rc1.c/drivers/leds/leds-clevo-mail.c 
linux-2.6.24-rc1.d/drivers/leds/leds-clevo-mail.c
--- linux-2.6.24-rc1.c/drivers/leds/leds-clevo-mail.c   2007-10-28 
10:20:49.0 +0100
+++ linux-2.6.24-rc1.d/drivers/leds/leds-clevo-mail.c   2007-10-28 
10:20:55.0 +0100
@@ -92,9 +92,46 @@ static void clevo_mail_led_set(struct le

 }

+static int clevo_mail_led_blink(struct led_classdev *led_cdev,
+   unsigned long* delay_on,
+   unsigned long* delay_off)
+{
+   int status = -EINVAL;
+
+   if (*delay_on == 0 /* ms */  *delay_off == 0 /* ms */) {
+   /* Special case: the leds subsystem requested us to
+* chose one user friendly blinking of the LED, and
+* start it. Let's blink the led slowly (0.5Hz).
+*/
+   *delay_on = 1000; /* ms */
+   *delay_off = 1000; /* ms */
+   i8042_command(NULL, CLEVO_MAIL_LED_BLINK_0_5HZ);
+   status = 0;
+
+   } else if (*delay_on == 500 /* ms */  *delay_off == 500 /* ms */) {
+   /* blink the led with 1Hz */
+   i8042_command(NULL, CLEVO_MAIL_LED_BLINK_1HZ);
+   status = 0;
+
+   } else if (*delay_on == 1000 /* ms */  *delay_off == 1000 /* ms */) {
+   /* blink the led with 0.5Hz */
+   i8042_command(NULL, CLEVO_MAIL_LED_BLINK_0_5HZ);
+   status = 0;
+
+   } else {
+   printk(KERN_DEBUG KBUILD_MODNAME
+  : clevo_mail_led_blink(..., %lu, %lu),
+   returning -EINVAL (unsupported)\n,
+  *delay_on, *delay_off);
+   }
+
+   return status;
+}
+
 static struct led_classdev clevo_mail_led = {
.name   = clevo::mail,
.brightness_set = clevo_mail_led_set,
+   .blink_set  = clevo_mail_led_blink,
 };

 static int __init clevo_mail_led_probe(struct platform_device *pdev)
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/