On Fri, Oct 01, 2010 at 10:17:46AM -0500, Bill Gatliff wrote: > Signed-off-by: Bill Gatliff <bgat@xxxxxxxxxxxxxxx> Ditto on description Otherwise pretty straight forward. Looks okay to me. g. > --- > drivers/leds/ledtrig-dim.c | 96 ++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 96 insertions(+), 0 deletions(-) > create mode 100644 drivers/leds/ledtrig-dim.c > > diff --git a/drivers/leds/ledtrig-dim.c b/drivers/leds/ledtrig-dim.c > new file mode 100644 > index 0000000..8f93f44 > --- /dev/null > +++ b/drivers/leds/ledtrig-dim.c > @@ -0,0 +1,96 @@ > +/* > + * LED Dim Trigger > + * > + * Copyright (C) 2010 Bill Gatliff <bgat@xxxxxxxxxxxxxxx> > + * > + * "Dims" an LED based on system load. Derived from Atsushi Nemoto's > + * ledtrig-heartbeat.c. > + * > + * 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/timer.h> > +#include <linux/sched.h> > +#include <linux/leds.h> > + > +#include "leds.h" > + > +struct dim_trig_data { > + struct timer_list timer; > +}; > + > + > +static void > +led_dim_function(unsigned long data) > +{ > + struct led_classdev *led_cdev = (struct led_classdev *)data; > + struct dim_trig_data *dim_data = led_cdev->trigger_data; > + unsigned int brightness; > + > + brightness = ((LED_FULL - LED_OFF) * avenrun[0]) / EXP_1; > + if (brightness > LED_FULL) > + brightness = LED_FULL; > + > + led_set_brightness(led_cdev, brightness); > + mod_timer(&dim_data->timer, jiffies + msecs_to_jiffies(500)); > +} > + > + > +static void > +dim_trig_activate(struct led_classdev *led_cdev) > +{ > + struct dim_trig_data *dim_data; > + > + dim_data = kzalloc(sizeof(*dim_data), GFP_KERNEL); > + if (!dim_data) > + return; > + > + led_cdev->trigger_data = dim_data; > + setup_timer(&dim_data->timer, > + led_dim_function, (unsigned long)led_cdev); > + led_dim_function(dim_data->timer.data); > +} > + > + > +static void > +dim_trig_deactivate(struct led_classdev *led_cdev) > +{ > + struct dim_trig_data *dim_data = led_cdev->trigger_data; > + > + if (dim_data) { > + del_timer_sync(&dim_data->timer); > + kfree(dim_data); > + } > +} > + > + > +static struct led_trigger dim_led_trigger = { > + .name = "dim", > + .activate = dim_trig_activate, > + .deactivate = dim_trig_deactivate, > +}; > + > + > +static int __init dim_trig_init(void) > +{ > + return led_trigger_register(&dim_led_trigger); > +} > +module_init(dim_trig_init); > + > + > +static void __exit dim_trig_exit(void) > +{ > + led_trigger_unregister(&dim_led_trigger); > +} > +module_exit(dim_trig_exit); > + > + > +MODULE_AUTHOR("Bill Gatliff <bgat@xxxxxxxxxxxxxxx>"); > +MODULE_DESCRIPTION("Dim LED trigger"); > +MODULE_LICENSE("GPL"); > -- > 1.7.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-embedded" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-embedded" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html