[v1,4/4] regulator: axp20x: Set DCDC frequency only when property exists

Message ID TY3P286MB26111D00F42888C71EF0877698969@TY3P286MB2611.JPNP286.PROD.OUTLOOK.COM
State New
Headers
Series Add X-Powers AXP15060 PMIC support |

Commit Message

Shengyu Qu April 7, 2023, 2:18 p.m. UTC
  Current axp20x regulator driver would always set DCDC frequency even if
there is no x-powers,dcdc-freq in device tree data. Causing meaningless
warning info output on variants that do not support DCDC frequency
modification. So only try to set DCDC frequency when there is frequency
property.

Signed-off-by: Shengyu Qu <wiagn233@outlook.com>
---
 drivers/regulator/axp20x-regulator.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
  

Comments

Andre Przywara April 17, 2023, 2:20 p.m. UTC | #1
On Fri,  7 Apr 2023 22:18:13 +0800
Shengyu Qu <wiagn233@outlook.com> wrote:

> Current axp20x regulator driver would always set DCDC frequency even if
> there is no x-powers,dcdc-freq in device tree data. Causing meaningless
> warning info output on variants that do not support DCDC frequency
> modification. So only try to set DCDC frequency when there is frequency
> property.

This patch should not be needed. You should disallow the
x-powers,dcdc-freq property in the binding (see [1]), then handle that
like the AXP313a driver does: by explicitly checking that the property
does not exist, then returning, see [2].

In general you might want to rebase your series on top of the AXP313a v10
series, as this most likely goes in before.

Cheers,
Andre

[1]
https://lore.kernel.org/linux-sunxi/20230401001850.4988-2-andre.przywara@arm.com/
[2]
https://lore.kernel.org/linux-sunxi/20230401001850.4988-4-andre.przywara@arm.com/

> Signed-off-by: Shengyu Qu <wiagn233@outlook.com>
> ---
>  drivers/regulator/axp20x-regulator.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
> index ece4af93df7b..12a12923bc7b 100644
> --- a/drivers/regulator/axp20x-regulator.c
> +++ b/drivers/regulator/axp20x-regulator.c
> @@ -1247,10 +1247,10 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
>  	if (!regulators) {
>  		dev_warn(&pdev->dev, "regulators node not found\n");
>  	} else {
> -		of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq);
> -		ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
> -		if (ret < 0) {
> -			dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
> +		if (of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq) != -EINVAL) {
> +			ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
> +			if (ret < 0)
> +				dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
>  		}
>  		of_node_put(regulators);
>  	}
  
Shengyu Qu April 17, 2023, 4:31 p.m. UTC | #2
Hi Andre,

> On Fri,  7 Apr 2023 22:18:13 +0800
> Shengyu Qu <wiagn233@outlook.com> wrote:
>
>> Current axp20x regulator driver would always set DCDC frequency even if
>> there is no x-powers,dcdc-freq in device tree data. Causing meaningless
>> warning info output on variants that do not support DCDC frequency
>> modification. So only try to set DCDC frequency when there is frequency
>> property.
> This patch should not be needed. You should disallow the
> x-powers,dcdc-freq property in the binding (see [1]), then handle that
> like the AXP313a driver does: by explicitly checking that the property
> does not exist, then returning, see [2].
>
> In general you might want to rebase your series on top of the AXP313a v10
> series, as this most likely goes in before.

Thanks for pointing out this :) Would fix and rebase in next version.

Best regards,

Shengyu

> Cheers,
> Andre
>
> [1]
> https://lore.kernel.org/linux-sunxi/20230401001850.4988-2-andre.przywara@arm.com/
> [2]
> https://lore.kernel.org/linux-sunxi/20230401001850.4988-4-andre.przywara@arm.com/
>
>> Signed-off-by: Shengyu Qu <wiagn233@outlook.com>
>> ---
>>   drivers/regulator/axp20x-regulator.c | 8 ++++----
>>   1 file changed, 4 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
>> index ece4af93df7b..12a12923bc7b 100644
>> --- a/drivers/regulator/axp20x-regulator.c
>> +++ b/drivers/regulator/axp20x-regulator.c
>> @@ -1247,10 +1247,10 @@ static int axp20x_regulator_parse_dt(struct platform_device *pdev)
>>   	if (!regulators) {
>>   		dev_warn(&pdev->dev, "regulators node not found\n");
>>   	} else {
>> -		of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq);
>> -		ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
>> -		if (ret < 0) {
>> -			dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
>> +		if (of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq) != -EINVAL) {
>> +			ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
>> +			if (ret < 0)
>> +				dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
>>   		}
>>   		of_node_put(regulators);
>>   	}
  

Patch

diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
index ece4af93df7b..12a12923bc7b 100644
--- a/drivers/regulator/axp20x-regulator.c
+++ b/drivers/regulator/axp20x-regulator.c
@@ -1247,10 +1247,10 @@  static int axp20x_regulator_parse_dt(struct platform_device *pdev)
 	if (!regulators) {
 		dev_warn(&pdev->dev, "regulators node not found\n");
 	} else {
-		of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq);
-		ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
-		if (ret < 0) {
-			dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
+		if (of_property_read_u32(regulators, "x-powers,dcdc-freq", &dcdcfreq) != -EINVAL) {
+			ret = axp20x_set_dcdc_freq(pdev, dcdcfreq);
+			if (ret < 0)
+				dev_err(&pdev->dev, "Error setting dcdc frequency: %d\n", ret);
 		}
 		of_node_put(regulators);
 	}