[PATCH 1/2] power: generic-adc-battery: use devm_kcalloc for psy->properties

Heiko Stübner
2014-05-16T13:09:21Z

From: Heiko Stuebner <heiko.stuebner@bq.com>

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 <heiko.stuebner@bq.com>
---
drivers/power/generic-adc-battery.c | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/power/generic-adc-battery.c b/drivers/power/generic-adc-battery.c
index 59a1421..540d57f 100644
--- a/drivers/power/generic-adc-battery.c
+++ b/drivers/power/generic-adc-battery.c
@@ -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;
}
--
1.9.0