hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/power/supply/wm8350_power.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Battery driver for wm8350 PMIC
34 *
....@@ -6,10 +7,6 @@
67 * Based on OLPC Battery Driver
78 *
89 * Copyright 2006 David Woodhouse <dwmw2@infradead.org>
9
- *
10
- * This program is free software; you can redistribute it and/or modify
11
- * it under the terms of the GNU General Public License version 2 as
12
- * published by the Free Software Foundation.
1310 */
1411
1512 #include <linux/module.h>
....@@ -230,7 +227,7 @@
230227 case WM8350_IRQ_EXT_USB_FB:
231228 case WM8350_IRQ_EXT_WALL_FB:
232229 wm8350_charger_config(wm8350, policy);
233
- /* Fall through */
230
+ fallthrough;
234231 case WM8350_IRQ_EXT_BAT_FB:
235232 power_supply_changed(power->battery);
236233 power_supply_changed(power->usb);
....@@ -411,44 +408,112 @@
411408 * Initialisation
412409 *********************************************************************/
413410
414
-static void wm8350_init_charger(struct wm8350 *wm8350)
411
+static int wm8350_init_charger(struct wm8350 *wm8350)
415412 {
413
+ int ret;
414
+
416415 /* register our interest in charger events */
417
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT,
416
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT,
418417 wm8350_charger_handler, 0, "Battery hot", wm8350);
419
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD,
418
+ if (ret)
419
+ goto err;
420
+
421
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD,
420422 wm8350_charger_handler, 0, "Battery cold", wm8350);
421
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL,
423
+ if (ret)
424
+ goto free_chg_bat_hot;
425
+
426
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL,
422427 wm8350_charger_handler, 0, "Battery fail", wm8350);
423
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO,
428
+ if (ret)
429
+ goto free_chg_bat_cold;
430
+
431
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO,
424432 wm8350_charger_handler, 0,
425433 "Charger timeout", wm8350);
426
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END,
434
+ if (ret)
435
+ goto free_chg_bat_fail;
436
+
437
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END,
427438 wm8350_charger_handler, 0,
428439 "Charge end", wm8350);
429
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START,
440
+ if (ret)
441
+ goto free_chg_to;
442
+
443
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START,
430444 wm8350_charger_handler, 0,
431445 "Charge start", wm8350);
432
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY,
446
+ if (ret)
447
+ goto free_chg_end;
448
+
449
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY,
433450 wm8350_charger_handler, 0,
434451 "Fast charge ready", wm8350);
435
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9,
452
+ if (ret)
453
+ goto free_chg_start;
454
+
455
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9,
436456 wm8350_charger_handler, 0,
437457 "Battery <3.9V", wm8350);
438
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1,
458
+ if (ret)
459
+ goto free_chg_fast_rdy;
460
+
461
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1,
439462 wm8350_charger_handler, 0,
440463 "Battery <3.1V", wm8350);
441
- wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85,
464
+ if (ret)
465
+ goto free_chg_vbatt_lt_3p9;
466
+
467
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85,
442468 wm8350_charger_handler, 0,
443469 "Battery <2.85V", wm8350);
470
+ if (ret)
471
+ goto free_chg_vbatt_lt_3p1;
444472
445473 /* and supply change events */
446
- wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB,
474
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB,
447475 wm8350_charger_handler, 0, "USB", wm8350);
448
- wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB,
476
+ if (ret)
477
+ goto free_chg_vbatt_lt_2p85;
478
+
479
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB,
449480 wm8350_charger_handler, 0, "Wall", wm8350);
450
- wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB,
481
+ if (ret)
482
+ goto free_ext_usb_fb;
483
+
484
+ ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB,
451485 wm8350_charger_handler, 0, "Battery", wm8350);
486
+ if (ret)
487
+ goto free_ext_wall_fb;
488
+
489
+ return 0;
490
+
491
+free_ext_wall_fb:
492
+ wm8350_free_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, wm8350);
493
+free_ext_usb_fb:
494
+ wm8350_free_irq(wm8350, WM8350_IRQ_EXT_USB_FB, wm8350);
495
+free_chg_vbatt_lt_2p85:
496
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350);
497
+free_chg_vbatt_lt_3p1:
498
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350);
499
+free_chg_vbatt_lt_3p9:
500
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350);
501
+free_chg_fast_rdy:
502
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350);
503
+free_chg_start:
504
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350);
505
+free_chg_end:
506
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350);
507
+free_chg_to:
508
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350);
509
+free_chg_bat_fail:
510
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, wm8350);
511
+free_chg_bat_cold:
512
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, wm8350);
513
+free_chg_bat_hot:
514
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, wm8350);
515
+err:
516
+ return ret;
452517 }
453518
454519 static void free_charger_irq(struct wm8350 *wm8350)
....@@ -459,6 +524,7 @@
459524 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350);
460525 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350);
461526 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350);
527
+ wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350);
462528 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350);
463529 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350);
464530 wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350);