* [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver
@ 2009-02-11 7:06 Kalle Jokiniemi
2009-02-11 7:06 ` [PATCH 1/2] TWL: USB: disable VUSB regulators when cable unplugged Kalle Jokiniemi
2009-02-11 7:23 ` [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver David Brownell
0 siblings, 2 replies; 5+ messages in thread
From: Kalle Jokiniemi @ 2009-02-11 7:06 UTC (permalink / raw)
To: david-b; +Cc: lrg, linux-kernel, linux-usb, linux-omap, jouni.hogander, broonie
These couple of patches enable dynamic swithcing of the
regulators used by twl4030 usb tranceiver.
This set replaces the single patch "USB: disable twl4030
USB regulators when cable unplugged" sent previously.
The change to previous version is that possible errors
in regulator_get are now handled and the twl4030 usb
driver requires TWL_REGULATOR support to be compiled.
Thanks to Aaro Koskinen for reporing these problems.
Original patch by Kalle Jokiniemi, fixes by Jouni
Hogander.
Jouni Hogander (2):
TWL: USB: disable VUSB regulators when cable unplugged
USB: OTG: Twl4030 depends on REGULATOR_TWL4030
drivers/usb/otg/Kconfig | 2 +-
drivers/usb/otg/twl4030-usb.c | 45 +++++++++++++++++++++++++++++++++++-----
2 files changed, 40 insertions(+), 7 deletions(-)
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH 1/2] TWL: USB: disable VUSB regulators when cable unplugged 2009-02-11 7:06 [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver Kalle Jokiniemi @ 2009-02-11 7:06 ` Kalle Jokiniemi 2009-02-11 7:06 ` [PATCH 2/2] USB: OTG: Twl4030 depends on REGULATOR_TWL4030 Kalle Jokiniemi 2009-02-11 7:23 ` [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver David Brownell 1 sibling, 1 reply; 5+ messages in thread From: Kalle Jokiniemi @ 2009-02-11 7:06 UTC (permalink / raw) To: david-b Cc: lrg, linux-kernel, linux-usb, linux-omap, jouni.hogander, broonie, Kalle Jokiniemi From: Jouni Hogander <jouni.hogander@nokia.com> This patch disables USB regulators VUSB1V5, VUSB1V8, and VUSB3V1 when the USB cable is unplugged to reduce power consumption. Signed-off-by: Jouni Hogander <jouni.hogander@nokia.com> Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@digia.com> --- drivers/usb/otg/twl4030-usb.c | 45 +++++++++++++++++++++++++++++++++++----- 1 files changed, 39 insertions(+), 6 deletions(-) diff --git a/drivers/usb/otg/twl4030-usb.c b/drivers/usb/otg/twl4030-usb.c index 416e441..29df421 100644 --- a/drivers/usb/otg/twl4030-usb.c +++ b/drivers/usb/otg/twl4030-usb.c @@ -34,6 +34,8 @@ #include <linux/delay.h> #include <linux/usb/otg.h> #include <linux/i2c/twl4030.h> +#include <linux/regulator/consumer.h> +#include <linux/err.h> /* Register defines */ @@ -246,6 +248,11 @@ struct twl4030_usb { struct otg_transceiver otg; struct device *dev; + /* TWL4030 internal USB regulator supplies */ + struct regulator *usb1v5; + struct regulator *usb1v8; + struct regulator *usb3v1; + /* for vbus reporting with irqs disabled */ spinlock_t lock; @@ -434,6 +441,12 @@ static void twl4030_phy_power(struct twl4030_usb *twl, int on) pwr = twl4030_usb_read(twl, PHY_PWR_CTRL); if (on) { + if (twl->usb1v5) + regulator_enable(twl->usb1v5); + if (twl->usb1v8) + regulator_enable(twl->usb1v8); + if (twl->usb3v1) + regulator_enable(twl->usb3v1); pwr &= ~PHY_PWR_PHYPWD; WARN_ON(twl4030_usb_write_verify(twl, PHY_PWR_CTRL, pwr) < 0); twl4030_usb_write(twl, PHY_CLK_CTRL, @@ -443,6 +456,12 @@ static void twl4030_phy_power(struct twl4030_usb *twl, int on) } else { pwr |= PHY_PWR_PHYPWD; WARN_ON(twl4030_usb_write_verify(twl, PHY_PWR_CTRL, pwr) < 0); + if (twl->usb1v5) + regulator_disable(twl->usb1v5); + if (twl->usb1v8) + regulator_disable(twl->usb1v8); + if (twl->usb3v1) + regulator_disable(twl->usb3v1); } } @@ -470,6 +489,8 @@ static void twl4030_phy_resume(struct twl4030_usb *twl) static void twl4030_usb_ldo_init(struct twl4030_usb *twl) { + struct regulator *reg; + /* Enable writing to power configuration registers */ twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0xC0, PROTECT_KEY); twl4030_i2c_write_u8(TWL4030_MODULE_PM_MASTER, 0x0C, PROTECT_KEY); @@ -480,16 +501,25 @@ static void twl4030_usb_ldo_init(struct twl4030_usb *twl) /* input to VUSB3V1 LDO is from VBAT, not VBUS */ twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x14, VUSB_DEDICATED1); - /* turn on 3.1V regulator */ - twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB3V1_DEV_GRP); + /* Initialize 3.1V regulator */ + twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB3V1_DEV_GRP); + reg = regulator_get(twl->dev, "usb3v1"); + if (!IS_ERR(reg)) + twl->usb3v1 = reg; twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB3V1_TYPE); - /* turn on 1.5V regulator */ - twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB1V5_DEV_GRP); + /* Initialize 1.5V regulator */ + twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V5_DEV_GRP); + reg = regulator_get(twl->dev, "usb1v5"); + if (!IS_ERR(reg)) + twl->usb1v5 = reg; twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V5_TYPE); - /* turn on 1.8V regulator */ - twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x20, VUSB1V8_DEV_GRP); + /* Initialize 1.8V regulator */ + twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V8_DEV_GRP); + reg = regulator_get(twl->dev, "usb1v8"); + if (!IS_ERR(reg)) + twl->usb1v8 = reg; twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0, VUSB1V8_TYPE); /* disable access to power configuration registers */ @@ -688,6 +718,9 @@ static int __exit twl4030_usb_remove(struct platform_device *pdev) twl4030_usb_clear_bits(twl, POWER_CTRL, POWER_CTRL_OTG_ENAB); twl4030_phy_power(twl, 0); + regulator_put(twl->usb1v5); + regulator_put(twl->usb1v8); + regulator_put(twl->usb3v1); kfree(twl); -- 1.5.4.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] USB: OTG: Twl4030 depends on REGULATOR_TWL4030 2009-02-11 7:06 ` [PATCH 1/2] TWL: USB: disable VUSB regulators when cable unplugged Kalle Jokiniemi @ 2009-02-11 7:06 ` Kalle Jokiniemi 0 siblings, 0 replies; 5+ messages in thread From: Kalle Jokiniemi @ 2009-02-11 7:06 UTC (permalink / raw) To: david-b Cc: lrg, linux-kernel, linux-usb, linux-omap, jouni.hogander, broonie, Kalle Jokiniemi From: Jouni Hogander <jouni.hogander@nokia.com> Twl4030 doesn't work without twl4030-regulator so it should depend on that. Signed-off-by: Jouni Hogander <jouni.hogander@nokia.com> Signed-off-by: Kalle Jokiniemi <kalle.jokiniemi@digia.com> --- drivers/usb/otg/Kconfig | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig index ee55b44..5790a5b 100644 --- a/drivers/usb/otg/Kconfig +++ b/drivers/usb/otg/Kconfig @@ -43,7 +43,7 @@ config ISP1301_OMAP config TWL4030_USB tristate "TWL4030 USB Transceiver Driver" - depends on TWL4030_CORE + depends on TWL4030_CORE && REGULATOR_TWL4030 select USB_OTG_UTILS help Enable this to support the USB OTG transceiver on TWL4030 -- 1.5.4.3 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver 2009-02-11 7:06 [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver Kalle Jokiniemi 2009-02-11 7:06 ` [PATCH 1/2] TWL: USB: disable VUSB regulators when cable unplugged Kalle Jokiniemi @ 2009-02-11 7:23 ` David Brownell 2009-02-11 10:47 ` Kalle Jokiniemi 1 sibling, 1 reply; 5+ messages in thread From: David Brownell @ 2009-02-11 7:23 UTC (permalink / raw) To: Kalle Jokiniemi Cc: lrg, linux-kernel, linux-usb, linux-omap, jouni.hogander, broonie On Tuesday 10 February 2009, Kalle Jokiniemi wrote: > These couple of patches enable dynamic swithcing of the > regulators used by twl4030 usb tranceiver. > > This set replaces the single patch "USB: disable twl4030 > USB regulators when cable unplugged" sent previously. > The change to previous version is that possible errors > in regulator_get are now handled and the twl4030 usb > driver requires TWL_REGULATOR support to be compiled. It'd make more sense to me as a single patch ... :) And also, instead of *continuing* after the regulators can't be acquired, it's better to abort. It's not going to be able to do anything ... so don't finish probing, and don't register this "dead" transceiver. - Dave ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver 2009-02-11 7:23 ` [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver David Brownell @ 2009-02-11 10:47 ` Kalle Jokiniemi 0 siblings, 0 replies; 5+ messages in thread From: Kalle Jokiniemi @ 2009-02-11 10:47 UTC (permalink / raw) To: David Brownell Cc: lrg, linux-kernel, linux-usb, linux-omap, jouni.hogander, broonie On Tue, 2009-02-10 at 23:23 -0800, David Brownell wrote: > On Tuesday 10 February 2009, Kalle Jokiniemi wrote: > > These couple of patches enable dynamic swithcing of the > > regulators used by twl4030 usb tranceiver. > > > > This set replaces the single patch "USB: disable twl4030 > > USB regulators when cable unplugged" sent previously. > > The change to previous version is that possible errors > > in regulator_get are now handled and the twl4030 usb > > driver requires TWL_REGULATOR support to be compiled. > > It'd make more sense to me as a single patch ... :) OK, I'll put them together. > > And also, instead of *continuing* after the regulators > can't be acquired, it's better to abort. It's not > going to be able to do anything ... so don't finish > probing, and don't register this "dead" transceiver. Makes sense. I'll fix that. -Kalle > > - Dave ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2009-02-11 10:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-02-11 7:06 [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver Kalle Jokiniemi 2009-02-11 7:06 ` [PATCH 1/2] TWL: USB: disable VUSB regulators when cable unplugged Kalle Jokiniemi 2009-02-11 7:06 ` [PATCH 2/2] USB: OTG: Twl4030 depends on REGULATOR_TWL4030 Kalle Jokiniemi 2009-02-11 7:23 ` [PATCH 0/2] TWL: USB: Start using twl4030/5030 regulator driver David Brownell 2009-02-11 10:47 ` Kalle Jokiniemi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox