Thread (6 messages) 6 messages, 2 authors, 2012-01-25

Re: [PATCH V2] regulator: tps65910: Sleep control through external inputs

From: Mark Brown <hidden>
Date: 2012-01-25 12:42:55
Also in: lkml

On Wed, Jan 25, 2012 at 04:27:48PM +0530, Laxman Dewangan wrote:
quoted hunk ↗ jump to hunk
@@ -450,6 +489,29 @@ static int tps65910_set_mode(struct regulator_dev *dev, unsigned int mode)
 	struct tps65910 *mfd = pmic->mfd;
 	int reg, value, id = rdev_get_id(dev);
 
+	/*
+	 * If regulator is controlled through external control then
+	 * mode can be identified by the input level of EN1/EN2/EN3.
+	 * If it is HIGH then regulators is on, full power.
+	 * If it is LOW then:
+	 *       - the regulator is set off if its corresponding Control
+	 *         bit = 0 in SLEEP_KEEP_XXX_ON.
+	 *       - the regulator is set in low-power mode if its corresponding
+	 *         control bit = 1 in SLEEP_KEEP_XXX_ON register.
+	 */
This really isn't what the set_mode() API is for - especially the fact
that it supports turning the regulator off which really isn't what
set_mode() is supposed to do.  A generic driver using this API isn't
going to play too well.
+	if (pmic->board_ext_control[id]) {
+		u8 regoffs = (pmic->ext_sleep_control[id] >> 8) & 0xFF;
+		u8 bit_pos = (1 << pmic->ext_sleep_control[id] & 0xFF);
+		int ret = 0;
+		if ((mode == REGULATOR_MODE_IDLE) ||
+			(mode == REGULATOR_MODE_STANDBY))
+			ret = tps65910_set_bits(mfd,
+				TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
As a coding style thing this should be a switch statement.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help