From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5F23EC3DA49 for ; Thu, 25 Jul 2024 15:38:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID: Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=s3Vvuy1TQPxzeg+xYRHF/KLNT6Tu2YSZ6Tz5qm6sXsQ=; b=vrcUj+RuGdp+BwO1uqkO3x4Amy QJ5RGJdZVMmFDzpHkkY1sE07icRHsW1RqsqP1w5V7wMsTpAoyLJc9RyXH83AX4iNwjREKpA0zdXqQ QCjDDpI2jwX/y2X6JoXLzj9GI3zh0NRHC9FZdH4vATb9e719e+8bxdFLLZxhs5bYJhEbNKljrmP0u j7Lhb7SCzuW1aUs9I9GV4LkPdpcs/kgcDaeGnWSIhNL46Xk5ydMSVMvYrJEHkYXX/uxhXcmpmrJ/q 2aW1kNbzHl4AoIyIK4JsS4atFbkFkDvuE5Hncwl4OT+pREhvdAlzPf5yuJrOLlNv1OAbxtp7Rhuju 8PxQIMow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sX0Xf-00000001RRy-0M9r; Thu, 25 Jul 2024 15:38:07 +0000 Received: from sin.source.kernel.org ([145.40.73.55]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sX0XE-00000001RI2-3YY4 for linux-arm-kernel@lists.infradead.org; Thu, 25 Jul 2024 15:37:42 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 4698ECE13CB; Thu, 25 Jul 2024 15:37:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F252AC116B1; Thu, 25 Jul 2024 15:37:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1721921857; bh=qRdsbQkoz6ky3wcoTwNugCdQYEJhYaP1T6fc6WgroS8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=qQbT8Ho/8UVivRFD8K2lIdM5ZwbSrA4k/BkJ6NeSH7GU3Fj03qJN3MOY05UZTwn9V EgjeeuyvDB+IKqBeYI9Z1/N7YYzUWVSrd4ml/CBw4zQX7afuuyCIt6IZLZnTavbwXN /hvNorx/4gVEV4akUtIHhtpmlm02nBwrNbPhmu5maohJjq5bFuAtVS/6BZ83Q/jz+n fg5IKBhTkMjzkz3mVZkqaBfsvUcHJhF7tgHo+Myv17C5ONGTzEfCKaGfU2uY/9YI3N BGlUXL4fwIUEIIJUj9/zAcnfzgRnP5ieMBog6dMlMoVftgmiZjKrqT/30wXcaoOLT3 my8moQKodEPSA== Date: Thu, 25 Jul 2024 16:37:30 +0100 From: Lee Jones To: Artur Weber Cc: Krzysztof Kozlowski , Chanwoo Choi , Sebastian Reichel , Rob Herring , Conor Dooley , Krzysztof Kozlowski , Alim Akhtar , linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Henrik Grimler , Wolfgang Wiedmeyer , Denis 'GNUtoo' Carikli Subject: Re: [PATCH v2 5/9] power: supply: max77693: Set charge current limits during init Message-ID: <20240725153730.GG501857@google.com> References: <20240715-max77693-charger-extcon-v2-0-0838ffbb18c3@gmail.com> <20240715-max77693-charger-extcon-v2-5-0838ffbb18c3@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240715-max77693-charger-extcon-v2-5-0838ffbb18c3@gmail.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240725_083741_281901_D816A366 X-CRM114-Status: GOOD ( 29.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Mon, 15 Jul 2024, Artur Weber wrote: > There are two charger current limit registers: > > - Fast charge current limit (which controls current going from the > charger to the battery); > - CHGIN input current limit (which controls current going into the > charger through the cable). > > Add a function for setting both of the values, and set them to a > safe default value of 500mA at initialization. > > The default value for the fast charge current limit can be modified > by setting the constant-charge-current-max-ua DT property of the > battery node specified in the monitored-battery charger DT property. > > Signed-off-by: Artur Weber > --- > Changes in v2: > - Squashed mfd include register additions into this commit > - Changed from custom fast charge current property to monitored-battery > (devm_power_supply_register call has been moved up as it is needed by > the DT init function now) > - Changed to adapt to both current limit values being managed by the > CHARGER regulator > --- > drivers/power/supply/max77693_charger.c | 43 ++++++++++++++++++++++++--------- > include/linux/mfd/max77693-private.h | 6 +++++ Acked-by: Lee Jones > 2 files changed, 38 insertions(+), 11 deletions(-) > > diff --git a/drivers/power/supply/max77693_charger.c b/drivers/power/supply/max77693_charger.c > index 0d53f61d58ba..0ddaa03669a2 100644 > --- a/drivers/power/supply/max77693_charger.c > +++ b/drivers/power/supply/max77693_charger.c > @@ -28,6 +28,7 @@ struct max77693_charger { > u32 min_system_volt; > u32 thermal_regulation_temp; > u32 batttery_overcurrent; > + u32 fast_charge_current; > u32 charge_input_threshold_volt; > }; > > @@ -570,6 +571,14 @@ static int max77693_set_batttery_overcurrent(struct max77693_charger *chg, > CHG_CNFG_12_B2SOVRC_MASK, data); > } > > +static int max77693_set_current_limit(struct max77693_charger *chg, > + unsigned int uamp) > +{ > + dev_dbg(chg->dev, "Current limit: %u\n", uamp); > + > + return regulator_set_current_limit(chg->regu, (int)uamp, (int)uamp); > +} > + > static int max77693_set_charge_input_threshold_volt(struct max77693_charger *chg, > unsigned int uvolt) > { > @@ -647,6 +656,10 @@ static int max77693_reg_init(struct max77693_charger *chg) > if (ret) > return ret; > > + ret = max77693_set_current_limit(chg, DEFAULT_FAST_CHARGE_CURRENT); > + if (ret) > + return ret; > + > return max77693_set_charge_input_threshold_volt(chg, > chg->charge_input_threshold_volt); > } > @@ -654,6 +667,7 @@ static int max77693_reg_init(struct max77693_charger *chg) > #ifdef CONFIG_OF > static int max77693_dt_init(struct device *dev, struct max77693_charger *chg) > { > + struct power_supply_battery_info *battery_info; > struct device_node *np = dev->of_node; > > if (!np) { > @@ -682,11 +696,20 @@ static int max77693_dt_init(struct device *dev, struct max77693_charger *chg) > chg->charge_input_threshold_volt = > DEFAULT_CHARGER_INPUT_THRESHOLD_VOLT; > > + if (power_supply_get_battery_info(chg->charger, &battery_info) || > + !battery_info->constant_charge_current_max_ua) > + chg->fast_charge_current = DEFAULT_FAST_CHARGE_CURRENT; > + else > + chg->fast_charge_current = \ > + battery_info->constant_charge_current_max_ua; > + > return 0; > } > #else /* CONFIG_OF */ > static int max77693_dt_init(struct device *dev, struct max77693_charger *chg) > { > + chg->fast_charge_current = DEFAULT_FAST_CHARGE_CURRENT; > + > return 0; > } > #endif /* CONFIG_OF */ > @@ -712,6 +735,15 @@ static int max77693_charger_probe(struct platform_device *pdev) > return dev_err_probe(&pdev->dev, PTR_ERR(chg->regu), > "failed to get charger regulator\n"); > > + psy_cfg.drv_data = chg; > + > + chg->charger = devm_power_supply_register(&pdev->dev, > + &max77693_charger_desc, > + &psy_cfg); > + if (IS_ERR(chg->charger)) > + return dev_err_probe(&pdev->dev, PTR_ERR(chg->charger), > + "failed: power supply register\n"); > + > ret = max77693_dt_init(&pdev->dev, chg); > if (ret) > return ret; > @@ -720,8 +752,6 @@ static int max77693_charger_probe(struct platform_device *pdev) > if (ret) > return ret; > > - psy_cfg.drv_data = chg; > - > ret = device_create_file(&pdev->dev, &dev_attr_fast_charge_timer); > if (ret) { > dev_err(&pdev->dev, "failed: create fast charge timer sysfs entry\n"); > @@ -741,15 +771,6 @@ static int max77693_charger_probe(struct platform_device *pdev) > goto err; > } > > - chg->charger = devm_power_supply_register(&pdev->dev, > - &max77693_charger_desc, > - &psy_cfg); > - if (IS_ERR(chg->charger)) { > - dev_err(&pdev->dev, "failed: power supply register\n"); > - ret = PTR_ERR(chg->charger); > - goto err; > - } > - > return 0; > > err: > diff --git a/include/linux/mfd/max77693-private.h b/include/linux/mfd/max77693-private.h > index 54444ff2a5de..4570646e2f33 100644 > --- a/include/linux/mfd/max77693-private.h > +++ b/include/linux/mfd/max77693-private.h > @@ -145,6 +145,8 @@ enum max77693_pmic_reg { > #define DEFAULT_THERMAL_REGULATION_TEMP 100 > /* microamps */ > #define DEFAULT_BATTERY_OVERCURRENT 3500000 > +/* microamps */ > +#define DEFAULT_FAST_CHARGE_CURRENT 500000 > /* microvolts */ > #define DEFAULT_CHARGER_INPUT_THRESHOLD_VOLT 4300000 > > @@ -217,6 +219,10 @@ enum max77693_charger_battery_state { > #define CHG_CNFG_01_CHGRSTRT_MASK (0x3 << CHG_CNFG_01_CHGRSTRT_SHIFT) > #define CHG_CNFG_01_PQEN_MAKS BIT(CHG_CNFG_01_PQEN_SHIFT) > > +/* MAX77693_CHG_REG_CHG_CNFG_02 register */ > +#define CHG_CNFG_02_CC_SHIFT 0 > +#define CHG_CNFG_02_CC_MASK 0x3F > + > /* MAX77693_CHG_REG_CHG_CNFG_03 register */ > #define CHG_CNFG_03_TOITH_SHIFT 0 > #define CHG_CNFG_03_TOTIME_SHIFT 3 > > -- > 2.45.2 > -- Lee Jones [李琼斯]