linux/arch/arm/mach-pxa/leds-lubbock.c
<<
>>
Prefs
   1/*
   2 * linux/arch/arm/mach-pxa/leds-lubbock.c
   3 *
   4 * Copyright (C) 2000 John Dorsey <john+@cs.cmu.edu>
   5 *
   6 * Copyright (c) 2001 Jeff Sutherland <jeffs@accelent.com>
   7 *
   8 * Original (leds-footbridge.c) by Russell King
   9 *
  10 * Major surgery on April 2004 by Nicolas Pitre for less global
  11 * namespace collision.  Mostly adapted the Mainstone version.
  12 */
  13
  14#include <linux/init.h>
  15
  16#include <asm/hardware.h>
  17#include <asm/leds.h>
  18#include <asm/system.h>
  19#include <asm/arch/pxa-regs.h>
  20#include <asm/arch/lubbock.h>
  21
  22#include "leds.h"
  23
  24/*
  25 * 8 discrete leds available for general use:
  26 *
  27 * Note: bits [15-8] are used to enable/blank the 8 7 segment hex displays
  28 * so be sure to not monkey with them here.
  29 */
  30
  31#define D28                     (1 << 0)
  32#define D27                     (1 << 1)
  33#define D26                     (1 << 2)
  34#define D25                     (1 << 3)
  35#define D24                     (1 << 4)
  36#define D23                     (1 << 5)
  37#define D22                     (1 << 6)
  38#define D21                     (1 << 7)
  39
  40#define LED_STATE_ENABLED       1
  41#define LED_STATE_CLAIMED       2
  42
  43static unsigned int led_state;
  44static unsigned int hw_led_state;
  45
  46void lubbock_leds_event(led_event_t evt)
  47{
  48        unsigned long flags;
  49
  50        local_irq_save(flags);
  51
  52        switch (evt) {
  53        case led_start:
  54                hw_led_state = 0;
  55                led_state = LED_STATE_ENABLED;
  56                break;
  57
  58        case led_stop:
  59                led_state &= ~LED_STATE_ENABLED;
  60                break;
  61
  62        case led_claim:
  63                led_state |= LED_STATE_CLAIMED;
  64                hw_led_state = 0;
  65                break;
  66
  67        case led_release:
  68                led_state &= ~LED_STATE_CLAIMED;
  69                hw_led_state = 0;
  70                break;
  71
  72#ifdef CONFIG_LEDS_TIMER
  73        case led_timer:
  74                hw_led_state ^= D26;
  75                break;
  76#endif
  77
  78#ifdef CONFIG_LEDS_CPU
  79        case led_idle_start:
  80                hw_led_state &= ~D27;
  81                break;
  82
  83        case led_idle_end:
  84                hw_led_state |= D27;
  85                break;
  86#endif
  87
  88        case led_halted:
  89                break;
  90
  91        case led_green_on:
  92                hw_led_state |= D21;
  93                break;
  94
  95        case led_green_off:
  96                hw_led_state &= ~D21;
  97                break;
  98
  99        case led_amber_on:
 100                hw_led_state |= D22;
 101                break;
 102
 103        case led_amber_off:
 104                hw_led_state &= ~D22;
 105                break;
 106
 107        case led_red_on:
 108                hw_led_state |= D23;
 109                break;
 110
 111        case led_red_off:
 112                hw_led_state &= ~D23;
 113                break;
 114
 115        default:
 116                break;
 117        }
 118
 119        if  (led_state & LED_STATE_ENABLED)
 120                LUB_DISC_BLNK_LED = (LUB_DISC_BLNK_LED | 0xff) & ~hw_led_state;
 121        else
 122                LUB_DISC_BLNK_LED |= 0xff;
 123
 124        local_irq_restore(flags);
 125}
 126