1use kernel::utilities::registers::interfaces::ReadWriteable;
6use kernel::utilities::registers::{register_bitfields, register_structs, ReadWrite};
7use kernel::utilities::StaticRef;
8use kernel::ErrorCode;
9
10register_structs! {
11    PwrRegisters {
13        (0x000 => cr: ReadWrite<u32, CR::Register>),
15        (0x004 => csr: ReadWrite<u32, CSR::Register>),
17        (0x008 => @END),
18    }
19}
20register_bitfields![u32,
21CR [
22    LPDS OFFSET(0) NUMBITS(1) [],
24    PDDS OFFSET(1) NUMBITS(1) [],
26    CWUF OFFSET(2) NUMBITS(1) [],
28    CSBF OFFSET(3) NUMBITS(1) [],
30    PVDE OFFSET(4) NUMBITS(1) [],
33    PLS OFFSET(5) NUMBITS(3) [],
35    DBP OFFSET(8) NUMBITS(1) [],
38    FPDS OFFSET(9) NUMBITS(1) [],
41    LPLUDS OFFSET(10) NUMBITS(1) [],
44    MRUDS OFFSET(11) NUMBITS(1) [],
47
48    ADCDC1 OFFSET(13) NUMBITS(1) [],
49    VOS OFFSET(14) NUMBITS(2) [
52        Scale3 = 0b01,
53        Scale2 = 0b10,
54        Scale1 = 0b11,
55    ],
56    ODEN OFFSET(16) NUMBITS(1) [],
58    ODSWEN OFFSET(17) NUMBITS(1) [],
61    UDEN OFFSET(18) NUMBITS(2) []
64],
65CSR [
66    WUF OFFSET(0) NUMBITS(1) [],
68    SBF OFFSET(1) NUMBITS(1) [],
70    PVDO OFFSET(2) NUMBITS(1) [],
72    BRR OFFSET(3) NUMBITS(1) [],
74    EWUP OFFSET(8) NUMBITS(1) [],
76    BRE OFFSET(9) NUMBITS(1) [],
78    VOSRDY OFFSET(14) NUMBITS(1) [],
81    ODRDY OFFSET(16) NUMBITS(1) [],
83    ODSWRDY OFFSET(17) NUMBITS(1) [],
86    UDRDY OFFSET(18) NUMBITS(2) []
88]
89];
90const PWR_BASE: StaticRef<PwrRegisters> =
91    unsafe { StaticRef::new(0x40007000 as *const PwrRegisters) };
92
93#[inline(never)]
94pub fn enable_backup_access() -> Result<(), ErrorCode> {
95    PWR_BASE.cr.modify(CR::DBP::SET);
96    Ok(())
97}