Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-10-23 Thread Richard Purdie
On Sun, 2007-10-21 at 14:54 +0200, Németh Márton wrote:
> From: Márton Németh <[EMAIL PROTECTED]>
> 
> Extends the leds subsystem with a blink_set() callback function which can
> be optionally implemented by a LED driver. If implemented, the driver can use
> the hardware acceleration for blinking a LED.
> 
> Signed-off-by: Márton Németh <[EMAIL PROTECTED]>
> ---
> diff -uprN linux-2.6.23.orig/Documentation/leds-class.txt 
> linux-2.6.23/Documentation/leds-class.txt
> --- linux-2.6.23.orig/Documentation/leds-class.txt2007-10-09 
> 22:31:38.0 +0200
> +++ linux-2.6.23/Documentation/leds-class.txt 2007-10-21 10:45:35.0 
> +0200
> @@ -47,6 +49,19 @@ overhead, I suggest these become part of
>  above leaves scope for further attributes should they be needed.
> 
> 
> +
> +Hardware accelerated blink of LEDs
> +==
> +
> +Some LEDs can be programmed to blink without any CPU interaction. To
> +support this feature, a LED driver can optionally implement the
> +blink_set() function (see ). If implemeted, the
> +ledtrig-timer tries to use it. The blink_set() function should return
> +0 if the blink setting is supported, or -EINVAL otherwise, which means
> +that the LED will be turned on and off from software by the leds
> +subsystem.

Hardware acceleration of the timer triggers is great to see and worst
case I'll happily apply this patch to the LED tree, thanks.

Before I do, I did wonder if we should enhance the meaning of the
set_blink function a bit. If set_blink is called with delay_on = 0,
delay_off = 0 it could mean "blink with some user friendly value,
hardware assisted". The use for this would be a more generic blink
trigger where you wouldn't need to know about magically hardware
assisted values for blinking, it would simply make an LED blink in a
hardware assisted way.

We also need to document that the brightness_set overrides any blinking
which may or may not be active (which is implied in your driver).

Cheers,

Richard


-
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/


Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-10-23 Thread Richard Purdie
On Sun, 2007-10-21 at 14:54 +0200, Németh Márton wrote:
 From: Márton Németh [EMAIL PROTECTED]
 
 Extends the leds subsystem with a blink_set() callback function which can
 be optionally implemented by a LED driver. If implemented, the driver can use
 the hardware acceleration for blinking a LED.
 
 Signed-off-by: Márton Németh [EMAIL PROTECTED]
 ---
 diff -uprN linux-2.6.23.orig/Documentation/leds-class.txt 
 linux-2.6.23/Documentation/leds-class.txt
 --- linux-2.6.23.orig/Documentation/leds-class.txt2007-10-09 
 22:31:38.0 +0200
 +++ linux-2.6.23/Documentation/leds-class.txt 2007-10-21 10:45:35.0 
 +0200
 @@ -47,6 +49,19 @@ overhead, I suggest these become part of
  above leaves scope for further attributes should they be needed.
 
 
 +
 +Hardware accelerated blink of LEDs
 +==
 +
 +Some LEDs can be programmed to blink without any CPU interaction. To
 +support this feature, a LED driver can optionally implement the
 +blink_set() function (see linux/leds.h). If implemeted, the
 +ledtrig-timer tries to use it. The blink_set() function should return
 +0 if the blink setting is supported, or -EINVAL otherwise, which means
 +that the LED will be turned on and off from software by the leds
 +subsystem.

Hardware acceleration of the timer triggers is great to see and worst
case I'll happily apply this patch to the LED tree, thanks.

Before I do, I did wonder if we should enhance the meaning of the
set_blink function a bit. If set_blink is called with delay_on = 0,
delay_off = 0 it could mean blink with some user friendly value,
hardware assisted. The use for this would be a more generic blink
trigger where you wouldn't need to know about magically hardware
assisted values for blinking, it would simply make an LED blink in a
hardware assisted way.

We also need to document that the brightness_set overrides any blinking
which may or may not be active (which is implied in your driver).

Cheers,

Richard


-
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/


Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

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

Extends the leds subsystem with a blink_set() callback function which can
be optionally implemented by a LED driver. If implemented, the driver can use
the hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh <[EMAIL PROTECTED]>
---
diff -uprN linux-2.6.23.orig/Documentation/leds-class.txt 
linux-2.6.23/Documentation/leds-class.txt
--- linux-2.6.23.orig/Documentation/leds-class.txt  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/Documentation/leds-class.txt   2007-10-21 10:45:35.0 
+0200
@@ -47,6 +49,19 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+
+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see ). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+0 if the blink setting is supported, or -EINVAL otherwise, which means
+that the LED will be turned on and off from software by the leds
+subsystem.
+
+
 Known Issues
 

@@ -55,10 +70,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.23.orig/drivers/leds/Kconfig 
linux-2.6.23/drivers/leds/Kconfig
--- linux-2.6.23.orig/drivers/leds/Kconfig  2007-10-09 22:31:38.0 
+0200
+++ linux-2.6.23/drivers/leds/Kconfig   2007-10-21 12:04:50.0 +0200
@@ -115,7 +148,11 @@ config LEDS_TRIGGER_TIMER
depends on LEDS_TRIGGERS
help
  This allows LEDs to be controlled by a programmable timer
- via sysfs. If unsure, say Y.
+ via sysfs. Some LED hardware can be programmed to start
+ blinking the LED without any further software interaction.
+ For more details read Documentation/leds-class.txt.
+
+ If unsure, say Y.

 config LEDS_TRIGGER_IDE_DISK
bool "LED IDE Disk Trigger"
diff -uprN linux-2.6.23.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.23/drivers/leds/ledtrig-timer.c
--- linux-2.6.23.orig/drivers/leds/ledtrig-timer.c  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/drivers/leds/ledtrig-timer.c   2007-10-18 18:21:34.0 
+0200
@@ -77,8 +77,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data->delay_on = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -110,8 +123,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data->delay_off = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.23.orig/include/linux/leds.h 
linux-2.6.23/include/linux/leds.h
--- linux-2.6.23.orig/include/linux/leds.h  2007-10-09 22:31:38.0 
+0200
+++ linux-2.6.23/include/linux/leds.h   2007-10-18 18:21:34.0 +0200
@@ -37,6 +37,10 @@ struct led_classdev {
void  

Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

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

Extends the leds subsystem with a blink_set() callback function which can
be optionally implemented by a LED driver. If implemented, the driver can use
the hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh [EMAIL PROTECTED]
---
diff -uprN linux-2.6.23.orig/Documentation/leds-class.txt 
linux-2.6.23/Documentation/leds-class.txt
--- linux-2.6.23.orig/Documentation/leds-class.txt  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/Documentation/leds-class.txt   2007-10-21 10:45:35.0 
+0200
@@ -47,6 +49,19 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+
+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see linux/leds.h). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+0 if the blink setting is supported, or -EINVAL otherwise, which means
+that the LED will be turned on and off from software by the leds
+subsystem.
+
+
 Known Issues
 

@@ -55,10 +70,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.23.orig/drivers/leds/Kconfig 
linux-2.6.23/drivers/leds/Kconfig
--- linux-2.6.23.orig/drivers/leds/Kconfig  2007-10-09 22:31:38.0 
+0200
+++ linux-2.6.23/drivers/leds/Kconfig   2007-10-21 12:04:50.0 +0200
@@ -115,7 +148,11 @@ config LEDS_TRIGGER_TIMER
depends on LEDS_TRIGGERS
help
  This allows LEDs to be controlled by a programmable timer
- via sysfs. If unsure, say Y.
+ via sysfs. Some LED hardware can be programmed to start
+ blinking the LED without any further software interaction.
+ For more details read Documentation/leds-class.txt.
+
+ If unsure, say Y.

 config LEDS_TRIGGER_IDE_DISK
bool LED IDE Disk Trigger
diff -uprN linux-2.6.23.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.23/drivers/leds/ledtrig-timer.c
--- linux-2.6.23.orig/drivers/leds/ledtrig-timer.c  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/drivers/leds/ledtrig-timer.c   2007-10-18 18:21:34.0 
+0200
@@ -77,8 +77,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data-delay_on = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -110,8 +123,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data-delay_off = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.23.orig/include/linux/leds.h 
linux-2.6.23/include/linux/leds.h
--- linux-2.6.23.orig/include/linux/leds.h  2007-10-09 22:31:38.0 
+0200
+++ linux-2.6.23/include/linux/leds.h   2007-10-18 18:21:34.0 +0200
@@ -37,6 +37,10 @@ struct led_classdev 

[PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

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

Extends the leds subsystem with a blink_set() callback function which can
be optionally implemented by a LED driver. If implemented, the driver can use
the hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh <[EMAIL PROTECTED]>
---
diff -uprN linux-2.6.23.orig/Documentation/leds-class.txt 
linux-2.6.23/Documentation/leds-class.txt
--- linux-2.6.23.orig/Documentation/leds-class.txt  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/Documentation/leds-class.txt   2007-10-18 06:57:37.0 
+0200
@@ -47,6 +47,18 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see ). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+0 if the blink setting is supported, or -EINVAL otherwise, which means
+that the LED will be turned on and off from software by the leds
+subsystem.
+
+
 Known Issues
 

