Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-ks8695/leds.c
10817 views
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
*/
10
11
#include <linux/kernel.h>
12
#include <linux/module.h>
13
#include <linux/init.h>
14
15
#include <asm/leds.h>
16
#include <mach/devices.h>
17
#include <mach/gpio.h>
18
19
20
static inline void ks8695_led_on(unsigned int led)
21
{
22
gpio_set_value(led, 0);
23
}
24
25
static inline void ks8695_led_off(unsigned int led)
26
{
27
gpio_set_value(led, 1);
28
}
29
30
static 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
*/
43
static 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
82
static 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);
94
95