From patchwork Sun Oct 1 13:17:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13405386 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 451CCE748ED for ; Sun, 1 Oct 2023 13:18:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234979AbjJANSE (ORCPT ); Sun, 1 Oct 2023 09:18:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32890 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229716AbjJANSE (ORCPT ); Sun, 1 Oct 2023 09:18:04 -0400 Received: from sonic309-24.consmr.mail.ir2.yahoo.com (sonic309-24.consmr.mail.ir2.yahoo.com [77.238.179.82]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 173B2B7 for ; Sun, 1 Oct 2023 06:17:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1696166278; bh=hXqZ/BJqAdqfWupb9eY6ATDe04QF4KS61GYr5ErKHuA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=gVYl8sIGWg29EQd6N9ChVBNgVe9Hv9OQFajYbZW3vPKAFfFO/GwLxwIP1a8RGEx59hw5X9/NvPXqPV90la7sokZywMCAQrRYZs+moO1k53en8njPBzMy/DQdVOPeXdyxQWM1xtLzn7bpfWyTyYpQRYcUsRfhlDvAP+VRoMxAyB7VuKywT2W11KkbsbGFBsRBTouhaUdA/x3eFq/DY77tUkT8JDzdWkeDieGcQXI4Nc40I5lkc/EwQP7jjKLrs68fDWWjNJUy/M+GEmApsMc3g9hKzyOPDR7iy8JkpQdAFktwUbV8VRyD0WSERb9M2iCB81QKAswnWYtRWDNZ7vo1dQ== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1696166278; bh=Gr0OSsZYAqeAsb7I6Npw6eYkTMvr9nJtPD8hJMkSL7D=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=Ebkd1Ch5FMSjc0Ka2Pl04/o+XW4v13V9IMxVcWs7jE98pPa/HCPXST3/hKhNtcguzdl158IybRoHSMh4Ere0lnSoCSQme5rTUoN8hEQ1kmLJnnyOSCZzuAz12iWn0tsdObiIW5vzEVgmSFfDON9smDHkfESs71NzMuBvjt34YU8GUKQPtVnYBWq4j21lO31rawL5FMCrqN6ZEMc8VqIzX2TNubmhJOVCa+FUZTOoHGktlYtAi79jX1CYsvUvVD1exJjS3k3fRHJJF/hSM5Q90vxaONUhmQTCEuBUMt1tKqG6n3k8QRIA+N/W1WIaBFtVmoM2yxChgvNAxEM0U8sGRQ== X-YMail-OSG: r.w_7WEVM1ltXMe915MzJ6cXfoz_a33fzUSyGP.pE8M8UbJJG_306Gu8s7ZkmFR lt8_HT6VUlXaromHhqw5o1XCSxDOYa89.d1C6EeczPD.A2ZthsPvGqLZf2nV_BtZ9mCw.MAMUSWz GoKkqRcdnTx63CMKguMfdUBFcul4KkNFwEjyWNbr._TP_Ezyc_6Ho0QZiunZWphkYYydY_vEUqSF EO40zKnJu2UmxkR.92EmVDVejLZVItKYg10fiH_8noPuuD06TA2dOFqoltOaspQAIKWbzzFGLi_Y bXw4Gdz_4aWRzaP5IIGKegn_yPpWDAwiLliI1FJb012vMBFJEVviDuNKKuvhn.q0EUA.aaPQ9ka1 Azf_VSjpBQZOYrI2pLGjJWu2QfIX0d6BsN4hV2CBkXZwkXKIn4C3IvU9gaOy6BFo1BzKBUbtWj_8 NdBdPoj7I_FT1NNEmXFzXAQO.Y32buAxPu51KA5iIq0UKpzDybfA1lJHj55_ibJUIcXQ.SkVPITP Tfc6cDq.iQaeEMjsZZ7BKTUqL8EmtPWI_ZbSSvLKiQlGNE56uaJSjiEHW2mUOiipqrLduxAH9WDY 3v6SxPBImOCmV5aqVtqN9w3wDqLw.xpI45lMV5ErbyD2I.lxgZhHGI6lRLTPpw_x1m.gSwz_t.tG p0VSstF4Y2Xo4Qom6tm7KCs0FBgcLf_E4B28vfXOLqlOIkqSg81Xr0IBcunnHkQSETXrkQ5dKuBw UpMPCrnVwziEUZl82S0_U3wJcAQ49_LKE88XqrikCm9Tp0KssFmVBOc9Srf6SjZ.E0B0F7I6073q kRQ9FvHe_scYl9xA81NVjQHXGFzcV7.rfD__raAeKAymbS3bNrLKFGw.BuuTcUAqMvI1keHqPgNL 2SQatJrCco389ZuGYKQD4Kr2JCafLSIAjsXWwl94H9vGlfUA6MqhRFHe8VUXt_HfAm_y.pe6e2Yo fFbdHk1Pu4zaNNNpQf38HTR84UmSTJmDTn.sZMjfyN03Q5Mta0AqjW5H5WChqqJLaQDs9.KvCW3A QtWIJMtL1crO_lJxnW4WJtXlJJ36kHIzEIK1fPrneK.B3UQFMmecs_0ARMzxzMX9.Fngw998fqr5 t6S49wAxt0R9EKummPlKIRz5JJKNmra7Xm1VFB9RJPco5O.2nK.R53aZ4okbcD3lD1rxf7bDWtBi Unx_2wdD9I7Mp5.9_nCKUwuHXEbi9rddf1HsSavmhO5A6WWWnkSOsfIi.WeE9Rr3Rvpcmiibf5VD 9MtkB_6s8PPD0yMaV0UWZkUa69Ya0o22Ozdu2HqbKEgibXcrw4uCMl7d2et9DcMkom8nM1dVof0V iAP8xlnM4.t1Fom1W6LvKW_LcY88Tnnw9.cfiBxtaLxGlweC4cS935yn9_gxdLSyA2bzu5d4DjMW s1lltgS7BUXrwXVMpB4yPLZjYyEQQFplr5EsDMdoHORxFcb1ydGWcN1mIMxQToOIQ8FlBbqWU_cg WDTqiDZrNCzqbtVytdDuL08NDy0mml2_eyl_qzigtGpSELW.b4YisTMKjDuXPF7byKny4eFr2iRs jY_BceSypK.PnG4TTST_7187q6l_omQBaYJ3M69J.qvBhmggAYChVX8lG5SFyiEO_fB5GFT8K2wU FFqzSghRh81kU7SGcmC.uYR8CDRFMVv7IRzxpl8rQ.0NQtYrRjIW8OTILmMIt590IKigduNBZTrQ XhuAe3KmcGZTVb3GhpjIiZ7YlV2Rei2FYRiezFi7V.4oyJkpW0j8WPKcAmJPcPwravKzbxytoei0 OUBLphKKirpEBIO0OEISt4fEfLuT3kb2yxdkG1nJ19wte5_mFq6nIPK8JGpgBZOOQ4AMpeJmhji5 JOHfm1_RdnqiDx0wiOvF69fTE0SDJWzVh5izU4WI1EzNza3mCoxasQb8b1AcHBcHljrASFi.Vcf2 Nmm16oOryzMZVz45CsR27wNxdla1DWEPInk8nxy3gRQ2YbsDcSDPz7xQQf97YB0YdIvHE3CG30uD JCh3Im9Itg8xIN2IZ31M7P7xsrg3HziLVjpyvVU.l4G_G2yb.DSddH6Le1v0_WmYFwgKmZIoDokp PqprLGfcjSVijmkPQLryNrwZywtqccXQopIQGsAVJgKmsyxqCuw97Zkw21RIfcHFtowubbcS0OZe Nl5q59qVpd5ZW6OwsSJGo0QiKrjpnlt36neDqlLIjOzQCBB8.nwd4CiVCVdqNevEk4iQqbon.Fmk 6C.60K_rxLMfbFOChXp9bSDPM.fvc_4rrudTS10oaSxt3ZlwOMtFBmUqsJpPoLsrSfrr3PhXSiW0 hqMyNGOTbinujqvL.AE8.jfxBO.J4LV0- X-Sonic-MF: X-Sonic-ID: 44667c56-2af3-4666-9e9b-ed3bfc1b95ed Received: from sonic.gate.mail.ne1.yahoo.com by sonic309.consmr.mail.ir2.yahoo.com with HTTP; Sun, 1 Oct 2023 13:17:58 +0000 Received: by hermes--production-ir2-55db9d9d5-gk4f2 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID f1c2828dd5bee1de58f8566f5b57afb9; Sun, 01 Oct 2023 13:17:57 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel Cc: Lee Jones , Stephen Rothwell , Yang Yingliang , Christophe Jaillet , Stephan Gerhold , Raymond Hackley , Henrik Grimler , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 1/3] power: supply: rt5033_charger: Add cable detection and USB OTG supply Date: Sun, 1 Oct 2023 15:17:42 +0200 Message-Id: X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Implement cable detection by extcon and handle the driver according to the connector type. There are basically three types of action: "set_charging", "set_otg" and "set_disconnect". A forth helper function to "unset_otg" was added because this is used in both "set_charging" and "set_disconnect". In the first case it covers the rather rare event that someone changes from OTG to charging without disconnect. In the second case, when disconnecting, the values are set back to the ones from initialization to return into a defined state. Additionally, there is "set_mivr". When connecting to e.g. a laptop/PC, the minimum input voltage regulation (MIVR) shall prevent a voltage drop if the cable or the supply is weak. The MIVR value is set to 4600MV, same as in the Android driver [1]. When disconnecting, MIVR is set back to DISABLED. In the function rt5033_get_charger_state(): When in OTG mode, the chip reports status "charging". Change this to "discharging" because there is no charging going on in OTG mode [2]. Yang Yingliang detected missing mutex_unlock() in some error path and suggested a fix [3]. The suggestion was squashed into this patch. [1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L499 [2] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L686-L687 [3] https://lore.kernel.org/linux-pm/20230822030207.644738-1-yangyingliang@huawei.com Tested-by: Raymond Hackley Co-developed-by: Yang Yingliang Signed-off-by: Jakob Hauser --- drivers/power/supply/rt5033_charger.c | 287 +++++++++++++++++++++++++- 1 file changed, 285 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c index c0c516f22c66..091ca4a21f29 100644 --- a/drivers/power/supply/rt5033_charger.c +++ b/drivers/power/supply/rt5033_charger.c @@ -6,8 +6,12 @@ * Author: Beomho Seo */ +#include +#include #include #include +#include +#include #include #include #include @@ -26,6 +30,14 @@ struct rt5033_charger { struct regmap *regmap; struct power_supply *psy; struct rt5033_charger_data *chg; + struct extcon_dev *edev; + struct notifier_block extcon_nb; + struct work_struct extcon_work; + struct mutex lock; + bool online; + bool otg; + bool mivr_enabled; + u8 cv_regval; }; static int rt5033_get_charger_state(struct rt5033_charger *charger) @@ -56,6 +68,10 @@ static int rt5033_get_charger_state(struct rt5033_charger *charger) state = POWER_SUPPLY_STATUS_UNKNOWN; } + /* For OTG mode, RT5033 would still report "charging" */ + if (charger->otg) + state = POWER_SUPPLY_STATUS_DISCHARGING; + return state; } @@ -147,6 +163,9 @@ static inline int rt5033_init_const_charge(struct rt5033_charger *charger) return -EINVAL; } + /* Store that value for later usage */ + charger->cv_regval = reg_data; + /* Set end of charge current */ if (chg->eoc_uamp < RT5033_CHARGER_EOC_MIN || chg->eoc_uamp > RT5033_CHARGER_EOC_MAX) { @@ -330,6 +349,162 @@ static int rt5033_charger_reg_init(struct rt5033_charger *charger) return 0; } +static int rt5033_charger_set_otg(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* Set OTG boost v_out to 5 volts */ + ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL2, + RT5033_CHGCTRL2_CV_MASK, + 0x37 << RT5033_CHGCTRL2_CV_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed set OTG boost v_out\n"); + ret = -EINVAL; + goto out_unlock; + } + + /* Set operation mode to OTG */ + ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_MODE_MASK, RT5033_BOOST_MODE); + if (ret) { + dev_err(charger->dev, "Failed to update OTG mode.\n"); + ret = -EINVAL; + goto out_unlock; + } + + /* In case someone switched from charging to OTG directly */ + if (charger->online) + charger->online = false; + + charger->otg = true; + +out_unlock: + mutex_unlock(&charger->lock); + + return ret; +} + +static int rt5033_charger_unset_otg(struct rt5033_charger *charger) +{ + int ret; + u8 data; + + /* Restore constant voltage for charging */ + data = charger->cv_regval; + ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL2, + RT5033_CHGCTRL2_CV_MASK, + data << RT5033_CHGCTRL2_CV_SHIFT); + if (ret) { + dev_err(charger->dev, "Failed to restore constant voltage\n"); + return -EINVAL; + } + + /* Set operation mode to charging */ + ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL1, + RT5033_CHGCTRL1_MODE_MASK, RT5033_CHARGER_MODE); + if (ret) { + dev_err(charger->dev, "Failed to update charger mode.\n"); + return -EINVAL; + } + + charger->otg = false; + + return 0; +} + +static int rt5033_charger_set_charging(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* In case someone switched from OTG to charging directly */ + if (charger->otg) { + ret = rt5033_charger_unset_otg(charger); + if (ret) { + mutex_unlock(&charger->lock); + return -EINVAL; + } + } + + charger->online = true; + + mutex_unlock(&charger->lock); + + return 0; +} + +static int rt5033_charger_set_mivr(struct rt5033_charger *charger) +{ + int ret; + + mutex_lock(&charger->lock); + + /* + * When connected via USB connector type SDP (Standard Downstream Port), + * the minimum input voltage regulation (MIVR) should be enabled. It + * prevents an input voltage drop due to insufficient current provided + * by the adapter or USB input. As a downside, it may reduces the + * charging current and thus slows the charging. + */ + ret = regmap_update_bits(charger->regmap, RT5033_REG_CHG_CTRL4, + RT5033_CHGCTRL4_MIVR_MASK, RT5033_CHARGER_MIVR_4600MV); + if (ret) { + dev_err(charger->dev, "Failed to set MIVR level.\n"); + mutex_unlock(&charger->lock); + return -EINVAL; + } + + charger->mivr_enabled = true; + + mutex_unlock(&charger->lock); + + /* Beyond this, do the same steps like setting charging */ + rt5033_charger_set_charging(charger); + + return 0; +} + +static int rt5033_charger_set_disconnect(struct rt5033_charger *charger) +{ + int ret = 0; + + mutex_lock(&charger->lock); + + /* Disable MIVR if enabled */ + if (charger->mivr_enabled) { + ret = regmap_update_bits(charger->regmap, + RT5033_REG_CHG_CTRL4, + RT5033_CHGCTRL4_MIVR_MASK, + RT5033_CHARGER_MIVR_DISABLE); + if (ret) { + dev_err(charger->dev, "Failed to disable MIVR.\n"); + ret = -EINVAL; + goto out_unlock; + } + + charger->mivr_enabled = false; + } + + if (charger->otg) { + ret = rt5033_charger_unset_otg(charger); + if (ret) { + ret = -EINVAL; + goto out_unlock; + } + } + + if (charger->online) + charger->online = false; + +out_unlock: + mutex_unlock(&charger->lock); + + return ret; +} + static enum power_supply_property rt5033_charger_props[] = { POWER_SUPPLY_PROP_STATUS, POWER_SUPPLY_PROP_CHARGE_TYPE, @@ -366,8 +541,7 @@ static int rt5033_charger_get_property(struct power_supply *psy, val->strval = RT5033_MANUFACTURER; break; case POWER_SUPPLY_PROP_ONLINE: - val->intval = (rt5033_get_charger_state(charger) == - POWER_SUPPLY_STATUS_CHARGING); + val->intval = charger->online; break; default: return -EINVAL; @@ -402,6 +576,86 @@ static struct rt5033_charger_data *rt5033_charger_dt_init( return chg; } +static void rt5033_charger_extcon_work(struct work_struct *work) +{ + struct rt5033_charger *charger = + container_of(work, struct rt5033_charger, extcon_work); + struct extcon_dev *edev = charger->edev; + int connector, state; + int ret; + + for (connector = EXTCON_USB_HOST; connector <= EXTCON_CHG_USB_PD; + connector++) { + state = extcon_get_state(edev, connector); + if (state == 1) + break; + } + + /* + * Adding a delay between extcon notification and extcon action. This + * makes extcon action execution more reliable. Without the delay the + * execution sometimes fails, possibly because the chip is busy or not + * ready. + */ + msleep(100); + + switch (connector) { + case EXTCON_CHG_USB_SDP: + ret = rt5033_charger_set_mivr(charger); + if (ret) { + dev_err(charger->dev, "failed to set USB mode\n"); + break; + } + dev_info(charger->dev, "USB mode. connector type: %d\n", + connector); + break; + case EXTCON_CHG_USB_DCP: + case EXTCON_CHG_USB_CDP: + case EXTCON_CHG_USB_ACA: + case EXTCON_CHG_USB_FAST: + case EXTCON_CHG_USB_SLOW: + case EXTCON_CHG_WPT: + case EXTCON_CHG_USB_PD: + ret = rt5033_charger_set_charging(charger); + if (ret) { + dev_err(charger->dev, "failed to set charging\n"); + break; + } + dev_info(charger->dev, "charging. connector type: %d\n", + connector); + break; + case EXTCON_USB_HOST: + ret = rt5033_charger_set_otg(charger); + if (ret) { + dev_err(charger->dev, "failed to set OTG\n"); + break; + } + dev_info(charger->dev, "OTG enabled\n"); + break; + default: + ret = rt5033_charger_set_disconnect(charger); + if (ret) { + dev_err(charger->dev, "failed to set disconnect\n"); + break; + } + dev_info(charger->dev, "disconnected\n"); + break; + } + + power_supply_changed(charger->psy); +} + +static int rt5033_charger_extcon_notifier(struct notifier_block *nb, + unsigned long event, void *param) +{ + struct rt5033_charger *charger = + container_of(nb, struct rt5033_charger, extcon_nb); + + schedule_work(&charger->extcon_work); + + return NOTIFY_OK; +} + static const struct power_supply_desc rt5033_charger_desc = { .name = "rt5033-charger", .type = POWER_SUPPLY_TYPE_USB, @@ -414,6 +668,7 @@ static int rt5033_charger_probe(struct platform_device *pdev) { struct rt5033_charger *charger; struct power_supply_config psy_cfg = {}; + struct device_node *np_conn, *np_edev; int ret; charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL); @@ -423,6 +678,7 @@ static int rt5033_charger_probe(struct platform_device *pdev) platform_set_drvdata(pdev, charger); charger->dev = &pdev->dev; charger->regmap = dev_get_regmap(pdev->dev.parent, NULL); + mutex_init(&charger->lock); psy_cfg.of_node = pdev->dev.of_node; psy_cfg.drv_data = charger; @@ -442,6 +698,33 @@ static int rt5033_charger_probe(struct platform_device *pdev) if (ret) return ret; + /* + * Extcon support is not vital for the charger to work. If no extcon + * is available, just emit a warning and leave the probe function. + */ + np_conn = of_parse_phandle(pdev->dev.of_node, "richtek,usb-connector", 0); + np_edev = of_get_parent(np_conn); + charger->edev = extcon_find_edev_by_node(np_edev); + if (IS_ERR(charger->edev)) { + dev_warn(&pdev->dev, "no extcon device found in device-tree\n"); + goto out; + } + + ret = devm_work_autocancel(&pdev->dev, &charger->extcon_work, + rt5033_charger_extcon_work); + if (ret) { + dev_err(&pdev->dev, "failed to initialize extcon work\n"); + return ret; + } + + charger->extcon_nb.notifier_call = rt5033_charger_extcon_notifier; + ret = devm_extcon_register_notifier_all(&pdev->dev, charger->edev, + &charger->extcon_nb); + if (ret) { + dev_err(&pdev->dev, "failed to register extcon notifier\n"); + return ret; + } +out: return 0; } From patchwork Sun Oct 1 13:17:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13405387 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9E3CE748F5 for ; Sun, 1 Oct 2023 13:18:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235001AbjJANSF (ORCPT ); Sun, 1 Oct 2023 09:18:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32930 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234991AbjJANSE (ORCPT ); Sun, 1 Oct 2023 09:18:04 -0400 Received: from sonic301-21.consmr.mail.ir2.yahoo.com (sonic301-21.consmr.mail.ir2.yahoo.com [77.238.176.98]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A040BF for ; Sun, 1 Oct 2023 06:18:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1696166280; bh=5xyF+KReJNWWxWCi7Ez3mVy/VMtqQScvdho4KTEIt0E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=J0JYfMjyRncz4s9KNUJfV1mhF3dkeK0MlhNqvV81fixw+6OTC1G246mJ2pDtTYWAkGLDHHqwihRzKduGmePVFtgrTLT6D+wYafLqVkgKbNFONQ3yyPZJR99ankkItaFoq6NZwOxcAn1DDHuPwbnM0qrxYqIEibvKcZ8P1Je6DcPjJu70GQOmf/ulr5qNE66NCOcW6vtjH2rPrgokKs33rrP7RZTUXXh73kBejbIXebelrAYnhwP4I92GD4/H7vw/+jlcxDfmom0DITBWmT6TvcN52KxOROxXfvr8Lb21kj/u+6mqmEr/cFdlVMQQczxcU4BuW+/M7IO/Sh104des7Q== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1696166280; bh=qfPIYl9u1Ofy1BNQjRpSAaml4adrrYUU4HmpkXR4ONL=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=Gkk7WsSmnLHjhE2+cXGH9Bkz+RtqxnpnDxdb6UrmcKRL8xFbQLkRj2/Gr9WWo3qxsRYZpGE1rRFTbxTavywc133pztW2gMsIMbjYrgJcArelf6Eg+JCWYoqgN2uPu5WGsUY4CvDkD45KAmp6KZ+QFdFTTo/BNYCae2SQk5W1+mEUswldNj6Uh3YoyMqrofYM0/yioiq8AmNOuK4BSMcSizADvm+Pfd8AhAp813uaGtaot9OHywdQctAslR2EI28MpkqTd37R6Ylp5nuz3rAIxGtmHbueaQQ1a8ZesPymMqX7ia8SBC9P41DB/Oy1d5MDpdpbW+MMX7ZkYUYQF1bW7g== X-YMail-OSG: oJxYjd4VM1nz9t_Lu05za42En9qaDXHOZ9l6rvrIJkWscESAkp2IXSqNOGQdQrw bsJpmwYNi6z4JgEFYNRbLa4glcCvqS8DGhwDCsqeaCMLtpW_tQh1.Ar7ryydNwc5_GOINLx9kKGb vDc33pXRZ7AR5qLxrxGp4PBtkBrvnCAYpBXHrLk3ALsl6DpC4TnKT2kr6Nr2pcPghrVXX5Fv7UUR GpRGI5Fn968B263.Cpc6w0jf2NK51ZiE3vrXrck.m8Sq88uZs_7teKoroGZg5.UhP5IWV1mP5aSP 2yh_DqNvX37BD.nny47PkFGI4dDrHd_6FmUazgF2urbIXpXTHyQenfXZWQVw9VojD4zmqwgLEm4N d1qInNBYMzXtJG38BSZnvYxk7BrtnblDoW3fVWVy5maddCfsN6sEKq5Oa1xVwfpokYHFuS_o5UuG _y0pagwhE0.KxuVKz2XJ_Mtab3RFOU8J_aF92QqAVG9UYw.OcitR63SwZvc5qSBEmJpmuLm84vE0 lXTCKJXQgtc4mjYUW756dxjr.9h4U2ftL08HlFMMZ9j_9xggNZ6tMKWPvozFrj._2bl04vy53VtC LOlU.uRutqztK30R7VB966zwsL3Q.NmqvU0tGfe7y2ylB9gIkjXMp1SOmwCbaMVWxLk84Z9NobFW lYqlI_LjwPGYIn2wL5ZNNUWT935oC52WXs6MrIjMTXT4BfNqbmUmF6Ky3c5H8G6wwsF0yofrSfmv UacHq2gobmgqJlEbNfIUo6YGyolmM_ql9kN5RUsKLGcUIsbeoGijZQhpDs2BzECHR2Fsr7a287jS 0B4zTqAo42QTW08nFx6X_29NYu4AhvXZVo1THux.w6WVuQnTExsi0pf77k6xWypwh6BksrAupMPd yOGZUeyE.EuEJ3JfhDGljinh9ZYAgIMunHGxOXdq6_oMhE8V4scaKgMyWgDkW466IqnP45gmR618 NfEEWAtaYroep493aJQ9fVfIuTwBhs8byg4Z6qDBFOfIftuT6HHxCqAAC_FfRHxF43ndFqNA0Hhy CCeqdOZPp3nqliIOKtr3czyirKkpSoRgWN_ycolH49nNjyDAzs45YoOdlrBKXNISvh2.4OFojBrp pI8TouhI7vT9J_imluTz6t0n9pdobn5B_pFYil2TSXbPyks.KkZwxRzdAwqzhKywYFjtwZxFwGLd yXnNzNCpCiklCGTZsxaaMgc25yQ6wpxl2SnErlPS2vwtL8ZRoC_1ZI5gma7YAQ1fZ5fDiXv_bjqa bIbhWIDE94JGBth7FDiJZy9q4GQrQhIBPpt5VdZnUO1X27yt5m15AtNIUetsjY9TpPMhUeEEfKFH o5K88QE6ioY4oEnEXxdJJ375vnNdJZZqYUJR0nEUbV.J8lNRDbgzc.151OmO4vAwDCkHbCZgP3H3 QY2ML8TG9hxikXppCelp4l5s56I6jwe5EIPUVY1btUvs0aDCzbUosRR.zrJstww3YyGVfdXKe6W0 TSU2rg_MDwvH6u.lt.F_1l1.oyDOlKnL.49mN7lz92YfhUuEw611XP.egiO_2vxiFp.RGELimpsS vwQCYHRHHJ8alstcDj7nFryy52cyY0qbV2eWdIm44JpayWypZP6yms9EsGsFXDoU9hmqnyY3fzFR phlCJ_W.wtJvdwkWe4LBCtKZgQ0v5lskSJyEQ.O6jRtvOBFVgfSUobfx0MCSsnZtSGbw413bkCXz 4g4j8H6x.BC4qMxHipUERJahD0vGraMqjqeT.gjZjafz1z4go9pnrS.M244oENJu3G80ceqiFqP9 xLplvY1nWUqjQbpQ2G2syPYWlwEbkOgomOmMTGhPxA890RU8_cUyRGhU7ndLKbGJmH9x2HJHxbZH NME5uzjDdaKgdKO3ytoUr.wUi97jkyGQXOSeIYVkbfwpyOydfbIID0EIaLqnzgQ5mOr9sRpAR9lt E9rOVa_dd1q6Y2YXlOoZ_2eBrU09XL5JYDT0sfSbzH3YZdNczuQP_DsdJn1PGAyusO9Cm8WXV8Os RdIKV7h3u2PrU_bnN8Qsz2gVb2GS1rK3bxof9es5FYqt_TWGq1b05JrdQtTIyLOMzsv5bTfubTFI 2PdS4PZP5MfHTLccioSFT6cHmT4cRqCrqJNpt80.vy6JA5XYRze_BbgLq73i35Xm3wRscci8np_V kMaXu7ttjz3p3IgrhzEYjUzoGLhRFkidhNcRx2VSJBkkrBMpM38GIebWSt.2lJbuMnVIFyD3IGjI AvnJVEgCQPm4HrcdeR..UGkgsYUsxK4pEoLtJvcTwCKjv9ocu2LQruWnYmXf2KlcGvLF46Cn65O7 UpqrZlepnZrR31ob3SeGbBH_vnisiTA-- X-Sonic-MF: X-Sonic-ID: af00d58e-3114-4afa-9a0e-10712531b56f Received: from sonic.gate.mail.ne1.yahoo.com by sonic301.consmr.mail.ir2.yahoo.com with HTTP; Sun, 1 Oct 2023 13:18:00 +0000 Received: by hermes--production-ir2-55db9d9d5-gk4f2 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID f1c2828dd5bee1de58f8566f5b57afb9; Sun, 01 Oct 2023 13:17:58 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel Cc: Lee Jones , Stephen Rothwell , Yang Yingliang , Christophe Jaillet , Stephan Gerhold , Raymond Hackley , Henrik Grimler , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 2/3] power: supply: rt5033_charger: Simplify initialization of rt5033_charger_data Date: Sun, 1 Oct 2023 15:17:43 +0200 Message-Id: <0aff8c2a18cf4b88ec3333f6679a8419dd76ca29.1696165240.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Currently the struct "rt5033_charger_data" is initialized rather complicated. The cause lies inside of the struct "rt5033_charger", where struct "rt5033_charger_data" is implemented as a pointer *chg. Therefore, inside of struct "rt5033_charger" change the struct "rt5033_charger_data" to non-pointer "chg". It is then initialized right away and can be accessed more easily. Signed-off-by: Jakob Hauser --- drivers/power/supply/rt5033_charger.c | 29 +++++++++++---------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c index 091ca4a21f29..b34ef0ea6f8a 100644 --- a/drivers/power/supply/rt5033_charger.c +++ b/drivers/power/supply/rt5033_charger.c @@ -29,7 +29,7 @@ struct rt5033_charger { struct device *dev; struct regmap *regmap; struct power_supply *psy; - struct rt5033_charger_data *chg; + struct rt5033_charger_data chg; struct extcon_dev *edev; struct notifier_block extcon_nb; struct work_struct extcon_work; @@ -131,7 +131,7 @@ static int rt5033_get_charger_const_voltage(struct rt5033_charger *charger) static inline int rt5033_init_const_charge(struct rt5033_charger *charger) { - struct rt5033_charger_data *chg = charger->chg; + struct rt5033_charger_data *chg = &charger->chg; int ret; unsigned int val; u8 reg_data; @@ -205,7 +205,7 @@ static inline int rt5033_init_const_charge(struct rt5033_charger *charger) static inline int rt5033_init_fast_charge(struct rt5033_charger *charger) { - struct rt5033_charger_data *chg = charger->chg; + struct rt5033_charger_data *chg = &charger->chg; int ret; unsigned int val; u8 reg_data; @@ -250,7 +250,7 @@ static inline int rt5033_init_fast_charge(struct rt5033_charger *charger) static inline int rt5033_init_pre_charge(struct rt5033_charger *charger) { - struct rt5033_charger_data *chg = charger->chg; + struct rt5033_charger_data *chg = &charger->chg; int ret; unsigned int val; u8 reg_data; @@ -550,21 +550,16 @@ static int rt5033_charger_get_property(struct power_supply *psy, return 0; } -static struct rt5033_charger_data *rt5033_charger_dt_init( - struct rt5033_charger *charger) +static int rt5033_charger_dt_init(struct rt5033_charger *charger) { - struct rt5033_charger_data *chg; + struct rt5033_charger_data *chg = &charger->chg; struct power_supply_battery_info *info; int ret; - chg = devm_kzalloc(charger->dev, sizeof(*chg), GFP_KERNEL); - if (!chg) - return ERR_PTR(-ENOMEM); - ret = power_supply_get_battery_info(charger->psy, &info); if (ret) - return ERR_PTR(dev_err_probe(charger->dev, -EINVAL, - "missing battery info\n")); + return dev_err_probe(charger->dev, -EINVAL, + "missing battery info\n"); /* Assign data. Validity will be checked in the init functions. */ chg->pre_uamp = info->precharge_current_ua; @@ -573,7 +568,7 @@ static struct rt5033_charger_data *rt5033_charger_dt_init( chg->pre_uvolt = info->precharge_voltage_max_uv; chg->const_uvolt = info->constant_charge_voltage_max_uv; - return chg; + return 0; } static void rt5033_charger_extcon_work(struct work_struct *work) @@ -690,9 +685,9 @@ static int rt5033_charger_probe(struct platform_device *pdev) return dev_err_probe(&pdev->dev, PTR_ERR(charger->psy), "Failed to register power supply\n"); - charger->chg = rt5033_charger_dt_init(charger); - if (IS_ERR_OR_NULL(charger->chg)) - return PTR_ERR(charger->chg); + ret = rt5033_charger_dt_init(charger); + if (ret) + return ret; ret = rt5033_charger_reg_init(charger); if (ret) From patchwork Sun Oct 1 13:17:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jakob Hauser X-Patchwork-Id: 13405389 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04549E748F6 for ; Sun, 1 Oct 2023 13:18:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235017AbjJANSI (ORCPT ); Sun, 1 Oct 2023 09:18:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32954 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235005AbjJANSF (ORCPT ); Sun, 1 Oct 2023 09:18:05 -0400 Received: from sonic313-20.consmr.mail.ir2.yahoo.com (sonic313-20.consmr.mail.ir2.yahoo.com [77.238.179.187]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 60344D3 for ; Sun, 1 Oct 2023 06:18:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rocketmail.com; s=s2048; t=1696166280; bh=MHEdXKWgThv2pqabF9UjOZv402c0QNNym8Ltis9HYLc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=km7J2LHQYmud1FCYexf626JMxhdSkO7ua49RJKz0npDMBGBJ+1OZYx9fGRHwYOuSmD0YjWq1juCebqNsxnB7/5pTcaBgtjLsCNPZYhYXO7FssDuOj31xWgySQRuAR0WOuqHrnpv+WIc+Udd55ryr4JjaYkrfFXXc9UNiUZBoyUqLq8UtVq6V0cdTb2hbwtLWV3qfsVBXuLpYqKw4KpCAoO8rWHF2lF9mfxh7fjE9/f8k6ynDbtxWWsfvvM6QV6drbfi9QdgJNdWIvOzZKe0ng81rO1KTTeYteJcFiQiYGNYC0KgqnOJSfMUTKqxHHJprFQo8PRQBNMoQmRQ5hAKflg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1696166280; bh=kNcZemSUi2+D3ss30APZIzYpXe0nI8JV+0reMuCszb6=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=P+CmfwN9eWi0ZfMtCT6UhI5RZCCPTzRQdhKCsqsN3gVXw63jRr1GqAvVGOekaFYE6fKTXwmOAgvMRE/ceSDn0CSVBP4ZxaP/NabbH47RSkhPMhHfyKEJFLWp3SEkCxZVla0nvUgWVea78l9gKthwhDB8wBqUErJWZpw1K2MbQNiQ8JgKn/4KMxf+/3gjQUWmubtXG/LvB9k6LxFEvk+hUOb54qEXEhjrPkH6TIqwjw/F0wyCthDxOie/5KnJZGr+Sstu3ogufamhefIOZF6qSF9lpXAfL9KCV0UXPOUw88wzo2NIBSGv3PiRP9EKQTOiwT11dke+JV93RYkHgBVb9g== X-YMail-OSG: PbjKa6IVM1nLcUHMCw5fdBh00sXRSXNi0tdAj.fUDoOq3LT8A9oXKlyRPKvaYBY ktsz4PU61LJIpOfkeh66N9GjT7gkz3Kt6AF02mQ2ZIcqnOgCULjx10ryntIL7rVuqPoHJhS.cf9x Ido6tOjyqKLhOb5xZO1Bi0Q4VWwIGZfHLBwE7nmU_DuxFwb4VjPdwMHuiEgUpAs2QCKUHjmM5Hyp 9yYsLpOXDTLze7iXgl4U9WSxyFktsG6jVxRJQR4cEA15XH54gIMtWjETvlEIF6hrbypsdpxXbfT9 AYNRhDhpVs23mL6VXqswEi0zkD39VGZwhmK_uJZ349eCXdxTK2ZwdC6Od8kWML1o8mINEUtw6VRE Q7YqU1V8uw4MsaNQ0djyuyUeScval0XFYVRTr4xQsleMcKL3_Lb3tCmM0P85chiK8DkAWc.RnO5w r6r.Q.IEGp0taDcGn7yPC68shkQea5EIjrZlsliNpz51vTK9OwCK2gii90nhli1bv6p_IiAmZRbI TqVelVTi7xklvhHiYd4Cg9U9nUE3xTQMXpyETPBdDCClVa8I1m5J37MeVWpydB.DXrctbBexGpC. dXbB1.E.cBXGYW2A0rjB8W12Fm6HORco6IBvCqnl6IqgauAeopa.ASCVRxGA3_ifEyM9mQPryA2Z z4Wp8bA.J2pqr_d02fPiwUOFqIiLlwhMFHPlAzQRyGAV_RO3ovKPM4Qx1O1LG1Lv9Y3VcJSNUktR fFN..Kbv2WzVRVwelfET3DJwSuSX1cB6d1l3RzXGUALVVQ6soq9dhC25LeevizOPYQAgKU9pwjpc PvuMe3IMgGrvqgrMXDhWo83j03w7wJu9bgrhLBYCkIeMHrUFins1..qMDjLQ7WBvnROVVCrsp1j7 hVwOnKH1Xd0CF7FGQW.ROr2pQT3KAO_h8zPpSGn29S_5pjnjCTbunmEnQh7Wmv8FnnAUMzlzzUyN CRB.yA4AlUOdfsNw1SMj321agkAFXMl5tz6QDyNPo95.D3FBSlQueulqfnFrKCRDkeJ_2wHrXILz UBl20X5BrG.ad1YCua6mJsXjnqCbXnybhJBn91.yNfmJYmlPUxSUhlTZLaSUdAVM99MQiV6T_o.Z 9OIHCOisCiz4MKqtNC.4HqMCwEPCPEN0Nkf39GDSBrPeh.c1l3sUwYgn4j4HwLmLp7ZN.1FW4puH gItwS200ePjS9r6HWdJxfhSVaOK5MfcB4HcCdpRdSegOb2d2rWgV41OPVnmmOuDP5Bfw2fh.QZQl _yrpPB.uKE8MR7KUYh3CjTeNIeX.7JKKl2TAtBrzohT72fvLAtWdtW1APZSrorB6oHV9aqnqEWns l5x.ANiP8bIkikU.j7EwsGZ.7qR2UgTi2w_rt8_IsFGDqchbAY737Awqj.TEdVunmqDh0NZ7flQw VAXDYqnwYTHPAv.M.0mdZDKGz.wysBOIGuCr1.HD4YilDS8bEP5WtgYnyR7p9UE147P5raNrXVj4 1K69SeaGwd2QFq.Z2BWyWAyJ_4v0mjVQHFnMP2I6CElNhDMGqF_R8Z8o6IXVvINqW90yzrer9u3t nuDr_rHhNvDMAHdhzlc4I2j3FpkpnZz2YdBsorqbDkx4mWwdmH1FYJpQtLBnpCgoWydFPTxExUTC oQUY9AxWgs3wjcovWIoU7nmTqzaS6URk2MfVoUX.5kmhcoKSWEDNjl9JC4DKD30h5GVxn4IxO2zo SFgnIje1INW83JYfCpqggv9lKay1dzbAM8clKJrrMItmEQD5cfoxbXdPHJtVqh5mOnksiU.pIXrW rmANCEmEAEkRdmThTc4C5Yxjm8wPUlYiyubTO97SxVOvlgK2aPXCBOuiDW0rm03qoNttRfMgmBDJ QXtzK0UscXhqDVW1z_FvbIVkD6U1OMzjAdHYLKL5WiKbwbApJaDh1zFzD3i9SzSOwokg.syerNKp uoCrpi01SB6S8W88YqtlGIh8IEbb_56_Tdz7pU_mFpd1ouxt6LOYe7ZeL2W.VrXPqESVGNzpc2ut ZUXU_8L5xcjLSiorvrUMq0Da1B22tY2bv_L0LmO.T2E6towHok6qzSdvy2B5zfMrYYoJZo5aoUKo r8sz3gY5lcksVM3QPwfal.Y47o.B62zx4eqQqmNstloHqjq4lDUhkEkD_bZbTsjYT4v3VN5oyJMk zENtHuD0sU62b.BEntu_T2aHzhBLlbipBn4dLR6y7MRAbZ9R.Vi5sNwUsF6NPkseSWD._WN_OBwO PTOzo3ADjg_j6kqkBVDU3cloVtSWPqWJFXbijLMW.bkeorevp6uVzB1j9PU1jCf_FFL5Gkl4Qz94 18eUuO8My87lx_YpAWfPAKvV2lIMYmA-- X-Sonic-MF: X-Sonic-ID: f973a497-d7a0-461c-8257-f90b4180dbcd Received: from sonic.gate.mail.ne1.yahoo.com by sonic313.consmr.mail.ir2.yahoo.com with HTTP; Sun, 1 Oct 2023 13:18:00 +0000 Received: by hermes--production-ir2-55db9d9d5-gk4f2 (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID f1c2828dd5bee1de58f8566f5b57afb9; Sun, 01 Oct 2023 13:17:59 +0000 (UTC) From: Jakob Hauser To: Sebastian Reichel Cc: Lee Jones , Stephen Rothwell , Yang Yingliang , Christophe Jaillet , Stephan Gerhold , Raymond Hackley , Henrik Grimler , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Jakob Hauser Subject: [PATCH v2 3/3] power: supply: rt5033_charger: Replace "&pdev->dev" by "charger->dev" in probe Date: Sun, 1 Oct 2023 15:17:44 +0200 Message-Id: <39b4f00e010446e453905c8dc3ca1e47e9f2c5f8.1696165240.git.jahau@rocketmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org At the beginning of the probe function, "charger->dev" is set equal to "&pdev->dev". Therefore it's more clear to subsequently use "charger->dev" instead of "&pdev->dev". Signed-off-by: Jakob Hauser --- drivers/power/supply/rt5033_charger.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/power/supply/rt5033_charger.c b/drivers/power/supply/rt5033_charger.c index b34ef0ea6f8a..d19c7e80a92a 100644 --- a/drivers/power/supply/rt5033_charger.c +++ b/drivers/power/supply/rt5033_charger.c @@ -678,11 +678,11 @@ static int rt5033_charger_probe(struct platform_device *pdev) psy_cfg.of_node = pdev->dev.of_node; psy_cfg.drv_data = charger; - charger->psy = devm_power_supply_register(&pdev->dev, + charger->psy = devm_power_supply_register(charger->dev, &rt5033_charger_desc, &psy_cfg); if (IS_ERR(charger->psy)) - return dev_err_probe(&pdev->dev, PTR_ERR(charger->psy), + return dev_err_probe(charger->dev, PTR_ERR(charger->psy), "Failed to register power supply\n"); ret = rt5033_charger_dt_init(charger); @@ -701,22 +701,22 @@ static int rt5033_charger_probe(struct platform_device *pdev) np_edev = of_get_parent(np_conn); charger->edev = extcon_find_edev_by_node(np_edev); if (IS_ERR(charger->edev)) { - dev_warn(&pdev->dev, "no extcon device found in device-tree\n"); + dev_warn(charger->dev, "no extcon device found in device-tree\n"); goto out; } - ret = devm_work_autocancel(&pdev->dev, &charger->extcon_work, + ret = devm_work_autocancel(charger->dev, &charger->extcon_work, rt5033_charger_extcon_work); if (ret) { - dev_err(&pdev->dev, "failed to initialize extcon work\n"); + dev_err(charger->dev, "failed to initialize extcon work\n"); return ret; } charger->extcon_nb.notifier_call = rt5033_charger_extcon_notifier; - ret = devm_extcon_register_notifier_all(&pdev->dev, charger->edev, + ret = devm_extcon_register_notifier_all(charger->dev, charger->edev, &charger->extcon_nb); if (ret) { - dev_err(&pdev->dev, "failed to register extcon notifier\n"); + dev_err(charger->dev, "failed to register extcon notifier\n"); return ret; } out: