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 *)&reg, 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 *)&reg, 1);
+
 	/* Toggle pmic_pwr_enable to shutdown the PMIC. */
 	am335x_rtc_pmic_pwr_toggle();
 }


More information about the svn-src-head mailing list