From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (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 5C1F7361DC3 for ; Tue, 17 Feb 2026 13:13:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771334040; cv=none; b=izm9oguoy3utbPnW3k+ELtAtrt2wxKpN5HusrnlfMjEjZm+AJeNHA+98WeJ1rcn4KALkX1kdAaQYPRwZHP2gSy7bYp9Xfo+DFN+9ykFTcWamz+LBkW2DYCe3NtIQvChDsBTTrXrDNIlOLjUpuDuEyB1kF5YA1e1abfACt+b6o+A= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771334040; c=relaxed/simple; bh=ghiYn5zctv6YevvmbOXMIchikB5+PZqKiOLbd6hIvi0=; h=Message-ID:Subject:From:To:Cc:Date:In-Reply-To:References: Content-Type:MIME-Version; b=aRFRwYjtBAPTVjD3X3XrBIgmR93CReUuo6iTS9K+ph+dqqcv0YwzjIQLDcwHMXe4LLIOjInjmB7hxP2dz1lUFgDct4REaUbN4mT2PPRey0QKzO9TdEjMO/kDGDBTmt4tmDH70uUXIpLH5wFdLaAkNQ8prIyYsqe2oo1A/tV9Oeg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=OAPNoYdu; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="OAPNoYdu" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-65a36583ef9so7091229a12.0 for ; Tue, 17 Feb 2026 05:13:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1771334035; x=1771938835; darn=vger.kernel.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:from:to:cc:subject :date:message-id:reply-to; bh=x1C0IPnydug6rw3V3fM8YPHePn3LBKfIJJtqgR74b5I=; b=OAPNoYduWYQSL32nmW69nrWuR03uaN696N+g+GsecDLfcQGnKikRKlnwjFXm7jZIvC VoUbx7IkICPpby2qPD748XaG4VJS0thzOiDW5SBPdgEdPEKLH1Q+W+yf75nnkHf68qN7 JEQloHR++epOZTLfmKq90FhtXesttZPXg8/S2nFvytEY1oyGxqS1EsW0P3n89H77zDaA M+HtcBqQX1L0pNaoiIeMDg00dLoF0r3BhFlL6hmkeqN4bWToklocg6n6hiBKVShGqr+P Vsvc0o2lFLkLYbnhoulvgEESi2/EFr5uHYV66j/ChgtXBh+MXCpJDl0XtChzUdEssfOT xD4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771334035; x=1771938835; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:cc:to:from:subject:message-id:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=x1C0IPnydug6rw3V3fM8YPHePn3LBKfIJJtqgR74b5I=; b=b2Ydq1006VU5Gje/FUGsQJk4WebIbp0sVKXfC5l6fFB1LYCpOzf6V0m9On6si2we5r e5Oef0wFQCpeHYWJVBpEJsYbeJCpGjWU7erghjqdwDsW6M3usC0xjjdk1jEZ2DVHTTbM g9X/rQt8pgcaZQNdraaK5nsmF0MQq24M0TjYks6ZRSaWWQvqinGf4nrEu1NLumKZ47HK 6UT95JJHAGOOORcyljPMcZRlBtDupghPQ6tJUKiB5q7hP2dYdAAfiMX+6LozOhI19yUc hgsukCJvRFGnZv0W7+sHRij+hYtmqxpBQ4k3fzILANOjJBc6ofDCUFc1QtDCzOFMFpOZ ryXA== X-Gm-Message-State: AOJu0YyDwCdQLK4mlljzrBvmZi0IpQ4qLokDfz4PNWe3Zhlahw+cVPUQ JuRR71xYMRDmMIqDoH25WftIlXbzQmVXa0Z2UnQFr7OQ+eXXH0KpLFJBIav+H6T4krw= X-Gm-Gg: AZuq6aLbfaaUs6Zl5PMuT+oWAbRngrZb0tzFi/tZAJMmkB2IJijCoc5x4CQNBO449ur U8XOnpFTunk6yi70QVa+fjoQ5jwz2H/9DtEt2uxLs8SRI89gBC2WBQY2ubUnqZT7FAL7xKThO1l KpE1GTMfF16ZQLtNjAvs1UuXCBO9YoG3Oo59/vYBGcwpxF2iVr2yOJpjFuRxIrT2jJnsewWwctc JQn4SFgvxOHexfS4KAFBA9bTpAdBEGefV34qpqRDsXB7kLG22OHMs3sQM870gMyjvKSJsJq/IPD 3ljdUl0l3/W7si01mN2ZpUvcmaG/yhbRCm5LVUFqUe5e2XMQFri+huPKogphZtjaT379snvq7W0 3yfvDQi0xihAUZwW36XOxZAL4A8lHdyzWgT1aDL0IA57uOi00mcuuzXKh234sUZxfW1kbUC9NWG BdyeC3DxiCKwOkPvz47ivAPuZovDw= X-Received: by 2002:aa7:d719:0:b0:641:88ff:10ad with SMTP id 4fb4d7f45d1cf-65bc4298c44mr4741148a12.14.1771334035506; Tue, 17 Feb 2026 05:13:55 -0800 (PST) Received: from draszik.lan ([212.129.84.5]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-65bad4fa7c7sm2473768a12.31.2026.02.17.05.13.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Feb 2026 05:13:55 -0800 (PST) Message-ID: <0b6e7cb7223e553d9b53df464959e97fd3d1ce43.camel@linaro.org> Subject: Re: [PATCH v6 5/6] power: supply: max77759: add charger driver From: =?ISO-8859-1?Q?Andr=E9?= Draszik To: amitsd@google.com, 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 Date: Tue, 17 Feb 2026 13:14:14 +0000 In-Reply-To: <20260214-max77759-charger-v6-5-28c09bda74b4@google.com> References: <20260214-max77759-charger-v6-0-28c09bda74b4@google.com> <20260214-max77759-charger-v6-5-28c09bda74b4@google.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable User-Agent: Evolution 3.56.2-2+build4 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 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 >=20 > 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. >=20 > Signed-off-by: Amit Sunil Dhamne > --- > =C2=A0MAINTAINERS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 6 + > =C2=A0drivers/power/supply/Kconfig=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0 11 + > =C2=A0drivers/power/supply/Makefile=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 |=C2=A0=C2=A0 1 + > =C2=A0drivers/power/supply/max77759_charger.c | 768 +++++++++++++++++++++= +++++++++++ > =C2=A04 files changed, 786 insertions(+) [...] > diff --git a/drivers/power/supply/max77759_charger.c b/drivers/power/supp= ly/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[] =3D { > + 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 :-) [...] > +static int max77759_charger_init(struct max77759_charger *chg) > +{ > + struct power_supply_battery_info *info; > + u32 regval, fast_chg_curr, fv; > + int ret; > + > + ret =3D regmap_read(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_00, ®val= ); > + if (ret) > + return ret; > + > + chg->mode =3D FIELD_GET(MAX77759_CHGR_REG_CHG_CNFG_00_MODE, regval); > + ret =3D charger_set_mode(chg, MAX77759_CHGR_MODE_OFF); > + if (ret) > + return ret; > + > + if (power_supply_get_battery_info(chg->psy, &info)) { > + fv =3D CHG_FV_DEFAULT_MV; > + fast_chg_curr =3D CHG_CC_DEFAULT_UA; > + } else { > + fv =3D info->constant_charge_voltage_max_uv / 1000; > + fast_chg_curr =3D info->constant_charge_current_max_ua; > + } > + > + ret =3D set_fast_charge_current_limit(chg, fast_chg_curr); > + if (ret) > + return ret; > + > + ret =3D set_float_voltage_limit(chg, fv); > + if (ret) > + return ret; > + > + ret =3D unlock_prot_regs(chg, true); > + if (ret) > + return ret; > + > + /* Disable wireless charging input */ > + ret =3D regmap_update_bits(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_12, > + MAX77759_CHGR_REG_CHG_CNFG_12_WCINSEL, 0); > + if (ret) > + return ret; > + > + ret =3D 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 =3D unlock_prot_regs(chg, true); + if (ret) + return ret; + + /* Disable wireless charging input */ + ret =3D regmap_update_bits(chg->regmap, MAX77759_CHGR_REG_CHG_CNFG_12, + MAX77759_CHGR_REG_CHG_CNFG_12_WCINSEL, 0); + if (ret) + goto relock; + + ret =3D 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. With or without updates: Reviewed-by: Andr=C3=A9 Draszik Cheers, Andre'