svn commit: r359806 - head/sys/arm/ti/am335x
Emmanuel Vadot
manu at FreeBSD.org
Sat Apr 11 15:52:08 UTC 2020
Author: manu
Date: Sat Apr 11 15:52:07 2020
New Revision: 359806
URL: https://svnweb.freebsd.org/changeset/base/359806
Log:
arm: am335x: Honor pmic option ti,pmic-shutdown-controller
Honor ti,pmic-shutdown-controller option in DTS
Tested on stable r359316 @ Sleep mode on custom hw, Power off on BBB and PB
OFF bit [1] in status register control the pmic behaviour when PWR_EN pin
is pulled low.
On most AM335x hardware [beaglebone *] the desired behaviour are in fact
power off due to some hardware designs - read more in the comments around
pmic in sys/gnu/dts/arm/am335x-bone-common.dtsi
This patch let the device-tree decide with ti,pmic-shutdown-controller[2]
the state of off bit in status register.
[1] 8.6.12 table 12 http://www.ti.com/lit/ds/symlink/tps65217.pdf
[2] Documentation/devicetree/bindings/regulator/tps65217.txt
PR: 245159
Submitted by: Oskar Holmlund <oskar.holmlund at ohdata.se>
MFC after: 2 weeks
Modified:
head/sys/arm/ti/am335x/am335x_pmic.c
Modified: head/sys/arm/ti/am335x/am335x_pmic.c
==============================================================================
--- head/sys/arm/ti/am335x/am335x_pmic.c Sat Apr 11 15:25:40 2020 (r359805)
+++ head/sys/arm/ti/am335x/am335x_pmic.c Sat Apr 11 15:52:07 2020 (r359806)
@@ -208,6 +208,7 @@ am335x_pmic_start(struct am335x_pmic_softc *sc)
char name[20];
char pwr[4][11] = {"Battery", "USB", "AC", "USB and AC"};
int rv;
+ phandle_t node;
dev = sc->sc_dev;
am335x_pmic_read(dev, TPS65217_CHIPID_REG, (uint8_t *)&chipid_reg, 1);
@@ -232,6 +233,16 @@ am335x_pmic_start(struct am335x_pmic_softc *sc)
device_printf(dev, "%s powered by %s\n", name,
pwr[status_reg.usbpwr | (status_reg.acpwr << 1)]);
+ /* Check devicetree for ti,pmic-shutdown-controller
+ * if present; PMIC will go to shutdown state on PWR_EN toggle
+ * if not present; PMIC will enter sleep state on PWR_EN toggle (default on reset)
+ */
+ node = ofw_bus_get_node(dev);
+ if (OF_hasprop(node, "ti,pmic-shutdown-controller")) {
+ status_reg.off = 1;
+ am335x_pmic_write(dev, TPS65217_STATUS_REG, (uint8_t *)&status_reg, 1);
+ }
+
if (am335x_pmic_vo[0] != '\0') {
for (vo = 0; vo < 4; vo++) {
if (strcmp(tps65217_voreg_c[vo], am335x_pmic_vo) == 0)
@@ -291,16 +302,9 @@ am335x_pmic_attach(device_t dev)
static void
am335x_pmic_shutdown(void *xdev, int howto)
{
- device_t dev;
- struct tps65217_status_reg reg;
-
if (!(howto & RB_POWEROFF))
return;
- dev = (device_t)xdev;
- am335x_pmic_read(dev, TPS65217_STATUS_REG, (uint8_t *)®, 1);
- /* Set the OFF bit on status register to start the shutdown sequence. */
- reg.off = 1;
- am335x_pmic_write(dev, TPS65217_STATUS_REG, (uint8_t *)®, 1);
+
/* Toggle pmic_pwr_enable to shutdown the PMIC. */
am335x_rtc_pmic_pwr_toggle();
}
More information about the svn-src-head
mailing list