From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-yx1-f44.google.com (mail-yx1-f44.google.com [74.125.224.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 913B72F363C for ; Wed, 18 Feb 2026 05:35:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.44 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771392906; cv=none; b=hCcXjCOI49ZWyrskwhMRwhAsarfWjBrmHCR/0KUEaRUxGZ3joIcnVzZTamyMDZhqrhCiBwLP5F6W5sfotHxTh6g9BEwan6Qm/FGxkW+ZncFoYNrOGAK0M41OjNQ9Obq0CpcEBc2yEY+hK5sguO/BOonhzM+qelsUeYzTVVwNTbs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771392906; c=relaxed/simple; bh=ykMbeLkM3JFjjAT+X4RiA986+vadbys1IX+AMjB2BRI=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=Idu9QZIgUD+4v4fcE0c/GDq//ivk9mqJmnKlixU6l4kjb2sw7LeE0zca+gIAeXaGkLnstyLMoam87v7QPWvfbB+ZrFLnzALnOzVrj6010OsTCgKUTByShdN2WV1+qPVm/7qHtCH4ZXNS+1PIhqQ2cV5Hi5zG0DM9WC7crif1Zac= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wpPDybR2; arc=none smtp.client-ip=74.125.224.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wpPDybR2" Received: by mail-yx1-f44.google.com with SMTP id 956f58d0204a3-649e97f1e99so4535460d50.2 for ; Tue, 17 Feb 2026 21:35:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1771392904; x=1771997704; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:content-language:from :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=j2gS7QPW0Vau0TRfECG0tWh0O+TEzQcOd404Ys3R6dI=; b=wpPDybR2cORDQVafAWe7BXkFmwQuCta0yMTOIiGfpyTI1Kso5yESnbSJrYU7kkvfOK ZSnbQ4omaYiXQ5KNpbsusz2zSH9wgLZ40oleczu6olQ/x57OWB6sHlJNc9fE+HK4m3EQ 7j4jzv9zG/IzhGiujueJSKuhT2X55c1UAhsDHFc4Uo87YK1iyKDMBuPSWsf4EfX4rtjS oFqS5O1A2jUrNT6p0WWik/05BqRt4HyKwDnVh6NZwKwS6uHySim/rSwTk+TBhjr5JHWo +8lsX0bMPPvlou+a4HorwLemRqctNq5i5LeVHUdA1vG0c/zHHCFVzFCfcQB0LCcN+JU/ X/bA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771392904; x=1771997704; h=content-transfer-encoding:in-reply-to:content-language:from :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=j2gS7QPW0Vau0TRfECG0tWh0O+TEzQcOd404Ys3R6dI=; b=ULwkqjS0rY8/zIi0GeztkbgPDpENt3s1VyH9Ty4Fz4jR0F4A1hSs16cvUcx9lt2rka 3gnxFooTtmyCGXGCsqsbmdqtkWGLE9LM14mqIjA9/IHwbeBWPsiHPxIaGAOP2Ex6IfYM Ie3NX1/yhvYWRNVs0REjYjvkIpFkF1hN1TvsJmexbE91sHbU0sN99LoJ5RP+FlUDGdUh 2CYoCJX0T3uz8RoJh1stJMTnCO2av4GZBPOOBu8aIeHlxt6Lp40upA1YKoMFTTavkNBq mqoYdyG/pNdDMQnOSEs8+dCxS1pLv0RbKyTpM1tw+QhgjEJ+IOiF4o/v4kWal5RUllt6 hvyA== X-Gm-Message-State: AOJu0Yz6q1EO9p8FYdx2AvZWZZYHnTpJztJ0UjjdQSevLr/O91r67ERi /FKKzIlZ6ZO1GyD+OgKaOKtLCXd8VECKV/xdNscVUbDxDhpAZGpPiG7mJPBJvuGpJg== X-Gm-Gg: AZuq6aLz/aXIeQ8veTSSg2j9sqGJHEmGtG4utFvFkor8PQx7ONJqnvK6XyQqOGLAwS4 MIEoz/v+0mRpBjHVaeBt8Sg6vEAoGpUsoNApxFI4D1JFIkk2z1/4a9onXQPlAtoMaCx0jRbRw4T sPzszQYwvQZ2OgaNHEnW9KLpJGy/wfOgyg9HgtJsm++9fidZWOhJTsCjU0z5SnJKjfEt7Mi5fWK e38+6G0XRewVfGESzQF8KXSURV5dkSXw4LJtsFrPBTprhMOduYTU7jM+C88BlXJCzkOrIKLx8bv sD3HXqfOw5uUBFtSiZSg7rgzInEx/vzd49N2RrYuO2+3bcuVXfugtVhhvQFtsDRXj9pEQolsFUG UX2FZ0Q8xPVRBmbF/MMx5WAuW7Jm/7/3FTQnEgnDSny6wXn0gz5/59xl9JN5w2sIBjlLWIQIyJv yMUnHByCvJ2Z4RvUv7u3F3aRF2+ruyM4w/yWzw/g7a3aO9SHqeovmLoF3JE3GbzVAylTlvOnJVH Uf9 X-Received: by 2002:a05:690e:4005:b0:649:3b9:924e with SMTP id 956f58d0204a3-64c555942aamr701484d50.22.1771392903977; Tue, 17 Feb 2026 21:35:03 -0800 (PST) Received: from ?IPV6:2600:1700:4570:89a0:b4:5cb3:5345:8019? ([2600:1700:4570:89a0:b4:5cb3:5345:8019]) by smtp.gmail.com with ESMTPSA id 956f58d0204a3-64c22f8fa1fsm5666809d50.15.2026.02.17.21.35.01 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 17 Feb 2026 21:35:03 -0800 (PST) Message-ID: <7103a273-f066-4c1b-ad14-7e8fd7ba002a@google.com> Date: Tue, 17 Feb 2026 21:35:01 -0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v6 5/6] power: supply: max77759: add charger driver To: =?UTF-8?Q?Andr=C3=A9_Draszik?= , Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Greg Kroah-Hartman , Badhri Jagan Sridharan , Heikki Krogerus , Peter Griffin , Tudor Ambarus , Alim Akhtar , Mark Brown , Matti Vaittinen , Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, RD Babiera , Kyle Tso References: <20260214-max77759-charger-v6-0-28c09bda74b4@google.com> <20260214-max77759-charger-v6-5-28c09bda74b4@google.com> <0b6e7cb7223e553d9b53df464959e97fd3d1ce43.camel@linaro.org> From: Amit Sunil Dhamne Content-Language: en-US In-Reply-To: <0b6e7cb7223e553d9b53df464959e97fd3d1ce43.camel@linaro.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hi André, On 2/17/26 5:14 AM, André Draszik wrote: > Hi Amit, > > All below comments are only minor, feel free to ignore them. > > On Sat, 2026-02-14 at 03:12 +0000, Amit Sunil Dhamne via B4 Relay wrote: >> From: Amit Sunil Dhamne >> >> Add support for MAX77759 battery charger driver. This is a 4A 1-Cell >> Li+/LiPoly dual input switch mode charger. While the device can support >> USB & wireless charger inputs, this implementation only supports USB >> input. This implementation supports both buck and boost modes. >> >> Signed-off-by: Amit Sunil Dhamne >> --- >>  MAINTAINERS                             |   6 + >>  drivers/power/supply/Kconfig            |  11 + >>  drivers/power/supply/Makefile           |   1 + >>  drivers/power/supply/max77759_charger.c | 768 ++++++++++++++++++++++++++++++++ >>  4 files changed, 786 insertions(+) > [...] > >> diff --git a/drivers/power/supply/max77759_charger.c b/drivers/power/supply/max77759_charger.c >> new file mode 100644 >> index 000000000000..d4e02764ba04 >> --- /dev/null >> +++ b/drivers/power/supply/max77759_charger.c >> @@ -0,0 +1,768 @@ > [...] > >> + >> +/* USB input current limits (in uA) */ >> +static const struct linear_range chgin_ilim_ranges[] = { >> + LINEAR_RANGE(100000, 0x3, 0x7F, 25000), >> +}; > Shouldn't this one also have a entry for 0x00...0x02: > LINEAR_RANGE(100000, 0x0, 0x2, 0), > > Then you can also drop the umax() call in get_input_current_limit(). > > Ah, I see now there is no linear_range_get_selector_within_array(), > meaning the code is fine as-is, unless you want to add that as > well :-) > > > [...] I would go with the code being as is for now.  :-) > >> +static int max77759_charger_init(struct max77759_charger *chg) >> +{ >> + struct power_supply_battery_info *info; >> + u32 regval, fast_chg_curr, fv; >> + int ret; >> + >> + ret = regmap_read(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_00, ®val); >> + if (ret) >> + return ret; >> + >> + chg->mode = FIELD_GET(MAX77759_CHGR_REG_CHG_CNFG_00_MODE, regval); >> + ret = charger_set_mode(chg, MAX77759_CHGR_MODE_OFF); >> + if (ret) >> + return ret; >> + >> + if (power_supply_get_battery_info(chg->psy, &info)) { >> + fv = CHG_FV_DEFAULT_MV; >> + fast_chg_curr = CHG_CC_DEFAULT_UA; >> + } else { >> + fv = info->constant_charge_voltage_max_uv / 1000; >> + fast_chg_curr = info->constant_charge_current_max_ua; >> + } >> + >> + ret = set_fast_charge_current_limit(chg, fast_chg_curr); >> + if (ret) >> + return ret; >> + >> + ret = set_float_voltage_limit(chg, fv); >> + if (ret) >> + return ret; >> + >> + ret = unlock_prot_regs(chg, true); >> + if (ret) >> + return ret; >> + >> + /* Disable wireless charging input */ >> + ret = regmap_update_bits(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_12, >> + MAX77759_CHGR_REG_CHG_CNFG_12_WCINSEL, 0); >> + if (ret) >> + return ret; >> + >> + ret = regmap_update_bits(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_18, >> + MAX77759_CHGR_REG_CHG_CNFG_18_WDTEN, 0); >> + if (ret) >> + return ret; >> + >> + return unlock_prot_regs(chg, false); > Should early error returns here try to lock the protection again? Something > like: > > + ret = unlock_prot_regs(chg, true); > + if (ret) > + return ret; > + > + /* Disable wireless charging input */ > + ret = regmap_update_bits(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_12, > + MAX77759_CHGR_REG_CHG_CNFG_12_WCINSEL, 0); > + if (ret) > + goto relock; > + > + ret = regmap_update_bits(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_18, > + MAX77759_CHGR_REG_CHG_CNFG_18_WDTEN, 0); > + if (ret) > + goto relock; > + > + return unlock_prot_regs(chg, false); > + > +relock: > + (void) unlock_prot_regs(chg, false); > + return ret; > > I guess if one of the regmap_update_bits() failed, then locking the > registers might not work either, so I have no strong opinion on > adding that. Nice catch! I need to send a next revision to keep the Linux Test Robot happy. I will address this issue in that. > > With or without updates: > > Reviewed-by: André Draszik > LGTM! Thanks! Regards, Amit > Cheers, > Andre'