blob: f7749b486017337600623c435f59ea6d3588642c [file] [log] [blame]
Masahiro Yamadabb2ff9d2014-10-03 19:21:06 +09001/*
Masahiro Yamada663a23f2015-05-29 17:30:00 +09002 * Copyright (C) 2012-2015 Masahiro Yamada <yamada.masahiro@socionext.com>
Masahiro Yamadabb2ff9d2014-10-03 19:21:06 +09003 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
7#ifndef ARCH_LED_H
8#define ARCH_LED_H
9
10#include <config.h>
11
12#define LED_CHAR_0 0x7e
13#define LED_CHAR_1 0x0c
14#define LED_CHAR_2 0xb6
15#define LED_CHAR_3 0x9e
16#define LED_CHAR_4 0xcc
17#define LED_CHAR_5 0xda
18#define LED_CHAR_6 0xfa
19#define LED_CHAR_7 0x4e
20#define LED_CHAR_8 0xfe
21#define LED_CHAR_9 0xde
22
23#define LED_CHAR_A 0xee
24#define LED_CHAR_B 0xf8
25#define LED_CHAR_C 0x72
26#define LED_CHAR_D 0xbc
27#define LED_CHAR_E 0xf2
28#define LED_CHAR_F 0xe2
29#define LED_CHAR_G 0x7a
30#define LED_CHAR_H 0xe8
31#define LED_CHAR_I 0x08
32#define LED_CHAR_J 0x3c
33#define LED_CHAR_K 0xea
34#define LED_CHAR_L 0x70
35#define LED_CHAR_M 0x6e
36#define LED_CHAR_N 0xa8
37#define LED_CHAR_O 0xb8
38#define LED_CHAR_P 0xe6
39#define LED_CHAR_Q 0xce
40#define LED_CHAR_R 0xa0
41#define LED_CHAR_S 0xc8
42#define LED_CHAR_T 0x8c
43#define LED_CHAR_U 0x7c
44#define LED_CHAR_V 0x54
45#define LED_CHAR_W 0xfc
46#define LED_CHAR_X 0xec
47#define LED_CHAR_Y 0xdc
48#define LED_CHAR_Z 0xa4
49
50#define LED_CHAR_SPACE 0x00
51#define LED_CHAR_DOT 0x01
52
53#define LED_CHAR_ (LED_CHAR_SPACE)
54
55/** Macro to translate 4 characters into integer to display led */
56#define LED_C2I(C0, C1, C2, C3) \
57 (~( \
58 (LED_CHAR_##C0 << 24) | \
59 (LED_CHAR_##C1 << 16) | \
60 (LED_CHAR_##C2 << 8) | \
61 (LED_CHAR_##C3) \
62 ))
63
64#if defined(CONFIG_SUPPORT_CARD_LED_BASE)
65
66#define LED_ADDR CONFIG_SUPPORT_CARD_LED_BASE
67
68#ifdef __ASSEMBLY__
69
70#define led_write(C0, C1, C2, C3) raw_led_write LED_C2I(C0, C1, C2, C3)
71.macro raw_led_write data
72 ldr r0, =\data
73 ldr r1, =LED_ADDR
74 str r0, [r1]
75.endm
76
77#else /* __ASSEMBLY__ */
78
Masahiro Yamada663a23f2015-05-29 17:30:00 +090079#include <linux/io.h>
Masahiro Yamadabb2ff9d2014-10-03 19:21:06 +090080
81#define led_write(C0, C1, C2, C3) \
82do { \
83 raw_led_write(LED_C2I(C0, C1, C2, C3)); \
84} while (0)
85
86static inline void raw_led_write(u32 data)
87{
88 writel(data, LED_ADDR);
89}
90
91#endif /* __ASSEMBLY__ */
92
93#else /* CONFIG_SUPPORT_CARD_LED_BASE */
94
95#define led_write(C0, C1, C2, C3)
96#define raw_led_write(x)
97
98#endif /* CONFIG_SUPPORT_CARD_LED_BASE */
99
100#endif /* ARCH_LED_H */