public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: Koen Kooi <koen@beagleboard.org>
Cc: linux-omap@vger.kernel.org
Subject: Re: [PATCH v3] ARM: OMAP: board-ldp: add regulator info to get the microSD slot working again
Date: Thu, 2 Apr 2009 11:58:11 -0700	[thread overview]
Message-ID: <200904021158.11612.david-b@pacbell.net> (raw)
In-Reply-To: <1238489589-12216-1-git-send-email-koen@beagleboard.org>

Ack on that v3 patch, FWIW ... but also:

On Tuesday 31 March 2009, Koen Kooi wrote:
> +static const struct twl4030_resconfig ldp_resconfig[] = {
> +       /* disable regulators that u-boot left enabled; the
> +        * devices' drivers should be managing these.
> +        */
> +       { .resource = RES_VMMC1, },
> +       { 0, },
> +};
> +

Purely for information -- as in, maybe *more* regulators should
be disabled -- here's a patch I tend to run with.  Obviously it's
better to set the resconfig stuff than to do what this originally
tried to do, but this predates resconfig.

All this does (now) is print some messages that highlight when
regulators end up in wierd states after initialization.

- Dave

===============
--- a/drivers/regulator/twl4030-regulator.c
+++ b/drivers/regulator/twl4030-regulator.c
@@ -39,6 +39,9 @@ struct twlreg_info {
 	/* FIXED_LDO voltage */
 	u8			deciV;
 
+	/* true iff regulator is set up for Linux*/
+	bool			in_use;
+
 	/* voltage in mV = table[VSEL]; table_len must be a power-of-two */
 	u8			table_len;
 	const u16		*table;
@@ -419,6 +422,8 @@ static struct twlreg_info twl4030_regs[]
 	/* VUSBCP is managed *only* by the USB subchip */
 };
 
+static bool is_4030;
+
 static int twl4030reg_probe(struct platform_device *pdev)
 {
 	int				i;
@@ -430,6 +435,8 @@ static int twl4030reg_probe(struct platf
 	for (i = 0, info = NULL; i < ARRAY_SIZE(twl4030_regs); i++) {
 		if (twl4030_regs[i].desc.id != pdev->id)
 			continue;
+		if (pdev->id == TWL4030_REG_VAUX2_4030)
+			is_4030 = true;
 		info = twl4030_regs + i;
 		break;
 	}
@@ -458,6 +465,8 @@ static int twl4030reg_probe(struct platf
 	}
 	platform_set_drvdata(pdev, rdev);
 
+	info->in_use = true;
+
 	/* NOTE:  many regulators support short-circuit IRQs (presentable
 	 * as REGULATOR_OVER_CURRENT notifications?) configured via:
 	 *  - SC_CONFIG
@@ -469,6 +478,64 @@ static int twl4030reg_probe(struct platf
 	return 0;
 }
 
+/*
+ * Make sure all LDOs are in the P1 (Linux) group or none; and that
+ * if Linux can't have enabled them, they're in no group (disabled).
+ * Unused-but-enabled LDOs are a constant power drain.
+ *
+ * NOTE:  something else must disable LDOs which Linux manages, but
+ * which may have been wrongly enabled during system startup.
+ */
+static __init int twl4030_ldo_tweak(void)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(twl4030_regs); i++) {
+		struct twlreg_info *info = &twl4030_regs[i];
+		int dev_grp, new_grp;
+		int status;
+
+		/* ignore the "other" VAUX2 descriptor */
+		if (info->base == 0x1b) {
+			if (info->desc.id == TWL4030_REG_VAUX2_4030) {
+				if (!is_4030)
+					continue;
+			} else {
+				if (is_4030)
+					continue;
+			}
+		}
+
+		dev_grp = twl4030reg_read(info, VREG_GRP);
+		if (dev_grp < 0)
+			continue;
+		dev_grp &= 0xf0;
+
+		if (info->in_use)
+			new_grp = dev_grp & (P1_GRP | WARM_CFG);
+		else
+			new_grp = 0;
+		if (dev_grp == new_grp)
+			continue;
+
+		/* reset and report this; the bootloader might be fixable */
+#if 0
+		status = twl4030reg_write(info, VREG_GRP, new_grp);
+#else
+		status = 0;
+#endif
+		if (status < 0)
+			pr_err("TWL: can't update LDO %s, err %d\n",
+				info->desc.name, status);
+		else
+			pr_info("TWL: LDO %s, dev_grp %02x --> %02x\n",
+				info->desc.name, dev_grp, new_grp);
+
+	}
+	return 0;
+}
+late_initcall(twl4030_ldo_tweak);
+
 static int __devexit twl4030reg_remove(struct platform_device *pdev)
 {
 	regulator_unregister(platform_get_drvdata(pdev));



--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2009-04-02 18:58 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-31  8:53 [PATCH v3] ARM: OMAP: board-ldp: add regulator info to get the microSD slot working again Koen Kooi
2009-04-02 18:58 ` David Brownell [this message]
2009-04-14  6:21   ` Koen Kooi
2009-04-21  7:28 ` Koen Kooi
2009-04-28 19:43 ` Koen Kooi
2009-04-28 20:07   ` Tony Lindgren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200904021158.11612.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=koen@beagleboard.org \
    --cc=linux-omap@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox