Release 4.7 drivers/leds/trigger/ledtrig-backlight.c
/*
* 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/slab.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;
unsigned invert;
};
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;
int new_status;
/* If we aren't interested in this event, skip it immediately ... */
if (event != FB_EVENT_BLANK)
return 0;
blank = fb_event->data;
new_status = *blank ? BLANK : UNBLANK;
if (new_status == n->old_status)
return 0;
if ((n->old_status == UNBLANK) ^ n->invert) {
n->brightness = led->brightness;
led_set_brightness_nosleep(led, LED_OFF);
} else {
led_set_brightness_nosleep(led, n->brightness);
}
n->old_status = new_status;
return 0;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
rodolfo giometti | rodolfo giometti | 83 | 57.24% | 1 | 25.00% |
janusz krzysztofik | janusz krzysztofik | 38 | 26.21% | 1 | 25.00% |
manfred schlaegl | manfred schlaegl | 22 | 15.17% | 1 | 25.00% |
jacek anaszewski | jacek anaszewski | 2 | 1.38% | 1 | 25.00% |
| Total | 145 | 100.00% | 4 | 100.00% |
static ssize_t bl_trig_invert_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct led_classdev *led = dev_get_drvdata(dev);
struct bl_trig_notifier *n = led->trigger_data;
return sprintf(buf, "%u\n", n->invert);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
janusz krzysztofik | janusz krzysztofik | 50 | 98.04% | 1 | 50.00% |
rodolfo giometti | rodolfo giometti | 1 | 1.96% | 1 | 50.00% |
| Total | 51 | 100.00% | 2 | 100.00% |
static ssize_t bl_trig_invert_store(struct device *dev,
struct device_attribute *attr, const char *buf, size_t num)
{
struct led_classdev *led = dev_get_drvdata(dev);
struct bl_trig_notifier *n = led->trigger_data;
unsigned long invert;
int ret;
ret = kstrtoul(buf, 10, &invert);
if (ret < 0)
return ret;
if (invert > 1)
return -EINVAL;
n->invert = invert;
/* After inverting, we need to update the LED. */
if ((n->old_status == BLANK) ^ n->invert)
led_set_brightness_nosleep(led, LED_OFF);
else
led_set_brightness_nosleep(led, n->brightness);
return num;
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
janusz krzysztofik | janusz krzysztofik | 100 | 81.97% | 1 | 25.00% |
rodolfo giometti | rodolfo giometti | 19 | 15.57% | 1 | 25.00% |
jacek anaszewski | jacek anaszewski | 2 | 1.64% | 1 | 25.00% |
jingoo han | jingoo han | 1 | 0.82% | 1 | 25.00% |
| Total | 122 | 100.00% | 4 | 100.00% |
static DEVICE_ATTR(inverted, 0644, bl_trig_invert_show, bl_trig_invert_store);
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;
}
ret = device_create_file(led->dev, &dev_attr_inverted);
if (ret)
goto err_invert;
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");
led->activated = true;
return;
err_invert:
led->trigger_data = NULL;
kfree(n);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
rodolfo giometti | rodolfo giometti | 106 | 73.10% | 1 | 33.33% |
janusz krzysztofik | janusz krzysztofik | 33 | 22.76% | 1 | 33.33% |
shuah khan | shuah khan | 6 | 4.14% | 1 | 33.33% |
| Total | 145 | 100.00% | 3 | 100.00% |
static void bl_trig_deactivate(struct led_classdev *led)
{
struct bl_trig_notifier *n =
(struct bl_trig_notifier *) led->trigger_data;
if (led->activated) {
device_remove_file(led->dev, &dev_attr_inverted);
fb_unregister_client(&n->notifier);
kfree(n);
led->activated = false;
}
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
rodolfo giometti | rodolfo giometti | 43 | 69.35% | 1 | 33.33% |
janusz krzysztofik | janusz krzysztofik | 10 | 16.13% | 1 | 33.33% |
shuah khan | shuah khan | 9 | 14.52% | 1 | 33.33% |
| Total | 62 | 100.00% | 3 | 100.00% |
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);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
rodolfo giometti | rodolfo giometti | 16 | 100.00% | 1 | 100.00% |
| Total | 16 | 100.00% | 1 | 100.00% |
static void __exit bl_trig_exit(void)
{
led_trigger_unregister(&bl_led_trigger);
}
Contributors
| Person | Tokens | Prop | Commits | CommitProp |
rodolfo giometti | rodolfo giometti | 15 | 100.00% | 1 | 100.00% |
| Total | 15 | 100.00% | 1 | 100.00% |
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");
Overall Contributors
| Person | Tokens | Prop | Commits | CommitProp |
rodolfo giometti | rodolfo giometti | 376 | 56.29% | 1 | 12.50% |
janusz krzysztofik | janusz krzysztofik | 246 | 36.83% | 1 | 12.50% |
manfred schlaegl | manfred schlaegl | 22 | 3.29% | 1 | 12.50% |
shuah khan | shuah khan | 15 | 2.25% | 1 | 12.50% |
jacek anaszewski | jacek anaszewski | 4 | 0.60% | 1 | 12.50% |
tejun heo | tejun heo | 3 | 0.45% | 1 | 12.50% |
jingoo han | jingoo han | 1 | 0.15% | 1 | 12.50% |
kim milo | kim milo | 1 | 0.15% | 1 | 12.50% |
| Total | 668 | 100.00% | 8 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.