Merge branch 'next/cross-platform' of git://git.linaro.org/people/arnd/arm-soc
[deliverable/linux.git] / arch / arm / mach-ks8695 / leds.c
CommitLineData
fdb72fd8
AV
1/*
2 * LED driver for KS8695-based boards.
3 *
4 * Copyright (C) Andrew Victor
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
2f8163ba 10#include <linux/gpio.h>
fdb72fd8
AV
11#include <linux/kernel.h>
12#include <linux/module.h>
13#include <linux/init.h>
386ab640 14#include <linux/gpio.h>
fdb72fd8 15
fdb72fd8 16#include <asm/leds.h>
a09e64fb 17#include <mach/devices.h>
fdb72fd8
AV
18
19
20static inline void ks8695_led_on(unsigned int led)
21{
22 gpio_set_value(led, 0);
23}
24
25static inline void ks8695_led_off(unsigned int led)
26{
27 gpio_set_value(led, 1);
28}
29
30static inline void ks8695_led_toggle(unsigned int led)
31{
32 unsigned long is_off = gpio_get_value(led);
33 if (is_off)
34 ks8695_led_on(led);
35 else
36 ks8695_led_off(led);
37}
38
39
40/*
41 * Handle LED events.
42 */
43static void ks8695_leds_event(led_event_t evt)
44{
45 unsigned long flags;
46
47 local_irq_save(flags);
48
49 switch(evt) {
50 case led_start: /* System startup */
51 ks8695_led_on(ks8695_leds_cpu);
52 break;
53
54 case led_stop: /* System stop / suspend */
55 ks8695_led_off(ks8695_leds_cpu);
56 break;
57
58#ifdef CONFIG_LEDS_TIMER
59 case led_timer: /* Every 50 timer ticks */
60 ks8695_led_toggle(ks8695_leds_timer);
61 break;
62#endif
63
64#ifdef CONFIG_LEDS_CPU
65 case led_idle_start: /* Entering idle state */
66 ks8695_led_off(ks8695_leds_cpu);
67 break;
68
69 case led_idle_end: /* Exit idle state */
70 ks8695_led_on(ks8695_leds_cpu);
71 break;
72#endif
73
74 default:
75 break;
76 }
77
78 local_irq_restore(flags);
79}
80
81
82static int __init leds_init(void)
83{
84 if ((ks8695_leds_timer == -1) || (ks8695_leds_cpu == -1))
85 return -ENODEV;
86
87 leds_event = ks8695_leds_event;
88
89 leds_event(led_start);
90 return 0;
91}
92
93__initcall(leds_init);
This page took 0.366656 seconds and 5 git commands to generate.