linux/arch/arm/mach-ks8695/leds.c
<<
>>
Prefs
   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);
  94
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.