* [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro @ 2013-10-01 15:33 Axel Lin 2013-10-01 15:35 ` [RFT][PATCH 2/2] regulator: as3722: Fix off-by-one n_voltages setting for SDx Axel Lin 2013-10-02 11:56 ` [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Laxman Dewangan 0 siblings, 2 replies; 6+ messages in thread From: Axel Lin @ 2013-10-01 15:33 UTC (permalink / raw) To: Mark Brown; +Cc: Laxman Dewangan, Florian Lobmaier, Liam Girdwood, linux-kernel Fix off-by-one in the equation to calculate max_uV. Signed-off-by: Axel Lin <axel.lin@ingics.com> --- Hi, I don't have the datasheet and h/w. Just found this issue while reading the code. (Only compile test). Axel drivers/regulator/as3722-regulator.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/regulator/as3722-regulator.c b/drivers/regulator/as3722-regulator.c index 16a5d26..c6a1fc6 100644 --- a/drivers/regulator/as3722-regulator.c +++ b/drivers/regulator/as3722-regulator.c @@ -441,7 +441,7 @@ static struct regulator_ops as3722_ldo3_extcntrl_ops = { .max_sel = _max_sel, \ .uV_step = _step_uV, \ .min_uV = _min_uV, \ - .max_uV = _min_uV + (_max_sel - _min_sel + 1) * _step_uV, \ + .max_uV = _min_uV + (_max_sel - _min_sel) * _step_uV, \ } static const struct regulator_linear_range as3722_ldo_ranges[] = { -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [RFT][PATCH 2/2] regulator: as3722: Fix off-by-one n_voltages setting for SDx 2013-10-01 15:33 [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Axel Lin @ 2013-10-01 15:35 ` Axel Lin 2013-10-02 12:15 ` Laxman Dewangan 2013-10-02 11:56 ` [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Laxman Dewangan 1 sibling, 1 reply; 6+ messages in thread From: Axel Lin @ 2013-10-01 15:35 UTC (permalink / raw) To: Mark Brown; +Cc: Laxman Dewangan, Florian Lobmaier, Liam Girdwood, linux-kernel AS3722_SDx_VSEL_MAX means the maximum selector, the n_voltages should be AS3722_SDx_VSEL_MAX + 1. Signed-off-by: Axel Lin <axel.lin@ingics.com> --- drivers/regulator/as3722-regulator.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/regulator/as3722-regulator.c b/drivers/regulator/as3722-regulator.c index c6a1fc6..91b0abe 100644 --- a/drivers/regulator/as3722-regulator.c +++ b/drivers/regulator/as3722-regulator.c @@ -99,7 +99,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD0_EXT_ENABLE_MASK, .control_reg = AS3722_SD0_CONTROL_REG, .mode_mask = AS3722_SD0_MODE_FAST, - .n_voltages = AS3722_SD0_VSEL_MAX, + .n_voltages = AS3722_SD0_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_SD1, @@ -112,7 +112,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD1_EXT_ENABLE_MASK, .control_reg = AS3722_SD1_CONTROL_REG, .mode_mask = AS3722_SD1_MODE_FAST, - .n_voltages = AS3722_SD0_VSEL_MAX, + .n_voltages = AS3722_SD0_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_SD2, @@ -126,7 +126,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD2_EXT_ENABLE_MASK, .control_reg = AS3722_SD23_CONTROL_REG, .mode_mask = AS3722_SD2_MODE_FAST, - .n_voltages = AS3722_SD2_VSEL_MAX, + .n_voltages = AS3722_SD2_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_SD3, @@ -140,7 +140,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD3_EXT_ENABLE_MASK, .control_reg = AS3722_SD23_CONTROL_REG, .mode_mask = AS3722_SD3_MODE_FAST, - .n_voltages = AS3722_SD2_VSEL_MAX, + .n_voltages = AS3722_SD2_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_SD4, @@ -154,7 +154,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD4_EXT_ENABLE_MASK, .control_reg = AS3722_SD4_CONTROL_REG, .mode_mask = AS3722_SD4_MODE_FAST, - .n_voltages = AS3722_SD2_VSEL_MAX, + .n_voltages = AS3722_SD2_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_SD5, @@ -168,7 +168,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD5_EXT_ENABLE_MASK, .control_reg = AS3722_SD5_CONTROL_REG, .mode_mask = AS3722_SD5_MODE_FAST, - .n_voltages = AS3722_SD2_VSEL_MAX, + .n_voltages = AS3722_SD2_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_SD6, @@ -181,7 +181,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { .sleep_ctrl_mask = AS3722_SD6_EXT_ENABLE_MASK, .control_reg = AS3722_SD6_CONTROL_REG, .mode_mask = AS3722_SD6_MODE_FAST, - .n_voltages = AS3722_SD0_VSEL_MAX, + .n_voltages = AS3722_SD0_VSEL_MAX + 1, }, { .regulator_id = AS3722_REGULATOR_ID_LDO0, -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [RFT][PATCH 2/2] regulator: as3722: Fix off-by-one n_voltages setting for SDx 2013-10-01 15:35 ` [RFT][PATCH 2/2] regulator: as3722: Fix off-by-one n_voltages setting for SDx Axel Lin @ 2013-10-02 12:15 ` Laxman Dewangan 0 siblings, 0 replies; 6+ messages in thread From: Laxman Dewangan @ 2013-10-02 12:15 UTC (permalink / raw) To: Axel Lin Cc: Mark Brown, Florian Lobmaier, Liam Girdwood, linux-kernel@vger.kernel.org On Tuesday 01 October 2013 09:05 PM, Axel Lin wrote: > AS3722_SDx_VSEL_MAX means the maximum selector, the n_voltages should be > AS3722_SDx_VSEL_MAX + 1. > > Signed-off-by: Axel Lin <axel.lin@ingics.com> > --- > drivers/regulator/as3722-regulator.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/drivers/regulator/as3722-regulator.c b/drivers/regulator/as3722-regulator.c > index c6a1fc6..91b0abe 100644 > --- a/drivers/regulator/as3722-regulator.c > +++ b/drivers/regulator/as3722-regulator.c > @@ -99,7 +99,7 @@ static const struct as3722_register_mapping as3722_reg_lookup[] = { > .sleep_ctrl_mask = AS3722_SD0_EXT_ENABLE_MASK, > .control_reg = AS3722_SD0_CONTROL_REG, > .mode_mask = AS3722_SD0_MODE_FAST, > - .n_voltages = AS3722_SD0_VSEL_MAX, > + .n_voltages = AS3722_SD0_VSEL_MAX + 1, > }, Agree, to allow the VSEL_MAX as valid value, it need to be +1 in n_voltages. if (selector >= rdev->desc->n_voltages) return -EINVAL; Originally, I offset this because of min_sel is 1 as thinking that n_voltages are number of voltages but it become MAX_VSEL. Seems my interpretation issue. In header, it is defined as #define AS3722_SD0_VSEL_MIN 0x01 #define AS3722_SD0_VSEL_MAX 0x5A #define AS3722_SD2_VSEL_MIN 0x01 #define AS3722_SD2_VSEL_MAX 0x7F Acked-by: Laxman Dewangan <ldewangan@nvidia.com> ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro 2013-10-01 15:33 [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Axel Lin 2013-10-01 15:35 ` [RFT][PATCH 2/2] regulator: as3722: Fix off-by-one n_voltages setting for SDx Axel Lin @ 2013-10-02 11:56 ` Laxman Dewangan 2013-10-02 11:56 ` Axel Lin 1 sibling, 1 reply; 6+ messages in thread From: Laxman Dewangan @ 2013-10-02 11:56 UTC (permalink / raw) To: Axel Lin Cc: Mark Brown, Florian Lobmaier, Liam Girdwood, linux-kernel@vger.kernel.org On Tuesday 01 October 2013 09:03 PM, Axel Lin wrote: > Fix off-by-one in the equation to calculate max_uV. > > Signed-off-by: Axel Lin <axel.lin@ingics.com> > --- > Hi, > I don't have the datasheet and h/w. > Just found this issue while reading the code. (Only compile test). > > Axel > drivers/regulator/as3722-regulator.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/regulator/as3722-regulator.c b/drivers/regulator/as3722-regulator.c > index 16a5d26..c6a1fc6 100644 > --- a/drivers/regulator/as3722-regulator.c > +++ b/drivers/regulator/as3722-regulator.c > @@ -441,7 +441,7 @@ static struct regulator_ops as3722_ldo3_extcntrl_ops = { > .max_sel = _max_sel, \ > .uV_step = _step_uV, \ > .min_uV = _min_uV, \ > - .max_uV = _min_uV + (_max_sel - _min_sel + 1) * _step_uV, \ > + .max_uV = _min_uV + (_max_sel - _min_sel) * _step_uV, \ > } > > static const struct regulator_linear_range as3722_ldo_ranges[] = { The datasheet says: The voltage select bits set the LDO output voltage 0.825V...3.3V, 25mV steps ....00h : LDO off 01h-24h : V_LDO4=0.8V+ldo4_vsel*25mV 25h-3Fh : do not use 40h-7Fh : V_LDO4=1.725V+(ldo4_vsel-40h)*25mV And put the linear range as regulator_lin_range(0x01, 0x24, 800000, 25000), regulator_lin_range(0x40, 0x7F, 1725000, 25000), So as per datasheet, value 0x24 is equal to 1700mV. and 0x7F equal to 3300 I created equation based on first entry which is wrong for second entry and your equation is correct for second entry but break first one. I think your equation is correct with following change: regulator_lin_range(0x01, 0x24, 825000, 25000), So it need to re-spin this patch. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro 2013-10-02 11:56 ` [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Laxman Dewangan @ 2013-10-02 11:56 ` Axel Lin 2013-10-02 12:32 ` Laxman Dewangan 0 siblings, 1 reply; 6+ messages in thread From: Axel Lin @ 2013-10-02 11:56 UTC (permalink / raw) To: Laxman Dewangan Cc: Mark Brown, Florian Lobmaier, Liam Girdwood, linux-kernel@vger.kernel.org 2013/10/2 Laxman Dewangan <ldewangan@nvidia.com>: > On Tuesday 01 October 2013 09:03 PM, Axel Lin wrote: >> >> Fix off-by-one in the equation to calculate max_uV. >> >> Signed-off-by: Axel Lin <axel.lin@ingics.com> >> --- >> Hi, >> I don't have the datasheet and h/w. >> Just found this issue while reading the code. (Only compile test). >> >> Axel >> drivers/regulator/as3722-regulator.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/drivers/regulator/as3722-regulator.c >> b/drivers/regulator/as3722-regulator.c >> index 16a5d26..c6a1fc6 100644 >> --- a/drivers/regulator/as3722-regulator.c >> +++ b/drivers/regulator/as3722-regulator.c >> @@ -441,7 +441,7 @@ static struct regulator_ops as3722_ldo3_extcntrl_ops = >> { >> .max_sel = _max_sel, \ >> .uV_step = _step_uV, \ >> .min_uV = _min_uV, \ >> - .max_uV = _min_uV + (_max_sel - _min_sel + 1) * _step_uV, >> \ >> + .max_uV = _min_uV + (_max_sel - _min_sel) * _step_uV, \ >> } >> static const struct regulator_linear_range as3722_ldo_ranges[] = { > > The datasheet says: > > The voltage select bits set the LDO output voltage 0.825V...3.3V, 25mV steps > ....00h : LDO off > 01h-24h : V_LDO4=0.8V+ldo4_vsel*25mV > 25h-3Fh : do not use > 40h-7Fh : V_LDO4=1.725V+(ldo4_vsel-40h)*25mV > > And put the linear range as > regulator_lin_range(0x01, 0x24, 800000, 25000), > regulator_lin_range(0x40, 0x7F, 1725000, 25000), > > > So as per datasheet, value 0x24 is equal to 1700mV. > and 0x7F equal to 3300 > > I created equation based on first entry which is wrong for second entry and > your equation is correct for second entry but break first one. > > I think your equation is correct with following change: > regulator_lin_range(0x01, 0x24, 825000, 25000), Hi Laxman, Thanks for the review. And how about the setting for as3722_sd2345_ranges? How the datasheet says for sd2345? e.g. Should I change regulator_lin_range(0x01, 0x40, 600000, 12500), to regulator_lin_range(0x01, 0x40, 612500, 12500), Thanks, Axel. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro 2013-10-02 11:56 ` Axel Lin @ 2013-10-02 12:32 ` Laxman Dewangan 0 siblings, 0 replies; 6+ messages in thread From: Laxman Dewangan @ 2013-10-02 12:32 UTC (permalink / raw) To: Axel Lin Cc: Mark Brown, Florian Lobmaier, Liam Girdwood, linux-kernel@vger.kernel.org On Wednesday 02 October 2013 05:26 PM, Axel Lin wrote: > 2013/10/2 Laxman Dewangan <ldewangan@nvidia.com>: >> On Tuesday 01 October 2013 09:03 PM, Axel Lin wrote: >>> Fix off-by-one in the equation to calculate max_uV. >>> >>> Signed-off-by: Axel Lin <axel.lin@ingics.com> >>> --- >>> Hi, >>> I don't have the datasheet and h/w. >>> Just found this issue while reading the code. (Only compile test). >>> >>> Axel >>> drivers/regulator/as3722-regulator.c | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/drivers/regulator/as3722-regulator.c >>> b/drivers/regulator/as3722-regulator.c >>> index 16a5d26..c6a1fc6 100644 >>> --- a/drivers/regulator/as3722-regulator.c >>> +++ b/drivers/regulator/as3722-regulator.c >>> @@ -441,7 +441,7 @@ static struct regulator_ops as3722_ldo3_extcntrl_ops = >>> { >>> .max_sel = _max_sel, \ >>> .uV_step = _step_uV, \ >>> .min_uV = _min_uV, \ >>> - .max_uV = _min_uV + (_max_sel - _min_sel + 1) * _step_uV, >>> \ >>> + .max_uV = _min_uV + (_max_sel - _min_sel) * _step_uV, \ >>> } >>> static const struct regulator_linear_range as3722_ldo_ranges[] = { >> The datasheet says: >> >> The voltage select bits set the LDO output voltage 0.825V...3.3V, 25mV steps >> ....00h : LDO off >> 01h-24h : V_LDO4=0.8V+ldo4_vsel*25mV >> 25h-3Fh : do not use >> 40h-7Fh : V_LDO4=1.725V+(ldo4_vsel-40h)*25mV >> >> And put the linear range as >> regulator_lin_range(0x01, 0x24, 800000, 25000), >> regulator_lin_range(0x40, 0x7F, 1725000, 25000), >> >> >> So as per datasheet, value 0x24 is equal to 1700mV. >> and 0x7F equal to 3300 >> >> I created equation based on first entry which is wrong for second entry and >> your equation is correct for second entry but break first one. >> >> I think your equation is correct with following change: >> regulator_lin_range(0x01, 0x24, 825000, 25000), > Hi Laxman, > Thanks for the review. > And how about the setting for as3722_sd2345_ranges? > How the datasheet says for sd2345? > > e.g. Should I change > regulator_lin_range(0x01, 0x40, 600000, 12500), > to > regulator_lin_range(0x01, 0x40, 612500, 12500), > For this, it need to change for all entry: The voltage select bits set the DC/DC output voltage level and power the DC/DC converter down. ....00h : DC/DC powered down 01h-40h : V_SD2=0.6V+sd2_vsel*12.5mV 41h-70h : V_SD2=1.4V+(sd2_vsel-40h)*25mV 71h-7Fh : V_SD2=2.6V+(sd2_vsel-70h)*50mV Again second and third entry need to be taken care. Third entry min_uV is completely wrong here. Did not get caught in my testing as I did not have requirement of the third range in my board. static const struct regulator_linear_range as3722_sd2345_ranges[] = { regulator_lin_range(0x01, 0x40, 600000, 12500), regulator_lin_range(0x41, 0x70, 1400000, 25000), regulator_lin_range(0x71, 0x7F, 1725000, 50000), }; ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-10-02 12:08 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-10-01 15:33 [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Axel Lin 2013-10-01 15:35 ` [RFT][PATCH 2/2] regulator: as3722: Fix off-by-one n_voltages setting for SDx Axel Lin 2013-10-02 12:15 ` Laxman Dewangan 2013-10-02 11:56 ` [RFT][PATCH 1/2] regulator: as3722: Fix equation to calculate max_uV in regulator_lin_range macro Laxman Dewangan 2013-10-02 11:56 ` Axel Lin 2013-10-02 12:32 ` Laxman Dewangan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox