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
/// Voltage regulators in AXP173 that can be enabled or disabled.
pub enum LdoKind {
    /// LDO2.
    LDO2,

    /// LDO3.
    LDO3,

    /// LDO4.
    LDO4,
}

/// LDO of AXP173.
pub struct Ldo {
    pub(crate) kind: LdoKind,
    pub(crate) voltage: u8,
}

impl Ldo {
    /// Selects LDO2 voltage.
    /// `voltage`: four bit voltage: 1.8 - 3.3V, 100 mV per LSB.
    /// # Panics
    /// Panics if supplied voltage value is greater than 2^4 due to failed assertion.
    pub fn ldo2_with_voltage(voltage: u8) -> Self {
        assert!(voltage <= 0b1111); // Only 4-bit wide

        Self {
            kind: LdoKind::LDO2,
            voltage,
        }
    }

    /// Selects LDO3 voltage.
    /// `voltage`: four bit voltage: 1.8 - 3.3V, 100 mV per LSB.
    ///
    /// # Panics
    /// Panics if supplied voltage value is greater than 2^4 due to failed assertion.
    pub fn ldo3_with_voltage(voltage: u8) -> Self {
        assert!(voltage <= 0b1111); // Only 4-bit wide

        Self {
            kind: LdoKind::LDO3,
            voltage,
        }
    }

    /// Selects LDO4 voltage.
    /// `voltage`: seven bit voltage: 0.7 - 3.5V, 25 mV per LSB.
    ///
    /// # Panics
    /// Panics if supplied voltage value is greater than 2^7 due to failed assertion.
    pub fn ldo4_with_voltage(voltage: u8) -> Self {
        assert!(voltage <= 0b111_1111); // Only 7-bit wide

        Self {
            kind: LdoKind::LDO4,
            voltage,
        }
    }
}