power: supply: wm8350-power: Handle error for wm8350_register_irq
[ Upstream commit b0b14b5ba11bec56fad344a4a0b2e16449cc8b94 ] As the potential failure of the wm8350_register_irq(), it should be better to check it and return error if fails. Also, use 'free_' in order to avoid same code. Fixes: 14431aa0c5a4 ("power_supply: Add support for WM8350 PMU") Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn> Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
f6405a382e
commit
84b1b67818
@ -411,44 +411,112 @@ static const struct power_supply_desc wm8350_usb_desc = {
|
|||||||
* Initialisation
|
* Initialisation
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
static void wm8350_init_charger(struct wm8350 *wm8350)
|
static int wm8350_init_charger(struct wm8350 *wm8350)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* register our interest in charger events */
|
/* register our interest in charger events */
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT,
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT,
|
||||||
wm8350_charger_handler, 0, "Battery hot", wm8350);
|
wm8350_charger_handler, 0, "Battery hot", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD,
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD,
|
||||||
wm8350_charger_handler, 0, "Battery cold", wm8350);
|
wm8350_charger_handler, 0, "Battery cold", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL,
|
if (ret)
|
||||||
|
goto free_chg_bat_hot;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL,
|
||||||
wm8350_charger_handler, 0, "Battery fail", wm8350);
|
wm8350_charger_handler, 0, "Battery fail", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO,
|
if (ret)
|
||||||
|
goto free_chg_bat_cold;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_TO,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Charger timeout", wm8350);
|
"Charger timeout", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END,
|
if (ret)
|
||||||
|
goto free_chg_bat_fail;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_END,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Charge end", wm8350);
|
"Charge end", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START,
|
if (ret)
|
||||||
|
goto free_chg_to;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_START,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Charge start", wm8350);
|
"Charge start", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY,
|
if (ret)
|
||||||
|
goto free_chg_end;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Fast charge ready", wm8350);
|
"Fast charge ready", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9,
|
if (ret)
|
||||||
|
goto free_chg_start;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Battery <3.9V", wm8350);
|
"Battery <3.9V", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1,
|
if (ret)
|
||||||
|
goto free_chg_fast_rdy;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Battery <3.1V", wm8350);
|
"Battery <3.1V", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85,
|
if (ret)
|
||||||
|
goto free_chg_vbatt_lt_3p9;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85,
|
||||||
wm8350_charger_handler, 0,
|
wm8350_charger_handler, 0,
|
||||||
"Battery <2.85V", wm8350);
|
"Battery <2.85V", wm8350);
|
||||||
|
if (ret)
|
||||||
|
goto free_chg_vbatt_lt_3p1;
|
||||||
|
|
||||||
/* and supply change events */
|
/* and supply change events */
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB,
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_USB_FB,
|
||||||
wm8350_charger_handler, 0, "USB", wm8350);
|
wm8350_charger_handler, 0, "USB", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB,
|
if (ret)
|
||||||
|
goto free_chg_vbatt_lt_2p85;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_WALL_FB,
|
||||||
wm8350_charger_handler, 0, "Wall", wm8350);
|
wm8350_charger_handler, 0, "Wall", wm8350);
|
||||||
wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB,
|
if (ret)
|
||||||
|
goto free_ext_usb_fb;
|
||||||
|
|
||||||
|
ret = wm8350_register_irq(wm8350, WM8350_IRQ_EXT_BAT_FB,
|
||||||
wm8350_charger_handler, 0, "Battery", wm8350);
|
wm8350_charger_handler, 0, "Battery", wm8350);
|
||||||
|
if (ret)
|
||||||
|
goto free_ext_wall_fb;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
free_ext_wall_fb:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_EXT_WALL_FB, wm8350);
|
||||||
|
free_ext_usb_fb:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_EXT_USB_FB, wm8350);
|
||||||
|
free_chg_vbatt_lt_2p85:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_2P85, wm8350);
|
||||||
|
free_chg_vbatt_lt_3p1:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P1, wm8350);
|
||||||
|
free_chg_vbatt_lt_3p9:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_VBATT_LT_3P9, wm8350);
|
||||||
|
free_chg_fast_rdy:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_FAST_RDY, wm8350);
|
||||||
|
free_chg_start:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_START, wm8350);
|
||||||
|
free_chg_end:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_END, wm8350);
|
||||||
|
free_chg_to:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_TO, wm8350);
|
||||||
|
free_chg_bat_fail:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_FAIL, wm8350);
|
||||||
|
free_chg_bat_cold:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_COLD, wm8350);
|
||||||
|
free_chg_bat_hot:
|
||||||
|
wm8350_free_irq(wm8350, WM8350_IRQ_CHG_BAT_HOT, wm8350);
|
||||||
|
err:
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_charger_irq(struct wm8350 *wm8350)
|
static void free_charger_irq(struct wm8350 *wm8350)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user