lkml.org 
[lkml]   [2022]   [Apr]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 116/284] power: supply: wm8350-power: Handle error for wm8350_register_irq
    Date
    From: Jiasheng Jiang <jiasheng@iscas.ac.cn>

    [ 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>
    ---
    drivers/power/supply/wm8350_power.c | 96 ++++++++++++++++++++++++-----
    1 file changed, 82 insertions(+), 14 deletions(-)

    diff --git a/drivers/power/supply/wm8350_power.c b/drivers/power/supply/wm8350_power.c
    index a2740cf57ad3..c2a62e6568c6 100644
    --- a/drivers/power/supply/wm8350_power.c
    +++ b/drivers/power/supply/wm8350_power.c
    @@ -410,44 +410,112 @@ static const struct power_supply_desc wm8350_usb_desc = {
    * 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 */
    - 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_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_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_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,
    "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,
    "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,
    "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,
    "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,
    "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,
    "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,
    "Battery <2.85V", wm8350);
    + if (ret)
    + goto free_chg_vbatt_lt_3p1;

    /* 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_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_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);
    + 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)
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-04-18 15:43    [W:3.319 / U:1.320 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site