diff mbox series

[v2,04/10] regulator: bd9571mwv: Add BD9574MWF support

Message ID 1607686060-17448-5-git-send-email-yoshihiro.shimoda.uh@renesas.com
State Superseded
Headers show
Series treewide: bd9571mwv: Add support for BD9574MWF | expand

Commit Message

Yoshihiro Shimoda Dec. 11, 2020, 11:27 a.m. UTC
Add support for BD9574MWF which is silimar chip with BD9571MWV.
Note that BD9574MWF doesn't support AVS and VID.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
---
 drivers/regulator/bd9571mwv-regulator.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

Comments

Yoshihiro Shimoda Dec. 14, 2020, 4:57 a.m. UTC | #1
Hello Matti-san,

> From: Vaittinen, Matti, Sent: Friday, December 11, 2020 9:34 PM

> 

> Hello again Shimada-san,

> 

> On Fri, 2020-12-11 at 20:27 +0900, Yoshihiro Shimoda wrote:

> > Add support for BD9574MWF which is silimar chip with BD9571MWV.

> > Note that BD9574MWF doesn't support AVS and VID.

> 

> I'd like to understand what is VID?


It seems reading some voltages from registers.
For example, BD9571 has "VD18_VID" register which
is prohibit to write. But, BD9574 doesn't have this
register. Also, the driver names "vid_ops",
so I described "VID" here. Perhaps, we should revise
the description to clear. (Please look "Updated description" in this email.)

> >

> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

> > ---

> >  drivers/regulator/bd9571mwv-regulator.c | 10 ++++++++--

> >  1 file changed, 8 insertions(+), 2 deletions(-)

> >

> > diff --git a/drivers/regulator/bd9571mwv-regulator.c

> > b/drivers/regulator/bd9571mwv-regulator.c

> > index 02120b0..041339b 100644

> > --- a/drivers/regulator/bd9571mwv-regulator.c

> > +++ b/drivers/regulator/bd9571mwv-regulator.c

> > @@ -1,6 +1,6 @@

> >  // SPDX-License-Identifier: GPL-2.0

> >  /*

> > - * ROHM BD9571MWV-M regulator driver

> > + * ROHM BD9571MWV-M and BD9574MWF-M regulator driver

> >   *

> >   * Copyright (C) 2017 Marek Vasut <marek.vasut+renesas@gmail.com>

> >   *

> > @@ -9,6 +9,7 @@

> >   * NOTE: VD09 is missing

> >   */

> >

> > +#include <linux/mfd/rohm-generic.h>

> >  #include <linux/module.h>

> >  #include <linux/of.h>

> >  #include <linux/platform_device.h>

> > @@ -277,6 +278,7 @@ static int bd9571mwv_regulator_probe(struct

> > platform_device *pdev)

> >  	struct regulator_dev *rdev;

> >  	unsigned int val;

> >  	int i;

> > +	enum rohm_chip_type chip = platform_get_device_id(pdev)-

> > >driver_data;

> >

> >  	bdreg = devm_kzalloc(&pdev->dev, sizeof(*bdreg), GFP_KERNEL);

> >  	if (!bdreg)

> > @@ -292,6 +294,9 @@ static int bd9571mwv_regulator_probe(struct

> > platform_device *pdev)

> >  	config.regmap = bdreg->regmap;

> >

> >  	for (i = 0; i < ARRAY_SIZE(regulators); i++) {

> > +		/* BD9574MWF supports DVFS only */

> > +		if (chip == ROHM_CHIP_TYPE_BD9574 && regulators[i].id

> > != DVFS)

> > +			continue;

> 

> Does this mean that reading VD09 voltage is not supported by driver?


Yes. Also, reading VD{18,25,33} voltage are not supported.

> (I

> assumed VD09 initial voltage can be set from eeprom(?) and read by

> driver - I may be wrong though). Perhaps it is worth mentioning in the

> commit message as a driver restriction?


Yes, these voltage can be set from eeprom and read by driver.
So, I updated the description like below.

-- Updated description --
Add support for BD9574MWF which is similar chip with BD9571MWV.
Note that since BD9574MWF doesn't have avs_ops and vid_ops
related registers, this driver avoids to use these registers
if BD9574MWF is used.
------------------------

> And just asking out of the curiosity - are the other voltage rails

> listed in data-sheet (VD18, DDR0, VD33, VD09 and LDO1,...,LDO4) set-up

> from DT as fixed-regulators? Any reason why they are not set-up here?


TBH, I don't know why. Perhaps, the driver cannot read DDR0, LDO[1-4] values?

Best regards,
Yoshihiro Shimoda
Vaittinen, Matti Dec. 14, 2020, 7:12 a.m. UTC | #2
Hello Shimoda-san,

On Mon, 2020-12-14 at 04:57 +0000, Yoshihiro Shimoda wrote:
> Hello Matti-san,

> 

> > From: Vaittinen, Matti, Sent: Friday, December 11, 2020 9:34 PM

> > 

> > Hello again Shimada-san,

> > 

> > On Fri, 2020-12-11 at 20:27 +0900, Yoshihiro Shimoda wrote:

> > > Add support for BD9574MWF which is silimar chip with BD9571MWV.

> > > Note that BD9574MWF doesn't support AVS and VID.

> > 

> > I'd like to understand what is VID?

> 

> It seems reading some voltages from registers.

> For example, BD9571 has "VD18_VID" register which

> is prohibit to write. But, BD9574 doesn't have this

> register. Also, the driver names "vid_ops",

> so I described "VID" here. Perhaps, we should revise

> the description to clear. (Please look "Updated description" in this

> email.)


Thank you for detailed explanation. So as far as I understood - VID is
a register which displays the current output voltage, right? If I am
not mistaken, this is different from register where (initial) voltage
is set?

> 

> > > Signed-off-by: Yoshihiro Shimoda <

> > > yoshihiro.shimoda.uh@renesas.com>

> > > ---

> > >  drivers/regulator/bd9571mwv-regulator.c | 10 ++++++++--

> > >  1 file changed, 8 insertions(+), 2 deletions(-)

> > > 

> > > diff --git a/drivers/regulator/bd9571mwv-regulator.c

> > > b/drivers/regulator/bd9571mwv-regulator.c

> > > index 02120b0..041339b 100644

> > > --- a/drivers/regulator/bd9571mwv-regulator.c

> > > +++ b/drivers/regulator/bd9571mwv-regulator.c

> > > @@ -1,6 +1,6 @@

> > >  // SPDX-License-Identifier: GPL-2.0

> > >  /*

> > > - * ROHM BD9571MWV-M regulator driver

> > > + * ROHM BD9571MWV-M and BD9574MWF-M regulator driver

> > >   *

> > >   * Copyright (C) 2017 Marek Vasut <marek.vasut+renesas@gmail.com

> > > >

> > >   *

> > > @@ -9,6 +9,7 @@

> > >   * NOTE: VD09 is missing

> > >   */

> > > 

> > > +#include <linux/mfd/rohm-generic.h>

> > >  #include <linux/module.h>

> > >  #include <linux/of.h>

> > >  #include <linux/platform_device.h>

> > > @@ -277,6 +278,7 @@ static int bd9571mwv_regulator_probe(struct

> > > platform_device *pdev)

> > >  	struct regulator_dev *rdev;

> > >  	unsigned int val;

> > >  	int i;

> > > +	enum rohm_chip_type chip = platform_get_device_id(pdev)-

> > > > driver_data;

> > > 

> > >  	bdreg = devm_kzalloc(&pdev->dev, sizeof(*bdreg), GFP_KERNEL);

> > >  	if (!bdreg)

> > > @@ -292,6 +294,9 @@ static int bd9571mwv_regulator_probe(struct

> > > platform_device *pdev)

> > >  	config.regmap = bdreg->regmap;

> > > 

> > >  	for (i = 0; i < ARRAY_SIZE(regulators); i++) {

> > > +		/* BD9574MWF supports DVFS only */

> > > +		if (chip == ROHM_CHIP_TYPE_BD9574 && regulators[i].id

> > > != DVFS)

> > > +			continue;

> > 

> > Does this mean that reading VD09 voltage is not supported by

> > driver?

> 

> Yes. Also, reading VD{18,25,33} voltage are not supported.


I think that would be excellent comment here. Maybe something like: "We
don't support voltage rails VD{09,18,25,33} by this driver on BD9574."

> 

> > (I

> > assumed VD09 initial voltage can be set from eeprom(?) and read by

> > driver - I may be wrong though). Perhaps it is worth mentioning in

> > the

> > commit message as a driver restriction?

> 

> Yes, these voltage can be set from eeprom and read by driver.

> So, I updated the description like below.

> 

> -- Updated description --

> Add support for BD9574MWF which is similar chip with BD9571MWV.

> Note that since BD9574MWF doesn't have avs_ops and vid_ops

> related registers, this driver avoids to use these registers

> if BD9574MWF is used.

> ------------------------


Thank you :) What I was after is that I would like to leave a note
about 'what could be improved' or about what is the 'software
limitation' here so that if anyone later needs the other voltage rails
he would have a hint about what could be done.

Do you think mentioning that "the VD09 voltage could be read from PMIC
but that is not supported by this commit" in commit message would be
Ok?

> 

> > And just asking out of the curiosity - are the other voltage rails

> > listed in data-sheet (VD18, DDR0, VD33, VD09 and LDO1,...,LDO4)

> > set-up

> > from DT as fixed-regulators? Any reason why they are not set-up

> > here?

> 

> TBH, I don't know why. Perhaps, the driver cannot read DDR0, LDO[1-4] 

> values?


I also think that all voltages can't be read. I was just thinking that
it might make sense to always create the fixed regulators from PMIC
driver - because if PMIC is used - then these voltage rails do exist.
(This was just a question so that I could learn - not so much of a
review comment.)

If you re-spin the series for other fixups - then I would appreciate
some comment about omitting the rest of the voltage outputs.

Other than that - for what it is worth:

Reviewed-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>



Best Regards
	Matti


--
Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland
SWDC
Kiviharjunlenkki 1E
90220 OULU
FINLAND

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~

Simon says - in Latin please.
"non cogito me" dixit Rene Descarte, deinde evanescavit

(Thanks for the translation Simon)
Yoshihiro Shimoda Dec. 14, 2020, 8:22 a.m. UTC | #3
Hello Matti-san,

> From: Vaittinen, Matti, Sent: Monday, December 14, 2020 4:13 PM

> 

> Hello Shimoda-san,

> 

> On Mon, 2020-12-14 at 04:57 +0000, Yoshihiro Shimoda wrote:

> > Hello Matti-san,

> >

> > > From: Vaittinen, Matti, Sent: Friday, December 11, 2020 9:34 PM

> > >

> > > Hello again Shimada-san,

> > >

> > > On Fri, 2020-12-11 at 20:27 +0900, Yoshihiro Shimoda wrote:

> > > > Add support for BD9574MWF which is silimar chip with BD9571MWV.

> > > > Note that BD9574MWF doesn't support AVS and VID.

> > >

> > > I'd like to understand what is VID?

> >

> > It seems reading some voltages from registers.

> > For example, BD9571 has "VD18_VID" register which

> > is prohibit to write. But, BD9574 doesn't have this

> > register. Also, the driver names "vid_ops",

> > so I described "VID" here. Perhaps, we should revise

> > the description to clear. (Please look "Updated description" in this

> > email.)

> 

> Thank you for detailed explanation. So as far as I understood - VID is

> a register which displays the current output voltage, right?


Yes.

> If I am

> not mistaken, this is different from register where (initial) voltage

> is set?


Yes. I checked on my environment (H3 Salvator-XS).

> > > > Signed-off-by: Yoshihiro Shimoda <

> > > > yoshihiro.shimoda.uh@renesas.com>

> > > > ---

> > > >  drivers/regulator/bd9571mwv-regulator.c | 10 ++++++++--

> > > >  1 file changed, 8 insertions(+), 2 deletions(-)

> > > >

> > > > diff --git a/drivers/regulator/bd9571mwv-regulator.c

> > > > b/drivers/regulator/bd9571mwv-regulator.c

> > > > index 02120b0..041339b 100644

> > > > --- a/drivers/regulator/bd9571mwv-regulator.c

> > > > +++ b/drivers/regulator/bd9571mwv-regulator.c

> > > > @@ -1,6 +1,6 @@

> > > >  // SPDX-License-Identifier: GPL-2.0

> > > >  /*

> > > > - * ROHM BD9571MWV-M regulator driver

> > > > + * ROHM BD9571MWV-M and BD9574MWF-M regulator driver

> > > >   *

> > > >   * Copyright (C) 2017 Marek Vasut <marek.vasut+renesas@gmail.com

> > > > >

> > > >   *

> > > > @@ -9,6 +9,7 @@

> > > >   * NOTE: VD09 is missing

> > > >   */

> > > >

> > > > +#include <linux/mfd/rohm-generic.h>

> > > >  #include <linux/module.h>

> > > >  #include <linux/of.h>

> > > >  #include <linux/platform_device.h>

> > > > @@ -277,6 +278,7 @@ static int bd9571mwv_regulator_probe(struct

> > > > platform_device *pdev)

> > > >  	struct regulator_dev *rdev;

> > > >  	unsigned int val;

> > > >  	int i;

> > > > +	enum rohm_chip_type chip = platform_get_device_id(pdev)-

> > > > > driver_data;

> > > >

> > > >  	bdreg = devm_kzalloc(&pdev->dev, sizeof(*bdreg), GFP_KERNEL);

> > > >  	if (!bdreg)

> > > > @@ -292,6 +294,9 @@ static int bd9571mwv_regulator_probe(struct

> > > > platform_device *pdev)

> > > >  	config.regmap = bdreg->regmap;

> > > >

> > > >  	for (i = 0; i < ARRAY_SIZE(regulators); i++) {

> > > > +		/* BD9574MWF supports DVFS only */

> > > > +		if (chip == ROHM_CHIP_TYPE_BD9574 && regulators[i].id

> > > > != DVFS)

> > > > +			continue;

> > >

> > > Does this mean that reading VD09 voltage is not supported by

> > > driver?

> >

> > Yes. Also, reading VD{18,25,33} voltage are not supported.

> 

> I think that would be excellent comment here. Maybe something like: "We

> don't support voltage rails VD{09,18,25,33} by this driver on BD9574."


Thank you for the suggestion! I'll use this comment.

> > > (I

> > > assumed VD09 initial voltage can be set from eeprom(?) and read by

> > > driver - I may be wrong though). Perhaps it is worth mentioning in

> > > the

> > > commit message as a driver restriction?

> >

> > Yes, these voltage can be set from eeprom and read by driver.

> > So, I updated the description like below.

> >

> > -- Updated description --

> > Add support for BD9574MWF which is similar chip with BD9571MWV.

> > Note that since BD9574MWF doesn't have avs_ops and vid_ops

> > related registers, this driver avoids to use these registers

> > if BD9574MWF is used.

> > ------------------------

> 

> Thank you :) What I was after is that I would like to leave a note

> about 'what could be improved' or about what is the 'software

> limitation' here so that if anyone later needs the other voltage rails

> he would have a hint about what could be done.

> 

> Do you think mentioning that "the VD09 voltage could be read from PMIC

> but that is not supported by this commit" in commit message would be

> Ok?


I think OK because VD09 could be read from "BD9574MWF_VD09_VINIT"
register, but that is not supported but this commit.

> > > And just asking out of the curiosity - are the other voltage rails

> > > listed in data-sheet (VD18, DDR0, VD33, VD09 and LDO1,...,LDO4)

> > > set-up

> > > from DT as fixed-regulators? Any reason why they are not set-up

> > > here?

> >

> > TBH, I don't know why. Perhaps, the driver cannot read DDR0, LDO[1-4]

> > values?

> 

> I also think that all voltages can't be read. I was just thinking that

> it might make sense to always create the fixed regulators from PMIC

> driver - because if PMIC is used - then these voltage rails do exist.

> (This was just a question so that I could learn - not so much of a

> review comment.)

> 

> If you re-spin the series for other fixups - then I would appreciate

> some comment about omitting the rest of the voltage outputs.

> 

> Other than that - for what it is worth:

> 

> Reviewed-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>


Thank you very much for your review!

Best regards,
Yoshihiro Shimoda
diff mbox series

Patch

diff --git a/drivers/regulator/bd9571mwv-regulator.c b/drivers/regulator/bd9571mwv-regulator.c
index 02120b0..041339b 100644
--- a/drivers/regulator/bd9571mwv-regulator.c
+++ b/drivers/regulator/bd9571mwv-regulator.c
@@ -1,6 +1,6 @@ 
 // SPDX-License-Identifier: GPL-2.0
 /*
- * ROHM BD9571MWV-M regulator driver
+ * ROHM BD9571MWV-M and BD9574MWF-M regulator driver
  *
  * Copyright (C) 2017 Marek Vasut <marek.vasut+renesas@gmail.com>
  *
@@ -9,6 +9,7 @@ 
  * NOTE: VD09 is missing
  */
 
+#include <linux/mfd/rohm-generic.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
@@ -277,6 +278,7 @@  static int bd9571mwv_regulator_probe(struct platform_device *pdev)
 	struct regulator_dev *rdev;
 	unsigned int val;
 	int i;
+	enum rohm_chip_type chip = platform_get_device_id(pdev)->driver_data;
 
 	bdreg = devm_kzalloc(&pdev->dev, sizeof(*bdreg), GFP_KERNEL);
 	if (!bdreg)
@@ -292,6 +294,9 @@  static int bd9571mwv_regulator_probe(struct platform_device *pdev)
 	config.regmap = bdreg->regmap;
 
 	for (i = 0; i < ARRAY_SIZE(regulators); i++) {
+		/* BD9574MWF supports DVFS only */
+		if (chip == ROHM_CHIP_TYPE_BD9574 && regulators[i].id != DVFS)
+			continue;
 		rdev = devm_regulator_register(&pdev->dev, &regulators[i],
 					       &config);
 		if (IS_ERR(rdev)) {
@@ -339,7 +344,8 @@  static int bd9571mwv_regulator_probe(struct platform_device *pdev)
 }
 
 static const struct platform_device_id bd9571mwv_regulator_id_table[] = {
-	{ "bd9571mwv-regulator", },
+	{ "bd9571mwv-regulator", ROHM_CHIP_TYPE_BD9571 },
+	{ "bd9574mwf-regulator", ROHM_CHIP_TYPE_BD9574 },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(platform, bd9571mwv_regulator_id_table);