Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb433dad authored by Colin Foe-Parker's avatar Colin Foe-Parker Committed by Samuel Ortiz
Browse files

mfd: tps65217: Set PMIC to shutdown on PWR_EN toggle



Set tps65217 PMIC status to OFF if power enable toggle is supported.
By setting this bit to 1 to enter PMIC to OFF state when PWR_EN pin
is pulled low. Also adds a DT flag to specify that device pmic
supports shutdown control or not.

Signed-off-by: default avatarColin Foe-Parker <colin.foeparker@logicpd.com>
[anilkumar@ti.com: move the additions to tps65217 MFD driver]
Signed-off-by: default avatarAnilKumar Ch <anilkumar@ti.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 433e075c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -11,6 +11,9 @@ Required properties:
  using the standard binding for regulators found at
  Documentation/devicetree/bindings/regulator/regulator.txt.

Optional properties:
- ti,pmic-shutdown-controller: Telling the PMIC to shutdown on PWR_EN toggle.

  The valid names for regulators are:
  tps65217: dcdc1, dcdc2, dcdc3, ldo1, ldo2, ldo3 and ldo4

@@ -20,6 +23,7 @@ Example:

	tps: tps@24 {
		compatible = "ti,tps65217";
		ti,pmic-shutdown-controller;

		regulators {
			dcdc1_reg: dcdc1 {
+12 −0
Original line number Diff line number Diff line
@@ -160,6 +160,7 @@ static int __devinit tps65217_probe(struct i2c_client *client,
	unsigned int version;
	unsigned int chip_id = ids->driver_data;
	const struct of_device_id *match;
	bool status_off = false;
	int ret;

	if (client->dev.of_node) {
@@ -170,6 +171,8 @@ static int __devinit tps65217_probe(struct i2c_client *client,
			return -EINVAL;
		}
		chip_id = (unsigned int)match->data;
		status_off = of_property_read_bool(client->dev.of_node,
					"ti,pmic-shutdown-controller");
	}

	if (!chip_id) {
@@ -207,6 +210,15 @@ static int __devinit tps65217_probe(struct i2c_client *client,
		return ret;
	}

	/* Set the PMIC to shutdown on PWR_EN toggle */
	if (status_off) {
		ret = tps65217_set_bits(tps, TPS65217_REG_STATUS,
				TPS65217_STATUS_OFF, TPS65217_STATUS_OFF,
				TPS65217_PROTECT_NONE);
		if (ret)
			dev_warn(tps->dev, "unable to set the status OFF\n");
	}

	dev_info(tps->dev, "TPS65217 ID %#x version 1.%d\n",
			(version & TPS65217_CHIPID_CHIP_MASK) >> 4,
			version & TPS65217_CHIPID_REV_MASK);