Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 117741
b: refs/heads/master
c: 132e930
h: refs/heads/master
i:
  117739: 719f7d2
v: v3
  • Loading branch information
Rodolfo Giometti authored and Richard Purdie committed Oct 20, 2008
1 parent 29360d9 commit dece921
Show file tree
Hide file tree
Showing 4 changed files with 121 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 9e84561c8c8671d9e58d1893cc524a71b20c9183
refs/heads/master: 132e9306beedd049bc5de037f1996731a2ca3eed
9 changes: 9 additions & 0 deletions trunk/drivers/leds/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,15 @@ config LEDS_TRIGGER_HEARTBEAT
load average.
If unsure, say Y.

config LEDS_TRIGGER_BACKLIGHT
tristate "LED backlight Trigger"
depends on LEDS_TRIGGERS
help
This allows LEDs to be controlled as a backlight device: they
turn off and on when the display is blanked and unblanked.

If unsure, say N.

config LEDS_TRIGGER_DEFAULT_ON
tristate "LED Default ON Trigger"
depends on LEDS_TRIGGERS
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/leds/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ obj-$(CONFIG_LEDS_DA903X) += leds-da903x.o
obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK) += ledtrig-ide-disk.o
obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o
obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o
obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
110 changes: 110 additions & 0 deletions trunk/drivers/leds/ledtrig-backlight.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*
* Backlight emulation LED trigger
*
* Copyright 2008 (C) Rodolfo Giometti <giometti@linux.it>
* Copyright 2008 (C) Eurotech S.p.A. <info@eurotech.it>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fb.h>
#include <linux/leds.h>
#include "leds.h"

#define BLANK 1
#define UNBLANK 0

struct bl_trig_notifier {
struct led_classdev *led;
int brightness;
int old_status;
struct notifier_block notifier;
};

static int fb_notifier_callback(struct notifier_block *p,
unsigned long event, void *data)
{
struct bl_trig_notifier *n = container_of(p,
struct bl_trig_notifier, notifier);
struct led_classdev *led = n->led;
struct fb_event *fb_event = data;
int *blank = fb_event->data;

switch (event) {
case FB_EVENT_BLANK :
if (*blank && n->old_status == UNBLANK) {
n->brightness = led->brightness;
led_set_brightness(led, LED_OFF);
n->old_status = BLANK;
} else if (!*blank && n->old_status == BLANK) {
led_set_brightness(led, n->brightness);
n->old_status = UNBLANK;
}
break;
}

return 0;
}

static void bl_trig_activate(struct led_classdev *led)
{
int ret;

struct bl_trig_notifier *n;

n = kzalloc(sizeof(struct bl_trig_notifier), GFP_KERNEL);
led->trigger_data = n;
if (!n) {
dev_err(led->dev, "unable to allocate backlight trigger\n");
return;
}

n->led = led;
n->brightness = led->brightness;
n->old_status = UNBLANK;
n->notifier.notifier_call = fb_notifier_callback;

ret = fb_register_client(&n->notifier);
if (ret)
dev_err(led->dev, "unable to register backlight trigger\n");
}

static void bl_trig_deactivate(struct led_classdev *led)
{
struct bl_trig_notifier *n =
(struct bl_trig_notifier *) led->trigger_data;

if (n) {
fb_unregister_client(&n->notifier);
kfree(n);
}
}

static struct led_trigger bl_led_trigger = {
.name = "backlight",
.activate = bl_trig_activate,
.deactivate = bl_trig_deactivate
};

static int __init bl_trig_init(void)
{
return led_trigger_register(&bl_led_trigger);
}

static void __exit bl_trig_exit(void)
{
led_trigger_unregister(&bl_led_trigger);
}

module_init(bl_trig_init);
module_exit(bl_trig_exit);

MODULE_AUTHOR("Rodolfo Giometti <giometti@linux.it>");
MODULE_DESCRIPTION("Backlight emulation LED trigger");
MODULE_LICENSE("GPL v2");

0 comments on commit dece921

Please sign in to comment.