• AngeloGioacchino Del Regno's avatar
    regulator: qcom-labibb: Implement short-circuit and over-current IRQs · 390af53e
    AngeloGioacchino Del Regno authored
    Short-Circuit Protection (SCP) and Over-Current Protection (OCP) are
    very important for regulators like LAB and IBB, which are designed to
    provide from very small to relatively big amounts of current to the
    device (normally, a display).
    
    Now that this regulator supports both voltage setting and current
    limiting in this driver, to me it looked like being somehow essential
    to provide support for SCP and OCP, for two reasons:
    1. SCP is a drastic measure to prevent damaging "more" hardware in
       the worst situations, if any was damaged, preventing potentially
       drastic issues;
    2. OCP is a great way to protect the hardware that we're powering
       through these regulators as if anything bad happens, the HW will
       draw more current than expected: in this case, the OCP interrupt
       will fire and the regulators will be immediately shut down,
       preventing hardware damage in many cases.
    
    Both interrupts were successfully tested in a "sort-of" controlled
    manner, with the following methodology:
    
    Short-Circuit Protection (SCP):
    1. Set LAB/IBB to 4.6/-1.4V, current limit 200mA/50mA;
    2. Connect a 10 KOhm resistor to LAB/IBB by poking the right traces
       on a FxTec Pro1 smartphone for a very brief time (in short words,
       "just a rapid touch with flying wires");
    3. The Short-Circuit protection trips: IRQ raises, regulators get
       cut. Recovery OK, test repeated without rebooting, OK.
    
    Over-Current Protection (OCP):
    1. Set LAB/IBB to the expected voltage to power up the display of
       a Sony Xperia XZ Premium smartphone (Sharp LS055D1SX04), set
       current limit to LAB 200mA, IBB 50mA (the values that this
       display unit needs are 200/800mA);
    2. Boot the kernel: OCP fires. Recovery never happens because
       the selected current limit is too low, but that's expected.
       Test OK.
    
    3. Set LAB/IBB to the expected current limits for XZ Premium
       (LAB 200mA, IBB 800mA), but lower than expected voltage,
       specifically LAB 5.4V, IBB -5.6V (instead of 5.6, -5.8V);
    4. Boot the kernel: OCP fires. Recovery never happens because
       the selected voltage (still in the working range limits)
       is producing a current draw of more than 200mA on LAB.
       Test OK.
    Signed-off-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@somainline.org>
    Link: https://lore.kernel.org/r/20210119174421.226541-6-angelogioacchino.delregno@somainline.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    390af53e
qcom-labibb-regulator.c 25.4 KB