summaryrefslogtreecommitdiffstats
path: root/led/led.h
blob: 3fee6841e5bb51421caf04709911cfc1f1de2fc4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
 *  LED -- simple LED support
 */

#ifndef __LED_h
#define __LED_h

#define __LONG_LED

#include <stdio.h>

#if defined(mbx860)

#define MBX_LED_REG *((volatile unsigned char *)0xfa100001)

#define LED_ON()  MBX_LED_REG = 0x0F
#define LED_OFF() MBX_LED_REG = 0x00

#elif defined(icecube)

#include <bsp/mpc5200.h>

#define LED_INIT() \
  do { \
    mpc5200.gpiosen |= 0x30000000; \
    mpc5200.gpiosdd |= 0x30000000; \
  } while (0)

#define LED_ON() \
  do { \
    mpc5200.gpiosdo |= 0x30000000; \
  } while (0)

#define LED_OFF() \
  do { \
    mpc5200.gpiosdo &= ~0x30000000; \
  } while (0)

#elif defined(MPC8313ERDB)

/* This rotates a single LED off around the back of 8. */
volatile uint8_t *MPC8313_LED_REG;
uint8_t MPC8313_LED_Values[] =
    { 0x01, 0x02, 0x04, 0x08, 0x80, 0x40, 0x20, 0x10};
uint8_t MPC8313_LED_Count;

#define LED_INIT()  \
  do { \
    MPC8313_LED_REG = (uint8_t *) 0xfa000000; \
    MPC8313_LED_Count = 0; \
  } while (0)

#define LED_ROTATE()  \
  do { \
    *MPC8313_LED_REG = MPC8313_LED_Values[MPC8313_LED_Count]; \
    /* printk( "v=0x%02x ", MPC8313_LED_Values[MPC8313_LED_Count] ); */ \
    if ( ++MPC8313_LED_Count == 9 ) \
      MPC8313_LED_Count = 0; \
  } while (0)

#define LED_ON() LED_ROTATE()
#define LED_OFF() LED_ROTATE()

#elif defined(BCM2835_GPIO_REGS_BASE)
// Raspberry Pi
#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3)) 
#define OUT_GPIO(g) *(gpio+((g)/10)) |=  (1<<(((g)%10)*3)) 
#define GPIO_SET *(gpio+7)   // sets   bits which are 1 ignores bits which are 0 
#define GPIO_CLR *(gpio+10) // clears bits which are 1 ignores bits which are 0
// For GPIO# >= 32 (RPi B+)
#define GPIO_SET_EXT *(gpio+8)  // sets   bits which are 1 ignores bits which are 0
#define GPIO_CLR_EXT *(gpio+11) // clears bits which are 1 ignores bits which are 0

// RPi B
//#define LED_INIT()  do { unsigned int *gpio = (unsigned int *)BCM2835_GPIO_REGS_BASE; OUT_GPIO(16);} while(0)
//#define LED_ON()  do { unsigned int *gpio = (unsigned int *)BCM2835_GPIO_REGS_BASE; GPIO_CLR = 1 << 16;} while(0)
//#define LED_OFF()  do { unsigned int *gpio = (unsigned int *)BCM2835_GPIO_REGS_BASE; GPIO_SET = 1 << 16;} while(0)
// RPi B+ => led 47
#define LED_INIT()  do { unsigned int *gpio = (unsigned int *)BCM2835_GPIO_REGS_BASE; OUT_GPIO(47);} while(0)
#define LED_ON()  do { unsigned int *gpio = (unsigned int *)BCM2835_GPIO_REGS_BASE; GPIO_CLR_EXT = 1 << (47 % 32);} while(0)
#define LED_OFF()  do { unsigned int *gpio = (unsigned int *)BCM2835_GPIO_REGS_BASE; GPIO_SET_EXT = 1 << (47 % 32);} while(0)

#else
/* default case is to print */

#define __LED_PRINTING 1
#define LED_ON()  fputs( "LED ON\n", stderr )
#define LED_OFF() fputs( "LED OFF\n", stderr )
#endif

#ifndef LED_INIT
#define LED_INIT() 
#endif

#endif