OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [arm/] [mach-omap1/] [leds-h2p2-debug.c] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 xianfeng
/*
2
 * linux/arch/arm/mach-omap1/leds-h2p2-debug.c
3
 *
4
 * Copyright 2003 by Texas Instruments Incorporated
5
 *
6
 * There are 16 LEDs on the debug board (all green); four may be used
7
 * for logical 'green', 'amber', 'red', and 'blue' (after "claiming").
8
 *
9
 * The "surfer" expansion board and H2 sample board also have two-color
10
 * green+red LEDs (in parallel), used here for timer and idle indicators.
11
 */
12
#include <linux/init.h>
13
#include <linux/kernel_stat.h>
14
#include <linux/sched.h>
15
 
16
#include <asm/io.h>
17
#include <asm/hardware.h>
18
#include <asm/leds.h>
19
#include <asm/system.h>
20
#include <asm/mach-types.h>
21
 
22
#include <asm/arch/fpga.h>
23
#include <asm/arch/gpio.h>
24
 
25
#include "leds.h"
26
 
27
 
28
#define GPIO_LED_RED            3
29
#define GPIO_LED_GREEN          OMAP_MPUIO(4)
30
 
31
 
32
#define LED_STATE_ENABLED       0x01
33
#define LED_STATE_CLAIMED       0x02
34
#define LED_TIMER_ON            0x04
35
 
36
#define GPIO_IDLE               GPIO_LED_GREEN
37
#define GPIO_TIMER              GPIO_LED_RED
38
 
39
 
40
void h2p2_dbg_leds_event(led_event_t evt)
41
{
42
        unsigned long flags;
43
 
44
        static struct h2p2_dbg_fpga __iomem *fpga;
45
        static u16 led_state, hw_led_state;
46
 
47
        local_irq_save(flags);
48
 
49
        if (!(led_state & LED_STATE_ENABLED) && evt != led_start)
50
                goto done;
51
 
52
        switch (evt) {
53
        case led_start:
54
                if (!fpga)
55
                        fpga = ioremap(H2P2_DBG_FPGA_START,
56
                                                H2P2_DBG_FPGA_SIZE);
57
                if (fpga) {
58
                        led_state |= LED_STATE_ENABLED;
59
                        __raw_writew(~0, &fpga->leds);
60
                }
61
                break;
62
 
63
        case led_stop:
64
        case led_halted:
65
                /* all leds off during suspend or shutdown */
66
 
67
                if (! machine_is_omap_perseus2()) {
68
                        omap_set_gpio_dataout(GPIO_TIMER, 0);
69
                        omap_set_gpio_dataout(GPIO_IDLE, 0);
70
                }
71
 
72
                __raw_writew(~0, &fpga->leds);
73
                led_state &= ~LED_STATE_ENABLED;
74
                if (evt == led_halted) {
75
                        iounmap(fpga);
76
                        fpga = NULL;
77
                }
78
 
79
                goto done;
80
 
81
        case led_claim:
82
                led_state |= LED_STATE_CLAIMED;
83
                hw_led_state = 0;
84
                break;
85
 
86
        case led_release:
87
                led_state &= ~LED_STATE_CLAIMED;
88
                break;
89
 
90
#ifdef CONFIG_LEDS_TIMER
91
        case led_timer:
92
                led_state ^= LED_TIMER_ON;
93
 
94
                if (machine_is_omap_perseus2())
95
                        hw_led_state ^= H2P2_DBG_FPGA_P2_LED_TIMER;
96
                else {
97
                        omap_set_gpio_dataout(GPIO_TIMER, led_state & LED_TIMER_ON);
98
                        goto done;
99
                }
100
 
101
                break;
102
#endif
103
 
104
#ifdef CONFIG_LEDS_CPU
105
        case led_idle_start:
106
                if (machine_is_omap_perseus2())
107
                        hw_led_state |= H2P2_DBG_FPGA_P2_LED_IDLE;
108
                else {
109
                        omap_set_gpio_dataout(GPIO_IDLE, 1);
110
                        goto done;
111
                }
112
 
113
                break;
114
 
115
        case led_idle_end:
116
                if (machine_is_omap_perseus2())
117
                        hw_led_state &= ~H2P2_DBG_FPGA_P2_LED_IDLE;
118
                else {
119
                        omap_set_gpio_dataout(GPIO_IDLE, 0);
120
                        goto done;
121
                }
122
 
123
                break;
124
#endif
125
 
126
        case led_green_on:
127
                hw_led_state |= H2P2_DBG_FPGA_LED_GREEN;
128
                break;
129
        case led_green_off:
130
                hw_led_state &= ~H2P2_DBG_FPGA_LED_GREEN;
131
                break;
132
 
133
        case led_amber_on:
134
                hw_led_state |= H2P2_DBG_FPGA_LED_AMBER;
135
                break;
136
        case led_amber_off:
137
                hw_led_state &= ~H2P2_DBG_FPGA_LED_AMBER;
138
                break;
139
 
140
        case led_red_on:
141
                hw_led_state |= H2P2_DBG_FPGA_LED_RED;
142
                break;
143
        case led_red_off:
144
                hw_led_state &= ~H2P2_DBG_FPGA_LED_RED;
145
                break;
146
 
147
        case led_blue_on:
148
                hw_led_state |= H2P2_DBG_FPGA_LED_BLUE;
149
                break;
150
        case led_blue_off:
151
                hw_led_state &= ~H2P2_DBG_FPGA_LED_BLUE;
152
                break;
153
 
154
        default:
155
                break;
156
        }
157
 
158
 
159
        /*
160
         *  Actually burn the LEDs
161
         */
162
        if (led_state & LED_STATE_ENABLED)
163
                __raw_writew(~hw_led_state, &fpga->leds);
164
 
165
done:
166
        local_irq_restore(flags);
167
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.