diff options
author | H. Nikolaus Schaller <hns@goldelico.com> | 2018-06-26 15:28:30 +0200 |
---|---|---|
committer | Sebastian Reichel <sre@kernel.org> | 2018-07-06 18:58:44 +0200 |
commit | a427503edaaed9b75ed9746a654cece7e93e60a8 (patch) | |
tree | fba7ca50cfe6df3c412bd426692d8999c9d919b3 /drivers/power/supply | |
parent | 932d47448c3caa0fa99e84d7f5bc302aa286efd8 (diff) | |
download | linux-a427503edaaed9b75ed9746a654cece7e93e60a8.tar.gz linux-a427503edaaed9b75ed9746a654cece7e93e60a8.tar.bz2 linux-a427503edaaed9b75ed9746a654cece7e93e60a8.zip |
power: generic-adc-battery: check for duplicate properties copied from iio channels
If an iio channel defines a basic property, there are duplicate entries
in /sys/class/power/*/uevent.
So add a check to avoid duplicates. Since all channels may be duplicates,
we have to modify the related error check.
Signed-off-by: H. Nikolaus Schaller <hns@goldelico.com>
Cc: stable@vger.kernel.org
Fixes: e60fea794e6e ("power: battery: Generic battery driver using IIO")
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Diffstat (limited to 'drivers/power/supply')
-rw-r--r-- | drivers/power/supply/generic-adc-battery.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/power/supply/generic-adc-battery.c b/drivers/power/supply/generic-adc-battery.c index 11f59275bff4..bc462d1ec963 100644 --- a/drivers/power/supply/generic-adc-battery.c +++ b/drivers/power/supply/generic-adc-battery.c @@ -244,6 +244,7 @@ static int gab_probe(struct platform_device *pdev) int ret = 0; int chan; int index = ARRAY_SIZE(gab_props); + bool any = false; adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL); if (!adc_bat) { @@ -290,12 +291,22 @@ static int gab_probe(struct platform_device *pdev) adc_bat->channel[chan] = NULL; } else { /* copying properties for supported channels only */ - psy_desc->properties[index++] = gab_dyn_props[chan]; + int index2; + + for (index2 = 0; index2 < index; index2++) { + if (psy_desc->properties[index2] == + gab_dyn_props[chan]) + break; /* already known */ + } + if (index2 == index) /* really new */ + psy_desc->properties[index++] = + gab_dyn_props[chan]; + any = true; } } /* none of the channels are supported so let's bail out */ - if (index == ARRAY_SIZE(gab_props)) { + if (!any) { ret = -ENODEV; goto second_mem_fail; } |