* [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation
@ 2014-03-08 3:55 Axel Lin
2014-03-08 3:56 ` [PATCH v2 2/2] regulator: pbias: Convert to use regmap helper functions Axel Lin
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Axel Lin @ 2014-03-08 3:55 UTC (permalink / raw)
To: Chris Ball
Cc: Liam Girdwood, Mark Brown, Balaji T K, Florian Vaussard,
Stefan Roese, linux-kernel, linux-mmc
The is_enabled implementation is wrong in some cases:
e.g. for pbias_mmc_omap5: enable_mask is : BIT(27) | BIT(25) | BIT(26)
However, pbias_regulator_enable() only sets BIT(27) | BIT(26) bits.
So is_enabled callback will always return false in this case.
Fix the logic to compare the register value with info->enable rather than
info->enable_mask.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
Acked-by: Balaji T K <balajitk@ti.com>
---
v2: Update commit log and add Balaji's Ack.
drivers/regulator/pbias-regulator.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/regulator/pbias-regulator.c b/drivers/regulator/pbias-regulator.c
index ded3b35..d89a1d8 100644
--- a/drivers/regulator/pbias-regulator.c
+++ b/drivers/regulator/pbias-regulator.c
@@ -108,7 +108,7 @@ static int pbias_regulator_is_enable(struct regulator_dev *rdev)
regmap_read(data->syscon, data->pbias_reg, &value);
- return (value & info->enable_mask) == info->enable_mask;
+ return (value & info->enable_mask) == info->enable;
}
static struct regulator_ops pbias_regulator_voltage_ops = {
--
1.8.1.2
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v2 2/2] regulator: pbias: Convert to use regmap helper functions 2014-03-08 3:55 [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin @ 2014-03-08 3:56 ` Axel Lin 2014-04-02 0:26 ` [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin 2014-04-14 21:16 ` Mark Brown 2 siblings, 0 replies; 8+ messages in thread From: Axel Lin @ 2014-03-08 3:56 UTC (permalink / raw) To: Chris Ball Cc: Liam Girdwood, Mark Brown, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel, linux-mmc This patch converts this driver to use the regmap helper functions provided by regulator core. Signed-off-by: Axel Lin <axel.lin@ingics.com> Acked-by: Balaji T K <balajitk@ti.com> --- v2: Add Balaji's Ack. drivers/regulator/pbias-regulator.c | 74 ++++++++++--------------------------- 1 file changed, 19 insertions(+), 55 deletions(-) diff --git a/drivers/regulator/pbias-regulator.c b/drivers/regulator/pbias-regulator.c index d89a1d8..6d38be3 100644 --- a/drivers/regulator/pbias-regulator.c +++ b/drivers/regulator/pbias-regulator.c @@ -38,66 +38,24 @@ struct pbias_reg_info { struct pbias_regulator_data { struct regulator_desc desc; void __iomem *pbias_addr; - unsigned int pbias_reg; struct regulator_dev *dev; struct regmap *syscon; const struct pbias_reg_info *info; int voltage; }; -static int pbias_regulator_set_voltage(struct regulator_dev *dev, - int min_uV, int max_uV, unsigned *selector) -{ - struct pbias_regulator_data *data = rdev_get_drvdata(dev); - const struct pbias_reg_info *info = data->info; - int ret, vmode; - - if (min_uV <= 1800000) - vmode = 0; - else if (min_uV > 1800000) - vmode = info->vmode; - - ret = regmap_update_bits(data->syscon, data->pbias_reg, - info->vmode, vmode); - - return ret; -} - -static int pbias_regulator_get_voltage(struct regulator_dev *rdev) -{ - struct pbias_regulator_data *data = rdev_get_drvdata(rdev); - const struct pbias_reg_info *info = data->info; - int value, voltage; - - regmap_read(data->syscon, data->pbias_reg, &value); - value &= info->vmode; - - voltage = value ? 3000000 : 1800000; - - return voltage; -} +static const unsigned int pbias_volt_table[] = { + 1800000, + 3000000 +}; static int pbias_regulator_enable(struct regulator_dev *rdev) { struct pbias_regulator_data *data = rdev_get_drvdata(rdev); const struct pbias_reg_info *info = data->info; - int ret; - - ret = regmap_update_bits(data->syscon, data->pbias_reg, - info->enable_mask, info->enable); - - return ret; -} - -static int pbias_regulator_disable(struct regulator_dev *rdev) -{ - struct pbias_regulator_data *data = rdev_get_drvdata(rdev); - const struct pbias_reg_info *info = data->info; - int ret; - ret = regmap_update_bits(data->syscon, data->pbias_reg, - info->enable_mask, 0); - return ret; + return regmap_update_bits(data->syscon, rdev->desc->enable_reg, + info->enable_mask, info->enable); } static int pbias_regulator_is_enable(struct regulator_dev *rdev) @@ -106,17 +64,18 @@ static int pbias_regulator_is_enable(struct regulator_dev *rdev) const struct pbias_reg_info *info = data->info; int value; - regmap_read(data->syscon, data->pbias_reg, &value); + regmap_read(data->syscon, rdev->desc->enable_reg, &value); return (value & info->enable_mask) == info->enable; } static struct regulator_ops pbias_regulator_voltage_ops = { - .set_voltage = pbias_regulator_set_voltage, - .get_voltage = pbias_regulator_get_voltage, - .enable = pbias_regulator_enable, - .disable = pbias_regulator_disable, - .is_enabled = pbias_regulator_is_enable, + .list_voltage = regulator_list_voltage_table, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_voltage_sel = regulator_set_voltage_sel_regmap, + .enable = pbias_regulator_enable, + .disable = regulator_disable_regmap, + .is_enabled = pbias_regulator_is_enable, }; static const struct pbias_reg_info pbias_mmc_omap2430 = { @@ -192,6 +151,7 @@ static int pbias_regulator_probe(struct platform_device *pdev) if (IS_ERR(syscon)) return PTR_ERR(syscon); + cfg.regmap = syscon; cfg.dev = &pdev->dev; for (idx = 0; idx < PBIAS_NUM_REGS && data_idx < count; idx++) { @@ -207,15 +167,19 @@ static int pbias_regulator_probe(struct platform_device *pdev) if (!res) return -EINVAL; - drvdata[data_idx].pbias_reg = res->start; drvdata[data_idx].syscon = syscon; drvdata[data_idx].info = info; drvdata[data_idx].desc.name = info->name; drvdata[data_idx].desc.owner = THIS_MODULE; drvdata[data_idx].desc.type = REGULATOR_VOLTAGE; drvdata[data_idx].desc.ops = &pbias_regulator_voltage_ops; + drvdata[data_idx].desc.volt_table = pbias_volt_table; drvdata[data_idx].desc.n_voltages = 2; drvdata[data_idx].desc.enable_time = info->enable_time; + drvdata[data_idx].desc.vsel_reg = res->start; + drvdata[data_idx].desc.vsel_mask = info->vmode; + drvdata[data_idx].desc.enable_reg = res->start; + drvdata[data_idx].desc.enable_mask = info->enable_mask; cfg.init_data = pbias_matches[idx].init_data; cfg.driver_data = &drvdata[data_idx]; -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation 2014-03-08 3:55 [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin 2014-03-08 3:56 ` [PATCH v2 2/2] regulator: pbias: Convert to use regmap helper functions Axel Lin @ 2014-04-02 0:26 ` Axel Lin 2014-04-09 9:50 ` Axel Lin 2014-04-14 21:16 ` Mark Brown 2 siblings, 1 reply; 8+ messages in thread From: Axel Lin @ 2014-04-02 0:26 UTC (permalink / raw) To: Chris Ball Cc: Liam Girdwood, Mark Brown, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel@vger.kernel.org, linux-mmc 2014-03-08 11:55 GMT+08:00 Axel Lin <axel.lin@ingics.com>: > The is_enabled implementation is wrong in some cases: > e.g. for pbias_mmc_omap5: enable_mask is : BIT(27) | BIT(25) | BIT(26) > However, pbias_regulator_enable() only sets BIT(27) | BIT(26) bits. > So is_enabled callback will always return false in this case. > Fix the logic to compare the register value with info->enable rather than > info->enable_mask. > Hi Chris, Would you pick up this patch serial? Regards, Axel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation 2014-04-02 0:26 ` [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin @ 2014-04-09 9:50 ` Axel Lin 2014-04-10 17:30 ` Mark Brown 0 siblings, 1 reply; 8+ messages in thread From: Axel Lin @ 2014-04-09 9:50 UTC (permalink / raw) To: Chris Ball Cc: Liam Girdwood, Mark Brown, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel@vger.kernel.org, linux-mmc 2014-04-02 8:26 GMT+08:00 Axel Lin <axel.lin@ingics.com>: > 2014-03-08 11:55 GMT+08:00 Axel Lin <axel.lin@ingics.com>: >> The is_enabled implementation is wrong in some cases: >> e.g. for pbias_mmc_omap5: enable_mask is : BIT(27) | BIT(25) | BIT(26) >> However, pbias_regulator_enable() only sets BIT(27) | BIT(26) bits. >> So is_enabled callback will always return false in this case. >> Fix the logic to compare the register value with info->enable rather than >> info->enable_mask. >> > > Hi Chris, > Would you pick up this patch serial? I just found Chris sent a pull request for 3.15-rc1. So I'll resend this serial to Mark after 3.15-rc1 is out. > > Regards, > Axel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation 2014-04-09 9:50 ` Axel Lin @ 2014-04-10 17:30 ` Mark Brown 0 siblings, 0 replies; 8+ messages in thread From: Mark Brown @ 2014-04-10 17:30 UTC (permalink / raw) To: Axel Lin Cc: Chris Ball, Liam Girdwood, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel@vger.kernel.org, linux-mmc [-- Attachment #1: Type: text/plain, Size: 310 bytes --] On Wed, Apr 09, 2014 at 05:50:42PM +0800, Axel Lin wrote: > I just found Chris sent a pull request for 3.15-rc1. > So I'll resend this serial to Mark after 3.15-rc1 is out. I still have it, I'll go through after -rc1. I was also kind of hoping for some review from people working on the driver but oh well. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation 2014-03-08 3:55 [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin 2014-03-08 3:56 ` [PATCH v2 2/2] regulator: pbias: Convert to use regmap helper functions Axel Lin 2014-04-02 0:26 ` [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin @ 2014-04-14 21:16 ` Mark Brown 2014-04-15 15:14 ` Axel Lin 2 siblings, 1 reply; 8+ messages in thread From: Mark Brown @ 2014-04-14 21:16 UTC (permalink / raw) To: Axel Lin Cc: Chris Ball, Liam Girdwood, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel, linux-mmc [-- Attachment #1: Type: text/plain, Size: 441 bytes --] On Sat, Mar 08, 2014 at 11:55:29AM +0800, Axel Lin wrote: > The is_enabled implementation is wrong in some cases: > e.g. for pbias_mmc_omap5: enable_mask is : BIT(27) | BIT(25) | BIT(26) > However, pbias_regulator_enable() only sets BIT(27) | BIT(26) bits. > So is_enabled callback will always return false in this case. > Fix the logic to compare the register value with info->enable rather than > info->enable_mask. Applied both, thanks. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation 2014-04-14 21:16 ` Mark Brown @ 2014-04-15 15:14 ` Axel Lin 2014-04-18 17:27 ` Mark Brown 0 siblings, 1 reply; 8+ messages in thread From: Axel Lin @ 2014-04-15 15:14 UTC (permalink / raw) To: Mark Brown Cc: Chris Ball, Liam Girdwood, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel@vger.kernel.org, linux-mmc 2014-04-15 5:16 GMT+08:00 Mark Brown <broonie@kernel.org>: > On Sat, Mar 08, 2014 at 11:55:29AM +0800, Axel Lin wrote: >> The is_enabled implementation is wrong in some cases: >> e.g. for pbias_mmc_omap5: enable_mask is : BIT(27) | BIT(25) | BIT(26) >> However, pbias_regulator_enable() only sets BIT(27) | BIT(26) bits. >> So is_enabled callback will always return false in this case. >> Fix the logic to compare the register value with info->enable rather than >> info->enable_mask. > > Applied both, thanks. Hi Mark, Currently these 2 commits are in topic/pbias branch. I think commit 1cb7b43f6796 "regulator: pbias: Fix is_enabled callback implementation" is a bug fix for 3.15. commit 60e8c1e34d3a "regulator: pbias: Convert to use regmap helper functions" might also required for 3.15. The reason is this commit implements .list_voltage and the mmc core calls regulator_list_voltage() in mmc_regulator_get_ocrmask(). Regards, Axel ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation 2014-04-15 15:14 ` Axel Lin @ 2014-04-18 17:27 ` Mark Brown 0 siblings, 0 replies; 8+ messages in thread From: Mark Brown @ 2014-04-18 17:27 UTC (permalink / raw) To: Axel Lin Cc: Chris Ball, Liam Girdwood, Balaji T K, Florian Vaussard, Stefan Roese, linux-kernel@vger.kernel.org, linux-mmc [-- Attachment #1: Type: text/plain, Size: 328 bytes --] On Tue, Apr 15, 2014 at 11:14:13PM +0800, Axel Lin wrote: > commit 60e8c1e34d3a > "regulator: pbias: Convert to use regmap helper functions" > might also required for 3.15. > The reason is this commit implements .list_voltage and the mmc core calls > regulator_list_voltage() in mmc_regulator_get_ocrmask(). Makes sense, yes. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2014-04-18 17:28 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-03-08 3:55 [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin 2014-03-08 3:56 ` [PATCH v2 2/2] regulator: pbias: Convert to use regmap helper functions Axel Lin 2014-04-02 0:26 ` [PATCH v2 1/2] regulator: pbias: Fix is_enabled callback implementation Axel Lin 2014-04-09 9:50 ` Axel Lin 2014-04-10 17:30 ` Mark Brown 2014-04-14 21:16 ` Mark Brown 2014-04-15 15:14 ` Axel Lin 2014-04-18 17:27 ` Mark Brown
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox