1
2
3
4
5
6
7
8
9
10
11
12#ifndef __PLAT_PINCFG_H
13#define __PLAT_PINCFG_H
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
43typedef unsigned long pin_cfg_t;
44
45#define PIN_NUM_MASK 0x1ff
46#define PIN_NUM(x) ((x) & PIN_NUM_MASK)
47
48#define PIN_ALT_SHIFT 9
49#define PIN_ALT_MASK (0x3 << PIN_ALT_SHIFT)
50#define PIN_ALT(x) (((x) & PIN_ALT_MASK) >> PIN_ALT_SHIFT)
51#define PIN_GPIO (NMK_GPIO_ALT_GPIO << PIN_ALT_SHIFT)
52#define PIN_ALT_A (NMK_GPIO_ALT_A << PIN_ALT_SHIFT)
53#define PIN_ALT_B (NMK_GPIO_ALT_B << PIN_ALT_SHIFT)
54#define PIN_ALT_C (NMK_GPIO_ALT_C << PIN_ALT_SHIFT)
55
56#define PIN_PULL_SHIFT 11
57#define PIN_PULL_MASK (0x3 << PIN_PULL_SHIFT)
58#define PIN_PULL(x) (((x) & PIN_PULL_MASK) >> PIN_PULL_SHIFT)
59#define PIN_PULL_NONE (NMK_GPIO_PULL_NONE << PIN_PULL_SHIFT)
60#define PIN_PULL_UP (NMK_GPIO_PULL_UP << PIN_PULL_SHIFT)
61#define PIN_PULL_DOWN (NMK_GPIO_PULL_DOWN << PIN_PULL_SHIFT)
62
63#define PIN_SLPM_SHIFT 13
64#define PIN_SLPM_MASK (0x1 << PIN_SLPM_SHIFT)
65#define PIN_SLPM(x) (((x) & PIN_SLPM_MASK) >> PIN_SLPM_SHIFT)
66#define PIN_SLPM_MAKE_INPUT (NMK_GPIO_SLPM_INPUT << PIN_SLPM_SHIFT)
67#define PIN_SLPM_NOCHANGE (NMK_GPIO_SLPM_NOCHANGE << PIN_SLPM_SHIFT)
68
69#define PIN_SLPM_WAKEUP_ENABLE (NMK_GPIO_SLPM_WAKEUP_ENABLE << PIN_SLPM_SHIFT)
70#define PIN_SLPM_WAKEUP_DISABLE (NMK_GPIO_SLPM_WAKEUP_DISABLE << PIN_SLPM_SHIFT)
71
72#define PIN_DIR_SHIFT 14
73#define PIN_DIR_MASK (0x1 << PIN_DIR_SHIFT)
74#define PIN_DIR(x) (((x) & PIN_DIR_MASK) >> PIN_DIR_SHIFT)
75#define PIN_DIR_INPUT (0 << PIN_DIR_SHIFT)
76#define PIN_DIR_OUTPUT (1 << PIN_DIR_SHIFT)
77
78#define PIN_VAL_SHIFT 15
79#define PIN_VAL_MASK (0x1 << PIN_VAL_SHIFT)
80#define PIN_VAL(x) (((x) & PIN_VAL_MASK) >> PIN_VAL_SHIFT)
81#define PIN_VAL_LOW (0 << PIN_VAL_SHIFT)
82#define PIN_VAL_HIGH (1 << PIN_VAL_SHIFT)
83
84#define PIN_SLPM_PULL_SHIFT 16
85#define PIN_SLPM_PULL_MASK (0x7 << PIN_SLPM_PULL_SHIFT)
86#define PIN_SLPM_PULL(x) \
87 (((x) & PIN_SLPM_PULL_MASK) >> PIN_SLPM_PULL_SHIFT)
88#define PIN_SLPM_PULL_NONE \
89 ((1 + NMK_GPIO_PULL_NONE) << PIN_SLPM_PULL_SHIFT)
90#define PIN_SLPM_PULL_UP \
91 ((1 + NMK_GPIO_PULL_UP) << PIN_SLPM_PULL_SHIFT)
92#define PIN_SLPM_PULL_DOWN \
93 ((1 + NMK_GPIO_PULL_DOWN) << PIN_SLPM_PULL_SHIFT)
94
95#define PIN_SLPM_DIR_SHIFT 19
96#define PIN_SLPM_DIR_MASK (0x3 << PIN_SLPM_DIR_SHIFT)
97#define PIN_SLPM_DIR(x) \
98 (((x) & PIN_SLPM_DIR_MASK) >> PIN_SLPM_DIR_SHIFT)
99#define PIN_SLPM_DIR_INPUT ((1 + 0) << PIN_SLPM_DIR_SHIFT)
100#define PIN_SLPM_DIR_OUTPUT ((1 + 1) << PIN_SLPM_DIR_SHIFT)
101
102#define PIN_SLPM_VAL_SHIFT 21
103#define PIN_SLPM_VAL_MASK (0x3 << PIN_SLPM_VAL_SHIFT)
104#define PIN_SLPM_VAL(x) \
105 (((x) & PIN_SLPM_VAL_MASK) >> PIN_SLPM_VAL_SHIFT)
106#define PIN_SLPM_VAL_LOW ((1 + 0) << PIN_SLPM_VAL_SHIFT)
107#define PIN_SLPM_VAL_HIGH ((1 + 1) << PIN_SLPM_VAL_SHIFT)
108
109
110#define PIN_INPUT_PULLDOWN (PIN_DIR_INPUT | PIN_PULL_DOWN)
111#define PIN_INPUT_PULLUP (PIN_DIR_INPUT | PIN_PULL_UP)
112#define PIN_INPUT_NOPULL (PIN_DIR_INPUT | PIN_PULL_NONE)
113#define PIN_OUTPUT_LOW (PIN_DIR_OUTPUT | PIN_VAL_LOW)
114#define PIN_OUTPUT_HIGH (PIN_DIR_OUTPUT | PIN_VAL_HIGH)
115
116#define PIN_SLPM_INPUT_PULLDOWN (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_DOWN)
117#define PIN_SLPM_INPUT_PULLUP (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_UP)
118#define PIN_SLPM_INPUT_NOPULL (PIN_SLPM_DIR_INPUT | PIN_SLPM_PULL_NONE)
119#define PIN_SLPM_OUTPUT_LOW (PIN_SLPM_DIR_OUTPUT | PIN_SLPM_VAL_LOW)
120#define PIN_SLPM_OUTPUT_HIGH (PIN_SLPM_DIR_OUTPUT | PIN_SLPM_VAL_HIGH)
121
122#define PIN_CFG_DEFAULT (0)
123
124#define PIN_CFG(num, alt) \
125 (PIN_CFG_DEFAULT |\
126 (PIN_NUM(num) | PIN_##alt))
127
128#define PIN_CFG_INPUT(num, alt, pull) \
129 (PIN_CFG_DEFAULT |\
130 (PIN_NUM(num) | PIN_##alt | PIN_INPUT_##pull))
131
132#define PIN_CFG_OUTPUT(num, alt, val) \
133 (PIN_CFG_DEFAULT |\
134 (PIN_NUM(num) | PIN_##alt | PIN_OUTPUT_##val))
135
136#define PIN_CFG_PULL(num, alt, pull) \
137 ((PIN_CFG_DEFAULT & ~PIN_PULL_MASK) |\
138 (PIN_NUM(num) | PIN_##alt | PIN_PULL_##pull))
139
140extern int nmk_config_pin(pin_cfg_t cfg, bool sleep);
141extern int nmk_config_pins(pin_cfg_t *cfgs, int num);
142extern int nmk_config_pins_sleep(pin_cfg_t *cfgs, int num);
143
144#endif
145