Skip to content

Commit 7563f7e

Browse files
committed
Merge tag 'for-v7.0' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply
Pull power supply and reset updates from Sebastian Reichel: "power-supply core: - sysfs: constify pointer passed to dev_attr_psp - extend DT binding documentation for battery cells to allow describing voltage drop behaviour power-supply drivers: - multiple: Remove unused gpio include header - multiple: Fix potential IRQ use-after-free on driver unload - bd71828: Add support for ROHM BD72720 - misc small fixes reset drivers: - tdx-ec-poweroff: fix restart" * tag 'for-v7.0' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply: (30 commits) power: supply: bd71828: Use dev_err_probe() dt-bindings: power: supply: google,goldfish-battery: Convert to DT schema power: supply: qcom_battmgr: Recognize "LiP" as lithium-polymer power: supply: wm97xx: Use devm_power_supply_register() power: supply: wm97xx: Use devm_kcalloc() power: supply: pm8916_lbc: Fix use-after-free for extcon in IRQ handler power: reset: tdx-ec-poweroff: fix restart docs: power: update documentation about removed function power: supply: wm97xx: Fix NULL pointer dereference in power_supply_changed() MAINTAINERS: adjust file entry in ROHM BD71828 CHARGER power: supply: ab8500_chargalg: improve kernel-doc power: supply: sysfs: Constify pointer passed to dev_attr_psp() power: supply: bq27xxx: fix wrong errno when bus ops are unsupported power: reset: nvmem-reboot-mode: respect cell size for nvmem_cell_write power: supply: sbs-battery: Fix use-after-free in power_supply_changed() power: supply: rt9455: Fix use-after-free in power_supply_changed() power: supply: pm8916_lbc: Fix use-after-free in power_supply_changed() power: supply: pm8916_bms_vm: Fix use-after-free in power_supply_changed() power: supply: pf1550: Fix use-after-free in power_supply_changed() power: supply: goldfish: Fix use-after-free in power_supply_changed() ...
2 parents 7449f86 + 12bdf47 commit 7563f7e

26 files changed

+221
-190
lines changed

Documentation/devicetree/bindings/goldfish/battery.txt

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2+
%YAML 1.2
3+
---
4+
$id: http://devicetree.org/schemas/power/supply/google,goldfish-battery.yaml#
5+
$schema: http://devicetree.org/meta-schemas/core.yaml#
6+
7+
title: Android Goldfish Battery
8+
9+
maintainers:
10+
- Kuan-Wei Chiu <visitorckw@gmail.com>
11+
12+
allOf:
13+
- $ref: power-supply.yaml#
14+
15+
description:
16+
Android goldfish battery device generated by Android emulator.
17+
18+
properties:
19+
compatible:
20+
const: google,goldfish-battery
21+
22+
reg:
23+
maxItems: 1
24+
25+
interrupts:
26+
maxItems: 1
27+
28+
required:
29+
- compatible
30+
- reg
31+
- interrupts
32+
33+
unevaluatedProperties: false
34+
35+
examples:
36+
- |
37+
battery@9020000 {
38+
compatible = "google,goldfish-battery";
39+
reg = <0x9020000 0x1000>;
40+
interrupts = <3>;
41+
};

Documentation/power/charger-manager.rst

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -183,17 +183,7 @@ struct charger_desc elements:
183183
the value of measure_battery_temp.
184184

185185

186-
5. Notify Charger-Manager of charger events: cm_notify_event()
187-
==============================================================
188-
If there is an charger event is required to notify
189-
Charger Manager, a charger device driver that triggers the event can call
190-
cm_notify_event(psy, type, msg) to notify the corresponding Charger Manager.
191-
In the function, psy is the charger driver's power_supply pointer, which is
192-
associated with Charger-Manager. The parameter "type"
193-
is the same as irq's type (enum cm_event_types). The event message "msg" is
194-
optional and is effective only if the event type is "UNDESCRIBED" or "OTHERS".
195-
196-
6. Other Considerations
186+
5. Other Considerations
197187
=======================
198188

199189
At the charger/battery-related events such as battery-pulled-out,

MAINTAINERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22899,7 +22899,7 @@ ROHM BD71828 CHARGER
2289922899
M: Andreas Kemnade <andreas@kemnade.info>
2290022900
M: Matti Vaittinen <mazziesaccount@gmail.com>
2290122901
S: Maintained
22902-
F: drivers/power/supply/bd71828-charger.c
22902+
F: drivers/power/supply/bd71828-power.c
2290322903

2290422904
ROHM BD79703 DAC
2290522905
M: Matti Vaittinen <mazziesaccount@gmail.com>

drivers/power/reset/nvmem-reboot-mode.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <linux/nvmem-consumer.h>
1111
#include <linux/platform_device.h>
1212
#include <linux/reboot-mode.h>
13+
#include <linux/slab.h>
1314

1415
struct nvmem_reboot_mode {
1516
struct reboot_mode_driver reboot;
@@ -19,12 +20,22 @@ struct nvmem_reboot_mode {
1920
static int nvmem_reboot_mode_write(struct reboot_mode_driver *reboot,
2021
unsigned int magic)
2122
{
22-
int ret;
2323
struct nvmem_reboot_mode *nvmem_rbm;
24+
size_t buf_len;
25+
void *buf;
26+
int ret;
2427

2528
nvmem_rbm = container_of(reboot, struct nvmem_reboot_mode, reboot);
2629

27-
ret = nvmem_cell_write(nvmem_rbm->cell, &magic, sizeof(magic));
30+
buf = nvmem_cell_read(nvmem_rbm->cell, &buf_len);
31+
if (IS_ERR(buf))
32+
return PTR_ERR(buf);
33+
kfree(buf);
34+
35+
if (buf_len > sizeof(magic))
36+
return -EINVAL;
37+
38+
ret = nvmem_cell_write(nvmem_rbm->cell, &magic, buf_len);
2839
if (ret < 0)
2940
dev_err(reboot->dev, "update reboot mode bits failed\n");
3041

drivers/power/reset/tdx-ec-poweroff.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
*/
99

1010
#include <linux/array_size.h>
11+
#include <linux/bug.h>
12+
#include <linux/delay.h>
1113
#include <linux/device.h>
14+
#include <linux/dev_printk.h>
1215
#include <linux/err.h>
1316
#include <linux/i2c.h>
1417
#include <linux/mod_devicetable.h>
@@ -31,6 +34,8 @@
3134

3235
#define EC_REG_MAX 0xD0
3336

37+
#define EC_CMD_TIMEOUT_MS 1000
38+
3439
static const struct regmap_range volatile_ranges[] = {
3540
regmap_reg_range(EC_CMD_REG, EC_CMD_REG),
3641
};
@@ -75,6 +80,13 @@ static int tdx_ec_power_off(struct sys_off_data *data)
7580

7681
err = tdx_ec_cmd(regmap, EC_CMD_POWEROFF);
7782

83+
if (err) {
84+
dev_err(data->dev, "Failed to send power off command\n");
85+
} else {
86+
mdelay(EC_CMD_TIMEOUT_MS);
87+
WARN_ONCE(1, "Unable to power off system\n");
88+
}
89+
7890
return err ? NOTIFY_BAD : NOTIFY_DONE;
7991
}
8092

@@ -85,6 +97,13 @@ static int tdx_ec_restart(struct sys_off_data *data)
8597

8698
err = tdx_ec_cmd(regmap, EC_CMD_RESET);
8799

100+
if (err) {
101+
dev_err(data->dev, "Failed to send restart command\n");
102+
} else {
103+
mdelay(EC_CMD_TIMEOUT_MS);
104+
WARN_ONCE(1, "Unable to restart system\n");
105+
}
106+
88107
return err ? NOTIFY_BAD : NOTIFY_DONE;
89108
}
90109

drivers/power/supply/ab8500_chargalg.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,13 @@ struct ab8500_chargalg_events {
170170
* @original_iset_ua: the non optimized/maximised charger current
171171
* @current_iset_ua: the charging current used at this moment
172172
* @condition_cnt: number of iterations needed before a new charger current
173-
is set
173+
* is set
174174
* @max_current_ua: maximum charger current
175175
* @wait_cnt: to avoid too fast current step down in case of charger
176176
* voltage collapse, we insert this delay between step
177177
* down
178178
* @level: tells in how many steps the charging current has been
179-
increased
179+
* increased
180180
*/
181181
struct ab8500_charge_curr_maximization {
182182
int original_iset_ua;
@@ -199,18 +199,20 @@ enum maxim_ret {
199199
* @charge_status: battery operating status
200200
* @eoc_cnt: counter used to determine end-of_charge
201201
* @maintenance_chg: indicate if maintenance charge is active
202-
* @t_hyst_norm temperature hysteresis when the temperature has been
202+
* @t_hyst_norm: temperature hysteresis when the temperature has been
203203
* over or under normal limits
204-
* @t_hyst_lowhigh temperature hysteresis when the temperature has been
204+
* @t_hyst_lowhigh: temperature hysteresis when the temperature has been
205205
* over or under the high or low limits
206206
* @charge_state: current state of the charging algorithm
207-
* @ccm charging current maximization parameters
207+
* @ccm: charging current maximization parameters
208208
* @chg_info: information about connected charger types
209209
* @batt_data: data of the battery
210210
* @bm: Platform specific battery management information
211211
* @parent: pointer to the struct ab8500
212212
* @chargalg_psy: structure that holds the battery properties exposed by
213213
* the charging algorithm
214+
* @ac_chg: AC charger power supply
215+
* @usb_chg: USB charger power supply
214216
* @events: structure for information about events triggered
215217
* @chargalg_wq: work queue for running the charging algorithm
216218
* @chargalg_periodic_work: work to run the charging algorithm periodically
@@ -300,6 +302,7 @@ ab8500_chargalg_maintenance_timer_expired(struct hrtimer *timer)
300302
/**
301303
* ab8500_chargalg_state_to() - Change charge state
302304
* @di: pointer to the ab8500_chargalg structure
305+
* @state: new charge algorithm state
303306
*
304307
* This function gets called when a charge state change should occur
305308
*/
@@ -763,7 +766,7 @@ static void init_maxim_chg_curr(struct ab8500_chargalg *di)
763766
/**
764767
* ab8500_chargalg_chg_curr_maxim - increases the charger current to
765768
* compensate for the system load
766-
* @di pointer to the ab8500_chargalg structure
769+
* @di: pointer to the ab8500_chargalg structure
767770
*
768771
* This maximization function is used to raise the charger current to get the
769772
* battery current as close to the optimal value as possible. The battery

drivers/power/supply/ab8500_charger.c

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3466,26 +3466,6 @@ static int ab8500_charger_probe(struct platform_device *pdev)
34663466
return ret;
34673467
}
34683468

3469-
/* Request interrupts */
3470-
for (i = 0; i < ARRAY_SIZE(ab8500_charger_irq); i++) {
3471-
irq = platform_get_irq_byname(pdev, ab8500_charger_irq[i].name);
3472-
if (irq < 0)
3473-
return irq;
3474-
3475-
ret = devm_request_threaded_irq(dev,
3476-
irq, NULL, ab8500_charger_irq[i].isr,
3477-
IRQF_SHARED | IRQF_NO_SUSPEND | IRQF_ONESHOT,
3478-
ab8500_charger_irq[i].name, di);
3479-
3480-
if (ret != 0) {
3481-
dev_err(dev, "failed to request %s IRQ %d: %d\n"
3482-
, ab8500_charger_irq[i].name, irq, ret);
3483-
return ret;
3484-
}
3485-
dev_dbg(dev, "Requested %s IRQ %d: %d\n",
3486-
ab8500_charger_irq[i].name, irq, ret);
3487-
}
3488-
34893469
/* initialize lock */
34903470
spin_lock_init(&di->usb_state.usb_lock);
34913471
mutex_init(&di->usb_ipt_crnt_lock);
@@ -3614,6 +3594,26 @@ static int ab8500_charger_probe(struct platform_device *pdev)
36143594
return PTR_ERR(di->usb_chg.psy);
36153595
}
36163596

3597+
/* Request interrupts */
3598+
for (i = 0; i < ARRAY_SIZE(ab8500_charger_irq); i++) {
3599+
irq = platform_get_irq_byname(pdev, ab8500_charger_irq[i].name);
3600+
if (irq < 0)
3601+
return irq;
3602+
3603+
ret = devm_request_threaded_irq(dev,
3604+
irq, NULL, ab8500_charger_irq[i].isr,
3605+
IRQF_SHARED | IRQF_NO_SUSPEND | IRQF_ONESHOT,
3606+
ab8500_charger_irq[i].name, di);
3607+
3608+
if (ret != 0) {
3609+
dev_err(dev, "failed to request %s IRQ %d: %d\n"
3610+
, ab8500_charger_irq[i].name, irq, ret);
3611+
return ret;
3612+
}
3613+
dev_dbg(dev, "Requested %s IRQ %d: %d\n",
3614+
ab8500_charger_irq[i].name, irq, ret);
3615+
}
3616+
36173617
/*
36183618
* Check what battery we have, since we always have the USB
36193619
* psy, use that as a handle.

drivers/power/supply/act8945a_charger.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -597,14 +597,6 @@ static int act8945a_charger_probe(struct platform_device *pdev)
597597
return irq ?: -ENXIO;
598598
}
599599

600-
ret = devm_request_irq(&pdev->dev, irq, act8945a_status_changed,
601-
IRQF_TRIGGER_FALLING, "act8945a_interrupt",
602-
charger);
603-
if (ret) {
604-
dev_err(&pdev->dev, "failed to request nIRQ pin IRQ\n");
605-
return ret;
606-
}
607-
608600
charger->desc.name = "act8945a-charger";
609601
charger->desc.get_property = act8945a_charger_get_property;
610602
charger->desc.properties = act8945a_charger_props;
@@ -625,6 +617,14 @@ static int act8945a_charger_probe(struct platform_device *pdev)
625617
return PTR_ERR(charger->psy);
626618
}
627619

620+
ret = devm_request_irq(&pdev->dev, irq, act8945a_status_changed,
621+
IRQF_TRIGGER_FALLING, "act8945a_interrupt",
622+
charger);
623+
if (ret) {
624+
dev_err(&pdev->dev, "failed to request nIRQ pin IRQ\n");
625+
return ret;
626+
}
627+
628628
platform_set_drvdata(pdev, charger);
629629

630630
INIT_WORK(&charger->work, act8945a_work);

drivers/power/supply/bd71828-power.c

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,10 +1058,8 @@ static int bd71828_power_probe(struct platform_device *pdev)
10581058
pwr->regmap = dev_get_regmap(pdev->dev.parent, NULL);
10591059
else
10601060
pwr->regmap = dev_get_regmap(pdev->dev.parent, "wrap-map");
1061-
if (!pwr->regmap) {
1062-
dev_err(&pdev->dev, "No parent regmap\n");
1063-
return -EINVAL;
1064-
}
1061+
if (!pwr->regmap)
1062+
return dev_err_probe(&pdev->dev, -EINVAL, "No parent regmap\n");
10651063

10661064
pwr->dev = &pdev->dev;
10671065

@@ -1083,8 +1081,7 @@ static int bd71828_power_probe(struct platform_device *pdev)
10831081
dev_dbg(pwr->dev, "Found ROHM BD72720\n");
10841082
break;
10851083
default:
1086-
dev_err(pwr->dev, "Unknown PMIC\n");
1087-
return -EINVAL;
1084+
return dev_err_probe(pwr->dev, -EINVAL, "Unknown PMIC\n");
10881085
}
10891086

10901087
ret = bd7182x_get_rsens(pwr);

0 commit comments

Comments
 (0)