power: generic-adc-battery: use devm_kcalloc for psy->properties
PATCH 1/2 power: generic-adc-battery: use devm_kcalloc for psy->properties
From: Heiko Stuebner <[email protected]>
This reduces the amount of code spent on initialization and cleanup of the properties memory and also simplifies the error handling a bit.
--- drivers/power/generic-adc-battery.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-)
drivers/power/generic-adc-battery.c +4 -10
@@ -267,13 +267,11 @@ static int gab_probe(struct platform_device *pdev)* copying the static properties and allocating extra memory for holding * the extra configurable properties received from platform data. */ - psy->properties =kcalloc (ARRAY_SIZE (gab_props) + + psy->properties =devm_kcalloc (&pdev->dev,ARRAY_SIZE (gab_props) +ARRAY_SIZE (gab_chan_name),sizeof (*psy->properties),GFP_KERNEL ); -if (!psy->properties) { - ret = -ENOMEM ; - goto first_mem_fail; - } +if (!psy->properties) +return -ENOMEM ;memcpy (psy->properties, gab_props,sizeof (gab_props)); properties = (enum power_supply_property *)
@@ -301,7 +299,7 @@ static int gab_probe(struct platform_device *pdev)/* none of the channels are supported so let's bail out */ if (index ==0 ) { ret = -ENODEV ; - goto second_mem_fail; +return ret; }/*
@@ -348,9 +346,6 @@ err_reg_fail:if (adc_bat->channel[chan])iio_channel_release (adc_bat->channel[chan]); } -second_mem_fail: -kfree (psy->properties); -first_mem_fail:return ret; }
@@ -372,7 +367,6 @@ static int gab_remove(struct platform_device *pdev)iio_channel_release (adc_bat->channel[chan]); } -kfree (adc_bat->psy.properties);cancel_delayed_work (&adc_bat->bat_work);return 0 ; }
Signature · 1 line
1.9.0
PATCH 2/2 power: generic-adc-battery: return meaningful error when no channel available
From: Heiko Stuebner <[email protected]>
When no channel was found the driver currently always returns -ENODEV. This hides the actual error which is available in ret from the kernel and disables for example -EPROBE_DEFER handling.
--- drivers/power/generic-adc-battery.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/power/generic-adc-battery.c +1 -3
@@ -297,10 +297,8 @@ static int gab_probe(struct platform_device *pdev) }/* none of the channels are supported so let's bail out */ -if (index ==0 ) { - ret = -ENODEV ; +if (index ==0 )return ret; - }/* * Total number of properties is equal to static properties
Signature · 1 line
1.9.0
Am Freitag, 16. Mai 2014, 15:12:50 schrieb Heiko Stübner:
Quoted 6 lines
From: Heiko Stuebner <[email protected]>
This reduces the amount of code spent on initialization and cleanup of the properties memory and also simplifies the error handling a bit.
Signed-off-by Heiko Stuebner <[email protected]>
any comments on these two patches?
Thanks
Heiko
Quoted 52 lines
--- drivers/power/generic-adc-battery.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-)(quoted diff) +0
-0
b/drivers/power/generic-adc-battery.cindex 59a1421..540d57f 100644drivers/power/generic-adc-battery.c +4
-10@@ -267,13 +267,11 @@ static int gab_probe(struct platform_device *pdev)* copying the static properties and allocating extra memory for holding * the extra configurable properties received from platform data. */ - psy->properties =kcalloc (ARRAY_SIZE (gab_props) + + psy->properties =devm_kcalloc (&pdev->dev,ARRAY_SIZE (gab_props) +ARRAY_SIZE (gab_chan_name),sizeof (*psy->properties),GFP_KERNEL ); -if (!psy->properties) { - ret = -ENOMEM ; - goto first_mem_fail; - } +if (!psy->properties) +return -ENOMEM ;memcpy (psy->properties, gab_props,sizeof (gab_props)); properties = (enum power_supply_property *)@@ -301,7 +299,7 @@ static int gab_probe(struct platform_device *pdev)/* none of the channels are supported so let's bail out */ if (index ==0 ) { ret = -ENODEV ; - goto second_mem_fail; +return ret; }/* @@ -348,9 +346,6 @@ err_reg_fail:if (adc_bat->channel[chan])iio_channel_release (adc_bat->channel[chan]); } -second_mem_fail: -kfree (psy->properties); -first_mem_fail:return ret; }@@ -372,7 +367,6 @@ static int gab_remove(struct platform_device *pdev)iio_channel_release (adc_bat->channel[chan]); } -kfree (adc_bat->psy.properties);cancel_delayed_work (&adc_bat->bat_work);return 0 ; }