@@ -55,10 +67,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.23.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.23/drivers/leds/ledtrig-timer.c
--- linux-2.6.23.orig/drivers/leds/ledtrig-timer.c  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/drivers/leds/ledtrig-timer.c   2007-10-18 07:15:14.0 
+0200
@@ -77,8 +77,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data->delay_on = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -110,8 +123,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data->delay_off = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.23.orig/include/linux/leds.h 
linux-2.6.23/include/linux/leds.h
--- linux-2.6.23.orig/include/linux/leds.h  2007-10-09 22:31:38.0 
+0200
+++ linux-2.6.23/include/linux/leds.h   2007-10-18 07:17:30.0 +0200
@@ -37,6 +37,10 @@ struct led_classdev {
void(*brightness_set)(struct led_classdev *led_cdev,
  enum led_brightness brightness);

+   /* Activate hardware accelerated blink */
+   int (*blink_set)(struct led_classdev *led_cdev,
+int delay_on, int delay_off);
+
struct device   *dev;
struct list_head node;  /* LED Device list */
char*default_trigger;   /* Trigger to use */
-
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  

[PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

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

Extends the leds subsystem with a blink_set() callback function which can
be optionally implemented by a LED driver. If implemented, the driver can use
the hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh [EMAIL PROTECTED]
---
diff -uprN linux-2.6.23.orig/Documentation/leds-class.txt 
linux-2.6.23/Documentation/leds-class.txt
--- linux-2.6.23.orig/Documentation/leds-class.txt  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/Documentation/leds-class.txt   2007-10-18 06:57:37.0 
+0200
@@ -47,6 +47,18 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see linux/leds.h). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+0 if the blink setting is supported, or -EINVAL otherwise, which means
+that the LED will be turned on and off from software by the leds
+subsystem.
+
+
 Known Issues
 

@@ -55,10 +67,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.23.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.23/drivers/leds/ledtrig-timer.c
--- linux-2.6.23.orig/drivers/leds/ledtrig-timer.c  2007-10-09 
22:31:38.0 +0200
+++ linux-2.6.23/drivers/leds/ledtrig-timer.c   2007-10-18 07:15:14.0 
+0200
@@ -77,8 +77,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data-delay_on = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -110,8 +123,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data-delay_off = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.23.orig/include/linux/leds.h 
linux-2.6.23/include/linux/leds.h
--- linux-2.6.23.orig/include/linux/leds.h  2007-10-09 22:31:38.0 
+0200
+++ linux-2.6.23/include/linux/leds.h   2007-10-18 07:17:30.0 +0200
@@ -37,6 +37,10 @@ struct led_classdev {
void(*brightness_set)(struct led_classdev *led_cdev,
  enum led_brightness brightness);

+   /* Activate hardware accelerated blink */
+   int (*blink_set)(struct led_classdev *led_cdev,
+int delay_on, int delay_off);
+
struct device   *dev;
struct list_head node;  /* LED Device list */
char*default_trigger;   /* Trigger to use */
-
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  

Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-07-17 Thread Németh Márton

From: Márton Németh <[EMAIL PROTECTED]>

Extends the leds subsystem with a blink_set() callback function which can
optionally implemented by a LED driver. If implemented, the driver can use the
hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh <[EMAIL PROTECTED]>
---
diff -uprN linux-2.6.22.orig/Documentation/leds-class.txt 
linux-2.6.22/Documentation/leds-class.txt
--- linux-2.6.22.orig/Documentation/leds-class.txt  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/Documentation/leds-class.txt   2007-07-17 17:07:44.0 
+0200
@@ -47,6 +47,17 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see ). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+0 if the blink setting is supported, or -EINVAL otherwise, which means
+that the LED will be turned on and off from software.
+
+
 Known Issues
 

@@ -55,10 +66,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.22.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.22/drivers/leds/ledtrig-timer.c
--- linux-2.6.22.orig/drivers/leds/ledtrig-timer.c  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/drivers/leds/ledtrig-timer.c   2007-07-17 17:45:56.0 
+0200
@@ -76,8 +76,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data->delay_on = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -108,8 +121,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data->delay_off = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.22.orig/include/linux/leds.h 
linux-2.6.22/include/linux/leds.h
--- linux-2.6.22.orig/include/linux/leds.h  2007-07-09 01:32:17.0 
+0200
+++ linux-2.6.22/include/linux/leds.h   2007-07-17 10:52:18.0 +0200
@@ -38,6 +38,11 @@ struct led_classdev {
void(*brightness_set)(struct led_classdev *led_cdev,
  enum led_brightness brightness);

+   /* Activate hardware accelerated blink */
+   int (*blink_set)(struct led_classdev *led_cdev,
+int delay_on, int delay_off);
+
+
struct class_device *class_dev;
struct list_head node;  /* LED Device list */
char*default_trigger;   /* Trigger to use */
-
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/


Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-07-17 Thread Dmitry Torokhov

On 7/17/07, Németh Márton <[EMAIL PROTECTED]> wrote:


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see ). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+1 if the blink setting is supported, or 0 otherwise, which means that
+the LED will be turned on and off from software.


Normally object methods in kernel return 0 on success and error code
(such as -EINVAL for unsupported parameters) on error.

--
Dmitry
-
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 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-07-17 Thread Németh Márton

From: Márton Németh <[EMAIL PROTECTED]>

Extends the leds subsystem with a blink_set() callback function which can
optionally implemented by a LED driver. If implemented, the driver can use the
hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh <[EMAIL PROTECTED]>
---
diff -uprN linux-2.6.22.orig/Documentation/leds-class.txt 
linux-2.6.22/Documentation/leds-class.txt
--- linux-2.6.22.orig/Documentation/leds-class.txt  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/Documentation/leds-class.txt   2007-07-16 20:53:38.0 
+0200
@@ -47,6 +47,17 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see ). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+1 if the blink setting is supported, or 0 otherwise, which means that
+the LED will be turned on and off from software.
+
+
 Known Issues
 

