* [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients @ 2009-03-02 16:32 Mark Brown 2009-03-02 16:32 ` [PATCH 2/2] regulator: Implement list_voltage for WM835x LDOs and DCDCs Mark Brown 2009-03-04 11:40 ` [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients Liam Girdwood 0 siblings, 2 replies; 4+ messages in thread From: Mark Brown @ 2009-03-02 16:32 UTC (permalink / raw) To: Liam Girdwood; +Cc: linux-kernel, Mark Brown Rather than incrementing the reference count for boot_on regulators (which prevents them being disabled later on) simply force the regulator to be enabled when applying the constraints. Previously boot_on was essentially equivalent to always_on. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> --- drivers/regulator/core.c | 13 ++++--------- include/linux/regulator/machine.h | 4 +++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index da357a0..464e9b1 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -772,10 +772,6 @@ static int set_machine_constraints(struct regulator_dev *rdev, } } - /* are we enabled at boot time by firmware / bootloader */ - if (rdev->constraints->boot_on) - rdev->use_count = 1; - /* do we need to setup our suspend state */ if (constraints->initial_state) { ret = suspend_prepare(rdev, constraints->initial_state); @@ -804,11 +800,10 @@ static int set_machine_constraints(struct regulator_dev *rdev, } } - /* if always_on is set then turn the regulator on if it's not - * already on. */ - if (constraints->always_on && ops->enable && - ((ops->is_enabled && !ops->is_enabled(rdev)) || - (!ops->is_enabled && !constraints->boot_on))) { + /* If the constraints say the regulator should be on at this point + * and we have control then make sure it is enabled. + */ + if ((constraints->always_on || constraints->boot_on) && ops->enable) { ret = ops->enable(rdev); if (ret < 0) { printk(KERN_ERR "%s: failed to enable %s\n", diff --git a/include/linux/regulator/machine.h b/include/linux/regulator/machine.h index 1eb861c..5de7aa3 100644 --- a/include/linux/regulator/machine.h +++ b/include/linux/regulator/machine.h @@ -73,7 +73,9 @@ struct regulator_state { * * @always_on: Set if the regulator should never be disabled. * @boot_on: Set if the regulator is enabled when the system is initially - * started. + * started. If the regulator is not enabled by the hardware or + * bootloader then it will be enabled when the constraints are + * applied. * @apply_uV: Apply the voltage constraint when initialising. * * @input_uV: Input voltage for regulator when supplied by another regulator. -- 1.6.1.3 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/2] regulator: Implement list_voltage for WM835x LDOs and DCDCs 2009-03-02 16:32 [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients Mark Brown @ 2009-03-02 16:32 ` Mark Brown 2009-03-04 11:41 ` Liam Girdwood 2009-03-04 11:40 ` [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients Liam Girdwood 1 sibling, 1 reply; 4+ messages in thread From: Mark Brown @ 2009-03-02 16:32 UTC (permalink / raw) To: Liam Girdwood; +Cc: linux-kernel, Mark Brown Implement the recently added voltage step listing API for the WM835x DCDCs and LDOs. DCDCs can use values up to 0x66, LDOs can use the full range of values in the mask. Both masks are the lower bits of the register. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> --- drivers/regulator/wm8350-regulator.c | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+), 0 deletions(-) diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c index 261db94..771eca1 100644 --- a/drivers/regulator/wm8350-regulator.c +++ b/drivers/regulator/wm8350-regulator.c @@ -24,6 +24,9 @@ #include <linux/regulator/driver.h> #include <linux/regulator/machine.h> +/* Maximum value possible for VSEL */ +#define WM8350_DCDC_MAX_VSEL 0x66 + /* Microamps */ static const int isink_cur[] = { 4, @@ -385,6 +388,14 @@ static int wm8350_dcdc_get_voltage(struct regulator_dev *rdev) return wm8350_dcdc_val_to_mvolts(val) * 1000; } +static int wm8350_dcdc_list_voltage(struct regulator_dev *rdev, + unsigned selector) +{ + if (selector > WM8350_DCDC_MAX_VSEL) + return -EINVAL; + return wm8350_dcdc_val_to_mvolts(selector) * 1000; +} + static int wm8350_dcdc_set_suspend_voltage(struct regulator_dev *rdev, int uV) { struct wm8350 *wm8350 = rdev_get_drvdata(rdev); @@ -775,6 +786,14 @@ static int wm8350_ldo_get_voltage(struct regulator_dev *rdev) return wm8350_ldo_val_to_mvolts(val) * 1000; } +static int wm8350_ldo_list_voltage(struct regulator_dev *rdev, + unsigned selector) +{ + if (selector > WM8350_LDO1_VSEL_MASK) + return -EINVAL; + return wm8350_ldo_val_to_mvolts(selector) * 1000; +} + int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start, u16 stop, u16 fault) { @@ -1162,6 +1181,7 @@ static int wm8350_ldo_is_enabled(struct regulator_dev *rdev) static struct regulator_ops wm8350_dcdc_ops = { .set_voltage = wm8350_dcdc_set_voltage, .get_voltage = wm8350_dcdc_get_voltage, + .list_voltage = wm8350_dcdc_list_voltage, .enable = wm8350_dcdc_enable, .disable = wm8350_dcdc_disable, .get_mode = wm8350_dcdc_get_mode, @@ -1185,6 +1205,7 @@ static struct regulator_ops wm8350_dcdc2_5_ops = { static struct regulator_ops wm8350_ldo_ops = { .set_voltage = wm8350_ldo_set_voltage, .get_voltage = wm8350_ldo_get_voltage, + .list_voltage = wm8350_ldo_list_voltage, .enable = wm8350_ldo_enable, .disable = wm8350_ldo_disable, .is_enabled = wm8350_ldo_is_enabled, @@ -1209,6 +1230,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_dcdc_ops, .irq = WM8350_IRQ_UV_DC1, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_DCDC_MAX_VSEL + 1, .owner = THIS_MODULE, }, { @@ -1225,6 +1247,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_dcdc_ops, .irq = WM8350_IRQ_UV_DC3, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_DCDC_MAX_VSEL + 1, .owner = THIS_MODULE, }, { @@ -1233,6 +1256,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_dcdc_ops, .irq = WM8350_IRQ_UV_DC4, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_DCDC_MAX_VSEL + 1, .owner = THIS_MODULE, }, { @@ -1249,6 +1273,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_dcdc_ops, .irq = WM8350_IRQ_UV_DC6, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_DCDC_MAX_VSEL + 1, .owner = THIS_MODULE, }, { @@ -1257,6 +1282,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_ldo_ops, .irq = WM8350_IRQ_UV_LDO1, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_LDO1_VSEL_MASK + 1, .owner = THIS_MODULE, }, { @@ -1265,6 +1291,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_ldo_ops, .irq = WM8350_IRQ_UV_LDO2, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_LDO2_VSEL_MASK + 1, .owner = THIS_MODULE, }, { @@ -1273,6 +1300,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_ldo_ops, .irq = WM8350_IRQ_UV_LDO3, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_LDO3_VSEL_MASK + 1, .owner = THIS_MODULE, }, { @@ -1281,6 +1309,7 @@ static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { .ops = &wm8350_ldo_ops, .irq = WM8350_IRQ_UV_LDO4, .type = REGULATOR_VOLTAGE, + .n_voltages = WM8350_LDO4_VSEL_MASK + 1, .owner = THIS_MODULE, }, { -- 1.6.1.3 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] regulator: Implement list_voltage for WM835x LDOs and DCDCs 2009-03-02 16:32 ` [PATCH 2/2] regulator: Implement list_voltage for WM835x LDOs and DCDCs Mark Brown @ 2009-03-04 11:41 ` Liam Girdwood 0 siblings, 0 replies; 4+ messages in thread From: Liam Girdwood @ 2009-03-04 11:41 UTC (permalink / raw) To: Mark Brown; +Cc: linux-kernel On Mon, 2009-03-02 at 16:32 +0000, Mark Brown wrote: > Implement the recently added voltage step listing API for the WM835x > DCDCs and LDOs. DCDCs can use values up to 0x66, LDOs can use the full > range of values in the mask. Both masks are the lower bits of the > register. > > Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> > --- > drivers/regulator/wm8350-regulator.c | 29 +++++++++++++++++++++++++++++ > 1 files changed, 29 insertions(+), 0 deletions(-) > Applied. Thanks Liam ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients 2009-03-02 16:32 [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients Mark Brown 2009-03-02 16:32 ` [PATCH 2/2] regulator: Implement list_voltage for WM835x LDOs and DCDCs Mark Brown @ 2009-03-04 11:40 ` Liam Girdwood 1 sibling, 0 replies; 4+ messages in thread From: Liam Girdwood @ 2009-03-04 11:40 UTC (permalink / raw) To: Mark Brown; +Cc: linux-kernel On Mon, 2009-03-02 at 16:32 +0000, Mark Brown wrote: > Rather than incrementing the reference count for boot_on regulators > (which prevents them being disabled later on) simply force the > regulator to be enabled when applying the constraints. Previously > boot_on was essentially equivalent to always_on. > > Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> > --- > drivers/regulator/core.c | 13 ++++--------- > include/linux/regulator/machine.h | 4 +++- > 2 files changed, 7 insertions(+), 10 deletions(-) Applied. Thanks Liam ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-03-04 11:42 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2009-03-02 16:32 [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients Mark Brown 2009-03-02 16:32 ` [PATCH 2/2] regulator: Implement list_voltage for WM835x LDOs and DCDCs Mark Brown 2009-03-04 11:41 ` Liam Girdwood 2009-03-04 11:40 ` [PATCH 1/2] regulator: Allow boot_on regulators to be disabled by clients Liam Girdwood
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®