PageRenderTime 17ms CodeModel.GetById 11ms app.highlight 5ms RepoModel.GetById 0ms app.codeStats 0ms

/arch/arm/mach-ks8695/leds.c

https://bitbucket.org/sammyz/iscream_thunderc-2.6.35-rebase
C | 93 lines | 60 code | 21 blank | 12 comment | 5 complexity | 8dfcc63c6cd63e1ff21091d5906581bd MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
 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
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);