From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 17EA3362985 for ; Thu, 11 Sep 2025 17:57:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613441; cv=none; b=X4w62y1Q2LXFKaepHt1SCJ6hlJpYCE/7Bo7XSjiaOko3Y/3nEP/dn+SIlzul9c2PCE9eDHIiYd1Jqcx+3oX58bhIh3peNiElSZwEshNISGb2eFut7RZJbY0Z0hL7EKssb+DM0mhHWVQpyvgsdQK36qX0wqRWxw6YSCWpUfQDMU4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613441; c=relaxed/simple; bh=0oqeEqIjS3+OtMIvtyosNybEOk1gpo3FJfz9EF2M1t0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PATdUhY38FkTfHrDPDDcyVLgUD/0Vez9K22CYRPhq3jn+hLGJXxsZz9uP+ECFqc+anTn/K4ZE/lXB6c9cBwhI8PgP0Th+Z3jYND+p8Uv1nEGR0Pj5UA/zOgLL14b093LMIwidG6vBrTXIolUC8B51g/qoBPHhg61xuFZC6eSbFA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hEA3AN+U; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hEA3AN+U" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b043a33b060so154052966b.1 for ; Thu, 11 Sep 2025 10:57:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613437; x=1758218237; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+OT8QGzf3PZ88uIRwWvPBWTj8UBsZ2B/sy/goy6AP/4=; b=hEA3AN+UnlybOTZFF8JjGt8aw+7c308ouXz2lIAfr+A4BHIj8y0lXSes+MACdDNtFO /mwCGEkC/NbUpZx2QC82iIE4tiMTIyGydsSRW5JbNqq2g1TrAvb/jbw5QwN+nFbA50C0 9YJQc37T9/Yz8CGVYP0e4cBsxIw9siYxOid0x1qmiCTdETpzT/it0dF+EcrXxnQo1jp9 9hb1J+V/7q9VaYu5sSTxY3/dBlF80H/Z+wdKJ3c42xqMPYlZRJoNfDIJ9l0Mk9rOpPdL 3PRAMLyuHGzg/Q4ecA9D7FplDIaGBQuBetOf/pekHOhSTFUROpNSSR71rBdNyYDKdRoF 2IrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613437; x=1758218237; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+OT8QGzf3PZ88uIRwWvPBWTj8UBsZ2B/sy/goy6AP/4=; b=kPZTjBfs9DpUOiLMoRBOLRpkh4YyHdQb8wr7gJJDUXRX0Xea0iYePNNg0B8fGlVFk6 Tr1VcEH9K6PSe1n2S37DzpbROWp9Bcr0BLPzAvMMwXzVx8I93Yo0tUVYYI4exCyMEu5i I8JvHZslC1Gd76MP1cbmVkkyOJkX8C8Nf+4a0BcSHNLymCSJQPYqNAIVVMWGMLG3vqfx VI1jdE2yVSOKw9tnKp3MzOaLGU/c6Sb32mKQZaXLX0XYgWu9TXl+w1ouWbzc2niMeMJP knCHllt4zz2Qzaxl8MH3zE5C8D8vI3WYSr/7S4JWBxDMDNti306TzrOnz7r09fPkARCF /Siw== X-Forwarded-Encrypted: i=1; AJvYcCU4eVeBrHx7Xyhch6Q91oD0/DFX4ac6NMuc+bM2QF51V0xNHcF+jif4UFE2Kzp3g3o6GCoajMLiX6bODpY=@vger.kernel.org X-Gm-Message-State: AOJu0YwoampKZYvUTuWKGiPSilmRWfoBC7ay5lknkwrWYTptQ5LIX1Vj HQD8LtEdazRZ8gfOgXe2lLSPTGrfIogAUbEHwzRESbJK5ReBLxGD7J9u X-Gm-Gg: ASbGncvuPOsMPbr7OTPYa39/pZlEB7LjLUHOlquEfDkavwXdXUpyMqwcq//9qr//uEv 2Qs4P7NJX39HQxCPFQlM8vDko9EDixc/beeUylaHJaTZyyrHKQpKEGeQU1k97rrbE9a0N9q20p5 FNRH2TbVwtqJvfeRGqmIye7fO59d4a9FuKfouZ5ihiNtUF7bwJnzK9ha6euBlRDlTGXQ1kQrvUn O3Elohea0+PlFZ+Qe5PZ5jXmH0ntu+khNd9fvrFhTkc5mF7QWhd2lyrfBoLnsaf5hvTo1789S/C OO7Q/XyPF7oQenXhHPa3I0xMn3ggoWbjEDUuNcpYoxS5IgYQp6tlgbq86oMR/gDYLBSBTC6i0At quYy402FSlyyXXgKlzqfAr0FQR+ckWb4= X-Google-Smtp-Source: AGHT+IHcB3VJfVSqFO+IQDoD/DkmwRlneij9GFUJhER0DABlY5Ut8tkco0VruhzAwkhyNhWMeVjtHg== X-Received: by 2002:a17:907:3c91:b0:b04:3fe2:23c4 with SMTP id a640c23a62f3a-b07c3570b05mr3439866b.19.1757613437050; Thu, 11 Sep 2025 10:57:17 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:16 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:09 +0300 Subject: [PATCH v3 1/9] power: supply: max77705_charger: move active discharge setting to mfd parent Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-1-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613433; l=1767; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=0oqeEqIjS3+OtMIvtyosNybEOk1gpo3FJfz9EF2M1t0=; b=B/Q66IUSa48NczLTFDY4T8H/Xx4wfHbYzK5h3esTvmf6+OxDBqRcT5X4oXe11ej8JGKWdC+Ug OPNSLLjUPJkD0n7R5G2zi8xP9TfI9R1NtqGRExPn3Veg4710ztLiJTN X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Active discharge setting is a part of MFD top level i2c device, hence cannot be controlled by charger. Writing to MAX77705_PMIC_REG_MAINCTRL1 register from charger driver is a mistake. Move active discharge setting to MFD parent driver. Fixes: a6a494c8e3ce ("power: supply: max77705: Add charger driver for Maxim= 77705") Signed-off-by: Dzmitry Sankouski Acked-by: Lee Jones --- drivers/mfd/max77705.c | 3 +++ drivers/power/supply/max77705_charger.c | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/mfd/max77705.c b/drivers/mfd/max77705.c index 6b263bacb8c2..ff07d0e0d5f8 100644 --- a/drivers/mfd/max77705.c +++ b/drivers/mfd/max77705.c @@ -108,6 +108,9 @@ static int max77705_i2c_probe(struct i2c_client *i2c) if (pmic_rev !=3D MAX77705_PASS3) return dev_err_probe(dev, -ENODEV, "Rev.0x%x is not tested\n", pmic_rev); =20 + /* Active Discharge Enable */ + regmap_update_bits(max77705->regmap, MAX77705_PMIC_REG_MAINCTRL1, 1, 1); + ret =3D devm_regmap_add_irq_chip(dev, max77705->regmap, i2c->irq, IRQF_ONESHOT | IRQF_SHARED, 0, diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 329b430d0e50..3b75c82b9b9e 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -487,9 +487,6 @@ static void max77705_charger_initialize(struct max77705= _charger_data *chg) regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_00, MAX77705_WDTEN_MASK, 0); =20 - /* Active Discharge Enable */ - regmap_update_bits(regmap, MAX77705_PMIC_REG_MAINCTRL1, 1, 1); - /* VBYPSET=3D5.0V */ regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_11, MAX77705_VBYPSET_MAS= K, 0); =20 --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (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 0343936209C for ; Thu, 11 Sep 2025 17:57:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613442; cv=none; b=n7xWsW6AlAbmPMg/eqBC3IraFndDrZIVD91Ve5nWmBJfAX3kDsbBjL/dCGO56qb9IXwWlaeM25glkOxZeKHax8gfbEKXZcKRcDKa0N4W5D/YXrvhZC4m6B/0bjstPZ/VNqGAKnvRZLcR8+0OvBFStRy4Jpza8fmsVl2Gj9Jt5fA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613442; c=relaxed/simple; bh=HOFral57BQL8UYkTuj9H3P5RIa5oSgklRaCCxDv4muA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TASBwuVb82ta7ZjUJQy2I/TppGkVNtWeNGBFYTg7gkDMIrNByGRX2c+hMSLQBuvxMrhCN/na8TC5yUCd6ITTBTad1XUhrZVOa5U7Qk6rBG6/GFKCsFkKDzo+RQm1brscoAASLgo5pUGGixZWm5Oh/iNicQbOR3262QrWKC+p6Lk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gVQKHh+K; arc=none smtp.client-ip=209.85.208.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gVQKHh+K" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-6228de280ccso2182735a12.3 for ; Thu, 11 Sep 2025 10:57:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613438; x=1758218238; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3ct1QxM5jLU79bjOOr6iNioQP9jRwP1CqDRkzzfxBLo=; b=gVQKHh+KSrwN480ef6w8jOVOGfp1mgh1r6QSQ/+aa80aahwMrMHlSqCGyf07w3hmzU lui1/C5ncdmFRUHscBuIcA9OcPQ/ki3J0rjg8Kjx7o9xMvMUGU93LnamOxjxKFDDpNc+ Xv/pViDhPc3fc40qTbhl+RdWVwd6PUJmSUVaEDgOvoQ3+ARI9IYlomVkrii/3p7GGRQL vQKnHDdZndARN2xt/972ZnR4Qsd08LBlP0hh4o9JVlbduMKyEJV/pdnXSZXpKvKR8ze6 b69584GGQJCr6r/soDvOVEOfX812rJp2fBFTlrIjHmFo6dd+iVmKmxu8UXrLnA7aD4pq 3oKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613438; x=1758218238; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3ct1QxM5jLU79bjOOr6iNioQP9jRwP1CqDRkzzfxBLo=; b=qymGYtMynAwuzR6+nWLld727el1NAerLML7tYJG3Un2ZO5BvgZS+QYsKRFLd7vuvY9 1vCwBad5GPz6OLxUxs789LyddotNdoKiytdZuRF1Ft1NgvS2YVINBCt+FdCgxe/22AZR UQ52XLo88q1EbKlevPdbQoEMoD1pBD0eBjKToc2/+KLReiQXifurr1UJNRTbFpxrPxSX WnoQzlAffRvzamANSBc+Ofev2/NuuFYY4mXKjQtW9o7ClNllasm6uW/jvdXSLqlkJf8O 7fbkadCwSZkFUw6C5NdOn77DmqLCr6gIYc6JwHkW5kcfzrZqhHj+zpolpmlmbPRJOedM OZ9w== X-Forwarded-Encrypted: i=1; AJvYcCWUgt2ShyH2ebMgmhcRPUjzkwulFIxymde3ueFmLAWtLh3saxiDPAXAhA+O0GPTfb++JAEM0MHVo/p2ncs=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+6PiA8r1zNeukr78zUkV7PcPJNVP9nVLiOvtDJNG4FbooFg1+ fELGeDVe3lmtJP8TdEL1uAaY73E7uSFQoXmEEB1FHjlFKbRefp68HNzH X-Gm-Gg: ASbGncvUClX7T+LmRlDd31TNXK3+rQuO+hKlPmkbsrirFtna+BbircO7aehUNqHY2vl 8OpXFOfIYHY2n9cXxAXVJUL68Qt0KWl9CBCz0c0UQ5rEZcOEX9FRKtl5wV6AUe/TrncZsmNzr+J 5NrgXqB639PZ6GsIp4/Px4Rg9S6icgiLm/PVwfLUXHpl/bBQ8tvLiflOCII4ukjrXr43gDMmlmu +PA+qOxroYv3QhuTZSlM3BMxJeiXPnBuQPerI+xvvqwiS/iMRIFuEnmwKuzKj9FJhFS7Iz5aPk4 TPkcTEIAyhAtBR7413DYUSF6XqVnWBNc64+b/x9KA7lmE/YZjPr/ShE0o16+jPTCYVmg8Lkhrjv PtFlNk01/KMy5x/aOn0+A X-Google-Smtp-Source: AGHT+IEHQVpkWBC6pm/Vi3j3JbNAq8z1jQ10jnzlee4RvupHLJfqOIx/TplcXsBXKw7RR/7qDFKyBA== X-Received: by 2002:a17:907:7ba1:b0:b04:1a1c:cb5b with SMTP id a640c23a62f3a-b07c353e303mr3739266b.7.1757613438097; Thu, 11 Sep 2025 10:57:18 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:17 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:10 +0300 Subject: [PATCH v3 2/9] power: supply: max77705_charger: refactoring: rename charger to chg Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-2-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613433; l=9595; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=HOFral57BQL8UYkTuj9H3P5RIa5oSgklRaCCxDv4muA=; b=wTTOLZLMF1IRP98JIMy+SUS3xQC+nO/abtaMtN1f50uhDdSSganPD/SQb9Ah8Pp9/+SFw8V51 3XCMSUWRTs4DddrgJ2k8c8Bp5/fKgCUZV1AB9D0egZv0alNcPF9xWhg X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Rename struct max77705_charger_data variable to chg for consistency. Signed-off-by: Dzmitry Sankouski --- drivers/power/supply/max77705_charger.c | 80 ++++++++++++++++-------------= ---- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 3b75c82b9b9e..7855f890e0a9 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -42,9 +42,9 @@ static enum power_supply_property max77705_charger_props[= ] =3D { =20 static int max77705_chgin_irq(void *irq_drv_data) { - struct max77705_charger_data *charger =3D irq_drv_data; + struct max77705_charger_data *chg =3D irq_drv_data; =20 - queue_work(charger->wqueue, &charger->chgin_work); + queue_work(chg->wqueue, &chg->chgin_work); =20 return 0; } @@ -109,19 +109,19 @@ static int max77705_get_online(struct regmap *regmap,= int *val) return 0; } =20 -static int max77705_check_battery(struct max77705_charger_data *charger, i= nt *val) +static int max77705_check_battery(struct max77705_charger_data *chg, int *= val) { unsigned int reg_data; unsigned int reg_data2; - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; =20 regmap_read(regmap, MAX77705_CHG_REG_INT_OK, ®_data); =20 - dev_dbg(charger->dev, "CHG_INT_OK(0x%x)\n", reg_data); + dev_dbg(chg->dev, "CHG_INT_OK(0x%x)\n", reg_data); =20 regmap_read(regmap, MAX77705_CHG_REG_DETAILS_00, ®_data2); =20 - dev_dbg(charger->dev, "CHG_DETAILS00(0x%x)\n", reg_data2); + dev_dbg(chg->dev, "CHG_DETAILS00(0x%x)\n", reg_data2); =20 if ((reg_data & MAX77705_BATP_OK) || !(reg_data2 & MAX77705_BATP_DTLS)) *val =3D true; @@ -131,9 +131,9 @@ static int max77705_check_battery(struct max77705_charg= er_data *charger, int *va return 0; } =20 -static int max77705_get_charge_type(struct max77705_charger_data *charger,= int *val) +static int max77705_get_charge_type(struct max77705_charger_data *chg, int= *val) { - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; unsigned int reg_data; =20 regmap_read(regmap, MAX77705_CHG_REG_CNFG_09, ®_data); @@ -159,9 +159,9 @@ static int max77705_get_charge_type(struct max77705_cha= rger_data *charger, int * return 0; } =20 -static int max77705_get_status(struct max77705_charger_data *charger, int = *val) +static int max77705_get_status(struct max77705_charger_data *chg, int *val) { - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; unsigned int reg_data; =20 regmap_read(regmap, MAX77705_CHG_REG_CNFG_09, ®_data); @@ -234,10 +234,10 @@ static int max77705_get_vbus_state(struct regmap *reg= map, int *value) return 0; } =20 -static int max77705_get_battery_health(struct max77705_charger_data *charg= er, +static int max77705_get_battery_health(struct max77705_charger_data *chg, int *value) { - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; unsigned int bat_dtls; =20 regmap_read(regmap, MAX77705_CHG_REG_DETAILS_01, &bat_dtls); @@ -245,16 +245,16 @@ static int max77705_get_battery_health(struct max7770= 5_charger_data *charger, =20 switch (bat_dtls) { case MAX77705_BATTERY_NOBAT: - dev_dbg(charger->dev, "%s: No battery and the charger is suspended\n", + dev_dbg(chg->dev, "%s: No battery and the chg is suspended\n", __func__); *value =3D POWER_SUPPLY_HEALTH_NO_BATTERY; break; case MAX77705_BATTERY_PREQUALIFICATION: - dev_dbg(charger->dev, "%s: battery is okay but its voltage is low(~VPQLB= )\n", + dev_dbg(chg->dev, "%s: battery is okay but its voltage is low(~VPQLB)\n", __func__); break; case MAX77705_BATTERY_DEAD: - dev_dbg(charger->dev, "%s: battery dead\n", __func__); + dev_dbg(chg->dev, "%s: battery dead\n", __func__); *value =3D POWER_SUPPLY_HEALTH_DEAD; break; case MAX77705_BATTERY_GOOD: @@ -262,11 +262,11 @@ static int max77705_get_battery_health(struct max7770= 5_charger_data *charger, *value =3D POWER_SUPPLY_HEALTH_GOOD; break; case MAX77705_BATTERY_OVERVOLTAGE: - dev_dbg(charger->dev, "%s: battery ovp\n", __func__); + dev_dbg(chg->dev, "%s: battery ovp\n", __func__); *value =3D POWER_SUPPLY_HEALTH_OVERVOLTAGE; break; default: - dev_dbg(charger->dev, "%s: battery unknown\n", __func__); + dev_dbg(chg->dev, "%s: battery unknown\n", __func__); *value =3D POWER_SUPPLY_HEALTH_UNSPEC_FAILURE; break; } @@ -274,9 +274,9 @@ static int max77705_get_battery_health(struct max77705_= charger_data *charger, return 0; } =20 -static int max77705_get_health(struct max77705_charger_data *charger, int = *val) +static int max77705_get_health(struct max77705_charger_data *chg, int *val) { - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; int ret, is_online =3D 0; =20 ret =3D max77705_get_online(regmap, &is_online); @@ -287,15 +287,15 @@ static int max77705_get_health(struct max77705_charge= r_data *charger, int *val) if (ret || (*val !=3D POWER_SUPPLY_HEALTH_GOOD)) return ret; } - return max77705_get_battery_health(charger, val); + return max77705_get_battery_health(chg, val); } =20 -static int max77705_get_input_current(struct max77705_charger_data *charge= r, +static int max77705_get_input_current(struct max77705_charger_data *chg, int *val) { unsigned int reg_data; int get_current =3D 0; - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; =20 regmap_read(regmap, MAX77705_CHG_REG_CNFG_09, ®_data); =20 @@ -313,11 +313,11 @@ static int max77705_get_input_current(struct max77705= _charger_data *charger, return 0; } =20 -static int max77705_get_charge_current(struct max77705_charger_data *charg= er, +static int max77705_get_charge_current(struct max77705_charger_data *chg, int *val) { unsigned int reg_data; - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; =20 regmap_read(regmap, MAX77705_CHG_REG_CNFG_02, ®_data); reg_data &=3D MAX77705_CHG_CC; @@ -327,12 +327,12 @@ static int max77705_get_charge_current(struct max7770= 5_charger_data *charger, return 0; } =20 -static int max77705_set_float_voltage(struct max77705_charger_data *charge= r, +static int max77705_set_float_voltage(struct max77705_charger_data *chg, int float_voltage) { int float_voltage_mv; unsigned int reg_data =3D 0; - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; =20 float_voltage_mv =3D float_voltage / 1000; reg_data =3D float_voltage_mv <=3D 4000 ? 0x0 : @@ -345,12 +345,12 @@ static int max77705_set_float_voltage(struct max77705= _charger_data *charger, (reg_data << MAX77705_CHG_CV_PRM_SHIFT)); } =20 -static int max77705_get_float_voltage(struct max77705_charger_data *charge= r, +static int max77705_get_float_voltage(struct max77705_charger_data *chg, int *val) { unsigned int reg_data =3D 0; int voltage_mv; - struct regmap *regmap =3D charger->regmap; + struct regmap *regmap =3D chg->regmap; =20 regmap_read(regmap, MAX77705_CHG_REG_CNFG_04, ®_data); reg_data &=3D MAX77705_CHG_PRM_MASK; @@ -365,28 +365,28 @@ static int max77705_chg_get_property(struct power_sup= ply *psy, enum power_supply_property psp, union power_supply_propval *val) { - struct max77705_charger_data *charger =3D power_supply_get_drvdata(psy); - struct regmap *regmap =3D charger->regmap; + struct max77705_charger_data *chg =3D power_supply_get_drvdata(psy); + struct regmap *regmap =3D chg->regmap; =20 switch (psp) { case POWER_SUPPLY_PROP_ONLINE: return max77705_get_online(regmap, &val->intval); case POWER_SUPPLY_PROP_PRESENT: - return max77705_check_battery(charger, &val->intval); + return max77705_check_battery(chg, &val->intval); case POWER_SUPPLY_PROP_STATUS: - return max77705_get_status(charger, &val->intval); + return max77705_get_status(chg, &val->intval); case POWER_SUPPLY_PROP_CHARGE_TYPE: - return max77705_get_charge_type(charger, &val->intval); + return max77705_get_charge_type(chg, &val->intval); case POWER_SUPPLY_PROP_HEALTH: - return max77705_get_health(charger, &val->intval); + return max77705_get_health(chg, &val->intval); case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: - return max77705_get_input_current(charger, &val->intval); + return max77705_get_input_current(chg, &val->intval); case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: - return max77705_get_charge_current(charger, &val->intval); + return max77705_get_charge_current(chg, &val->intval); case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE: - return max77705_get_float_voltage(charger, &val->intval); + return max77705_get_float_voltage(chg, &val->intval); case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: - val->intval =3D charger->bat_info->voltage_max_design_uv; + val->intval =3D chg->bat_info->voltage_max_design_uv; break; case POWER_SUPPLY_PROP_MODEL_NAME: val->strval =3D max77705_charger_model; @@ -410,10 +410,10 @@ static const struct power_supply_desc max77705_charge= r_psy_desc =3D { =20 static void max77705_chgin_isr_work(struct work_struct *work) { - struct max77705_charger_data *charger =3D + struct max77705_charger_data *chg =3D container_of(work, struct max77705_charger_data, chgin_work); =20 - power_supply_changed(charger->psy_chg); + power_supply_changed(chg->psy_chg); } =20 static void max77705_charger_initialize(struct max77705_charger_data *chg) --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 6044E3629A5 for ; Thu, 11 Sep 2025 17:57:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613443; cv=none; b=l0GryLEpA06naYh8iHCYLXxogfmw8Itblb/P8YOYUyqhQLNEH5HW9G1UIeYxSxn+hdb4/0/vluqgjW/u88fXa3nWemnPBqGvo2G5k0i1+QrZGA7pjQsQcU+klC6anR4xhV3YlNvSHXggq2VT0KO0NB0bXbvQYZiK6+SKYHo9WNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613443; c=relaxed/simple; bh=xePguBSHxh+UFZ2zTk2qZNnczttKf6Og9jirSWtU4ao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KxK/9O/82eWqjMFBwA+mTCpxYTt6SqQ5g9wL77zgpb/KwZYVBsGNQ5MwS/QFUViCV6FauRabRci4QKZZQWwfXe8DxuH4GM8v9bRfDe+z7g6z/lvXT3dhGkPWb9yn77R01RT+W8JUvtqd2IeMbmQlemsPaRLT/iBrS1+u6A3yBaw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Lu5csw2M; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Lu5csw2M" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b0428b537e5so151581966b.3 for ; Thu, 11 Sep 2025 10:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613439; x=1758218239; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Ua1+fF/75UzR8PkEev3BSJqkYEQqIfzh7nga0Yz7W58=; b=Lu5csw2Mf/ZpIco6+UG4kWn+bY4Do/4rV6SMFOierPQUbo8tZ736vbIkF9aZhRmt8q SKiicpQv23M0C7OKHByxOlaBSDmeHT8FGKCCboCL3rKOPQ1IaeGK64o33Pj2cN8e4ZQw aLE89lmWuMW5awogTdKSqS+aFwkLOZmkU1rdn26H8TxuJEUvaj5tMTOJmo5yrt3vd+Ai dn44Ur3Vs1E6yHG86u8vtcpFblZdbeknYyEWQrp3b5YMggPcqlfhNRaTlgAgm4HYdrRQ f5/2hj2tmF57VPzxia6zPQAiFQqZpTjYYoLzlEzH34ODjtQocoS4RBjOdkS5/Eaf8IZN uSEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613439; x=1758218239; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ua1+fF/75UzR8PkEev3BSJqkYEQqIfzh7nga0Yz7W58=; b=A0IWSRSMU6qJMwMOAkDRd21lo3f+HPygK32s2L1SWpJOL5+FWuKzWRtjemMUXeuNM6 Slt80tVWSAjZLKmPy3YHpGZyR/+G93o/qylvyjZ2m1K3t1RuIsA3nX0kkzk2Hzd9WHr/ /C1XKMBgexzsnPvAPToJaVwZcPqZRiYpbKaaUeNMQq4OAm0KT7h7H3siJUWvK5D0d4wD G+jYZ5HSOfxvAm7cQjYw/F5zpBixQMLUh88NatY9AWrKpRSlIOHeSgUf5U0oCOBGCqCL XQJEA7EE9192SDcB7ttw4K2n3+hFVi8j+Xg3KCGhDvYaZPa8CSaUAZJnRANUv05oHOrL nmgg== X-Forwarded-Encrypted: i=1; AJvYcCWB/eZ4iQg0gENb9rK28SbU8enTrl9O33D3SrS0KOoC+9q3rmPKInOCWOjqX8o0tl+fVSDVlkvLhbYT1GQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/Z4/PFVAS+2yvbqoX8fUCY1pCb7zalnB/eRJ7JQTEwzrDOSDe khXrxMrcREuIubdZqtllg/2H9Zg9ZJ4WnmslAVxexixIfoFzjWaQbS8i X-Gm-Gg: ASbGncvERt6Meq49QNBmakaE/wZzCyHQYvZsoBUG5jdW8p4eaCs17h6WZBNl+qCrXrC 7VyGMjpPbdPDGLx2MLsrC5uCQb33Vn/TfhXPPKj1ZQtNrEp0UDUT9L3010wQL6LR4TFycl1OLpf ZEKALDFEe35DT1/KhFkvlDVpCIwWHJ7JXOMMdAD65djkakHDvWK8k+MJoK/DXsIKE3Cj+7uejb9 gwSaVBFfU+IW6Mb+BxAIyeOINUOxrncVPC17rsnuF8QWfV+YSQrLBn+t27Yr5aDrFjms+mWH0h2 NcD7H7Cu7XTiSbBeTAEB3bXufEIc0I9fyaQda2MW0UUKi0IHtDYdtujs0tKVmA6EkzhfnC2ogEx 0c8i9YUE0GnmSI+iBAhZDtuLTzaE3SjE= X-Google-Smtp-Source: AGHT+IFGaYF2hobAaXqG1bdDb1PytNPVUsR6n2sYmwE3wIqaSwd3WDUFlYjXfLfAHAeKWECk7Cbw6A== X-Received: by 2002:a17:907:7f2a:b0:b04:8c45:4b9d with SMTP id a640c23a62f3a-b07c3a7ddddmr146766b.58.1757613439193; Thu, 11 Sep 2025 10:57:19 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:18 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:11 +0300 Subject: [PATCH v3 3/9] power: supply: max77705_charger: use regfields for config registers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-3-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=16663; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=xePguBSHxh+UFZ2zTk2qZNnczttKf6Og9jirSWtU4ao=; b=8Of4YQvWAlSajJ4xNsop/axY5AmEVri9udR1C4kRhhB9SHozYbTCwx9jmga1ndlgytZY1TFVd FXLOmZp5OjECNIAH2TNNS0TtW8K3JELQ3ONI2I9p4H2A1fAMsh76Gkz X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Using regfields allows to cleanup masks and register offset definition, allowing to access register info by it's functional name. Signed-off-by: Dzmitry Sankouski --- Changes to v2: - fix MAX77705_CHGPROT_UNLOCKED value: GENMASK(3, 2) -> 3, because it's now used in regfield - remove MAX77705_CHGPROT_MASK because it's unused now --- drivers/power/supply/max77705_charger.c | 105 ++++++++++++----------------= ---- include/linux/power/max77705_charger.h | 102 ++++++++++++++++------------= --- 2 files changed, 93 insertions(+), 114 deletions(-) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 7855f890e0a9..2d2201a6ba68 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -74,8 +74,7 @@ static int max77705_charger_enable(struct max77705_charge= r_data *chg) { int rv; =20 - rv =3D regmap_update_bits(chg->regmap, MAX77705_CHG_REG_CNFG_09, - MAX77705_CHG_EN_MASK, MAX77705_CHG_EN_MASK); + rv =3D regmap_field_write(chg->rfield[MAX77705_CHG_EN], 1); if (rv) dev_err(chg->dev, "unable to enable the charger: %d\n", rv); =20 @@ -87,10 +86,7 @@ static void max77705_charger_disable(void *data) struct max77705_charger_data *chg =3D data; int rv; =20 - rv =3D regmap_update_bits(chg->regmap, - MAX77705_CHG_REG_CNFG_09, - MAX77705_CHG_EN_MASK, - MAX77705_CHG_DISABLE); + rv =3D regmap_field_write(chg->rfield[MAX77705_CHG_EN], MAX77705_CHG_DISA= BLE); if (rv) dev_err(chg->dev, "unable to disable the charger: %d\n", rv); } @@ -134,10 +130,10 @@ static int max77705_check_battery(struct max77705_cha= rger_data *chg, int *val) static int max77705_get_charge_type(struct max77705_charger_data *chg, int= *val) { struct regmap *regmap =3D chg->regmap; - unsigned int reg_data; + unsigned int reg_data, chg_en; =20 - regmap_read(regmap, MAX77705_CHG_REG_CNFG_09, ®_data); - if (!MAX77705_CHARGER_CHG_CHARGING(reg_data)) { + regmap_field_read(chg->rfield[MAX77705_CHG_EN], &chg_en); + if (!chg_en) { *val =3D POWER_SUPPLY_CHARGE_TYPE_NONE; return 0; } @@ -162,10 +158,10 @@ static int max77705_get_charge_type(struct max77705_c= harger_data *chg, int *val) static int max77705_get_status(struct max77705_charger_data *chg, int *val) { struct regmap *regmap =3D chg->regmap; - unsigned int reg_data; + unsigned int reg_data, chg_en; =20 - regmap_read(regmap, MAX77705_CHG_REG_CNFG_09, ®_data); - if (!MAX77705_CHARGER_CHG_CHARGING(reg_data)) { + regmap_field_read(chg->rfield[MAX77705_CHG_EN], &chg_en); + if (!chg_en) { *val =3D POWER_SUPPLY_CHARGE_TYPE_NONE; return 0; } @@ -295,16 +291,11 @@ static int max77705_get_input_current(struct max77705= _charger_data *chg, { unsigned int reg_data; int get_current =3D 0; - struct regmap *regmap =3D chg->regmap; =20 - regmap_read(regmap, MAX77705_CHG_REG_CNFG_09, ®_data); - - reg_data &=3D MAX77705_CHG_CHGIN_LIM_MASK; + regmap_field_read(chg->rfield[MAX77705_CHG_CHGIN_LIM], ®_data); =20 if (reg_data <=3D 3) get_current =3D MAX77705_CURRENT_CHGIN_MIN; - else if (reg_data >=3D MAX77705_CHG_CHGIN_LIM_MASK) - get_current =3D MAX77705_CURRENT_CHGIN_MAX; else get_current =3D (reg_data + 1) * MAX77705_CURRENT_CHGIN_STEP; =20 @@ -317,10 +308,8 @@ static int max77705_get_charge_current(struct max77705= _charger_data *chg, int *val) { unsigned int reg_data; - struct regmap *regmap =3D chg->regmap; =20 - regmap_read(regmap, MAX77705_CHG_REG_CNFG_02, ®_data); - reg_data &=3D MAX77705_CHG_CC; + regmap_field_read(chg->rfield[MAX77705_CHG_CC_LIM], ®_data); =20 *val =3D reg_data <=3D 0x2 ? MAX77705_CURRENT_CHGIN_MIN : reg_data * MAX7= 7705_CURRENT_CHG_STEP; =20 @@ -332,7 +321,6 @@ static int max77705_set_float_voltage(struct max77705_c= harger_data *chg, { int float_voltage_mv; unsigned int reg_data =3D 0; - struct regmap *regmap =3D chg->regmap; =20 float_voltage_mv =3D float_voltage / 1000; reg_data =3D float_voltage_mv <=3D 4000 ? 0x0 : @@ -340,9 +328,7 @@ static int max77705_set_float_voltage(struct max77705_c= harger_data *chg, (float_voltage_mv <=3D 4200) ? (float_voltage_mv - 4000) / 50 : (((float_voltage_mv - 4200) / 10) + 0x04); =20 - return regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_04, - MAX77705_CHG_CV_PRM_MASK, - (reg_data << MAX77705_CHG_CV_PRM_SHIFT)); + return regmap_field_write(chg->rfield[MAX77705_CHG_CV_PRM], reg_data); } =20 static int max77705_get_float_voltage(struct max77705_charger_data *chg, @@ -350,10 +336,8 @@ static int max77705_get_float_voltage(struct max77705_= charger_data *chg, { unsigned int reg_data =3D 0; int voltage_mv; - struct regmap *regmap =3D chg->regmap; =20 - regmap_read(regmap, MAX77705_CHG_REG_CNFG_04, ®_data); - reg_data &=3D MAX77705_CHG_PRM_MASK; + regmap_field_read(chg->rfield[MAX77705_CHG_CV_PRM], ®_data); voltage_mv =3D reg_data <=3D 0x04 ? reg_data * 50 + 4000 : (reg_data - 4) * 10 + 4200; *val =3D voltage_mv * 1000; @@ -418,7 +402,6 @@ static void max77705_chgin_isr_work(struct work_struct = *work) =20 static void max77705_charger_initialize(struct max77705_charger_data *chg) { - u8 reg_data; struct power_supply_battery_info *info; struct regmap *regmap =3D chg->regmap; =20 @@ -429,45 +412,31 @@ static void max77705_charger_initialize(struct max777= 05_charger_data *chg) =20 /* unlock charger setting protect */ /* slowest LX slope */ - reg_data =3D MAX77705_CHGPROT_MASK | MAX77705_SLOWEST_LX_SLOPE; - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_06, reg_data, - reg_data); + regmap_field_write(chg->rfield[MAX77705_CHGPROT], MAX77705_CHGPROT_UNLOCK= ED); + regmap_field_write(chg->rfield[MAX77705_LX_SLOPE], MAX77705_SLOWEST_LX_SL= OPE); =20 /* fast charge timer disable */ /* restart threshold disable */ /* pre-qual charge disable */ - reg_data =3D (MAX77705_FCHGTIME_DISABLE << MAX77705_FCHGTIME_SHIFT) | - (MAX77705_CHG_RSTRT_DISABLE << MAX77705_CHG_RSTRT_SHIFT) | - (MAX77705_CHG_PQEN_DISABLE << MAX77705_PQEN_SHIFT); - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_01, - (MAX77705_FCHGTIME_MASK | - MAX77705_CHG_RSTRT_MASK | - MAX77705_PQEN_MASK), - reg_data); - - /* OTG off(UNO on), boost off */ - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_00, - MAX77705_OTG_CTRL, 0); + regmap_field_write(chg->rfield[MAX77705_FCHGTIME], MAX77705_FCHGTIME_DISA= BLE); + regmap_field_write(chg->rfield[MAX77705_CHG_RSTRT], MAX77705_CHG_RSTRT_DI= SABLE); + regmap_field_write(chg->rfield[MAX77705_CHG_PQEN], MAX77705_CHG_PQEN_DISA= BLE); + + regmap_field_write(chg->rfield[MAX77705_MODE], + MAX77705_CHG_MASK | MAX77705_BUCK_MASK); =20 /* charge current 450mA(default) */ /* otg current limit 900mA */ - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_02, - MAX77705_OTG_ILIM_MASK, - MAX77705_OTG_ILIM_900 << MAX77705_OTG_ILIM_SHIFT); + regmap_field_write(chg->rfield[MAX77705_OTG_ILIM], MAX77705_OTG_ILIM_900); =20 /* BAT to SYS OCP 4.80A */ - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_05, - MAX77705_REG_B2SOVRC_MASK, - MAX77705_B2SOVRC_4_8A << MAX77705_REG_B2SOVRC_SHIFT); + regmap_field_write(chg->rfield[MAX77705_REG_B2SOVRC], MAX77705_B2SOVRC_4_= 8A); + /* top off current 150mA */ /* top off timer 30min */ - reg_data =3D (MAX77705_TO_ITH_150MA << MAX77705_TO_ITH_SHIFT) | - (MAX77705_TO_TIME_30M << MAX77705_TO_TIME_SHIFT) | - (MAX77705_SYS_TRACK_DISABLE << MAX77705_SYS_TRACK_DIS_SHIFT); - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_03, - (MAX77705_TO_ITH_MASK | - MAX77705_TO_TIME_MASK | - MAX77705_SYS_TRACK_DIS_MASK), reg_data); + regmap_field_write(chg->rfield[MAX77705_TO], MAX77705_TO_ITH_150MA); + regmap_field_write(chg->rfield[MAX77705_TO_TIME], MAX77705_TO_TIME_30M); + regmap_field_write(chg->rfield[MAX77705_SYS_TRACK], MAX77705_SYS_TRACK_DI= SABLE); =20 /* cv voltage 4.2V or 4.35V */ /* MINVSYS 3.6V(default) */ @@ -478,25 +447,21 @@ static void max77705_charger_initialize(struct max777= 05_charger_data *chg) max77705_set_float_voltage(chg, info->voltage_max_design_uv); } =20 - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_12, - MAX77705_VCHGIN_REG_MASK, MAX77705_VCHGIN_4_5); - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_12, - MAX77705_WCIN_REG_MASK, MAX77705_WCIN_4_5); + regmap_field_write(chg->rfield[MAX77705_VCHGIN], MAX77705_VCHGIN_4_5); + regmap_field_write(chg->rfield[MAX77705_WCIN], MAX77705_WCIN_4_5); =20 /* Watchdog timer */ regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_00, MAX77705_WDTEN_MASK, 0); =20 /* VBYPSET=3D5.0V */ - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_11, MAX77705_VBYPSET_MAS= K, 0); + regmap_field_write(chg->rfield[MAX77705_VBYPSET], 0); =20 /* Switching Frequency : 1.5MHz */ - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_08, MAX77705_REG_FSW_MAS= K, - (MAX77705_CHG_FSW_1_5MHz << MAX77705_REG_FSW_SHIFT)); + regmap_field_write(chg->rfield[MAX77705_REG_FSW], MAX77705_CHG_FSW_1_5MHz= ); =20 /* Auto skip mode */ - regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_12, MAX77705_REG_DISKIP_= MASK, - (MAX77705_AUTO_SKIP << MAX77705_REG_DISKIP_SHIFT)); + regmap_field_write(chg->rfield[MAX77705_REG_DISKIP], MAX77705_AUTO_SKIP); } =20 static int max77705_charger_probe(struct i2c_client *i2c) @@ -520,6 +485,14 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) if (IS_ERR(chg->regmap)) return PTR_ERR(chg->regmap); =20 + for (int i =3D 0; i < MAX77705_N_REGMAP_FIELDS; i++) { + chg->rfield[i] =3D devm_regmap_field_alloc(dev, chg->regmap, + max77705_reg_field[i]); + if (IS_ERR(chg->rfield[i])) + return dev_err_probe(dev, PTR_ERR(chg->rfield[i]), + "cannot allocate regmap field\n"); + } + ret =3D regmap_update_bits(chg->regmap, MAX77705_CHG_REG_INT_MASK, MAX77705_CHGIN_IM, 0); diff --git a/include/linux/power/max77705_charger.h b/include/linux/power/m= ax77705_charger.h index fdec9af9c541..a612795577b6 100644 --- a/include/linux/power/max77705_charger.h +++ b/include/linux/power/max77705_charger.h @@ -9,6 +9,8 @@ #ifndef __MAX77705_CHARGER_H #define __MAX77705_CHARGER_H __FILE__ =20 +#include + /* MAX77705_CHG_REG_CHG_INT */ #define MAX77705_BYP_I BIT(0) #define MAX77705_INP_LIMIT_I BIT(1) @@ -63,7 +65,6 @@ #define MAX77705_BUCK_SHIFT 2 #define MAX77705_BOOST_SHIFT 3 #define MAX77705_WDTEN_SHIFT 4 -#define MAX77705_MODE_MASK GENMASK(3, 0) #define MAX77705_CHG_MASK BIT(MAX77705_CHG_SHIFT) #define MAX77705_UNO_MASK BIT(MAX77705_UNO_SHIFT) #define MAX77705_OTG_MASK BIT(MAX77705_OTG_SHIFT) @@ -74,34 +75,19 @@ #define MAX77705_OTG_CTRL (MAX77705_OTG_MASK | MAX77705_BOOST_MASK) =20 /* MAX77705_CHG_REG_CNFG_01 */ -#define MAX77705_FCHGTIME_SHIFT 0 -#define MAX77705_FCHGTIME_MASK GENMASK(2, 0) -#define MAX77705_CHG_RSTRT_SHIFT 4 -#define MAX77705_CHG_RSTRT_MASK GENMASK(5, 4) #define MAX77705_FCHGTIME_DISABLE 0 #define MAX77705_CHG_RSTRT_DISABLE 0x3 =20 -#define MAX77705_PQEN_SHIFT 7 -#define MAX77705_PQEN_MASK BIT(7) #define MAX77705_CHG_PQEN_DISABLE 0 #define MAX77705_CHG_PQEN_ENABLE 1 =20 /* MAX77705_CHG_REG_CNFG_02 */ -#define MAX77705_OTG_ILIM_SHIFT 6 -#define MAX77705_OTG_ILIM_MASK GENMASK(7, 6) #define MAX77705_OTG_ILIM_500 0 #define MAX77705_OTG_ILIM_900 1 #define MAX77705_OTG_ILIM_1200 2 #define MAX77705_OTG_ILIM_1500 3 -#define MAX77705_CHG_CC GENMASK(5, 0) =20 /* MAX77705_CHG_REG_CNFG_03 */ -#define MAX77705_TO_ITH_SHIFT 0 -#define MAX77705_TO_ITH_MASK GENMASK(2, 0) -#define MAX77705_TO_TIME_SHIFT 3 -#define MAX77705_TO_TIME_MASK GENMASK(5, 3) -#define MAX77705_SYS_TRACK_DIS_SHIFT 7 -#define MAX77705_SYS_TRACK_DIS_MASK BIT(7) #define MAX77705_TO_ITH_150MA 0 #define MAX77705_TO_TIME_30M 3 #define MAX77705_SYS_TRACK_ENABLE 0 @@ -110,15 +96,8 @@ /* MAX77705_CHG_REG_CNFG_04 */ #define MAX77705_CHG_MINVSYS_SHIFT 6 #define MAX77705_CHG_MINVSYS_MASK GENMASK(7, 6) -#define MAX77705_CHG_PRM_SHIFT 0 -#define MAX77705_CHG_PRM_MASK GENMASK(5, 0) - -#define MAX77705_CHG_CV_PRM_SHIFT 0 -#define MAX77705_CHG_CV_PRM_MASK GENMASK(5, 0) =20 /* MAX77705_CHG_REG_CNFG_05 */ -#define MAX77705_REG_B2SOVRC_SHIFT 0 -#define MAX77705_REG_B2SOVRC_MASK GENMASK(3, 0) #define MAX77705_B2SOVRC_DISABLE 0 #define MAX77705_B2SOVRC_4_5A 6 #define MAX77705_B2SOVRC_4_8A 8 @@ -128,9 +107,8 @@ #define MAX77705_WDTCLR_SHIFT 0 #define MAX77705_WDTCLR_MASK GENMASK(1, 0) #define MAX77705_WDTCLR 1 -#define MAX77705_CHGPROT_MASK GENMASK(3, 2) -#define MAX77705_CHGPROT_UNLOCKED GENMASK(3, 2) -#define MAX77705_SLOWEST_LX_SLOPE GENMASK(6, 5) +#define MAX77705_CHGPROT_UNLOCKED 3 +#define MAX77705_SLOWEST_LX_SLOPE 3 =20 /* MAX77705_CHG_REG_CNFG_07 */ #define MAX77705_CHG_FMBST 4 @@ -140,36 +118,14 @@ #define MAX77705_REG_FGSRC_MASK BIT(MAX77705_REG_FGSRC_SHIFT) =20 /* MAX77705_CHG_REG_CNFG_08 */ -#define MAX77705_REG_FSW_SHIFT 0 -#define MAX77705_REG_FSW_MASK GENMASK(1, 0) #define MAX77705_CHG_FSW_3MHz 0 #define MAX77705_CHG_FSW_2MHz 1 #define MAX77705_CHG_FSW_1_5MHz 2 =20 /* MAX77705_CHG_REG_CNFG_09 */ -#define MAX77705_CHG_CHGIN_LIM_MASK GENMASK(6, 0) -#define MAX77705_CHG_EN_MASK BIT(7) #define MAX77705_CHG_DISABLE 0 -#define MAX77705_CHARGER_CHG_CHARGING(_reg) \ - (((_reg) & MAX77705_CHG_EN_MASK) > 1) - - -/* MAX77705_CHG_REG_CNFG_10 */ -#define MAX77705_CHG_WCIN_LIM GENMASK(5, 0) - -/* MAX77705_CHG_REG_CNFG_11 */ -#define MAX77705_VBYPSET_SHIFT 0 -#define MAX77705_VBYPSET_MASK GENMASK(6, 0) =20 /* MAX77705_CHG_REG_CNFG_12 */ -#define MAX77705_CHGINSEL_SHIFT 5 -#define MAX77705_CHGINSEL_MASK BIT(MAX77705_CHGINSEL_SHIFT) -#define MAX77705_WCINSEL_SHIFT 6 -#define MAX77705_WCINSEL_MASK BIT(MAX77705_WCINSEL_SHIFT) -#define MAX77705_VCHGIN_REG_MASK GENMASK(4, 3) -#define MAX77705_WCIN_REG_MASK GENMASK(2, 1) -#define MAX77705_REG_DISKIP_SHIFT 0 -#define MAX77705_REG_DISKIP_MASK BIT(MAX77705_REG_DISKIP_SHIFT) /* REG=3D4.5V, UVLO=3D4.7V */ #define MAX77705_VCHGIN_4_5 0 /* REG=3D4.5V, UVLO=3D4.7V */ @@ -183,9 +139,59 @@ #define MAX77705_CURRENT_CHGIN_MIN 100000 #define MAX77705_CURRENT_CHGIN_MAX 3200000 =20 +enum max77705_field_idx { + MAX77705_CHGPROT, + MAX77705_CHG_EN, + MAX77705_CHG_CC_LIM, + MAX77705_CHG_CHGIN_LIM, + MAX77705_CHG_CV_PRM, + MAX77705_CHG_PQEN, + MAX77705_CHG_RSTRT, + MAX77705_CHG_WCIN, + MAX77705_FCHGTIME, + MAX77705_LX_SLOPE, + MAX77705_MODE, + MAX77705_OTG_ILIM, + MAX77705_REG_B2SOVRC, + MAX77705_REG_DISKIP, + MAX77705_REG_FSW, + MAX77705_SYS_TRACK, + MAX77705_TO, + MAX77705_TO_TIME, + MAX77705_VBYPSET, + MAX77705_VCHGIN, + MAX77705_WCIN, + MAX77705_N_REGMAP_FIELDS, +}; + +static const struct reg_field max77705_reg_field[MAX77705_N_REGMAP_FIELDS]= =3D { + [MAX77705_MODE] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_00, 0, 3), + [MAX77705_FCHGTIME] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_01, 0, 2), + [MAX77705_CHG_RSTRT] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_01, 4, 5), + [MAX77705_CHG_PQEN] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_01, 7, 7), + [MAX77705_CHG_CC_LIM] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_02, 0, 5), + [MAX77705_OTG_ILIM] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_02, 6, 7), + [MAX77705_TO] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_03, 0, 2), + [MAX77705_TO_TIME] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_03, 3, 5), + [MAX77705_SYS_TRACK] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_03, 7, 7), + [MAX77705_CHG_CV_PRM] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_04, 0, 5), + [MAX77705_REG_B2SOVRC] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_05, 0, 3), + [MAX77705_CHGPROT] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_06, 2, 3), + [MAX77705_LX_SLOPE] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_06, 5, 6), + [MAX77705_REG_FSW] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_08, 0, 1), + [MAX77705_CHG_CHGIN_LIM] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_09, 0, 6), + [MAX77705_CHG_EN] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_09, 7, 7), + [MAX77705_CHG_WCIN] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_10, 0, 5), + [MAX77705_VBYPSET] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_11, 0, 6), + [MAX77705_REG_DISKIP] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_12, 0, 0), + [MAX77705_WCIN] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_12, 1, 2), + [MAX77705_VCHGIN] =3D REG_FIELD(MAX77705_CHG_REG_CNFG_12, 3, 4), +}; + struct max77705_charger_data { struct device *dev; struct regmap *regmap; + struct regmap_field *rfield[MAX77705_N_REGMAP_FIELDS]; struct power_supply_battery_info *bat_info; struct workqueue_struct *wqueue; struct work_struct chgin_work; --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) (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 313153680B7 for ; Thu, 11 Sep 2025 17:57:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613446; cv=none; b=izbxVmJdKxzxRz0XnIxA9oUzZY0oRygiiw92R2+yEhYPb4GB0rxZX8zg8QTBZ+nPC//J06nb3re7f4X7bZGUeOKbbl8QU9j5lpJ0kMKiwiOH5f40EGOyMkxY9UVIZ9OI/ORh1fF76Q6Bvuoh6rjhVfTVJGVdFx6rs6anRF+VY10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613446; c=relaxed/simple; bh=bGDCk3kzbdsUZZQhl6KUQ8bvyiKh/w2K/fZ43Aq2I4Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Sr9BL1QXlsAtZubHMulj40/8pkGbASOgysjDaLm5ezAoLveSrOcQuEPYXgrBN0mBoEodUItlt2kqhW2mJLVQVk7ItlRwJAP05vXARndSBlyqsrh5pXcDZfQv4r3TkH26q7H+2OdRxQJIaf8q5m5c+StXvEmv5/zYgPqMVbTfQKM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Q3rkvLP5; arc=none smtp.client-ip=209.85.218.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q3rkvLP5" Received: by mail-ej1-f50.google.com with SMTP id a640c23a62f3a-afcb78ead12so146464466b.1 for ; Thu, 11 Sep 2025 10:57:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613440; x=1758218240; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=75UGwiqWwN4s+IR/YJTkSJX8KNi4Qm/u3Bm/PVxwIIg=; b=Q3rkvLP5Z56wQ57d8nr7qAikUz9ZfwcUHDXn6QMTuntv4agbn9dDDD4ym2ebrb8L7N ysw/ojo2yYxmPu8xK1dOLtniiRF9lkH4cfECuVQL1QbSCBLxGChS67K08oIEzpq+me5H 9JiP+eO4Pnil757C1wdN7CAG//ixrxHLEIcb43KQtuvVQZetxge3A0hwcT1pOifNRS5w XC3OlJMeclfpRdpD+JTgrG0ngVJ4ooaVDb1CfOfdPKw/NOe8CY9LczOt2gdCwrR5x5ji C8km8XAPgMp8LXPvwSeNQ5bESAbD3A0y9Gim+1HBvmDAZ7UCNGKOiIliptOnkpuIM7b8 f/yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613440; x=1758218240; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=75UGwiqWwN4s+IR/YJTkSJX8KNi4Qm/u3Bm/PVxwIIg=; b=MuQuZJeDfbqH4TK6zc4YUX+BTvhFwhVlLIeLRV/RLOOpl2GwJ7eMm5jWiohXa0VDUU DA0T7B5YUNEVX+nH8v4AAjpembB17DnlY1SOou9dX5N7c+Y3p1gY6OpJK7m8vFgXUbsX 2Z35PcPu7mVYxNQXDgCTR2r7UpeJqtqmBkEiBxdY9s9et9+4BIBDAXhDjM/xvKhKGW5R DccV28+rDZF01IsNjm7Ng9ik8AG5oNDXn/+7fweW7x+shBC8dEG8owi9fv6cTmNfnN/m J/AgEhwxqZXKzZ0zdZVnSJGdEPQp+8RD/CyrmZ5kCGudS303C7Ug4QIkveL3jDE07xTb jacA== X-Forwarded-Encrypted: i=1; AJvYcCUc9EW8gixQ/wXHNu3Km4ViaelzlTwvvXct6/i2NamntdkJAo6/W9jKC6ytL+V0XHx2fyKbw71ka/4cDy8=@vger.kernel.org X-Gm-Message-State: AOJu0YyC71qXPiNuHUWvbN1rBzGwKFEy9jC4RUCGmMK3sw8wH72GKm2l BbXykGHqljfePc217f67ACwSwa9LSKO11Jj1XvraIxW7HTHR1WqIR+AE X-Gm-Gg: ASbGncsqRBe2r+sT8PNglZmvjEG/THSlmtyGprx8yMBNBLnwwzyUlnnLN4CIkDRygOB 8/l4kqh/IABA9ksYlQ9wZLHuis9ZvxJJhcIRwKGfc9ciryWskEYWDLVjFMB3AWUdGd3TQdDosqq 70guD0+f7Ab4NA4F0tnWWSg6ir/msl3vwCjkf45IxHXylwqlSZd49Fa3/qTKG1s4fBc2szi3/ZG IKkuKmQv35BsPofZ5e7k50vLIHzcuPQ66LYpviZ0U8zJgt0lIB16n50DH/d7KLDzcOifugXYyay qGCyY4BLqCDBTDozhKd0inYJOjFm6Fo9Fgg4AzW4wzyxkeoqE6a/lOTmLl9N1w2cqvyGfMD3y4p 191STcbAU0sgUBrAqx78Ek6v9dWipMbM= X-Google-Smtp-Source: AGHT+IGJ2XzztvFArmmP+iZSRugLXIzd8nb1EBBVPy1fU6A5CkgagAnr4W0Bj0t3vUvlTkshyQbwYA== X-Received: by 2002:a17:906:d550:b0:b04:241c:e70e with SMTP id a640c23a62f3a-b07c3579f57mr3633166b.19.1757613440346; Thu, 11 Sep 2025 10:57:20 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:19 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:12 +0300 Subject: [PATCH v3 4/9] power: supply: max77705_charger: return error when config fails Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-4-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=5448; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=bGDCk3kzbdsUZZQhl6KUQ8bvyiKh/w2K/fZ43Aq2I4Q=; b=D+/3fvB5uoQs9xNixQFgd+Wd1JX953EkDMibli/iPi2sVOeJG3cX5bV40g7uiTyEgf1AU5OUR 5WB9O7W9KNpDCyfia1h466fPqB/r4jtZ74NjiIAJFX7HhX6pnZJ+fKc X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Handle error, returned from register writes in init function. Signed-off-by: Dzmitry Sankouski --- drivers/power/supply/max77705_charger.c | 90 +++++++++++++++++++++++++----= ---- 1 file changed, 70 insertions(+), 20 deletions(-) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 2d2201a6ba68..93d055458849 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -400,43 +400,72 @@ static void max77705_chgin_isr_work(struct work_struc= t *work) power_supply_changed(chg->psy_chg); } =20 -static void max77705_charger_initialize(struct max77705_charger_data *chg) +static int max77705_charger_initialize(struct max77705_charger_data *chg) { struct power_supply_battery_info *info; struct regmap *regmap =3D chg->regmap; + int err; =20 - if (power_supply_get_battery_info(chg->psy_chg, &info) < 0) - return; + err =3D power_supply_get_battery_info(chg->psy_chg, &info); + if (err) + return dev_err_probe(chg->dev, err, "error on getting battery info"); =20 chg->bat_info =3D info; =20 /* unlock charger setting protect */ /* slowest LX slope */ - regmap_field_write(chg->rfield[MAX77705_CHGPROT], MAX77705_CHGPROT_UNLOCK= ED); - regmap_field_write(chg->rfield[MAX77705_LX_SLOPE], MAX77705_SLOWEST_LX_SL= OPE); + err =3D regmap_field_write(chg->rfield[MAX77705_CHGPROT], MAX77705_CHGPRO= T_UNLOCKED); + if (err) + goto err; + + err =3D regmap_field_write(chg->rfield[MAX77705_LX_SLOPE], MAX77705_SLOWE= ST_LX_SLOPE); + if (err) + goto err; =20 /* fast charge timer disable */ /* restart threshold disable */ /* pre-qual charge disable */ - regmap_field_write(chg->rfield[MAX77705_FCHGTIME], MAX77705_FCHGTIME_DISA= BLE); - regmap_field_write(chg->rfield[MAX77705_CHG_RSTRT], MAX77705_CHG_RSTRT_DI= SABLE); - regmap_field_write(chg->rfield[MAX77705_CHG_PQEN], MAX77705_CHG_PQEN_DISA= BLE); + err =3D regmap_field_write(chg->rfield[MAX77705_FCHGTIME], MAX77705_FCHGT= IME_DISABLE); + if (err) + goto err; + + err =3D regmap_field_write(chg->rfield[MAX77705_CHG_RSTRT], MAX77705_CHG_= RSTRT_DISABLE); + if (err) + goto err; =20 - regmap_field_write(chg->rfield[MAX77705_MODE], + err =3D regmap_field_write(chg->rfield[MAX77705_CHG_PQEN], MAX77705_CHG_P= QEN_DISABLE); + if (err) + goto err; + + err =3D regmap_field_write(chg->rfield[MAX77705_MODE], MAX77705_CHG_MASK | MAX77705_BUCK_MASK); + if (err) + goto err; =20 /* charge current 450mA(default) */ /* otg current limit 900mA */ - regmap_field_write(chg->rfield[MAX77705_OTG_ILIM], MAX77705_OTG_ILIM_900); + err =3D regmap_field_write(chg->rfield[MAX77705_OTG_ILIM], MAX77705_OTG_I= LIM_900); + if (err) + goto err; =20 /* BAT to SYS OCP 4.80A */ - regmap_field_write(chg->rfield[MAX77705_REG_B2SOVRC], MAX77705_B2SOVRC_4_= 8A); + err =3D regmap_field_write(chg->rfield[MAX77705_REG_B2SOVRC], MAX77705_B2= SOVRC_4_8A); + if (err) + goto err; =20 /* top off current 150mA */ /* top off timer 30min */ - regmap_field_write(chg->rfield[MAX77705_TO], MAX77705_TO_ITH_150MA); - regmap_field_write(chg->rfield[MAX77705_TO_TIME], MAX77705_TO_TIME_30M); - regmap_field_write(chg->rfield[MAX77705_SYS_TRACK], MAX77705_SYS_TRACK_DI= SABLE); + err =3D regmap_field_write(chg->rfield[MAX77705_TO], MAX77705_TO_ITH_150M= A); + if (err) + goto err; + + err =3D regmap_field_write(chg->rfield[MAX77705_TO_TIME], MAX77705_TO_TIM= E_30M); + if (err) + goto err; + + err =3D regmap_field_write(chg->rfield[MAX77705_SYS_TRACK], MAX77705_SYS_= TRACK_DISABLE); + if (err) + goto err; =20 /* cv voltage 4.2V or 4.35V */ /* MINVSYS 3.6V(default) */ @@ -447,21 +476,38 @@ static void max77705_charger_initialize(struct max777= 05_charger_data *chg) max77705_set_float_voltage(chg, info->voltage_max_design_uv); } =20 - regmap_field_write(chg->rfield[MAX77705_VCHGIN], MAX77705_VCHGIN_4_5); - regmap_field_write(chg->rfield[MAX77705_WCIN], MAX77705_WCIN_4_5); + err =3D regmap_field_write(chg->rfield[MAX77705_VCHGIN], MAX77705_VCHGIN_= 4_5); + if (err) + goto err; + + err =3D regmap_field_write(chg->rfield[MAX77705_WCIN], MAX77705_WCIN_4_5); + if (err) + goto err; =20 /* Watchdog timer */ regmap_update_bits(regmap, MAX77705_CHG_REG_CNFG_00, MAX77705_WDTEN_MASK, 0); =20 /* VBYPSET=3D5.0V */ - regmap_field_write(chg->rfield[MAX77705_VBYPSET], 0); + err =3D regmap_field_write(chg->rfield[MAX77705_VBYPSET], 0); + if (err) + goto err; =20 /* Switching Frequency : 1.5MHz */ - regmap_field_write(chg->rfield[MAX77705_REG_FSW], MAX77705_CHG_FSW_1_5MHz= ); + err =3D regmap_field_write(chg->rfield[MAX77705_REG_FSW], MAX77705_CHG_FS= W_1_5MHz); + if (err) + goto err; =20 /* Auto skip mode */ - regmap_field_write(chg->rfield[MAX77705_REG_DISKIP], MAX77705_AUTO_SKIP); + err =3D regmap_field_write(chg->rfield[MAX77705_REG_DISKIP], MAX77705_AUT= O_SKIP); + if (err) + goto err; + + return 0; + +err: + return dev_err_probe(chg->dev, err, "error while configuring"); + } =20 static int max77705_charger_probe(struct i2c_client *i2c) @@ -524,7 +570,11 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) goto destroy_wq; } =20 - max77705_charger_initialize(chg); + ret =3D max77705_charger_initialize(chg); + if (ret) { + dev_err_probe(dev, ret, "failed to initialize charger IC\n"); + goto destroy_wq; + } =20 ret =3D max77705_charger_enable(chg); if (ret) { --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) (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 43FC43680B9 for ; Thu, 11 Sep 2025 17:57:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613445; cv=none; b=sN1fscUPwk8sBFfoqaoPp5yNDdAANTDBXWjFtgcW4irwr9kpMah6fVRxLHv5VYTblBu5nqePe6IRXCP+ZLY362n3uQ9U8P6G1JeVUmZ2cibNecVftTNKI5GkZmeMz47UuaABY/uWRSgTH6bPec2J+C1t1Ft1rdWylzJpA+Zr4bE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613445; c=relaxed/simple; bh=voRlcLKfoLfnlVLyVO+ZDmBOdNNCSLvdkGqha5/sHqA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MCvNfsBwShcDVpZdEZwr9STTTvI9cdvHYyl4pQPcpjJka+sBLtT7Z/FhcXW0x+FurC5tepUKJp0Yc5eZCLygHNOMbz8kDQtZC+fJ0dOVTk4p2ImMANzgtqGjFxXoc2vv/MC7PZffI9PSA7MhP3hYM55tIxkYTP168cnwzWIErUE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CkmGR02q; arc=none smtp.client-ip=209.85.218.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CkmGR02q" Received: by mail-ej1-f49.google.com with SMTP id a640c23a62f3a-b042cc3954fso190428566b.0 for ; Thu, 11 Sep 2025 10:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613441; x=1758218241; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=RUBWcTiGE2fz4jspmliN1on/EZodfLpmty6A15u2Kyw=; b=CkmGR02qn1B0poIZV7j/+J13oBYkyG9eTEcitPdQzjcRwXqmHVjbnz4dhB2n/eWaNP LTVwfrq1zu3vtJvj+AwrWGfNR7ojwokkQJ7PQZA81usNnwjR4lE3RE4MTkfUZ9Y7iyQe edSFoMAH4F6zonXqdpuKEEeMfphifGNTczLDMC+Qe44y4cc/N6QqfppywxfNeQVSfVSZ GucCaiNPJyH1XqkAia+V2kdQKKfPweLNysXekUmQAg/TagTuCkXf1ZyRG6tdV6RyYRJj i3/PmF26Gqt+n047vhl89CUDVWAl2g9gy+Pt8sOxVhXfrlhE8Rg4NlPoBRhRLEGWFBwS vxqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613441; x=1758218241; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RUBWcTiGE2fz4jspmliN1on/EZodfLpmty6A15u2Kyw=; b=X5M4nQOqUB5uDWFArOEQ2MNaYsOcSjaBsW7RtN23qPAMdSNvA4OZifKKwq4kauxu63 gGTUzUlcp99qpiJKu7OFJ1n8FvPekwWdK/IdaSLSG9pkbziIdPEin90W/eZhLUTeTkCS KvzlrHHjvmtwUW7XlEG3VYRajbD++bSBIaRJSfSJdRMQncR1+tK6R4TpFOu/VPU5bcaA sctCojayiWLHvMOWa1ji5KX3NAeDbiyDSXeF21RtvZsstWffkI1b7LLOlQjzsYDgAon2 BTirSRPlRa3wZwGqvSDgOO/oY/MGCX4mlj2oZOuIxR03y0TZYVz8E0MPfBhl2Y1FLyTq JDUg== X-Forwarded-Encrypted: i=1; AJvYcCWKQS2qwcPHKEbwOs7ATFpvg+MWke+7DxA4+d+NcRiJSKNvK4w8wAtD1HmI7ayy0Nw/8PsAuSC+CDvp4L0=@vger.kernel.org X-Gm-Message-State: AOJu0YyYjSsu6QQCE91QUhwnMv3T8WaMhpjYHGC6RazcGrlV9LIayPff 5de3buyQHwOeXZ4KEl+N6lfA+POuMp0muY3jDcVrTDOKAzqc+3l9dxqU X-Gm-Gg: ASbGncuxYlc6nDP4GMXTeazXTbE7rSWSMn4ImYQChZOgpfyIB+NhkAmwUjGx6dGveSd OygO3LdyEP55j91l/lgPjeNCBMI8amTFw8lfbmfLI/H0uYjXCPyCxlgPitHJT0gOMqUsy78qa3R KpRXb49d5NKRm4rJsYFE85cGXmqPPeyrVZBWDbKTBZv5EmTis3Yg7yzoibkDQ+3RP8xXT0n/mUY aBvWyvXWXsmJxhHKUhXigAfx+oziu9t4lPZFUsNPogwYDtEFaLJ4sruX4KWAzEvcYo1zgbn7s1+ FWdI29W3Q8KB5NcqpyayOiEMntrCUdz+OkkLjGaWYT5xXMoi7L5A7F1vrG2fJMFVRTk1dk1cXvn td9vx3Ueq8TnIgjtj/FSp X-Google-Smtp-Source: AGHT+IHRiYrEzoCygb3ckQfAlUNDV712Ui9V9DGNAmSDLtmQVx2Imsk0mmPFfoDHHiLVel1tWNIbUA== X-Received: by 2002:a17:907:3f18:b0:b04:45e1:5929 with SMTP id a640c23a62f3a-b07c35cd746mr2716566b.28.1757613441423; Thu, 11 Sep 2025 10:57:21 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:21 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:13 +0300 Subject: [PATCH v3 5/9] power: supply: max77705_charger: add writable properties Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-5-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=2821; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=voRlcLKfoLfnlVLyVO+ZDmBOdNNCSLvdkGqha5/sHqA=; b=AcZsQgOUf1rNaOkJW4Vo9kbZxVm8iiuTb9TTwXZPYDBbPJDGT2EAuE62vHwrRvi7zyJ+rMwg/ tp71AXpbSf7BBky1ASlYiEo97V9gVqLX3UrgoqgMRYhbX3EfEhClDwi X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Add INPUT_CURRENT_LIMIT, CONSTANT_CHARGE_CURRENT properties as writeable to be able to control input power consumption and charging speed. Signed-off-by: Dzmitry Sankouski --- drivers/power/supply/max77705_charger.c | 54 +++++++++++++++++++++++++++++= ++++ 1 file changed, 54 insertions(+) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 93d055458849..d6a3cd98c898 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -105,6 +105,17 @@ static int max77705_get_online(struct regmap *regmap, = int *val) return 0; } =20 +static int max77705_set_integer(struct max77705_charger_data *chg, enum ma= x77705_field_idx fidx, + unsigned int clamp_min, unsigned int clamp_max, + unsigned int div, int val) +{ + unsigned int regval; + + regval =3D clamp_val(val, clamp_min, clamp_max) / div; + + return regmap_field_write(chg->rfield[fidx], regval); +} + static int max77705_check_battery(struct max77705_charger_data *chg, int *= val) { unsigned int reg_data; @@ -384,12 +395,55 @@ static int max77705_chg_get_property(struct power_sup= ply *psy, return 0; } =20 +static int max77705_set_property(struct power_supply *psy, + enum power_supply_property psp, + const union power_supply_propval *val) +{ + struct max77705_charger_data *charger =3D power_supply_get_drvdata(psy); + int err =3D 0; + + switch (psp) { + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: + err =3D max77705_set_integer(charger, MAX77705_CHG_CC_LIM, + MAX77705_CURRENT_CHGIN_MIN, + MAX77705_CURRENT_CHGIN_MAX, + MAX77705_CURRENT_CHG_STEP, + val->intval); + break; + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: + err =3D max77705_set_integer(charger, MAX77705_CHG_CHGIN_LIM, + MAX77705_CURRENT_CHGIN_MIN, + MAX77705_CURRENT_CHGIN_MAX, + MAX77705_CURRENT_CHGIN_STEP, + val->intval); + break; + default: + err =3D -EINVAL; + } + + return err; +}; + +static int max77705_property_is_writeable(struct power_supply *psy, + enum power_supply_property psp) +{ + switch (psp) { + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: + return true; + default: + return false; + } +} + static const struct power_supply_desc max77705_charger_psy_desc =3D { .name =3D "max77705-charger", .type =3D POWER_SUPPLY_TYPE_USB, .properties =3D max77705_charger_props, + .property_is_writeable =3D max77705_property_is_writeable, .num_properties =3D ARRAY_SIZE(max77705_charger_props), .get_property =3D max77705_chg_get_property, + .set_property =3D max77705_set_property, }; =20 static void max77705_chgin_isr_work(struct work_struct *work) --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) (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 36DD736298F for ; Thu, 11 Sep 2025 17:57:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613446; cv=none; b=AVlnOO4zmk7PkuiAEjSuqfzEwOpa5v3pJEui1pjxaRvOBhPYYsTeWanSrBRaNR7PopcYd+Z6+uNKkCvPIYVBHoXKpdCMLfg52/XRW/WNrA5I2TZDHyh6pXjVjMuxCeMU4b7WWp9EGhOEkI6TpT+RYjqeC5sG1bhUvbjY9z27OoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613446; c=relaxed/simple; bh=7FnUwbEmejwVSnUIHfEhq3amFSr92wAVZ9/qi8x2QuU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eurguV74fEcRbsIkdJyzXUcVhfkaD6OXqoAl48B6o+WZP1r96afZq1VbsyLGZ9wGtR464vx2WUnlO+Q5CiPo8IOsmINvOgltvfgois7Uh9641HDSss87nQUSNKmAIIZ6ta5Bfwf8/oAMDSmeygFySymdcbfXvGCHbN/wt/07Juw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DNcMGdhS; arc=none smtp.client-ip=209.85.218.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DNcMGdhS" Received: by mail-ej1-f53.google.com with SMTP id a640c23a62f3a-afcb7322da8so197497066b.0 for ; Thu, 11 Sep 2025 10:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613442; x=1758218242; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=ns7BKmWktTmho4BiSMW2JK0id4rh12+/PwSt6cjLKJc=; b=DNcMGdhStlQ25auDk2a2W5tU3cyPjYOWkQlBeBfQEvq48P4w7ZAxjA+5TsdDs7JQpX 1vfCqL2a446/3BtPcrwkQdu2FRLxj1ISgoP8dJJe9MxKLE8nRHLrAx9tTt7NNHzxA/xJ QJsGfVmCMqD/WkmH2P6xmCn19XHGQgV/KS5IeA8JEDK1dTE+Olq9DsFhcg4X0LBOtvII R/1kVveIY9WKQZAuc5Fanr0g15K3vEF9p9WPKDn+dEWamTa4zBb4blGaoaPzX5FRUO8+ ybolcybdbtQaMneKM710E4DA+gTVX0MOmyBNNbJ3G04GTHJTeYvERZcEkgmxDxSExaif 3HXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613442; x=1758218242; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ns7BKmWktTmho4BiSMW2JK0id4rh12+/PwSt6cjLKJc=; b=c/XhUiDjCZr/+j1ZdHwwd3oF84zbAwvWnPRs3icY9TSHhYKtNe249l2zoQJC0XWJP5 yzEJ4iD9F0GTXxaemw8vn1OQY0qtJQWc0uRY909DlN8RF7qvtRPtsfUv9piOwwBis/8P 1RrfoaprceKHZ3wDAzQNlCZ8o54r5oaj3UX8JpgDu4tWm1eaWn7oHCIGR3PzNn+Kx3Tv cPMTwKr0KAiwJ1Fn5N1tNgI9pwNZwhUYwtJ9kvhddmeOjAB93YWKp+ih01jCDtefXiUK q3EIAeg6jXmerl3s5tZWnhH/gFwV04G7UJXCoFktWYxjt2EesK7bUqGPC5jhYrW9El9q CpuQ== X-Forwarded-Encrypted: i=1; AJvYcCX3U0VZMQwvu4ApoK13SLZbYDy1RGcNbMN9u6PEniNfaT6orWk69dfrwtJBrFu5Q6dW184pAq8WxEcC2UQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzW/9F/KlkeRixpGU3+dYGTfsg0QW3jdjOTfqpEKBXutiu5ylrg WaUaCa61a32fQjMTdvcOyw+a591OWQ9n762yVxsQ6x/uP0lUe0q6VP1Q X-Gm-Gg: ASbGnctVGrMTlMdVsdN8TarYayrXxJQ7bk1SEJOlphJTJ80KtyaOAM3msnTealdIwM3 iAQSseGPx+7e0wJnvYqDAZ3/q1VpqFCMN6rx7k5E/hH+RX3ISsAnj4z1BnG6HAT738L7wf6fSaL 6OZoO+hh8Y6WNpSsLlmapGS8fEer+wGELTRubk0Nd+kM85OY+P2zgBNUkuOuazJ630xGtU75bsM W1hv/gDPQvYscoOJYLcqsNZTJAVVptwEMijrDKHdXz8Vm/q3gWibYqUtIr2EiMefoZTAFGr+w6w Dfsz1+t4I7+tu+tJw4KK0uB6EBjeVSnKWPHkgmR1YAva6fmZkTPjOgsHJ4dcePqbfIad8F6C2Ye lVEpaSeG6xZS0JKNiHOU8eTCb4J9RI4Rpj7ZaBfAXTg== X-Google-Smtp-Source: AGHT+IGiVvnqUjZ3ceOMlaWQ8YjsGzVxQQRaI5M4RP4yNgm8xaWg6d0U/yhQgijoQolYs+NLoeB72g== X-Received: by 2002:a17:906:9f8c:b0:b04:274a:fc87 with SMTP id a640c23a62f3a-b07c354f750mr3604666b.4.1757613442420; Thu, 11 Sep 2025 10:57:22 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:22 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:14 +0300 Subject: [PATCH v3 6/9] power: supply: max77705_charger: rework interrupts Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-6-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=2453; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=7FnUwbEmejwVSnUIHfEhq3amFSr92wAVZ9/qi8x2QuU=; b=II891kbNlU3RziHR48fRjxFXo101646zv9UIy591I8Z9TPlXzeTqFbGb6muQG0Zlw1v8aoee6 Kvx8pr/3h0/B2rnYNXmsvZtIMa5fs+ZAuQdBs9p1ksFQeTlVjSQ2/8K X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Current implementation uses handle_post_irq to actually handle chgin irq. This is not how things are meant to work in regmap-irq. Remove handle_post_irq, and request a threaded interrupt for chgin. Fixes: a6a494c8e3ce ("power: supply: max77705: Add charger driver for Maxim= 77705") Signed-off-by: Dzmitry Sankouski --- Changes to v3: - move irq initialization after workqueue and charger initialization --- drivers/power/supply/max77705_charger.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index d6a3cd98c898..5f831c25b150 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -40,13 +40,13 @@ static enum power_supply_property max77705_charger_prop= s[] =3D { POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, }; =20 -static int max77705_chgin_irq(void *irq_drv_data) +static irqreturn_t max77705_chgin_irq(int irq, void *irq_drv_data) { struct max77705_charger_data *chg =3D irq_drv_data; =20 queue_work(chg->wqueue, &chg->chgin_work); =20 - return 0; + return IRQ_HANDLED; } =20 static const struct regmap_irq max77705_charger_irqs[] =3D { @@ -64,7 +64,6 @@ static struct regmap_irq_chip max77705_charger_irq_chip = =3D { .name =3D "max77705-charger", .status_base =3D MAX77705_CHG_REG_INT, .mask_base =3D MAX77705_CHG_REG_INT_MASK, - .handle_post_irq =3D max77705_chgin_irq, .num_regs =3D 1, .irqs =3D max77705_charger_irqs, .num_irqs =3D ARRAY_SIZE(max77705_charger_irqs), @@ -593,12 +592,6 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) "cannot allocate regmap field\n"); } =20 - ret =3D regmap_update_bits(chg->regmap, - MAX77705_CHG_REG_INT_MASK, - MAX77705_CHGIN_IM, 0); - if (ret) - return ret; - pscfg.fwnode =3D dev_fwnode(dev); pscfg.drv_data =3D chg; =20 @@ -630,6 +623,15 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) goto destroy_wq; } =20 + ret =3D devm_request_threaded_irq(dev, regmap_irq_get_virq(irq_data, MAX7= 7705_CHGIN_I), + NULL, max77705_chgin_irq, + IRQF_TRIGGER_HIGH, + "chgin-irq", chg); + if (ret) { + pr_err("%s: Failed to Request IRQ (%d)\n", __func__, ret); + goto destroy_wq; + } + ret =3D max77705_charger_enable(chg); if (ret) { dev_err_probe(dev, ret, "failed to enable charge\n"); --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) (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 09F2D369974 for ; Thu, 11 Sep 2025 17:57:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613446; cv=none; b=X2vOuiB0xyWK+vygU9T0Loa3qvo9ViC1/tMSxNfZENulBZ7KRn5YKUygIxFOfYz0565/FzuVLU2ntisdHPT43u1zt+J9za3A2/DNVvLbBCQd3SpQcfCtgqs7MzJ0LXV7BD6y5ufPobD1Wszc/iIfHl7mjbfKhE8qutdsGTv63/I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613446; c=relaxed/simple; bh=9dpaf1yLVpZXC+LCSl2wXaiQ1SbVZCWbGt+psRKF3+s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FRCtmXbBZLsh0pYcqCn4U+FL3l14n1uH49JdiwA+5x0A7pJb2jweVxY8My+kziiLSaxWrjnSPvCdBVfAOu97+21bmC+pZAPtUsVcPBNPRNAlZi/BRsH/uv5UIJGQFVqWGiLw8melf23WoZR7/QeTTlsCM11xKUkvK1aQVpE//EI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZoIHOMwm; arc=none smtp.client-ip=209.85.218.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZoIHOMwm" Received: by mail-ej1-f45.google.com with SMTP id a640c23a62f3a-afcb7ae31caso172643666b.3 for ; Thu, 11 Sep 2025 10:57:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613443; x=1758218243; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=7bPgVJ0ul2fxqOmhEEoAxd5RxMtO+yv7dYQnAEtfz3Y=; b=ZoIHOMwmL66nesdkD0dT5w/TdgjJRgHYkjfEOO0yh9xXVG9KSiVcok61Q/ymlpjjpL j494NtmP5OnliAUXy3gVX8sgESEJcyzJjjODpYJjR4AbgpOXwsuWF7Ybo/knvbjSqN3b 61PAMqHDeJZPtvR/+V1vBW31jzGYkXqRMcgTGGXKLTMP4DzzVry8URHy6D2CD4uUaaVk pa456O2Put+AfaaJzlqkEBlom7wyhUlCsMZaEQym4WKF8VDFQRX2ZtlkzBhGuy/FR0zf WntUF/KVKpxTAtd/01vNux8js1h5k9QNUo3R3L+A3lQsnVXTrVKZNdVrGxmTrKhOmuyS G8gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613443; x=1758218243; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7bPgVJ0ul2fxqOmhEEoAxd5RxMtO+yv7dYQnAEtfz3Y=; b=MMYzisfEOUd/VEaRiEHQFDVO6Kol+e2ZWt3j3rT+ZiaL1Y/wVoDLtC63bFYX9et852 AUG/fb6t6WI8vyWillP2kXvTWG+v0+4BE2wbc2a4Tsk5cX4sTl51Ea8lfVr4xzQRyrlr f8lhU45SUyEoBPN/WRuZTew4WkJvl+tGFr7TRe2RmsGA73xKwfj7KGh4SFr5Sijai2xo dkr9NAucSvoputN9W7uWMNB78wlmM5qb7sRXO4gts5zab+WU61koIvqHyGYVgQKk1bP7 pDv8pLTQOgdhpoDtp/Y0RoOK/Ry9+w8Npz6ttgMYkZNCosvZd8DFrjWU7YrtMsoU6ElM OHpQ== X-Forwarded-Encrypted: i=1; AJvYcCX+HOBxGHlckEwDqe0NDnbc9euD/3nuWQaFF91LRhhRae+f0daANcXMwwehQmvD7H29N6ZwCkp5TjFAJe8=@vger.kernel.org X-Gm-Message-State: AOJu0YzXatb9rYatAc5UYEA73b2Jous5BHQCcUlTNC+lM0eX2enELgNX FjMMlhpgHB/+p3XKPP/mq+7UVkMfsnKUBBt+gRMibaJObi0dkMayKOYX X-Gm-Gg: ASbGncuUQp+9Tyas94GZSuw2X/EE+S9jIL66zImBPhITjZD5QB2Q+YcNu4cFzjWbr9B fJjVueT3BzPu2dU3ty4b4OgIwr22+3qSFPbk3iClysGXsDbJ6w89N92LRwjdzCFHqDIaDwrfFxW Phb53cV1L4FzAJcNdJzWMgkmMXCM9U/Z88w5HYr5TjC3wF7fOsGHRkCbuSgXVNYIVZcraBbDacd 9gOCxeTyv2pNyrur/56ZbVC8J3YcMEXC9NtdHMLli/uyqnCEzFL7b5N+oxb4bcq7KJDcnAaUxvI LO5iqrVzU+x7onAK4h23Q2ZPe3DGo87hyB7ky77YUpPas5JhiyMZiKDwdiTY2Jj3/hX1x6UMWSF KpjJTPO5mSYhn3v70Hk+3 X-Google-Smtp-Source: AGHT+IGVztii9/rvUD1LMkM8ybVECZCSKfpHLSZEl7RrMuAWfYojiBgxPheP4ePAefhXqjnP7ws1rw== X-Received: by 2002:a17:907:1c81:b0:b04:4b0d:8e82 with SMTP id a640c23a62f3a-b07c38684aamr574766b.50.1757613443430; Thu, 11 Sep 2025 10:57:23 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:23 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:15 +0300 Subject: [PATCH v3 7/9] power: supply: max77705_charger: use REGMAP_IRQ_REG_LINE macro Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-7-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=3504; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=9dpaf1yLVpZXC+LCSl2wXaiQ1SbVZCWbGt+psRKF3+s=; b=o9IFT5+Iyu7lNKqmqkmliRMvyQjC9c9df5rz84BcWx4oqZkRkKDtIhP28dHlZsyyYcQLaveSe LmPOSVBK1/FBjMaeJjvSKtcnX/5QRwWwOted8WaAfV+eBcP+hZ5ZOrl X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Refactor regmap_irq declarations with REGMAP_IRQ_REG_LINE saves a few lines on definitions. Signed-off-by: Dzmitry Sankouski --- drivers/power/supply/max77705_charger.c | 16 ++++++------- include/linux/power/max77705_charger.h | 42 +++++++++++++----------------= ---- 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 5f831c25b150..940cf3bf6d1a 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -50,14 +50,14 @@ static irqreturn_t max77705_chgin_irq(int irq, void *ir= q_drv_data) } =20 static const struct regmap_irq max77705_charger_irqs[] =3D { - { .mask =3D MAX77705_BYP_IM, }, - { .mask =3D MAX77705_INP_LIMIT_IM, }, - { .mask =3D MAX77705_BATP_IM, }, - { .mask =3D MAX77705_BAT_IM, }, - { .mask =3D MAX77705_CHG_IM, }, - { .mask =3D MAX77705_WCIN_IM, }, - { .mask =3D MAX77705_CHGIN_IM, }, - { .mask =3D MAX77705_AICL_IM, }, + REGMAP_IRQ_REG_LINE(MAX77705_BYP_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_INP_LIMIT_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_BATP_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_BAT_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_CHG_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_WCIN_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_CHGIN_I, BITS_PER_BYTE), + REGMAP_IRQ_REG_LINE(MAX77705_AICL_I, BITS_PER_BYTE), }; =20 static struct regmap_irq_chip max77705_charger_irq_chip =3D { diff --git a/include/linux/power/max77705_charger.h b/include/linux/power/m= ax77705_charger.h index a612795577b6..6653abfdf747 100644 --- a/include/linux/power/max77705_charger.h +++ b/include/linux/power/max77705_charger.h @@ -12,34 +12,24 @@ #include =20 /* MAX77705_CHG_REG_CHG_INT */ -#define MAX77705_BYP_I BIT(0) -#define MAX77705_INP_LIMIT_I BIT(1) -#define MAX77705_BATP_I BIT(2) -#define MAX77705_BAT_I BIT(3) -#define MAX77705_CHG_I BIT(4) -#define MAX77705_WCIN_I BIT(5) -#define MAX77705_CHGIN_I BIT(6) -#define MAX77705_AICL_I BIT(7) - -/* MAX77705_CHG_REG_CHG_INT_MASK */ -#define MAX77705_BYP_IM BIT(0) -#define MAX77705_INP_LIMIT_IM BIT(1) -#define MAX77705_BATP_IM BIT(2) -#define MAX77705_BAT_IM BIT(3) -#define MAX77705_CHG_IM BIT(4) -#define MAX77705_WCIN_IM BIT(5) -#define MAX77705_CHGIN_IM BIT(6) -#define MAX77705_AICL_IM BIT(7) +#define MAX77705_BYP_I (0) +#define MAX77705_INP_LIMIT_I (1) +#define MAX77705_BATP_I (2) +#define MAX77705_BAT_I (3) +#define MAX77705_CHG_I (4) +#define MAX77705_WCIN_I (5) +#define MAX77705_CHGIN_I (6) +#define MAX77705_AICL_I (7) =20 /* MAX77705_CHG_REG_CHG_INT_OK */ -#define MAX77705_BYP_OK BIT(0) -#define MAX77705_DISQBAT_OK BIT(1) -#define MAX77705_BATP_OK BIT(2) -#define MAX77705_BAT_OK BIT(3) -#define MAX77705_CHG_OK BIT(4) -#define MAX77705_WCIN_OK BIT(5) -#define MAX77705_CHGIN_OK BIT(6) -#define MAX77705_AICL_OK BIT(7) +#define MAX77705_BYP_OK BIT(MAX77705_BYP_I) +#define MAX77705_DISQBAT_OK BIT(MAX77705_INP_LIMIT_I) +#define MAX77705_BATP_OK BIT(MAX77705_BATP_I) +#define MAX77705_BAT_OK BIT(MAX77705_BAT_I) +#define MAX77705_CHG_OK BIT(MAX77705_CHG_I) +#define MAX77705_WCIN_OK BIT(MAX77705_WCIN_I) +#define MAX77705_CHGIN_OK BIT(MAX77705_CHGIN_I) +#define MAX77705_AICL_OK BIT(MAX77705_AICL_I) =20 /* MAX77705_CHG_REG_DETAILS_00 */ #define MAX77705_BATP_DTLS BIT(0) --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 5C51436C068 for ; Thu, 11 Sep 2025 17:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613448; cv=none; b=n9x2TIMaTLbyeohrSYF14axjQwU2YuMBHB9ANWU1SwM9Bp+nk/Ir08zX18qSk4lDh71Fzm+x4rU3HfT/4YXqI+U/X+dCKlHUFRZlQ4fr4WErlSHFKKWGIeVmmPvDHXIyM2xzindIdeuCTHMsEf43PdsebyqiL2Sot1Y4YfuqVtc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613448; c=relaxed/simple; bh=KN+pE4h11vlgMVCFVyty9w4n7joSzAuWRjWGP99v1fE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IU2xkk6AZfqevWVdfNSOEl2OU3y7AJc8gZyXK4ksscM7q3rdHBBUKxVQBmVWEXlRZl9nHm+s1J5fVeLa4trGq1wqsgfiVIAbkP5QseGfcXhCd9Zh/H/YRNH1ztIeItgamRy9C3hCVBBOhHUofa3FsQloTBXTaDDPpvVKaHDZhcQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=YAoTfLtF; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YAoTfLtF" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-b04770a25f2so143868366b.2 for ; Thu, 11 Sep 2025 10:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613445; x=1758218245; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=fzjo6MWwCNOQylCqR1hNpsDJ1s02PoW9fHOpS6lKCv8=; b=YAoTfLtFBANkcau+b7T57NKB+LKYITnWcUi6wxpsXYDTXtZimiZIbX+3DrL5RPYWVL kYnCNGz5CkGuDv4F43h3WHlWg5szJBPg5Ui8uubeh5vMVptc7gK8DlEi6s3FzEN+buzB AoOhFddxI8NxTSEczj7AOKYN+Giq0kDzwIWjUi9lPiiMQcUIE7lGcxLXPK803pAWa6XM 1OLyE6xOYYaPHbOkf8d/0O1EW64Bu1OR72Cw/3SW+gM4t295+2Qq6KDmwsC4gFLKoeJl ZD7O4Fw9NE99mLkohkX/mtS+gl0Sst8GdqqJDW1TjVvUIRIf+PMhDZ8vTm5usylxaVEE WPwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613445; x=1758218245; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fzjo6MWwCNOQylCqR1hNpsDJ1s02PoW9fHOpS6lKCv8=; b=Rj8UMW5f2xA8MAKUj99saooEFSIdQTyryns3jaHMNWVRIo2r5J5XNrehSIdFDcQ5We ej5sWyEQ982JPve4EbmYPVGIy8GzabXv5szUE6wiPipIt6KuSf7hwOTdhJJNIZ6oclxw CzlEiu4D/a2TB99lV6PrU/yrogIISlCJxRJLs1cFf0RVVrJ+AbIZoQCqf+EM7FPDpIbM cQewx19F2Cj92Mza8QJVP8BX+50+07xujuebPalYAmCxKxldanBecn/aSK0TYg+j6gbN WCvJuHxnPeAJTZQectnmJzP2T+w1y7fSUSmgN6Xd+2O1qgBY+v/ldraDEALQ20JoQDe2 9OIQ== X-Forwarded-Encrypted: i=1; AJvYcCVo9m4cLn+Y1lMQSATYr2EHydM9LkZ1urTYF/hqFy9bM1ktmPO7doav11WPV9fAv0l+CVVGQ7DTZyUTyDk=@vger.kernel.org X-Gm-Message-State: AOJu0YyBvn+oOirgef03aEyMbxUcBD80ZvvYMvYWqo1PwjC5tbin68qd sSYRNt1Qpfgis4OnQkVF8LEZwYPCzr0Ie9Svbg0dMBeSgzwwbIn1LDqo X-Gm-Gg: ASbGnctnB0Sn+KjKGxoAm4NFlSg3QLJ0Ob7erViC34v9eofdJJuFJEW/crHZUv49NMW 0Pi6LpRwBtiNQguW7v/xBIp7rxMgNwdHaZX+Mk3X25qvU7xGEEFBQVWh5c6TWqwVGqNbn/eE/r9 yOO5nStJJM8guK9mfn+YoVC7EktuiVhNzIZnRu1g5bXz5fYAeBS54rdQ9KZELWENPFvjlzy4vpL AChEJUmW5lRVEgb6WrhIRRi2dWRz4VrooH98G+T/Q9+AWGguq5nn6m7oibHJgnkWv+jlxq/GEPW D+Sr3MtE4UM7c1uoxMFVYpFCwd8OqBZq01L4NouBJ4R4pVz/gLSr97RGEYFjgnR+AvaHXJ2UAKc KAQxjZ/L1CGmJaM/zlzsT40iO/oMa6FU= X-Google-Smtp-Source: AGHT+IHi5/SUGJH0BgMRqINq8+nyl3PJ+DnoKOlrkkk7UHR9uuNELGc4iw3MJ9DIkZGl++SZKxmtMQ== X-Received: by 2002:a17:907:60d4:b0:b04:27de:12ec with SMTP id a640c23a62f3a-b07c354e8b1mr3692166b.4.1757613444498; Thu, 11 Sep 2025 10:57:24 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:24 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:16 +0300 Subject: [PATCH v3 8/9] power: supply: max77705_charger: implement aicl feature Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-8-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=4655; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=KN+pE4h11vlgMVCFVyty9w4n7joSzAuWRjWGP99v1fE=; b=ZTQjbFQfryjNwsFFGkl25VcOQJ0oJnVKR+34ealXy7C7JddwIBDMZP7VqLQyx7YgPFLk+i4Cr IVtofBcFpflDZoSuHIdujRVXQqsskeEWaEQFob7djugU977e8wyeHmQ X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= Adaptive input current allows charger to reduce it's current consumption, when source is not able to provide enough power. Signed-off-by: Dzmitry Sankouski --- drivers/power/supply/max77705_charger.c | 70 +++++++++++++++++++++++++++++= ++++ include/linux/power/max77705_charger.h | 5 +++ 2 files changed, 75 insertions(+) diff --git a/drivers/power/supply/max77705_charger.c b/drivers/power/supply= /max77705_charger.c index 940cf3bf6d1a..a943efc67546 100644 --- a/drivers/power/supply/max77705_charger.c +++ b/drivers/power/supply/max77705_charger.c @@ -40,6 +40,16 @@ static enum power_supply_property max77705_charger_props= [] =3D { POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, }; =20 +static irqreturn_t max77705_aicl_irq(int irq, void *irq_drv_data) +{ + struct max77705_charger_data *chg =3D irq_drv_data; + + queue_delayed_work(chg->wqueue, &chg->aicl_work, + msecs_to_jiffies(AICL_WORK_DELAY)); + + return IRQ_HANDLED; +} + static irqreturn_t max77705_chgin_irq(int irq, void *irq_drv_data) { struct max77705_charger_data *chg =3D irq_drv_data; @@ -445,6 +455,40 @@ static const struct power_supply_desc max77705_charger= _psy_desc =3D { .set_property =3D max77705_set_property, }; =20 +static void max77705_aicl_isr_work(struct work_struct *work) +{ + unsigned int regval, irq_status; + int err; + struct max77705_charger_data *chg =3D + container_of(work, struct max77705_charger_data, aicl_work.work); + + regmap_read(chg->regmap, MAX77705_CHG_REG_INT_OK, &irq_status); + if (!chg->is_aicl_irq_disabled) { + disable_irq(chg->aicl_irq); + chg->is_aicl_irq_disabled =3D true; + } + + if (!(irq_status & BIT(MAX77705_AICL_I))) { + err =3D regmap_field_read(chg->rfield[MAX77705_CHG_CHGIN_LIM], ®val); + if (err < 0) + return; + + regval--; + + pr_info("aicl call. regval: %d\n", regval); + err =3D regmap_field_write(chg->rfield[MAX77705_CHG_CHGIN_LIM], regval); + if (err < 0) + return; + + queue_delayed_work(chg->wqueue, &chg->aicl_work, + msecs_to_jiffies(AICL_WORK_DELAY)); + } else { + pr_info("aicl finish\n"); + enable_irq(chg->aicl_irq); + chg->is_aicl_irq_disabled =3D false; + } +} + static void max77705_chgin_isr_work(struct work_struct *work) { struct max77705_charger_data *chg =3D @@ -607,6 +651,16 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) if (ret) return dev_err_probe(dev, ret, "failed to add irq chip\n"); =20 + ret =3D devm_request_threaded_irq(dev, regmap_irq_get_virq(irq_data, MAX7= 7705_CHGIN_I), + NULL, max77705_chgin_irq, + IRQF_TRIGGER_HIGH, + "chgin-irq", chg); + if (ret) { + pr_err("%s: Failed to Request IRQ (%d)\n", __func__, ret); + return ret; + } + + chg->wqueue =3D create_singlethread_workqueue(dev_name(dev)); if (!chg->wqueue) return dev_err_probe(dev, -ENOMEM, "failed to create workqueue\n"); @@ -617,6 +671,12 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) goto destroy_wq; } =20 + ret =3D devm_delayed_work_autocancel(dev, &chg->aicl_work, max77705_aicl_= isr_work); + if (ret) { + dev_err_probe(dev, ret, "failed to initialize interrupt work\n"); + goto destroy_wq; + } + ret =3D max77705_charger_initialize(chg); if (ret) { dev_err_probe(dev, ret, "failed to initialize charger IC\n"); @@ -632,6 +692,16 @@ static int max77705_charger_probe(struct i2c_client *i= 2c) goto destroy_wq; } =20 + chg->aicl_irq =3D regmap_irq_get_virq(irq_data, MAX77705_AICL_I); + ret =3D devm_request_threaded_irq(dev, chg->aicl_irq, + NULL, max77705_aicl_irq, + IRQF_TRIGGER_HIGH, + "aicl-irq", chg); + if (ret) { + pr_err("%s: Failed to Request IRQ (%d)\n", __func__, ret); + goto destroy_wq; + } + ret =3D max77705_charger_enable(chg); if (ret) { dev_err_probe(dev, ret, "failed to enable charge\n"); diff --git a/include/linux/power/max77705_charger.h b/include/linux/power/m= ax77705_charger.h index 6653abfdf747..92fef95e4ac4 100644 --- a/include/linux/power/max77705_charger.h +++ b/include/linux/power/max77705_charger.h @@ -123,6 +123,8 @@ #define MAX77705_DISABLE_SKIP 1 #define MAX77705_AUTO_SKIP 0 =20 +#define AICL_WORK_DELAY 100 + /* uA */ #define MAX77705_CURRENT_CHGIN_STEP 25000 #define MAX77705_CURRENT_CHG_STEP 50000 @@ -185,7 +187,10 @@ struct max77705_charger_data { struct power_supply_battery_info *bat_info; struct workqueue_struct *wqueue; struct work_struct chgin_work; + struct delayed_work aicl_work; struct power_supply *psy_chg; + int is_aicl_irq_disabled; + int aicl_irq; }; =20 #endif /* __MAX77705_CHARGER_H */ --=20 2.39.5 From nobody Thu Oct 2 19:29:36 2025 Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) (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 6F15636C09C for ; Thu, 11 Sep 2025 17:57:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613449; cv=none; b=kCX7QHzwmd5+e6Z/tMWmr7aAWAz7cL3dqtHXXk5WCOh0/2k1Or4F8LoiWO2PZ1clPb5NFZDUty8qATI0+2QQSOWCxXYIxLf5F1nAdldDRY5GDgCtp7CSwtVmbKugJjK64qNjOhpg8Ds//RJIsbnarDFfv7t+D+tj1XIdp+E2FBY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757613449; c=relaxed/simple; bh=Art95FP4CDMp3B3wO95DSHb+3nyZc8ObS8pqSfOsfws=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=locgB/EoL4h/zk+9ZWlaFUS7MCKvLfNPmwEazXBdL2MnPb+e0Zy6vuGmeN0rmDsBSBk9dqdzExtkYKM1eKHYaq0M/A28FoOrsxs6C8k0apJsR+bTEzNbauATiO+N5L1Z1W7JLCgeEcyOA+IKjVHn4JTw5QNUGSem5yevMpU63tE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=DnusQyDx; arc=none smtp.client-ip=209.85.218.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DnusQyDx" Received: by mail-ej1-f47.google.com with SMTP id a640c23a62f3a-b07c081660aso46704366b.0 for ; Thu, 11 Sep 2025 10:57:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757613446; x=1758218246; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=eeAm2av/mnmRbyLHfv410Kah1AmetvGnLw+tWu4KGQ0=; b=DnusQyDxFyZaEPg75wwx8Xtu3C0WHXfvgiCivreY2Z/12MiSP02LtVHw50apCyx5cD OyM4wxASMEj6531iWY3RT/9yCZMj0SLxeCjMjFu4DtYuzHe4n0ZzoLLBdkqjX5pSqkZV NP5AwKf/Ehxn2DQAz6bFxrlfw+YsSp2fpNfN5S5i5QUBCeaIZi/qABo2Htc/ERZT/f1Y YVPyjY0d/lXwKz+tcSPadmWcFrULfke8I0ki5JyDFq/pnXZel/8DAqvudH6NJyVk0Icn +D7AcmAe/eNOQwbdwyqi73cuyPPao1anJVgsHr8V7GpGG+t7MNbwVej25UBzGx+uVXTE yqYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757613446; x=1758218246; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eeAm2av/mnmRbyLHfv410Kah1AmetvGnLw+tWu4KGQ0=; b=nc3XyujSkW56TVftAiePnaK1ie42idtOVlE9gXXG5iJPj+QOPIjothqh44r+sb7M4n m+qazT76TNCS0ZJEHN78ujI8SUiY3g1zeqN6a/CfDAS/3BjOW3sjtK1ZnekazF+IpkBt u2kCOCV/Y1D3GhY7pe8ZgOa8mARx78OVcV7PaDr1ZHCYp6j0jdEO/uyZRRNT+EyxbcAq p1rs7KMm6kBTRp/roqjyYZgHcHhwPxeYVJSsdWceeaBoLxAX940zZqsLNPBt+qIR9cu8 qWVBtmzrk+irdZoQ9muSB7N26GsHnYIMXRAZeehNEbLrZ+OnHckOElf8LCaEhUqaHVGQ lPcw== X-Forwarded-Encrypted: i=1; AJvYcCV3j/fxM7qqtD1CwwUAk/TlDeKPHkYyl9NADeTnLjLijDisT7Z6zQTMOYNsvlrrAkNBHPZmoZtq+LQ+hPA=@vger.kernel.org X-Gm-Message-State: AOJu0YxvDI8SniAc85ltXLCgA4u5NGq8B8wPKuWMh8kZmLZa9rjF46e/ 2EfoJtD0Iv+ATkZt/g4hCyCI0Qo3ZmCFleXH9lGb3Pok6PI/h2NIU5xP X-Gm-Gg: ASbGncshXh3vFvx9KkUa9jT7FglFLPT9X+sS0sQ1sYVgGrzda4xWuDnP4/JvTjHhXOK RX4OefBVJJahm8AxuXnJ0+syv57xohq54v+f4zNv2XPY3fvSAiZ1LpK+ewTkns2bi3WVjtuFL5W +TTVMbrJEKbHTvGmp8xYwcJLOQ7SCv5+iBb/nGpgj5riUaaiI2M4YLYhdtqLKcjLbxKSb6Dk4eX Gqcnz0+WuVafW6NVefW0o6Y/evJkIC/0YgpZa9I5yjelVjT63ANOdrJxzyBB2yUOsjgZaNkBRmf bmXsq3Hm0nI94vlrfzrmwrUgd2kMN/h7+J9Lr1+Vq8PV+/THIL2ER9zTXfXjbzJ2gnFfTD2Zszl hjOm+YCOLDkChcuKZk1fJdCvSfTbeewA= X-Google-Smtp-Source: AGHT+IHWQ/e7gEKIVRbGfVVqsMEfZtLXJsQsAnDauGbX28j0si/mFkkcJRYuSt/yHYH7IiWICpCOKg== X-Received: by 2002:a17:907:6ea8:b0:afe:b92b:28e9 with SMTP id a640c23a62f3a-b07c387716amr604066b.49.1757613445575; Thu, 11 Sep 2025 10:57:25 -0700 (PDT) Received: from [127.0.1.1] ([46.53.240.27]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-b07b312845esm171377166b.26.2025.09.11.10.57.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Sep 2025 10:57:25 -0700 (PDT) From: Dzmitry Sankouski Date: Thu, 11 Sep 2025 20:57:17 +0300 Subject: [PATCH v3 9/9] power: supply: max77976_charger: fix constant current reporting Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250911-max77705_77976_charger_improvement-v3-9-35203686fa29@gmail.com> References: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> In-Reply-To: <20250911-max77705_77976_charger_improvement-v3-0-35203686fa29@gmail.com> To: Chanwoo Choi , Krzysztof Kozlowski , Lee Jones , Sebastian Reichel , Luca Ceresoli Cc: Krzysztof Kozlowski , Sebastian Reichel , linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Dzmitry Sankouski X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=ed25519-sha256; t=1757613434; l=2453; i=dsankouski@gmail.com; s=20240619; h=from:subject:message-id; bh=Art95FP4CDMp3B3wO95DSHb+3nyZc8ObS8pqSfOsfws=; b=RN3URw53taYpw1iYJXq138CZsY9siQtErD7Mn6IrOOY6/U2S+nLo0enRQ/OaIiTEk+XrHgZ2r qYUc+85oAsUCsrqUENOfJcG2fYPovBV5nYjDZI4pD/m7ez7yIvo8e4W X-Developer-Key: i=dsankouski@gmail.com; a=ed25519; pk=YJcXFcN1EWrzBYuiE2yi5Mn6WLn6L1H71J+f7X8fMag= CHARGE_CONTROL_LIMIT is a wrong property to report charge current limit, because `CHARGE_*` attributes represents capacity, not current. The correct attribute to report and set charge current limit is CONSTANT_CHARGE_CURRENT. Rename CHARGE_CONTROL_LIMIT to CONSTANT_CHARGE_CURRENT. Fixes: 715ecbc10d6a ("power: supply: max77976: add Maxim MAX77976 charger d= river") Signed-off-by: Dzmitry Sankouski --- drivers/power/supply/max77976_charger.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/power/supply/max77976_charger.c b/drivers/power/supply= /max77976_charger.c index e6fe68cebc32..3d6ff4005533 100644 --- a/drivers/power/supply/max77976_charger.c +++ b/drivers/power/supply/max77976_charger.c @@ -292,10 +292,10 @@ static int max77976_get_property(struct power_supply = *psy, case POWER_SUPPLY_PROP_ONLINE: err =3D max77976_get_online(chg, &val->intval); break; - case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX: + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: val->intval =3D MAX77976_CHG_CC_MAX; break; - case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT: + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: err =3D max77976_get_integer(chg, CHG_CC, MAX77976_CHG_CC_MIN, MAX77976_CHG_CC_MAX, @@ -330,7 +330,7 @@ static int max77976_set_property(struct power_supply *p= sy, int err =3D 0; =20 switch (psp) { - case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT: + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: err =3D max77976_set_integer(chg, CHG_CC, MAX77976_CHG_CC_MIN, MAX77976_CHG_CC_MAX, @@ -355,7 +355,7 @@ static int max77976_property_is_writeable(struct power_= supply *psy, enum power_supply_property psp) { switch (psp) { - case POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT: + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT: case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT: return true; default: @@ -368,8 +368,8 @@ static enum power_supply_property max77976_psy_props[] = =3D { POWER_SUPPLY_PROP_CHARGE_TYPE, POWER_SUPPLY_PROP_HEALTH, POWER_SUPPLY_PROP_ONLINE, - POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT, - POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX, + POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT, + POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX, POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, POWER_SUPPLY_PROP_MODEL_NAME, POWER_SUPPLY_PROP_MANUFACTURER, --=20 2.39.5