@@ -55,10 +66,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.22.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.22/drivers/leds/ledtrig-timer.c
--- linux-2.6.22.orig/drivers/leds/ledtrig-timer.c  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/drivers/leds/ledtrig-timer.c   2007-07-17 09:43:20.0 
+0200
@@ -76,8 +76,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data->delay_on = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   !led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -108,8 +121,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data->delay_off = state;
-   mod_timer(_data->timer, jiffies + 1);
+   if (timer_data->delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data->delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(_data->timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev->blink_set ||
+   !led_cdev->blink_set(led_cdev,
+   timer_data->delay_on, timer_data->delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(_data->timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.22.orig/include/linux/leds.h 
linux-2.6.22/include/linux/leds.h
--- linux-2.6.22.orig/include/linux/leds.h  2007-07-09 01:32:17.0 
+0200
+++ linux-2.6.22/include/linux/leds.h   2007-07-16 20:53:38.0 +0200
@@ -38,6 +38,11 @@ struct led_classdev {
void(*brightness_set)(struct led_classdev *led_cdev,
  enum led_brightness brightness);

+   /* Activate hardware accelerated blink */
+   int (*blink_set)(struct led_classdev *led_cdev,
+int delay_on, int delay_off);
+
+
struct class_device *class_dev;
struct list_head node;  /* LED Device list */
char*default_trigger;   /* Trigger to use */

-
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 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-07-17 Thread Németh Márton

From: Márton Németh [EMAIL PROTECTED]

Extends the leds subsystem with a blink_set() callback function which can
optionally implemented by a LED driver. If implemented, the driver can use the
hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh [EMAIL PROTECTED]
---
diff -uprN linux-2.6.22.orig/Documentation/leds-class.txt 
linux-2.6.22/Documentation/leds-class.txt
--- linux-2.6.22.orig/Documentation/leds-class.txt  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/Documentation/leds-class.txt   2007-07-16 20:53:38.0 
+0200
@@ -47,6 +47,17 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see linux/leds.h). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+1 if the blink setting is supported, or 0 otherwise, which means that
+the LED will be turned on and off from software.
+
+
 Known Issues
 

@@ -55,10 +66,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.22.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.22/drivers/leds/ledtrig-timer.c
--- linux-2.6.22.orig/drivers/leds/ledtrig-timer.c  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/drivers/leds/ledtrig-timer.c   2007-07-17 09:43:20.0 
+0200
@@ -76,8 +76,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data-delay_on = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   !led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -108,8 +121,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data-delay_off = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   !led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.22.orig/include/linux/leds.h 
linux-2.6.22/include/linux/leds.h
--- linux-2.6.22.orig/include/linux/leds.h  2007-07-09 01:32:17.0 
+0200
+++ linux-2.6.22/include/linux/leds.h   2007-07-16 20:53:38.0 +0200
@@ -38,6 +38,11 @@ struct led_classdev {
void(*brightness_set)(struct led_classdev *led_cdev,
  enum led_brightness brightness);

+   /* Activate hardware accelerated blink */
+   int (*blink_set)(struct led_classdev *led_cdev,
+int delay_on, int delay_off);
+
+
struct class_device *class_dev;
struct list_head node;  /* LED Device list */
char*default_trigger;   /* Trigger to use */

-
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  

Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-07-17 Thread Dmitry Torokhov

On 7/17/07, Németh Márton [EMAIL PROTECTED] wrote:


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see linux/leds.h). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+1 if the blink setting is supported, or 0 otherwise, which means that
+the LED will be turned on and off from software.


Normally object methods in kernel return 0 on success and error code
(such as -EINVAL for unsupported parameters) on error.

--
Dmitry
-
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/


Re: [PATCH 2/3] leds-clevo-mail: hw accelerated LED blink extension

2007-07-17 Thread Németh Márton

From: Márton Németh [EMAIL PROTECTED]

Extends the leds subsystem with a blink_set() callback function which can
optionally implemented by a LED driver. If implemented, the driver can use the
hardware acceleration for blinking a LED.

Signed-off-by: Márton Németh [EMAIL PROTECTED]
---
diff -uprN linux-2.6.22.orig/Documentation/leds-class.txt 
linux-2.6.22/Documentation/leds-class.txt
--- linux-2.6.22.orig/Documentation/leds-class.txt  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/Documentation/leds-class.txt   2007-07-17 17:07:44.0 
+0200
@@ -47,6 +47,17 @@ overhead, I suggest these become part of
 above leaves scope for further attributes should they be needed.


+Hardware accelerated blink of LEDs
+==
+
+Some LEDs can be programmed to blink without any CPU interaction. To
+support this feature, a LED driver can optionally implement the
+blink_set() function (see linux/leds.h). If implemeted, the
+ledtrig-timer tries to use it. The blink_set() function should return
+0 if the blink setting is supported, or -EINVAL otherwise, which means
+that the LED will be turned on and off from software.
+
+
 Known Issues
 

@@ -55,10 +66,6 @@ would cause nightmare dependency issues.
 compared to the benefits the simple trigger functionality brings. The
 rest of the LED subsystem can be modular.

-Some leds can be programmed to flash in hardware. As this isn't a generic
-LED device property, this should be exported as a device specific sysfs
-attribute rather than part of the class if this functionality is required.
-

 Future Development
 ==
diff -uprN linux-2.6.22.orig/drivers/leds/ledtrig-timer.c 
linux-2.6.22/drivers/leds/ledtrig-timer.c
--- linux-2.6.22.orig/drivers/leds/ledtrig-timer.c  2007-07-09 
01:32:17.0 +0200
+++ linux-2.6.22/drivers/leds/ledtrig-timer.c   2007-07-17 17:45:56.0 
+0200
@@ -76,8 +76,21 @@ static ssize_t led_delay_on_store(struct
count++;

if (count == size) {
-   timer_data-delay_on = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_on != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_on = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

@@ -108,8 +121,21 @@ static ssize_t led_delay_off_store(struc
count++;

if (count == size) {
-   timer_data-delay_off = state;
-   mod_timer(timer_data-timer, jiffies + 1);
+   if (timer_data-delay_off != state) {
+   /* the new value differs from the previous */
+   timer_data-delay_off = state;
+
+   /* deactivate previous settings */
+   del_timer_sync(timer_data-timer);
+
+   /* try to activate hardware acceleration, if any */
+   if (!led_cdev-blink_set ||
+   led_cdev-blink_set(led_cdev,
+   timer_data-delay_on, timer_data-delay_off)) {
+   /* no hardware acceleration, blink via timer */
+   mod_timer(timer_data-timer, jiffies + 1);
+   }
+   }
ret = count;
}

diff -uprN linux-2.6.22.orig/include/linux/leds.h 
linux-2.6.22/include/linux/leds.h
--- linux-2.6.22.orig/include/linux/leds.h  2007-07-09 01:32:17.0 
+0200
+++ linux-2.6.22/include/linux/leds.h   2007-07-17 10:52:18.0 +0200
@@ -38,6 +38,11 @@ struct led_classdev {
void(*brightness_set)(struct led_classdev *led_cdev,
  enum led_brightness brightness);

+   /* Activate hardware accelerated blink */
+   int (*blink_set)(struct led_classdev *led_cdev,
+int delay_on, int delay_off);
+
+
struct class_device *class_dev;
struct list_head node;  /* LED Device list */
char*default_trigger;   /* Trigger to use */
-
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