1use kernel::utilities::registers::ReadWrite;
13use kernel::utilities::registers::{register_bitfields, register_structs};
14pub const PINMUX_PARAM_ATTR_DW: u32 = 13;
16pub const PINMUX_PARAM_N_MIO_PERIPH_IN: u32 = 57;
18pub const PINMUX_PARAM_N_MIO_PERIPH_OUT: u32 = 75;
20pub const PINMUX_PARAM_N_MIO_PADS: u32 = 47;
22pub const PINMUX_PARAM_N_DIO_PADS: u32 = 16;
24pub const PINMUX_PARAM_N_WKUP_DETECT: u32 = 8;
26pub const PINMUX_PARAM_WKUP_CNT_WIDTH: u32 = 8;
28pub const PINMUX_PARAM_NUM_ALERTS: u32 = 1;
30pub const PINMUX_PARAM_REG_WIDTH: u32 = 32;
32
33register_structs! {
34    pub PinmuxRegisters {
35        (0x0000 => pub(crate) alert_test: ReadWrite<u32, ALERT_TEST::Register>),
37        (0x0004 => pub(crate) mio_periph_insel_regwen: [ReadWrite<u32, MIO_PERIPH_INSEL_REGWEN::Register>; 57]),
39        (0x00e8 => pub(crate) mio_periph_insel: [ReadWrite<u32, MIO_PERIPH_INSEL::Register>; 57]),
41        (0x01cc => pub(crate) mio_outsel_regwen: [ReadWrite<u32, MIO_OUTSEL_REGWEN::Register>; 47]),
43        (0x0288 => pub(crate) mio_outsel: [ReadWrite<u32, MIO_OUTSEL::Register>; 47]),
45        (0x0344 => pub(crate) mio_pad_attr_regwen: [ReadWrite<u32, MIO_PAD_ATTR_REGWEN::Register>; 47]),
47        (0x0400 => pub(crate) mio_pad_attr: [ReadWrite<u32, MIO_PAD_ATTR::Register>; 47]),
49        (0x04bc => pub(crate) dio_pad_attr_regwen: [ReadWrite<u32, DIO_PAD_ATTR_REGWEN::Register>; 16]),
51        (0x04fc => pub(crate) dio_pad_attr: [ReadWrite<u32, DIO_PAD_ATTR::Register>; 16]),
53        (0x053c => pub(crate) mio_pad_sleep_status: [ReadWrite<u32, MIO_PAD_SLEEP_STATUS::Register>; 2]),
55        (0x0544 => pub(crate) mio_pad_sleep_regwen: [ReadWrite<u32, MIO_PAD_SLEEP_REGWEN::Register>; 47]),
57        (0x0600 => pub(crate) mio_pad_sleep_en: [ReadWrite<u32, MIO_PAD_SLEEP_EN::Register>; 47]),
59        (0x06bc => pub(crate) mio_pad_sleep_mode: [ReadWrite<u32, MIO_PAD_SLEEP_MODE::Register>; 47]),
61        (0x0778 => pub(crate) dio_pad_sleep_status: [ReadWrite<u32, DIO_PAD_SLEEP_STATUS::Register>; 1]),
63        (0x077c => pub(crate) dio_pad_sleep_regwen: [ReadWrite<u32, DIO_PAD_SLEEP_REGWEN::Register>; 16]),
65        (0x07bc => pub(crate) dio_pad_sleep_en: [ReadWrite<u32, DIO_PAD_SLEEP_EN::Register>; 16]),
67        (0x07fc => pub(crate) dio_pad_sleep_mode: [ReadWrite<u32, DIO_PAD_SLEEP_MODE::Register>; 16]),
69        (0x083c => pub(crate) wkup_detector_regwen: [ReadWrite<u32, WKUP_DETECTOR_REGWEN::Register>; 8]),
71        (0x085c => pub(crate) wkup_detector_en: [ReadWrite<u32, WKUP_DETECTOR_EN::Register>; 8]),
73        (0x087c => pub(crate) wkup_detector: [ReadWrite<u32, WKUP_DETECTOR::Register>; 8]),
75        (0x089c => pub(crate) wkup_detector_cnt_th: [ReadWrite<u32, WKUP_DETECTOR_CNT_TH::Register>; 8]),
77        (0x08bc => pub(crate) wkup_detector_padsel: [ReadWrite<u32, WKUP_DETECTOR_PADSEL::Register>; 8]),
79        (0x08dc => pub(crate) wkup_cause: [ReadWrite<u32, WKUP_CAUSE::Register>; 1]),
81        (0x08e0 => @END),
82    }
83}
84
85register_bitfields![u32,
86    pub(crate) ALERT_TEST [
87        FATAL_FAULT OFFSET(0) NUMBITS(1) [],
88    ],
89    pub(crate) MIO_PERIPH_INSEL_REGWEN [
90        EN_0 OFFSET(0) NUMBITS(1) [],
91    ],
92    pub(crate) MIO_PERIPH_INSEL [
93        IN_0 OFFSET(0) NUMBITS(6) [],
94    ],
95    pub(crate) MIO_OUTSEL_REGWEN [
96        EN_0 OFFSET(0) NUMBITS(1) [],
97    ],
98    pub(crate) MIO_OUTSEL [
99        OUT_0 OFFSET(0) NUMBITS(7) [],
100    ],
101    pub(crate) MIO_PAD_ATTR_REGWEN [
102        EN_0 OFFSET(0) NUMBITS(1) [],
103    ],
104    pub(crate) MIO_PAD_ATTR [
105        INVERT_0 OFFSET(0) NUMBITS(1) [],
106        VIRTUAL_OD_EN_0 OFFSET(1) NUMBITS(1) [],
107        PULL_EN_0 OFFSET(2) NUMBITS(1) [],
108        PULL_SELECT_0 OFFSET(3) NUMBITS(1) [
109            PULL_DOWN = 0,
110            PULL_UP = 1,
111        ],
112        KEEPER_EN_0 OFFSET(4) NUMBITS(1) [],
113        SCHMITT_EN_0 OFFSET(5) NUMBITS(1) [],
114        OD_EN_0 OFFSET(6) NUMBITS(1) [],
115        SLEW_RATE_0 OFFSET(16) NUMBITS(2) [],
116        DRIVE_STRENGTH_0 OFFSET(20) NUMBITS(4) [],
117    ],
118    pub(crate) DIO_PAD_ATTR_REGWEN [
119        EN_0 OFFSET(0) NUMBITS(1) [],
120    ],
121    pub(crate) DIO_PAD_ATTR [
122        INVERT_0 OFFSET(0) NUMBITS(1) [],
123        VIRTUAL_OD_EN_0 OFFSET(1) NUMBITS(1) [],
124        PULL_EN_0 OFFSET(2) NUMBITS(1) [],
125        PULL_SELECT_0 OFFSET(3) NUMBITS(1) [
126            PULL_DOWN = 0,
127            PULL_UP = 1,
128        ],
129        KEEPER_EN_0 OFFSET(4) NUMBITS(1) [],
130        SCHMITT_EN_0 OFFSET(5) NUMBITS(1) [],
131        OD_EN_0 OFFSET(6) NUMBITS(1) [],
132        SLEW_RATE_0 OFFSET(16) NUMBITS(2) [],
133        DRIVE_STRENGTH_0 OFFSET(20) NUMBITS(4) [],
134    ],
135    pub(crate) MIO_PAD_SLEEP_STATUS [
136        EN_0 OFFSET(0) NUMBITS(1) [],
137        EN_1 OFFSET(1) NUMBITS(1) [],
138        EN_2 OFFSET(2) NUMBITS(1) [],
139        EN_3 OFFSET(3) NUMBITS(1) [],
140        EN_4 OFFSET(4) NUMBITS(1) [],
141        EN_5 OFFSET(5) NUMBITS(1) [],
142        EN_6 OFFSET(6) NUMBITS(1) [],
143        EN_7 OFFSET(7) NUMBITS(1) [],
144        EN_8 OFFSET(8) NUMBITS(1) [],
145        EN_9 OFFSET(9) NUMBITS(1) [],
146        EN_10 OFFSET(10) NUMBITS(1) [],
147        EN_11 OFFSET(11) NUMBITS(1) [],
148        EN_12 OFFSET(12) NUMBITS(1) [],
149        EN_13 OFFSET(13) NUMBITS(1) [],
150        EN_14 OFFSET(14) NUMBITS(1) [],
151        EN_15 OFFSET(15) NUMBITS(1) [],
152        EN_16 OFFSET(16) NUMBITS(1) [],
153        EN_17 OFFSET(17) NUMBITS(1) [],
154        EN_18 OFFSET(18) NUMBITS(1) [],
155        EN_19 OFFSET(19) NUMBITS(1) [],
156        EN_20 OFFSET(20) NUMBITS(1) [],
157        EN_21 OFFSET(21) NUMBITS(1) [],
158        EN_22 OFFSET(22) NUMBITS(1) [],
159        EN_23 OFFSET(23) NUMBITS(1) [],
160        EN_24 OFFSET(24) NUMBITS(1) [],
161        EN_25 OFFSET(25) NUMBITS(1) [],
162        EN_26 OFFSET(26) NUMBITS(1) [],
163        EN_27 OFFSET(27) NUMBITS(1) [],
164        EN_28 OFFSET(28) NUMBITS(1) [],
165        EN_29 OFFSET(29) NUMBITS(1) [],
166        EN_30 OFFSET(30) NUMBITS(1) [],
167        EN_31 OFFSET(31) NUMBITS(1) [],
168    ],
169    pub(crate) MIO_PAD_SLEEP_REGWEN [
170        EN_0 OFFSET(0) NUMBITS(1) [],
171    ],
172    pub(crate) MIO_PAD_SLEEP_EN [
173        EN_0 OFFSET(0) NUMBITS(1) [],
174    ],
175    pub(crate) MIO_PAD_SLEEP_MODE [
176        OUT_0 OFFSET(0) NUMBITS(2) [
177            TIE_LOW = 0,
178            TIE_HIGH = 1,
179            HIGH_Z = 2,
180            KEEP = 3,
181        ],
182    ],
183    pub(crate) DIO_PAD_SLEEP_STATUS [
184        EN_0 OFFSET(0) NUMBITS(1) [],
185        EN_1 OFFSET(1) NUMBITS(1) [],
186        EN_2 OFFSET(2) NUMBITS(1) [],
187        EN_3 OFFSET(3) NUMBITS(1) [],
188        EN_4 OFFSET(4) NUMBITS(1) [],
189        EN_5 OFFSET(5) NUMBITS(1) [],
190        EN_6 OFFSET(6) NUMBITS(1) [],
191        EN_7 OFFSET(7) NUMBITS(1) [],
192        EN_8 OFFSET(8) NUMBITS(1) [],
193        EN_9 OFFSET(9) NUMBITS(1) [],
194        EN_10 OFFSET(10) NUMBITS(1) [],
195        EN_11 OFFSET(11) NUMBITS(1) [],
196        EN_12 OFFSET(12) NUMBITS(1) [],
197        EN_13 OFFSET(13) NUMBITS(1) [],
198        EN_14 OFFSET(14) NUMBITS(1) [],
199        EN_15 OFFSET(15) NUMBITS(1) [],
200    ],
201    pub(crate) DIO_PAD_SLEEP_REGWEN [
202        EN_0 OFFSET(0) NUMBITS(1) [],
203    ],
204    pub(crate) DIO_PAD_SLEEP_EN [
205        EN_0 OFFSET(0) NUMBITS(1) [],
206    ],
207    pub(crate) DIO_PAD_SLEEP_MODE [
208        OUT_0 OFFSET(0) NUMBITS(2) [
209            TIE_LOW = 0,
210            TIE_HIGH = 1,
211            HIGH_Z = 2,
212            KEEP = 3,
213        ],
214    ],
215    pub(crate) WKUP_DETECTOR_REGWEN [
216        EN_0 OFFSET(0) NUMBITS(1) [],
217    ],
218    pub(crate) WKUP_DETECTOR_EN [
219        EN_0 OFFSET(0) NUMBITS(1) [],
220    ],
221    pub(crate) WKUP_DETECTOR [
222        MODE_0 OFFSET(0) NUMBITS(3) [
223            POSEDGE = 0,
224            NEGEDGE = 1,
225            EDGE = 2,
226            TIMEDHIGH = 3,
227            TIMEDLOW = 4,
228        ],
229        FILTER_0 OFFSET(3) NUMBITS(1) [],
230        MIODIO_0 OFFSET(4) NUMBITS(1) [],
231    ],
232    pub(crate) WKUP_DETECTOR_CNT_TH [
233        TH_0 OFFSET(0) NUMBITS(8) [],
234    ],
235    pub(crate) WKUP_DETECTOR_PADSEL [
236        SEL_0 OFFSET(0) NUMBITS(6) [],
237    ],
238    pub(crate) WKUP_CAUSE [
239        CAUSE_0 OFFSET(0) NUMBITS(1) [],
240        CAUSE_1 OFFSET(1) NUMBITS(1) [],
241        CAUSE_2 OFFSET(2) NUMBITS(1) [],
242        CAUSE_3 OFFSET(3) NUMBITS(1) [],
243        CAUSE_4 OFFSET(4) NUMBITS(1) [],
244        CAUSE_5 OFFSET(5) NUMBITS(1) [],
245        CAUSE_6 OFFSET(6) NUMBITS(1) [],
246        CAUSE_7 OFFSET(7) NUMBITS(1) [],
247    ],
248];
249
250