* [RFC 0/7] MFD: twl6040: Conversion to i2c driver @ 2012-02-02 12:16 Peter Ujfalusi 2012-02-02 12:16 ` [RFC 1/7] MFD: twl-core: Detach twl6040 from the pmic mfd driver Peter Ujfalusi ` (6 more replies) 0 siblings, 7 replies; 15+ messages in thread From: Peter Ujfalusi @ 2012-02-02 12:16 UTC (permalink / raw) To: linux-arm-kernel Hello, This series will convert the twl6040 MFD driver to an i2c driver. Compared to older twl4030/5030/TPS the twl6040 is a standalone audio IC. It is better if the twl6040-core (and all of it's child devices) does not depend on the twl-core since it has nothing to with it. With this conversion the dependency on twl can be dropped from the twl6040 driver stack (core, vibra, audio). Between the first and second patch the audio will not probe on OMAP4, but I felt it is better this way at least for the first RFC series to not have too big change within one patch. The two patch can be squashed together later if no objections. Regards, Peter --- Peter Ujfalusi (7): MFD: twl-core: Detach twl6040 from the pmic mfd driver MFD: twl6040: Convert to i2c driver, and separate it from twl core ASoC: twl6040: Remove dependency on twl4030 from Kconfig OMAP: 4430sdp: Correct fixed regulator device ID OMAP: sdp4430: Add fixed regulator for twl6040 needs OMAP: omap4panda: Add fixed regulator for twl6040 needs MFD: TWL6040: Add regulator support for VIO, V2V1 supplies arch/arm/mach-omap2/board-4430sdp.c | 77 +++++++++++++-- arch/arm/mach-omap2/board-generic.c | 2 +- arch/arm/mach-omap2/board-omap4panda.c | 75 +++++++++++++-- arch/arm/mach-omap2/twl-common.c | 37 ++++++- arch/arm/mach-omap2/twl-common.h | 10 +- drivers/input/misc/Kconfig | 1 - drivers/input/misc/twl6040-vibra.c | 4 +- drivers/mfd/Kconfig | 2 +- drivers/mfd/twl-core.c | 58 +++++++----- drivers/mfd/twl6040-core.c | 165 ++++++++++++++++++++++++++------ include/linux/i2c/twl.h | 12 --- include/linux/mfd/twl6040.h | 27 +++++ sound/soc/codecs/Kconfig | 2 +- sound/soc/codecs/twl6040.c | 3 +- 14 files changed, 375 insertions(+), 100 deletions(-) -- 1.7.8.4 ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 1/7] MFD: twl-core: Detach twl6040 from the pmic mfd driver 2012-02-02 12:16 [RFC 0/7] MFD: twl6040: Conversion to i2c driver Peter Ujfalusi @ 2012-02-02 12:16 ` Peter Ujfalusi [not found] ` <1328185019-29575-5-git-send-email-peter.ujfalusi@ti.com> ` (5 subsequent siblings) 6 siblings, 0 replies; 15+ messages in thread From: Peter Ujfalusi @ 2012-02-02 12:16 UTC (permalink / raw) To: linux-arm-kernel On OMAP4 platform audio has separate IC, it is no longer part of the pmic chip. Prevent twl-core to claim the 0x4b address, which belongs to the twl6040 audio IC. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> --- drivers/mfd/twl-core.c | 58 +++++++++++++++++++++++++++-------------------- 1 files changed, 33 insertions(+), 25 deletions(-) diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c index e04e04d..ac6fdd93 100644 --- a/drivers/mfd/twl-core.c +++ b/drivers/mfd/twl-core.c @@ -115,8 +115,8 @@ #define twl_has_watchdog() false #endif -#if defined(CONFIG_MFD_TWL4030_AUDIO) || defined(CONFIG_MFD_TWL4030_AUDIO_MODULE) ||\ - defined(CONFIG_TWL6040_CORE) || defined(CONFIG_TWL6040_CORE_MODULE) +#if defined(CONFIG_MFD_TWL4030_AUDIO) || \ + defined(CONFIG_MFD_TWL4030_AUDIO_MODULE) #define twl_has_codec() true #else #define twl_has_codec() false @@ -146,6 +146,7 @@ #define SUB_CHIP_ID1 1 #define SUB_CHIP_ID2 2 #define SUB_CHIP_ID3 3 +#define SUB_CHIP_ID_INVAL 0xff #define TWL_MODULE_LAST TWL4030_MODULE_LAST @@ -315,7 +316,7 @@ static struct twl_mapping twl6030_map[] = { * so they continue to match the order in this table. */ { SUB_CHIP_ID1, TWL6030_BASEADD_USB }, - { SUB_CHIP_ID3, TWL6030_BASEADD_AUDIO }, + { SUB_CHIP_ID_INVAL, TWL6030_BASEADD_AUDIO }, { SUB_CHIP_ID2, TWL6030_BASEADD_DIEID }, { SUB_CHIP_ID2, TWL6030_BASEADD_RSV }, { SUB_CHIP_ID1, TWL6030_BASEADD_PIH }, @@ -377,6 +378,11 @@ int twl_i2c_write(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes) return -EPERM; } sid = twl_map[mod_no].sid; + if (unlikely(sid == SUB_CHIP_ID_INVAL)) { + pr_err("%s: module %d is not part of the pmic\n", + DRIVER_NAME, mod_no); + return -EINVAL; + } twl = &twl_modules[sid]; mutex_lock(&twl->xfer_lock); @@ -434,6 +440,11 @@ int twl_i2c_read(u8 mod_no, u8 *value, u8 reg, unsigned num_bytes) return -EPERM; } sid = twl_map[mod_no].sid; + if (unlikely(sid == SUB_CHIP_ID_INVAL)) { + pr_err("%s: module %d is not part of the pmic\n", + DRIVER_NAME, mod_no); + return -EINVAL; + } twl = &twl_modules[sid]; mutex_lock(&twl->xfer_lock); @@ -834,15 +845,6 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features) return PTR_ERR(child); } - if (twl_has_codec() && pdata->audio && twl_class_is_6030()) { - sub_chip_id = twl_map[TWL_MODULE_AUDIO_VOICE].sid; - child = add_child(sub_chip_id, "twl6040", - pdata->audio, sizeof(*pdata->audio), - false, 0, 0); - if (IS_ERR(child)) - return PTR_ERR(child); - } - /* twl4030 regulators */ if (twl_has_regulator() && twl_class_is_4030()) { child = add_regulator(TWL4030_REG_VPLL1, pdata->vpll1, @@ -1163,18 +1165,21 @@ int twl6030_exit_irq(void); static int twl_remove(struct i2c_client *client) { - unsigned i; + unsigned i, num_slaves; int status; - if (twl_class_is_4030()) + if (twl_class_is_4030()) { status = twl4030_exit_irq(); - else + num_slaves = TWL_NUM_SLAVES; + } else { status = twl6030_exit_irq(); + num_slaves = TWL_NUM_SLAVES - 1; + } if (status < 0) return status; - for (i = 0; i < TWL_NUM_SLAVES; i++) { + for (i = 0; i < num_slaves; i++) { struct twl_client *twl = &twl_modules[i]; if (twl->client && twl->client != client) @@ -1190,7 +1195,7 @@ static int __devinit twl_probe(struct i2c_client *client, const struct i2c_device_id *id) { int status; - unsigned i; + unsigned i, num_slaves; struct twl4030_platform_data *pdata = client->dev.platform_data; struct device_node *node = client->dev.of_node; u8 temp; @@ -1244,7 +1249,17 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id) return -EBUSY; } - for (i = 0; i < TWL_NUM_SLAVES; i++) { + if ((id->driver_data) & TWL6030_CLASS) { + twl_id = TWL6030_CLASS_ID; + twl_map = &twl6030_map[0]; + num_slaves = TWL_NUM_SLAVES - 1; + } else { + twl_id = TWL4030_CLASS_ID; + twl_map = &twl4030_map[0]; + num_slaves = TWL_NUM_SLAVES; + } + + for (i = 0; i < num_slaves; i++) { struct twl_client *twl = &twl_modules[i]; twl->address = client->addr + i; @@ -1263,13 +1278,6 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id) mutex_init(&twl->xfer_lock); } inuse = true; - if ((id->driver_data) & TWL6030_CLASS) { - twl_id = TWL6030_CLASS_ID; - twl_map = &twl6030_map[0]; - } else { - twl_id = TWL4030_CLASS_ID; - twl_map = &twl4030_map[0]; - } /* setup clock framework */ clocks_init(&client->dev, pdata->clock); -- 1.7.8.4 ^ permalink raw reply related [flat|nested] 15+ messages in thread
[parent not found: <1328185019-29575-5-git-send-email-peter.ujfalusi@ti.com>]
* [RFC 4/7] OMAP: 4430sdp: Correct fixed regulator device ID [not found] ` <1328185019-29575-5-git-send-email-peter.ujfalusi@ti.com> @ 2012-02-02 12:38 ` Mark Brown 0 siblings, 0 replies; 15+ messages in thread From: Mark Brown @ 2012-02-02 12:38 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 02:16:56PM +0200, Peter Ujfalusi wrote: > The board has two fixed voltage regulator. Correct the > device ID for the vbat, which used -1. > Create defines for the fixed regulator IDs so when adding new > regulators we know the next available ID to use for them. > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com> -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/80d0def8/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
[parent not found: <1328185019-29575-6-git-send-email-peter.ujfalusi@ti.com>]
* [RFC 5/7] OMAP: sdp4430: Add fixed regulator for twl6040 needs [not found] ` <1328185019-29575-6-git-send-email-peter.ujfalusi@ti.com> @ 2012-02-02 12:40 ` Mark Brown 2012-02-02 13:03 ` Peter Ujfalusi 0 siblings, 1 reply; 15+ messages in thread From: Mark Brown @ 2012-02-02 12:40 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 02:16:57PM +0200, Peter Ujfalusi wrote: > The twl6040 VIO power is connected to SMPS V1V8, the > V2V1 power is coming from SMPS V2V1 of twl6030. > These are fixed, always on regulators. > Create fixed voltage regulators for these supplies. Shouldn't the PMIC be creating the relevant fixed voltage regulators? It's a bit clearer given that the supplies actually come from the PMIC and it would cut down a bit on the boilerplate in boards (though much less so with device tree, sadly). -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/bd01398d/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 5/7] OMAP: sdp4430: Add fixed regulator for twl6040 needs 2012-02-02 12:40 ` [RFC 5/7] OMAP: sdp4430: Add fixed regulator for twl6040 needs Mark Brown @ 2012-02-02 13:03 ` Peter Ujfalusi 0 siblings, 0 replies; 15+ messages in thread From: Peter Ujfalusi @ 2012-02-02 13:03 UTC (permalink / raw) To: linux-arm-kernel On 02/02/2012 02:40 PM, Mark Brown wrote: > On Thu, Feb 02, 2012 at 02:16:57PM +0200, Peter Ujfalusi wrote: >> The twl6040 VIO power is connected to SMPS V1V8, the >> V2V1 power is coming from SMPS V2V1 of twl6030. >> These are fixed, always on regulators. >> Create fixed voltage regulators for these supplies. > > Shouldn't the PMIC be creating the relevant fixed voltage regulators? > It's a bit clearer given that the supplies actually come from the PMIC > and it would cut down a bit on the boilerplate in boards (though much > less so with device tree, sadly). Yes these are coming from twl6030, so it might be better to create the fixed regulators in the PMIC driver. I'll take a look. Thanks, P?ter ^ permalink raw reply [flat|nested] 15+ messages in thread
[parent not found: <1328185019-29575-7-git-send-email-peter.ujfalusi@ti.com>]
* [RFC 6/7] OMAP: omap4panda: Add fixed regulator for twl6040 needs [not found] ` <1328185019-29575-7-git-send-email-peter.ujfalusi@ti.com> @ 2012-02-02 12:41 ` Mark Brown 0 siblings, 0 replies; 15+ messages in thread From: Mark Brown @ 2012-02-02 12:41 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 02:16:58PM +0200, Peter Ujfalusi wrote: > The twl6040 VIO power is connected to SMPS V1V8, the > V2V1 power is coming from SMPS V2V1 of twl6030. > These are fixed, always on regulators. > Create fixed voltage regulators for these supplies. Same issue as previously, shouldn't the PMIC create the regulators? -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/2a44d37e/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
[parent not found: <1328185019-29575-4-git-send-email-peter.ujfalusi@ti.com>]
* [RFC 3/7] ASoC: twl6040: Remove dependency on twl4030 from Kconfig [not found] ` <1328185019-29575-4-git-send-email-peter.ujfalusi@ti.com> @ 2012-02-02 12:42 ` Mark Brown 0 siblings, 0 replies; 15+ messages in thread From: Mark Brown @ 2012-02-02 12:42 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 02:16:55PM +0200, Peter Ujfalusi wrote: > twl6040 no longer needs twl4030. > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Reviewed-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Not applying since this needs to follow on from (or be integrated with) the patch splitting the twl6040 to avoid build breaks. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/be79ae3e/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
[parent not found: <1328185019-29575-3-git-send-email-peter.ujfalusi@ti.com>]
* [RFC 2/7] MFD: twl6040: Convert to i2c driver, and separate it from twl core [not found] ` <1328185019-29575-3-git-send-email-peter.ujfalusi@ti.com> @ 2012-02-02 12:48 ` Mark Brown 2012-02-02 13:01 ` Peter Ujfalusi 0 siblings, 1 reply; 15+ messages in thread From: Mark Brown @ 2012-02-02 12:48 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 02:16:54PM +0200, Peter Ujfalusi wrote: > +static int twl6040_i2c_read(struct i2c_client *i2c, u8 *value, u8 reg) > +{ > + struct i2c_msg msg[2]; > + int ret; May as well convert to regmap while you're at it, saves some code and will get you access to the regmap features - you have to make updates in all the relevant places anyway. We should be pushing to remove use of the ASoC level code for register cache and whatnot to cut down on code duplication (especially for MFDs where it has a few issues interacting with the MFD) and this seems like a good opportunity. The calling convention here seems a bit weird too, you've got value then register but normally we have register then value for I2C/SPI devices. Except when we don't :( > -module_platform_driver(twl6040_driver); > +static int __devinit twl6040_init(void) > +{ > + return i2c_add_driver(&twl6040_driver); > +} > +module_init(twl6040_init); > + > +static void __devexit twl6040_exit(void) > +{ > + i2c_del_driver(&twl6040_driver); > +} > + > +module_exit(twl6040_exit); There's module_i2c_driver() in mainline as of the last merge window. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/1319fb4b/attachment-0001.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 2/7] MFD: twl6040: Convert to i2c driver, and separate it from twl core 2012-02-02 12:48 ` [RFC 2/7] MFD: twl6040: Convert to i2c driver, and separate it from twl core Mark Brown @ 2012-02-02 13:01 ` Peter Ujfalusi 2012-02-02 13:27 ` Mark Brown 0 siblings, 1 reply; 15+ messages in thread From: Peter Ujfalusi @ 2012-02-02 13:01 UTC (permalink / raw) To: linux-arm-kernel On 02/02/2012 02:48 PM, Mark Brown wrote: > On Thu, Feb 02, 2012 at 02:16:54PM +0200, Peter Ujfalusi wrote: > >> +static int twl6040_i2c_read(struct i2c_client *i2c, u8 *value, u8 reg) >> +{ >> + struct i2c_msg msg[2]; >> + int ret; > > May as well convert to regmap while you're at it, saves some code and > will get you access to the regmap features - you have to make updates in > all the relevant places anyway. We should be pushing to remove use of > the ASoC level code for register cache and whatnot to cut down on code > duplication (especially for MFDs where it has a few issues interacting > with the MFD) and this seems like a good opportunity. True. I have done the bulk of this set back in June, 2011 and thought that I will do the move to regmap as increment, but you are right. I'm anyway touching the relevant places, so why not do it properly? I'll take the regmap into use for v2. > The calling convention here seems a bit weird too, you've got value then > register but normally we have register then value for I2C/SPI devices. I have based these part on the twl-core's implementation. I should not have done that, I know.. Let's see how it will look like with regmap. > Except when we don't :( > >> -module_platform_driver(twl6040_driver); >> +static int __devinit twl6040_init(void) >> +{ >> + return i2c_add_driver(&twl6040_driver); >> +} >> +module_init(twl6040_init); >> + >> +static void __devexit twl6040_exit(void) >> +{ >> + i2c_del_driver(&twl6040_driver); >> +} >> + >> +module_exit(twl6040_exit); > > There's module_i2c_driver() in mainline as of the last merge window. Oh, good to know. Thanks -- P?ter ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 2/7] MFD: twl6040: Convert to i2c driver, and separate it from twl core 2012-02-02 13:01 ` Peter Ujfalusi @ 2012-02-02 13:27 ` Mark Brown 0 siblings, 0 replies; 15+ messages in thread From: Mark Brown @ 2012-02-02 13:27 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 03:01:06PM +0200, Peter Ujfalusi wrote: > On 02/02/2012 02:48 PM, Mark Brown wrote: > > The calling convention here seems a bit weird too, you've got value then > > register but normally we have register then value for I2C/SPI devices. > I have based these part on the twl-core's implementation. I should not > have done that, I know.. Let's see how it will look like with regmap. Yeah, like I say... > > Except when we don't :( ...it's not like we've been consistent so far. I'm not that fussed either way, I probably wouldn't have mentioned it if I hadn't otherwise been commenting. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/f81919fa/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
[parent not found: <1328185019-29575-8-git-send-email-peter.ujfalusi@ti.com>]
* [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies [not found] ` <1328185019-29575-8-git-send-email-peter.ujfalusi@ti.com> @ 2012-02-02 12:52 ` Mark Brown 2012-02-02 13:18 ` Peter Ujfalusi 0 siblings, 1 reply; 15+ messages in thread From: Mark Brown @ 2012-02-02 12:52 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 02:16:59PM +0200, Peter Ujfalusi wrote: > + twl6040->vio = regulator_get(&client->dev, "vio"); > + if (IS_ERR(twl6040->vio)) { > + ret = PTR_ERR(twl6040->vio); > + dev_err(&client->dev, "Failed to request VIO supply: %d\n", > + ret); > + goto regulator_get_err; > + } > + twl6040->v2v1 = regulator_get(&client->dev, "v2v1"); > + if (IS_ERR(twl6040->v2v1)) { > + ret = PTR_ERR(twl6040->v2v1); > + dev_err(&client->dev, "Failed to request V2V1 supply: %d\n", > + ret); > + regulator_put(twl6040->vio); > + goto regulator_get_err; > + } Looks like you want regulator_bulk_get() here. Or (better yet though it'd be a potential issue for merge via MFD and the benefits aren't that exciting since you still need to disable) devm_regulator_bulk_get(). > + ret = regulator_enable(twl6040->vio); > + if (ret != 0) { > + dev_err(&client->dev, "Failed to enable VIO: %d\n", ret); > + goto power_err; > + } > + ret = regulator_enable(twl6040->v2v1); > + if (ret != 0) { > + dev_err(&client->dev, "Failed to enable V2V1: %d\n", ret); > + regulator_disable(twl6040->vio); > + goto power_err; > + } Similarly regulator_bulk_enable() here, and it'll fix... > gpio1_err: > + regulator_disable(twl6040->v2v1); > + regulator_disable(twl6040->vio); ...the fact that if you fail to enable the v2.1 regulator you don't disable vio. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/42b9ecc2/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies 2012-02-02 12:52 ` [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies Mark Brown @ 2012-02-02 13:18 ` Peter Ujfalusi 2012-02-02 13:32 ` Mark Brown 0 siblings, 1 reply; 15+ messages in thread From: Peter Ujfalusi @ 2012-02-02 13:18 UTC (permalink / raw) To: linux-arm-kernel On 02/02/2012 02:52 PM, Mark Brown wrote: > On Thu, Feb 02, 2012 at 02:16:59PM +0200, Peter Ujfalusi wrote: > >> + twl6040->vio = regulator_get(&client->dev, "vio"); >> + if (IS_ERR(twl6040->vio)) { >> + ret = PTR_ERR(twl6040->vio); >> + dev_err(&client->dev, "Failed to request VIO supply: %d\n", >> + ret); >> + goto regulator_get_err; >> + } >> + twl6040->v2v1 = regulator_get(&client->dev, "v2v1"); >> + if (IS_ERR(twl6040->v2v1)) { >> + ret = PTR_ERR(twl6040->v2v1); >> + dev_err(&client->dev, "Failed to request V2V1 supply: %d\n", >> + ret); >> + regulator_put(twl6040->vio); >> + goto regulator_get_err; >> + } > > Looks like you want regulator_bulk_get() here. Or (better yet though > it'd be a potential issue for merge via MFD and the benefits aren't that > exciting since you still need to disable) devm_regulator_bulk_get(). I need separate control for the two power source since we can hit different power levels depending on which is powered/not powered: power down: vio, v2v1 is OFF deep sleep: vio is ON, v2v1 is OFF sleep/power on: vio, v2v1 is ON And we have certain sequence to move between power states. > >> + ret = regulator_enable(twl6040->vio); >> + if (ret != 0) { >> + dev_err(&client->dev, "Failed to enable VIO: %d\n", ret); >> + goto power_err; >> + } >> + ret = regulator_enable(twl6040->v2v1); >> + if (ret != 0) { >> + dev_err(&client->dev, "Failed to enable V2V1: %d\n", ret); >> + regulator_disable(twl6040->vio); I disable the vio here, if the v2v1 enable fails. >> + goto power_err; >> + } > > Similarly regulator_bulk_enable() here, and it'll fix... > >> gpio1_err: >> + regulator_disable(twl6040->v2v1); >> + regulator_disable(twl6040->vio); > > ...the fact that if you fail to enable the v2.1 regulator you don't > disable vio. It is handled within the if(){} With the devm_regulator this will be much nicer for sure. -- P?ter ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies 2012-02-02 13:18 ` Peter Ujfalusi @ 2012-02-02 13:32 ` Mark Brown 2012-02-02 13:59 ` Peter Ujfalusi 0 siblings, 1 reply; 15+ messages in thread From: Mark Brown @ 2012-02-02 13:32 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 03:18:09PM +0200, Peter Ujfalusi wrote: > On 02/02/2012 02:52 PM, Mark Brown wrote: > > Looks like you want regulator_bulk_get() here. Or (better yet though > > it'd be a potential issue for merge via MFD and the benefits aren't that > > exciting since you still need to disable) devm_regulator_bulk_get(). > I need separate control for the two power source since we can hit > different power levels depending on which is powered/not powered: > power down: vio, v2v1 is OFF > deep sleep: vio is ON, v2v1 is OFF > sleep/power on: vio, v2v1 is ON > And we have certain sequence to move between power states. That's not a problem for using the bulk get - the array is part of the API so you can use regulator_bulk_get() and still look at individual supplies within the array later on when enabling and disabling them. > >> + ret = regulator_enable(twl6040->vio); > >> + if (ret != 0) { > >> + dev_err(&client->dev, "Failed to enable VIO: %d\n", ret); > >> + goto power_err; > >> + } > >> + ret = regulator_enable(twl6040->v2v1); > >> + if (ret != 0) { > >> + dev_err(&client->dev, "Failed to enable V2V1: %d\n", ret); > >> + regulator_disable(twl6040->vio); > I disable the vio here, if the v2v1 enable fails. Oh, that's quite confusing when mixed in with the goto/unwind - it'd be clearer to have the extra lable to jump to. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/f817d7b4/attachment.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies 2012-02-02 13:32 ` Mark Brown @ 2012-02-02 13:59 ` Peter Ujfalusi 2012-02-02 14:19 ` Mark Brown 0 siblings, 1 reply; 15+ messages in thread From: Peter Ujfalusi @ 2012-02-02 13:59 UTC (permalink / raw) To: linux-arm-kernel On 02/02/2012 03:32 PM, Mark Brown wrote: > That's not a problem for using the bulk get - the array is part of the > API so you can use regulator_bulk_get() and still look at individual > supplies within the array later on when enabling and disabling them. For some reason I have associated the use of regulator_bulk_get with the use of regulator_bulk_enable/disable. It did not even crossed my mind that I can still use regulator_enable on the individual regulators. Will convert the regulator_get/put to bulk operations. It will make the code a bit cleaner. Thanks >>>> + ret = regulator_enable(twl6040->vio); >>>> + if (ret != 0) { >>>> + dev_err(&client->dev, "Failed to enable VIO: %d\n", ret); >>>> + goto power_err; >>>> + } >>>> + ret = regulator_enable(twl6040->v2v1); >>>> + if (ret != 0) { >>>> + dev_err(&client->dev, "Failed to enable V2V1: %d\n", ret); >>>> + regulator_disable(twl6040->vio); > >> I disable the vio here, if the v2v1 enable fails. > > Oh, that's quite confusing when mixed in with the goto/unwind - it'd be > clearer to have the extra lable to jump to. I guess this is a matter of taste. However I have found some inconsistent naming with the exit labels, which I'm going to fix for the next series. -- P?ter ^ permalink raw reply [flat|nested] 15+ messages in thread
* [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies 2012-02-02 13:59 ` Peter Ujfalusi @ 2012-02-02 14:19 ` Mark Brown 0 siblings, 0 replies; 15+ messages in thread From: Mark Brown @ 2012-02-02 14:19 UTC (permalink / raw) To: linux-arm-kernel On Thu, Feb 02, 2012 at 03:59:20PM +0200, Peter Ujfalusi wrote: > On 02/02/2012 03:32 PM, Mark Brown wrote: > > That's not a problem for using the bulk get - the array is part of the > > API so you can use regulator_bulk_get() and still look at individual > > supplies within the array later on when enabling and disabling them. > For some reason I have associated the use of regulator_bulk_get with the > use of regulator_bulk_enable/disable. It did not even crossed my mind > that I can still use regulator_enable on the individual regulators. They do normally end up going together since a very large proportion of devices need all their supplies on when active but don't care about sequencing so you end up with a common pattern. It's not required, though. > Will convert the regulator_get/put to bulk operations. It will make the > code a bit cleaner. Good stuff. -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120202/73519ed4/attachment-0001.sig> ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2012-02-02 14:19 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-02-02 12:16 [RFC 0/7] MFD: twl6040: Conversion to i2c driver Peter Ujfalusi 2012-02-02 12:16 ` [RFC 1/7] MFD: twl-core: Detach twl6040 from the pmic mfd driver Peter Ujfalusi [not found] ` <1328185019-29575-5-git-send-email-peter.ujfalusi@ti.com> 2012-02-02 12:38 ` [RFC 4/7] OMAP: 4430sdp: Correct fixed regulator device ID Mark Brown [not found] ` <1328185019-29575-6-git-send-email-peter.ujfalusi@ti.com> 2012-02-02 12:40 ` [RFC 5/7] OMAP: sdp4430: Add fixed regulator for twl6040 needs Mark Brown 2012-02-02 13:03 ` Peter Ujfalusi [not found] ` <1328185019-29575-7-git-send-email-peter.ujfalusi@ti.com> 2012-02-02 12:41 ` [RFC 6/7] OMAP: omap4panda: " Mark Brown [not found] ` <1328185019-29575-4-git-send-email-peter.ujfalusi@ti.com> 2012-02-02 12:42 ` [RFC 3/7] ASoC: twl6040: Remove dependency on twl4030 from Kconfig Mark Brown [not found] ` <1328185019-29575-3-git-send-email-peter.ujfalusi@ti.com> 2012-02-02 12:48 ` [RFC 2/7] MFD: twl6040: Convert to i2c driver, and separate it from twl core Mark Brown 2012-02-02 13:01 ` Peter Ujfalusi 2012-02-02 13:27 ` Mark Brown [not found] ` <1328185019-29575-8-git-send-email-peter.ujfalusi@ti.com> 2012-02-02 12:52 ` [RFC 7/7] MFD: TWL6040: Add regulator support for VIO, V2V1 supplies Mark Brown 2012-02-02 13:18 ` Peter Ujfalusi 2012-02-02 13:32 ` Mark Brown 2012-02-02 13:59 ` Peter Ujfalusi 2012-02-02 14:19 ` Mark Brown
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).