From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.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 ADD0D435EF3 for ; Fri, 31 Jul 2026 14:43:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509025; cv=none; b=AVnjaJtCBmBFjzyQLbZONRAmJyFXRG8QufftzXKSmoyvTBZLjhHMfh2bWR6bHWhFgkwJwqETnfUWNrGfPMVvROWfDCqF5LIVLSnJpD7tfAYUs5z233fGhY82EWvcuR7Ji90gaNJ7V5P//dNe8blNJ5C4rVc1E+xl4/zfKuVndss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509025; c=relaxed/simple; bh=ZauFLZdTU+txgWmmv356NEPEzXfMT8LD2hrE87LiP44=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=g8nZLZKnX3T+oa+PthKBhLpOUFi2IMgK3hOaWyOj1rVQV+UTZz5hv/z2VxQO+O8WvJi6ocLJ/2RnOOj3dsgTRJwfEqnaEWvNAYFcRsCLRTM/nIitlUqjRYCtJL5ZE6BNK8mXzAMKoibIbfCgF7rRspR8zmwHTOgRfbYoCpcwjAI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=IR64gQhM; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="IR64gQhM" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-47de008b020so748456f8f.1 for ; Fri, 31 Jul 2026 07:43:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1785509022; x=1786113822; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OefaEnBP+Xtfr9MuFwvtjIyVzZPHMg8J6vmP5uhECmY=; b=IR64gQhMA1KYsxRCrRkgdwlR3sn+Q2axq56ejrhnQHh6u0CJE0VEdUX10IWeaVEaLo yIYDOKLYoD0xWCmLpa2eXy7kIUqjTIaFaZ5qrNt5v0mNC0YZl2j3D0i5NyGZCmHU4Vas jCuxIp6koN3YY1SlRshUzx2yioIzyW1YAPxLfikb3rOm2GgdEQj1fqWX2cjkh4XCDkBh Ac2pCK4UPYogEXQozYvDxlczPtk6PemUoNuAgD+S+104L32XR9RgIeBiUMusS+kbF544 Mpm0TXfDPfzmWpe/eo67P9OYZdg0WqZ3UXkBMjsRJ5bMVSh7Vk6Tfha0CTQet3g0VT48 y5fQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785509022; x=1786113822; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OefaEnBP+Xtfr9MuFwvtjIyVzZPHMg8J6vmP5uhECmY=; b=pCgl7PQ9p+haMkN/XZb9bBtDsZK9p54/zTHKwE35w/4318I/4E/Sf10Nz+WOmztPQT 4NpVu3XetRlmoCnq++l1SypKoC0Gf8CxfzjJILCUtGtuF7QIfZ2sYskr3VZMfm8WFhQw uF6+0M4DmJUIRLWjMvH/b1PoExlUNKNseV4ezfroY4F2rjIyOxI4967tWw3Sc9DBRVNf 2KCRD0WTlxf6Xj/9GwEdXV6CKIdNE3P5Oh7RQH5o4e54B+dUG4kTpV4qKlYjjW9QMzVC tPJmQRkwYHST4I8k1j2JWk354vGPeerfSHm4Z8362lfq+LdXM17kMB3tO0OEAiyL34p6 IOuQ== X-Forwarded-Encrypted: i=1; AHgh+Rr/GpU6BY9iHuw1lG3jm4sxy+iHvYthsemFALWTNBNi6R8M6NIbKP75rL1JRbUUhcWocONtGUAvZRet6HA=@vger.kernel.org X-Gm-Message-State: AOJu0YzCUVZlsfWYoJHBQz9GUJgukmtyfiUH0MCRczczseKP7UB3pw2M CDSjljBJ7g6UJy1TUjM3X8mAqz89wn0aE3LCjf27SWdcuDIlnL/Gr6mSegkrUEixQgE= X-Gm-Gg: AR+sD13kjNvbBR3Coeyw/akwGEiERf56rg9SF3rGhslzPsI2W7BMUW305bxkwKR24qM F63Zj7i9FuXlpTy4jiP3J7ltO7FNdi4ujys25M6RhrnvT1XBvEUS/GfNFhuUnf1Dh/zRUqkCzKt Ju9lgdZJ/OOdMRcqSIUU2bF8Mz5tz5PFZf6HAHvaKwym9u0bHzaPM9nZ5CjE1nYN+yRRZc6lrJQ zw1zDOPzUWyu1uEA1oAyHMnAvvUyhnXA1tgw/dkP8QX1tR5K6wulat3rE2spAEXr9KHSa1MTjwN yzHdrEbubMuPcTSVpSkR+018cjEilL64zA6yPEqT+9dj3BEWy4JTXi9mmCe31HMOcM/JGHUf1Ps gow077BBnXoGJw1Dt7k2Qurj4/cysTx2WaujHgjO7iX9pkh31bE1MqYaNsrkGYJEymvDS7/pEDv FfvEIpd6jf7YEBsK/VB7thgaLyt1bITe1IycKNtgqy1RO3TmVLeBWGLvN0jw== X-Received: by 2002:adf:e006:0:20b0:47f:8cd3:4bed with SMTP id ffacd0b85a97d-47fd337a59amr3716572f8f.5.1785509022076; Fri, 31 Jul 2026 07:43:42 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:d00b:bc94:65a:a73d]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-47fd4562a38sm5230093f8f.21.2026.07.31.07.43.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 07:43:41 -0700 (PDT) From: Jerome Brunet Date: Fri, 31 Jul 2026 16:43:26 +0200 Subject: [PATCH v6 1/5] mfd: axp20x: Constify axp313 and axp717 cells 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: <20260731-axp318-regulator-v6-1-b4e745552a35@baylibre.com> References: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> In-Reply-To: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1161; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=ZauFLZdTU+txgWmmv356NEPEzXfMT8LD2hrE87LiP44=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqbLSUbXC0AUQN/9QPDC4hIYb2pS/L+7N5ZlogK OLb4t0VYy+JAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCamy0lAAKCRDm/A8cN/La haFHD/0cD2X9T4BHAot9eA06cC2su429uKwQy2ssCgVeEJgwvQRDelI2C38FOppJK/frqh7fY2p pUUrWcBslpcrd4Y5EDyThWeaVTiNSryW+4wr2IhArooglHYO53weobOl+sBRYo3/4Bmgy7uRcmd xfLZ5knvcSrYQHa2gyhvfA6CmHAM0hpoNmqgleV2jP56mNWcxwL3qEvOf7bD3aSFFij5L2AUxRp 8rh6aeiV/bn1p5z7EQspcs9T6tOtWniff0LqX9FZE0f5Pb05YysL74/wVEB6osMSDUlsxmvegbr TX4i8GsJBruhbuhZP9B+tiy2H3rRL2tTNTxJ520WmfF1aID31jGsySfxYtFd3ArLRSaXzppUrno d3JIGPgA7QDURGzYJWNX5smnCY/K3W1ArtSyBB++UhTEtit0SiUDP6vyCup3lBYGBdZRIfZgffj /W3uD/waFoYRbPWBfBkWjgBRu0YeNFtY7OS7Xu6pluswLjYzH/k1fGPYkzGetR82KHCg2nkPbbn kPp5KdgIJJpMsiu6Jb1RvpX0cm0CuK9d3hpAOoWVTlUDQalBmFnigFq10X3UFkgdwPCpATC5pxW wGde2gJQdjXF09NVqclZ6b44YF5OzRFgOCYe07FRgoZAJRUIdlejsMuCOT1WLtWevUjDkhf8nmn wF8jBUj3eXP9JlA== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 mfd_cells array should generally be const and there does not seem to be anything against it for the axp313 and axp717. Constify the mfd_cells array for the axp313 and axp717 to be consistent with the other supported chips Acked-by: Chen-Yu Tsai Signed-off-by: Jerome Brunet --- drivers/mfd/axp20x.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 679364189ea5..22baab6e10fa 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -1055,13 +1055,13 @@ static const struct mfd_cell axp152_cells[] =3D { }, }; =20 -static struct mfd_cell axp313a_cells[] =3D { +static const struct mfd_cell axp313a_cells[] =3D { /* AXP323 is sometimes paired with AXP717 as sub-PMIC */ MFD_CELL_BASIC("axp20x-regulator", NULL, NULL, 0, 1), MFD_CELL_RES("axp313a-pek", axp313a_pek_resources), }; =20 -static struct mfd_cell axp717_cells[] =3D { +static const struct mfd_cell axp717_cells[] =3D { MFD_CELL_NAME("axp20x-regulator"), MFD_CELL_RES("axp20x-pek", axp717_pek_resources), MFD_CELL_OF("axp717-adc", --=20 2.47.3 From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D6655437113 for ; Fri, 31 Jul 2026 14:43:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509027; cv=none; b=l9zNhqSURJk1OW9/mybQ7If66CiUKqDNUTl9MCzopubpeakHgoow6/X+RU2PAFLGWtkSrW9fS9tj1fORoSHqibOKlQC5BesMPVeSWW/ebTGMcUch2FWJrAGfqX/npiD7R65eDnOT5nnxNFbhknPbWtN6bq9FP8H4kpWenhldQeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509027; c=relaxed/simple; bh=lhJoISafn130K97b4c6QzeXIJVjYvF5ziHC2eS4rk3o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jp2+QC5jvEcZNaBkj2h5ThuVW11FMsBZHfckdByEMxBPv7VE1Rk0BOq5aAwjMaToBjCyBKt6ysgQmWJ5ZSpUmwtV2c5PtZ+uNgZdB6Ahq4p0eIWwq4JC5udBUcr15YZFLBmFkNeA2HxQ5GxeEj+mPIHL6Vi+XsjCZ2voYMCp5CM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=EuKxsibz; arc=none smtp.client-ip=209.85.221.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="EuKxsibz" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-47df43bfb07so465413f8f.1 for ; Fri, 31 Jul 2026 07:43:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1785509024; x=1786113824; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PVrDmVbcjU7nFx3A1HBZefbtcBqMyRdnqfkjiEa3Df8=; b=EuKxsibz93CFbEdWiFT9u0ROhyj1FvBCi27RkIPHZrnkD3xghAKd17cjopt0AmmG/V EKPaoVECl8KQrr23CYw4Q2Sc42FXOtKARx02GdeN/DJFIGKg+OrcbyhHlROq5xFdZ47S BUGQ6a2rWpAn7hzaHwgA/b/FmtJ3q5u1VH6cnvrzT25aWPSEI+rn/5olQ093yxfLKXdy wuajGw2hiaPVWPojce7luhmbbk8gRoIDs0+m6N7ryxBDsV1olG78AoQbra3xG8dtPbJO +49ZcgOh9aWFDuIrQ5wgURaaQae+Acwl7u5tBS0amqla39fcFI/NKtpv2jjkW/Jkv0Rj VneQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785509024; x=1786113824; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=PVrDmVbcjU7nFx3A1HBZefbtcBqMyRdnqfkjiEa3Df8=; b=PI0KFj9oC0CruHvXqaBxISz99akqfpX/WKnBT4iCSCYxMU7xFH/0vzazSm2/AN9JQO biFWJAaY/Ixm0DggXQC6mc6UhrXeGceTbFeyta68ba08IodIbp6HG7Fe1rBzWgU+YQL1 30fvztNn3uxBVcT/A+B1fShgOdZxnvvbTxoJ6zbQcmY87P/8GFVceEw5vH2gq1OngsNk ZPUnd1a6Qy6mg4CxfdmnQQ2pQRwjLzG9Y/yLDRxiuk46LEBst5w+ImTFnqY59STsafEv 3jPQa7iK3NmswSk3RZw7nCless7pYYcwMbTFE6bCBkSOZCw029xmrpagERLz7bqAU+Wc YJug== X-Forwarded-Encrypted: i=1; AHgh+RqxVoK6oMMb9ungGZnIhXjh6VMeAfSjZ2aVA18lc2HZAmpmbpTusVwA/tGWpiRAjkmZy+2ZzP72ZIWUhOs=@vger.kernel.org X-Gm-Message-State: AOJu0YxqE+82kAZNZYxkEXVX37kuIoad/hXjZUgy2XO9PrNFy2Wc8ALy 7tI4tBhed9bzDNvcWjvij31jq6PAw98AFwREPTGjPvB0HETmOBjTuvKodlKlXMmaazY= X-Gm-Gg: AR+sD10xuSci89xWQy8LW+GPtgYuci+8elx2FtVyI8Oq2TLSOZy1W9XSzxbQ90u9LgR a0ziMZ+7Ik1EhaEzEJg7ZHWVoldDZClJSthfRO8tx9FYeMNmiC5t/4KI+tm//mD3y9EL6YpIPPl r8/viOaqUbCfE0c+gwUyqQkWibUD6tFGk7sD1lp0uK/TOs4YDZC+O6nq3kTxrPEnA70UiT0akM2 CQDYGHEcXsrfoFXrFoo3wc5Ymsvl+RphnoqOlL1RDKjzpd6kf0pJhXmCMpxOzXMtZQ1QeQWIX2S C1tt7F6WlvzyADvAExGweqXvYYGDlLKLZtJ2BCnH8a8kyjUJCeZZCUIxPaZVZ5whyt5tJFUqndh VbdGO5SJrRCp//lWf/wYmyUk+vu9Pz3f2rpMbyaN4imAeZbXh99oJIG1xX/s0h6wSpB84Bbk4Vd nKNQaSl2Y/wuhhftFZyFiqd3HlqczdTcXsFJaN7J8FmGo23CluUWfpW5fhDxejZPgRYlJc X-Received: by 2002:a05:6000:240a:b0:47f:9447:62bf with SMTP id ffacd0b85a97d-47fd2ab7af3mr5341878f8f.2.1785509024159; Fri, 31 Jul 2026 07:43:44 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:d00b:bc94:65a:a73d]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-47fd458ab61sm5519323f8f.25.2026.07.31.07.43.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 07:43:43 -0700 (PDT) From: Jerome Brunet Date: Fri, 31 Jul 2026 16:43:27 +0200 Subject: [PATCH v6 2/5] mfd: axp20x-i2c: Fix i2c instantiation 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: <20260731-axp318-regulator-v6-2-b4e745552a35@baylibre.com> References: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> In-Reply-To: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Sashiko , Jerome Brunet X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3852; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=lhJoISafn130K97b4c6QzeXIJVjYvF5ziHC2eS4rk3o=; b=kA0DAAoB5vwPHDfy2oUByyZiAGpstJWjcEsIoA1CfVov/PilL27bZbLXKeyEKxSVkr6cq/DEX 4kCMwQAAQoAHRYhBPThWa4Y8/VtXxu3G+b8Dxw38tqFBQJqbLSVAAoJEOb8Dxw38tqF/bMP/jm1 dxxZsIPtFRUXEd0Hhb5JaXi/Rs3tayID3Fu8bLq28Hg87mr24yYLxuAyzmOR+AryrdKbmI4mvGw CzoZa8DyE6zQY4eSOosE7Ae5Fd/IB1QAo6/VFm2Aw9JDBIBTQlo9YNqeGaMlkSNBWSOgDSjrV+l iEvf+PW05gI93yBo29SlGKEWbZkLLmyu9w5wjkGYvaOJAfMiPFqs9mB0YFtN4zvIMgGVqiUOHGo yrKeJHnr8+6NGHSg5uwg8NFd+oLYuhsY0iNXUr+qtR1VxsQqXZwMsF7MTPRi0WJDOvX3hoZRLFn EUxttrpMC3HDv5+IZovgrJFlTXBlmDrlvEkSvOs+y5pMu4tPIJIU37S7hcJv1j7njGe/yho6p8W Pz6vJpBtCTLJmaUUpU02r0jCiuMWD13okZ0QAWmeNZBelIpSVL5p1edeDFd9pxqc+3DEFEngBTT A/+2gMI9eyoOtX3pQ8xTZwHfv4tX1YWq+ZzGEWq5w8X6JnzzxWkvx4bJhZveutylgonHxep5UoH M2qiTdxUwRtO7IiS3gj8bvolx/rHfy0eZ7p256qXUf1rUJFnA61K3iip8rT5q5CJT29idBoVOqf GgnqeunuIYzScY0HA2j//FKezgBd4lvG/UinuTLVfG0VbfwvkRMJ0zTuZpywL8dqLlLCKPuG94J vvmJE X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 Apparently this device never really supported i2c instantiation via sysfs, because the driver does not even look at the i2c device data, which are not set. It would only probe if the device matched through DT. Fix that for correctness, even-though it is probably useless. Add the missing AXP323 while at it. Reported-by: Sashiko Closes: https://lore.kernel.org/r/20260717090209.2A09B1F000E9@smtp.kernel.o= rg Fixes: 41751b033aaa ("mfd: axp20x-i2c: Add i2c-ids to fix module auto-loadi= ng") Acked-by: Chen-Yu Tsai Signed-off-by: Jerome Brunet --- drivers/mfd/axp20x-i2c.c | 24 +++++++++++++----------- drivers/mfd/axp20x-rsb.c | 1 + drivers/mfd/axp20x.c | 1 - include/linux/mfd/axp20x.h | 3 +-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/drivers/mfd/axp20x-i2c.c b/drivers/mfd/axp20x-i2c.c index 5c93136f977e..a76bec5604c4 100644 --- a/drivers/mfd/axp20x-i2c.c +++ b/drivers/mfd/axp20x-i2c.c @@ -35,6 +35,7 @@ static int axp20x_i2c_probe(struct i2c_client *i2c) axp20x->irq =3D i2c->irq; dev_set_drvdata(axp20x->dev, axp20x); =20 + axp20x->variant =3D (kernel_ulong_t)i2c_get_match_data(i2c); ret =3D axp20x_match_device(axp20x); if (ret) return ret; @@ -76,17 +77,18 @@ MODULE_DEVICE_TABLE(of, axp20x_i2c_of_match); #endif =20 static const struct i2c_device_id axp20x_i2c_id[] =3D { - { "axp152" }, - { "axp192" }, - { "axp202" }, - { "axp209" }, - { "axp221" }, - { "axp223" }, - { "axp313a" }, - { "axp717" }, - { "axp803" }, - { "axp806" }, - { "axp15060" }, + { .name =3D "axp152", .driver_data =3D AXP152_ID }, + { .name =3D "axp192", .driver_data =3D AXP192_ID }, + { .name =3D "axp202", .driver_data =3D AXP202_ID }, + { .name =3D "axp209", .driver_data =3D AXP209_ID }, + { .name =3D "axp221", .driver_data =3D AXP221_ID }, + { .name =3D "axp223", .driver_data =3D AXP223_ID }, + { .name =3D "axp313a", .driver_data =3D AXP313A_ID }, + { .name =3D "axp323", .driver_data =3D AXP323_ID }, + { .name =3D "axp717", .driver_data =3D AXP717_ID }, + { .name =3D "axp803", .driver_data =3D AXP803_ID }, + { .name =3D "axp806", .driver_data =3D AXP806_ID }, + { .name =3D "axp15060", .driver_data =3D AXP15060_ID }, { } }; MODULE_DEVICE_TABLE(i2c, axp20x_i2c_id); diff --git a/drivers/mfd/axp20x-rsb.c b/drivers/mfd/axp20x-rsb.c index 059656f2a1bd..8fdc870c1fe4 100644 --- a/drivers/mfd/axp20x-rsb.c +++ b/drivers/mfd/axp20x-rsb.c @@ -35,6 +35,7 @@ static int axp20x_rsb_probe(struct sunxi_rsb_device *rdev) axp20x->irq =3D rdev->irq; dev_set_drvdata(&rdev->dev, axp20x); =20 + axp20x->variant =3D (kernel_ulong_t)device_get_match_data(axp20x->dev); ret =3D axp20x_match_device(axp20x); if (ret) return ret; diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 22baab6e10fa..84839d4aa1ca 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -1267,7 +1267,6 @@ int axp20x_match_device(struct axp20x_dev *axp20x) const struct mfd_cell *cells_no_irq =3D NULL; int nr_cells_no_irq =3D 0; =20 - axp20x->variant =3D (long)device_get_match_data(dev); switch (axp20x->variant) { case AXP152_ID: axp20x->nr_cells =3D ARRAY_SIZE(axp152_cells); diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h index b352661d99a1..1badb4868d17 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h @@ -997,8 +997,7 @@ static inline int axp20x_read_variable_width(struct reg= map *regmap, /** * axp20x_match_device(): Setup axp20x variant related fields * - * @axp20x: axp20x device to setup (.dev field must be set) - * @dev: device associated with this axp20x device + * @axp20x: axp20x device to setup (.dev and variant fields must be set) * * This lets the axp20x core configure the mfd cells and register maps * for later use. --=20 2.47.3 From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C43A743710B for ; Fri, 31 Jul 2026 14:43:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509030; cv=none; b=qT+6VjDGQn0LGn3vsUMAae6XfO4Z8iNt0/IbJ8QOn/w1uXGk2sfRCCJK1tWuONRnI5DugL54BK7z7Ge3s+lnWs0dcaZb9Kxb18eohpDXta9+tMr/HMmB0gysCIkkwWCcrr2jh2ndU9DGolEY5/dp6F2Yfatw5UFgkSknzJvrc1o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509030; c=relaxed/simple; bh=HNKPooQDA/uxDpi0iVReus05wyumo6SSu/JRjgFGHnI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mJHSo1AoysDvh4aQ+Lla1rBdAriBWKiU4p1YMYu65E1BXybeaVye3/qXOzV5AsBvSnAeGquOMgm8neSooAQFR7fJY9IhYoKVLNDjnsigDmFLS270eAkFg1VpVSm1NBg+iMqQhBQDhwV/VM+5tpNCbwqz2kna74QnL5HiQwmWkBs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=ONeXnRCG; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="ONeXnRCG" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-47640541585so815138f8f.1 for ; Fri, 31 Jul 2026 07:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1785509026; x=1786113826; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sMG++y6EWSQXnyGqXgGD2YHD3WKXzWPkbseer/BOl7g=; b=ONeXnRCGWA41hN0tAXQ5CByKbJ+ib1iAHAfI07wQetE57rBO6fF/KkXXHPQo/C4Xg0 2HGDRYyQ/Vz9M/PW6C68feOipQJ9Hg/d/IZo47J9Jxjfw3z4x77JtA6urHSK07SnjTsa Ugh9Mz5ce/38tTWldlce2ggHZBVmRghnI5Nun3nkQrrC0E3G9TgPrkb7wSOlaOwlduvW /0dxL1SeGZDKuNzcVKAPfla2KRJ9aqaKqsqw2lH0Cu4J4ZyNEKYjBOArVn3v+JjfdIaS hRtDQZMBQh/vNIeX+a26RF4Ip2/OX9+JotPPdJM/r5QIavMYVF1VvXYPbKsII1idY+iE 2dlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785509026; x=1786113826; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sMG++y6EWSQXnyGqXgGD2YHD3WKXzWPkbseer/BOl7g=; b=iJRIWKVHfBZYjA/fuL5V5ecFVtqEAV1dcx6J41IJPslNz2UHKCVIj6teImY9UBF028 0EI3xZTWI6ieWyN58l0qiYfvpUvPKbZC0uU2/mMrRUM0WH85vFwGHo8Ble3aYngynqe8 CtJybh/kvGkdSYV+IDrRY5lBRIeSsOjfqWZnuGopsvBqMBzj2h/bvf6mTzPaRmZjWCbd ppZM7/PDxWsFc5lPvtjzvhWdsO4DwLTqx7+eUyFqfiMVLyJjm97KYo7exDlJVbdGQw+u TnVh2xz4GQWKQbMxKVK3LmWxWZKZ5f6CQMTFhQQ3iDQ/50vMDJUBXp9ePcC4wR0KP+4z 3awQ== X-Forwarded-Encrypted: i=1; AHgh+Rp62R1GhE7sQCA3j/75jpHPL0EoUcYeeXNw/ZsqETk5mc6+zKcq5xZqzDnIm9r86uuu0G/6gOteUPk8on0=@vger.kernel.org X-Gm-Message-State: AOJu0YwKdSOiThWl7mgTOFMr8EqR8TD1mlQzJA++c/9YgGotAfEKQz82 5UL25HEkdm/l7dxH5m+6n54V9ZvAO5/RJkQsURzyW1D0MaysA86rBkPPDCV14ujurFN2sLRpVwV Z7BVR X-Gm-Gg: AR+sD13veOEKLAJSQsxq2/YfPvoohArVR3TKOYzsRYrLJQLRzBUeqR7jQyGBrZWFeCz TJhO24uXFFIZkS5XvRF0vG4Fe1SOw6wQO731KffdqGN42IU9VSHDciTn7I379wvDu2WPHXSo7h8 XhWfXP9kCZMxXh0qk+Wbe1yCwauH5OBajHSXbtZ2HSE0C18biuQQvxeAMHIuZEArjDYjm2O7Z9W yr4g8+Y4kXXuPMIY3s+wIDtam4yQVmI8nInOLvUTZJT804cqcvMtVZDNjDnHCeA8P4xPxi5FZon gFziUBWlH61wGZhWVR285D70E9832AMRry50BUEcmhATPla1JqcIttg2KJ052A8ze+42apwKYfs lGZRYkhLnBD7IFqbfzz9IyE6OAdb77ur4wWzpsAnHgEuEPF6U4knOkTyxSFBJVbtfUyX2SyeiF5 wWHNYRQJV0vWodoNBL2m7DJlnPBEhbfbsUucHAn178mD45FO63VaQw8XQkIQ== X-Received: by 2002:adf:e013:0:20b0:47f:93b4:2df3 with SMTP id ffacd0b85a97d-47fd2b5dda0mr3874450f8f.60.1785509026173; Fri, 31 Jul 2026 07:43:46 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:d00b:bc94:65a:a73d]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-47fd41d1956sm6314900f8f.6.2026.07.31.07.43.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 07:43:45 -0700 (PDT) From: Jerome Brunet Date: Fri, 31 Jul 2026 16:43:28 +0200 Subject: [PATCH v6 3/5] dt-bindings: mfd: x-powers,axp152: Document AXP318W 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: <20260731-axp318-regulator-v6-3-b4e745552a35@baylibre.com> References: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> In-Reply-To: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Conor Dooley , Jerome Brunet X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3753; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=hsuv5cpXOmqMVqVOdS3Ga8YcCzGfBUQhLGlSYAfReNA=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqbLSWStjgF/7RSm9jVDdLC685HlmH/jrkW5guT xkddw6jF+aJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCamy0lgAKCRDm/A8cN/La hVEAD/9Wui/UMbW2Zd+hoV+NnO2NMTe8WAboCzZqy30tbGBAZBrbNwAD8BK3evZUMY7hhugs9Ji afoFVIVlQ7bZ6bka6P2Tv6kdFmWx6Y/l44hjXkT5RFnB8P6b3HySzN/PPw7PLO/neRIPslDAMUV MvvmPZfWYznr4esy5V83naOStGjgz32Z6Z6DMmEG9uXF+uLO23ncQ3W770sXm3y6o1Lnn+cYvEb 1Y/hxC4XpsC2khf3LLqxC31ux52cFYmTIJtsOtrXQQ/qG/2mv6RjN/iqScq7B6w24B1s3kGPtXG xt6dxmsiPqxLVVoeYwjy8Qn2UJzQE5z+RMvktGGH8NEkBAXEgiN0Tv0I5H999WJXgdSZfOGcqEz cdTgeMAyHyzm9aw/TV4n9yXzNE/9/efQCfIB3ZPmpas0qLghRn/b3K1xCeqvuzpM5qqCk8MU67Y vU6Q9ojA3GgKIOOnQE4FBH3aJPld+pHGMw4WxCn4iDxYSOvUfpc27kxaZ6mYUxPrP/4enNNxONJ EO6oD+9wjYISYv2bfLkERmmoawk2CWa5NdVmd6PQfn81Vcq+A1FDB99ieL5CAFZMKuEKkHw8AgM o4Mks1kbyxmxN1gxw4Vou02qbpxZxm8Hae/ATSsNybyasGcMfgE4//3Nw8w72FldntNPI+r58PY NG/yh6EKFCvYrdg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 From: Andre Przywara The X-Powers AXP318W is a PMIC used on some newer Allwinner devices. Among a large number of both DCDC and LDO regulators it features the usual ADC/IRQ/power key parts. Like other recent PMICs, it lacks the DC/DC converter PWM frequency control register, that rate is fixed here (1.5MHz on DCDC1, 3 MHz on the others). Add the new compatible string, and add that to the list of PMICs without the PWM frequency property. Also add more input supply properties, for the split DCDC and ALDO supplies. The PMIC features *two* switched outputs, hanging of DCDC1, and the manual calls them swout1 and swout2, so follow suit here and add those names to the pattern for matching the node names. Signed-off-by: Andre Przywara Reviewed-by: Chen-Yu Tsai Acked-by: Conor Dooley Signed-off-by: Jerome Brunet --- .../devicetree/bindings/mfd/x-powers,axp152.yaml | 28 ++++++++++++++++++= +++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml b/D= ocumentation/devicetree/bindings/mfd/x-powers,axp152.yaml index 45f015d63df1..38556c32417b 100644 --- a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml +++ b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml @@ -83,6 +83,7 @@ allOf: contains: enum: - x-powers,axp313a + - x-powers,axp318w - x-powers,axp323 - x-powers,axp15060 - x-powers,axp717 @@ -102,6 +103,7 @@ properties: - x-powers,axp221 - x-powers,axp223 - x-powers,axp313a + - x-powers,axp318w - x-powers,axp323 - x-powers,axp717 - x-powers,axp803 @@ -156,10 +158,18 @@ properties: description: > DCDC1 power supply node, if present. =20 + vin19-supply: + description: > + Combined DCDC1/DCDC9 power supply node, if present. + vin2-supply: description: > DCDC2 power supply node, if present. =20 + vin23-supply: + description: > + Combined DCDC2/DCDC3 power supply node, if present. + vin3-supply: description: > DCDC3 power supply node, if present. @@ -168,6 +178,10 @@ properties: description: > DCDC4 power supply node, if present. =20 + vin45-supply: + description: > + Combined DCDC4/DCDC5 power supply node, if present. + vin5-supply: description: > DCDC5 power supply node, if present. @@ -176,6 +190,10 @@ properties: description: > DCDC6 power supply node, if present. =20 + vin678-supply: + description: > + Combined DCDC6/DCDC7/DCDC8 power supply node, if present. + vin7-supply: description: > DCDC7 power supply node, if present. @@ -220,6 +238,14 @@ properties: description: > ALDO* power supply node, if present. =20 + aldo156in-supply: + description: > + ALDO* power supply node, if present. + + aldo234in-supply: + description: > + ALDO* power supply node, if present. + bldoin-supply: description: > BLDO* power supply node, if present. @@ -277,7 +303,7 @@ properties: Defines the work frequency of DC-DC in kHz. =20 patternProperties: - "^(([a-f])?ldo[0-9]|dcdc[0-7a-e]|ldo(_|-)io(0|1)|(dc1)?sw|rtc(_|-)ld= o|cpusldo|drivevbus|dc5ldo|boost)$": + "^(([a-f])?ldo[0-9]|dcdc[0-9a-e]|ldo(_|-)io(0|1)|(dc1)?sw|swout[1-2]= |rtc(_|-)ldo|cpusldo|drivevbus|dc5ldo|boost)$": $ref: /schemas/regulator/regulator.yaml# type: object unevaluatedProperties: false --=20 2.47.3 From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 53FCE423EB6 for ; Fri, 31 Jul 2026 14:43:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509033; cv=none; b=RcSBhBZoiTFzsbmpB03AxRmhSLpkaMOJMrDm7lCXrCgFliwthHkLeeXhz0NHVLdaTN9j86roucjIO6J1BGX513cPD4MEexyjFb+9ewex8pfBmJl8Ny+iPbrmOX8v9xvDjnFAj5otExf2gI15ZGokQnl7qzrtN9yP25qGQqZpGP8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509033; c=relaxed/simple; bh=wXqZSdqvIcJKWS3NHh7hSZzb0Fy4RHTv7j5v15ANLnU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GBvq9tc4c4bU+nl5eVtSKFWeJyyqJEXYINw5HM3oz5DMnDAxKle2facrdnxQNJvrwetxzv+vI+jKgqgt5FLZwZT2zvRZayb4jfoW11ciSlEXpm+SPZC465tty5vNUOQ6qF7WCEmW6WPtGmUeJZreoeJ21LgGyUeZjwO5h1InD74= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=jPWNY6yf; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="jPWNY6yf" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-47f81a3ccf9so988921f8f.0 for ; Fri, 31 Jul 2026 07:43:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1785509028; x=1786113828; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nLCXRdYBbzsqqU+KjFO/DdbrpddiifvGaDhMVqXEjUY=; b=jPWNY6yfoOf2dQP2PQGJtm+L1rgrkzG/hqoEvXPxxDJ0DVEFmt8Vs4SIVSgtHv0LJ5 SDSSRAPQ8HYOSHLVYv5lgxXAVM+vr8Xu4336E1YHuGef37fxENUX2cy7LcuBaj8AZCtR cWsOBeW7PmQD6LfpyD6RYGQc7YMoFP2olEQJfGefSdzJkVwpg8wCOb/NDCUQhxXmxeMl qx6hPv+KA6G5hXNApcVBpPPhBmJY8pIr97hTV4fyypKUWto/ry7UtqJJA24R9b6TjFEf +tUWCle37JWMX7PeFdC9Ca/zIwpnkWJ3eNfPSnbVYzRedPU1Wp8cKQEK12khsz2+A581 g7DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785509028; x=1786113828; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nLCXRdYBbzsqqU+KjFO/DdbrpddiifvGaDhMVqXEjUY=; b=a+NebRhNqeQexcGPJ3xWRHDwND9PEFilfyF7hWOTT28ajghGVuWeQ3EPCD5H8zpMm2 hG9Jt143Rp+8Kn7bcAC7pKe3epvHbOzjxCDqya5QRTPQ5o93C0mpDth2BIFYIkWEO9h2 t9/q/gENdX2MjM+9erIF/xjEtG0+Vf6ubJ8h6WiYM2u9eH6sa1T15LgPPqQjrYAK257a XNd4NwEBkMir6nif0VvmAmd1qhoyefw8SzXxZ3yXXXEsnEAXcJaCvdeUwQFfq9Ys04fl dNNX0zwxKETFe5ZWHHLSAB0npTUGsq1J2n2g8VqwljF+USuB2L/TSIav76jhjsVLmTA0 8s1g== X-Forwarded-Encrypted: i=1; AHgh+Rr33UkDDP8B161024sxPVwFL3FdLQAT8EjlFJ0+1hSwbh9QaxerqAotIOb1JzqenJPGJJg/NEj0EMLdqso=@vger.kernel.org X-Gm-Message-State: AOJu0YzYxwvHTs/ggB6gUydhpBf+Sr4sm6T5TskqQaqPY7JAz8Zt/pm3 Z+k6tPV0D+A1vz0Ye3dfR+Ac5OBUyrooNDZdi7ZdjsZEgLfWSl2gzqnyDHLEysWfdx8= X-Gm-Gg: AR+sD136JVDTdbbNbGbePkiNUNr9NrF1UVO+ZLcCLdjGYdw7m2wqBes0kjwLxJdNQdj yJwkoRD+bwHfqyMbsIK0P1sXjrwpP/2lysyMC3UUkYyo4J5s5iUiv4ZWYJ0q0mC3QVSYz/t1eE6 CE3LnkINbY4TQYW8xUyMCh1ZuHNxYF3zGxlbqLW4Ex/RzvmqaxkRTYrrVBYwUpv5Mhvn3x70OvR A3VbpmxDRiMyYPSfYZaF6dHH02KPSvwadjkOXkqWb+khgNHi2LPHYtzWZkI9kVu4nZC2lpSlK+k Lk0hh+NggKyXX5uG23XAPQI6yUFPnbXCrzQIjI+lBlw/kKi47ZqqYzyi3o8KblUziGiqI8ZICBG PwOJ4AwpZ7VXjwqSYvZl4Ce1dD8RhbZKCNhUzJPEFcsyzB7vBKIFP3tfgeDwbsYPCKHdZQuMZBy sVoDBJZA4137oupTqYOx2prcvyQ6LnjZK0SDCcRHrdt/KsT4CVkwgSxTh/bA== X-Received: by 2002:a05:6000:4711:b0:45e:f8d0:d22c with SMTP id ffacd0b85a97d-47fd2ae654emr4909308f8f.25.1785509028210; Fri, 31 Jul 2026 07:43:48 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:d00b:bc94:65a:a73d]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-47fd45a0ae0sm5475387f8f.33.2026.07.31.07.43.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 07:43:47 -0700 (PDT) From: Jerome Brunet Date: Fri, 31 Jul 2026 16:43:29 +0200 Subject: [PATCH v6 4/5] mfd: axp20x: Add support for AXP318W PMIC 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: <20260731-axp318-regulator-v6-4-b4e745552a35@baylibre.com> References: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> In-Reply-To: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=11128; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=lCIoI2OR8DW2EqdOmZne0ZKTXbwoT8DKQPeKDXJ7r8I=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqbLSXPtgdf09i47ObAaeSdtKrbh5MGfKP7nbJU 1Fp5tbtLMmJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCamy0lwAKCRDm/A8cN/La hUBWD/0eVjhuV2ppVEnOQ+k8ZvZVT0iZaxr2GFJwu2CIgCRYNj1fflooSEA+jjGpCcuIcgj4DBD AWZHZsj9D4U/wGKcLQf4nEZPmjwFqRtoupiue5gc91JUxFVfw1TUOwKLPLNVBlt02HFYQK0xUmz Wb53Seq2nzIu99l9CpB0mZ6lNNdZTNBMcJpZtznMdE5M8WqNWxJvFcG3Gky6Be8+Wsrn8Upgops JeaukiDppE0GICP53IaTAp6g7w/mi09U7HRhKfo5feCS13bGtcKT+afAnKiV4Er8Qs2Sot888QW KYrZXGq/uSYZSqqZXNZcNhJEK25n98ZKwazygRSTRArv9XX/DpF1mtJBtR7/qB9XUnwbtW+MZoG zSvcKWdp98F064EP/HRhW4dubBlXwAtY1T0ZukoI75dy28cQro9N0KqFUlmlkiO+S59yKm/C4Fz TcIklPLY5vffZV0nfY7ork4MpRH6u81oLj/LG7bhNzSHDTltDo4s/Do5Z1XG2+y9Pq8rADcM+WS PkbOWNFU4jcJOWmLoVIQb3VqcK1mQ5TBqiw8Defe57MtEtncorb6ifsSKCQoocSqGUNG2FPtaTq zpxywVTlitJUDDA3p+VAhG+f9XKu3Bx3szRKRuOcsw0xrUnseC58p46nA8otp7o3j9E/bm5WDhr eBlspQd8ET6PNHg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 From: Andre Przywara The AXP318W is a PMIC chip produced by X-Powers, it can be connected to an I2C bus. It has a large number of regulators: 9(!) DCDC buck converters, and 28 LDOs, also some ADCs, interrupts, and a power key. Describe the regmap and the MFD bits, along with the registers exposed via I2C only. This covers the regulators and interrupts for now. Advertise the device using the new compatible string. We use just "318" for the internal identifiers, for easier typing and less churn, but use "318W" for anything externally visible. If something else other than the "AXP318W" shows up, that's an easy change then. Signed-off-by: Andre Przywara Signed-off-by: Jerome Brunet --- drivers/mfd/axp20x-i2c.c | 2 ++ drivers/mfd/axp20x.c | 81 ++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 88 ++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 171 insertions(+) diff --git a/drivers/mfd/axp20x-i2c.c b/drivers/mfd/axp20x-i2c.c index a76bec5604c4..64c212b76e5e 100644 --- a/drivers/mfd/axp20x-i2c.c +++ b/drivers/mfd/axp20x-i2c.c @@ -66,6 +66,7 @@ static const struct of_device_id axp20x_i2c_of_match[] = =3D { { .compatible =3D "x-powers,axp221", .data =3D (void *)AXP221_ID }, { .compatible =3D "x-powers,axp223", .data =3D (void *)AXP223_ID }, { .compatible =3D "x-powers,axp313a", .data =3D (void *)AXP313A_ID }, + { .compatible =3D "x-powers,axp318w", .data =3D (void *)AXP318_ID }, { .compatible =3D "x-powers,axp323", .data =3D (void *)AXP323_ID }, { .compatible =3D "x-powers,axp717", .data =3D (void *)AXP717_ID }, { .compatible =3D "x-powers,axp803", .data =3D (void *)AXP803_ID }, @@ -84,6 +85,7 @@ static const struct i2c_device_id axp20x_i2c_id[] =3D { { .name =3D "axp221", .driver_data =3D AXP221_ID }, { .name =3D "axp223", .driver_data =3D AXP223_ID }, { .name =3D "axp313a", .driver_data =3D AXP313A_ID }, + { .name =3D "axp318w", .driver_data =3D AXP318_ID }, { .name =3D "axp323", .driver_data =3D AXP323_ID }, { .name =3D "axp717", .driver_data =3D AXP717_ID }, { .name =3D "axp803", .driver_data =3D AXP803_ID }, diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 84839d4aa1ca..ea00c0cdce58 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -42,6 +42,7 @@ static const char * const axp20x_model_names[] =3D { [AXP223_ID] =3D "AXP223", [AXP288_ID] =3D "AXP288", [AXP313A_ID] =3D "AXP313a", + [AXP318_ID] =3D "AXP318W", [AXP323_ID] =3D "AXP323", [AXP717_ID] =3D "AXP717", [AXP803_ID] =3D "AXP803", @@ -218,6 +219,31 @@ static const struct regmap_access_table axp313a_volati= le_table =3D { .n_yes_ranges =3D ARRAY_SIZE(axp313a_volatile_ranges), }; =20 +static const struct regmap_range axp318_writeable_ranges[] =3D { + regmap_reg_range(AXP318_DCDC_OUTPUT_CONTROL1, AXP318_IRQ_STATE4), + regmap_reg_range(AXP318_SHUTDOWN_SRC_CTRL1, AXP318_TEMP_ADC_H_EN), + regmap_reg_range(AXP318_DIE_TEMP_ADC_H_EN, AXP318_DIE_TEMP_ADC_H_EN), + regmap_reg_range(AXP318_GPADC_H_EN, AXP318_GPADC_H_EN), + regmap_reg_range(AXP318_GPIO_CTRL, AXP318_WDOG_CTRL), +}; + +static const struct regmap_range axp318_volatile_ranges[] =3D { + regmap_reg_range(AXP318_IRQ_EN1, AXP318_IRQ_STATE4), + regmap_reg_range(AXP318_POWER_REASON, AXP318_SHUTDOWN_SOURCE), + regmap_reg_range(AXP318_TEMP_ADC_H_EN, AXP318_GPADC_L), + regmap_reg_range(AXP318_GPIO_INPUT, AXP318_GPIO_INPUT), +}; + +static const struct regmap_access_table axp318_writeable_table =3D { + .yes_ranges =3D axp318_writeable_ranges, + .n_yes_ranges =3D ARRAY_SIZE(axp318_writeable_ranges), +}; + +static const struct regmap_access_table axp318_volatile_table =3D { + .yes_ranges =3D axp318_volatile_ranges, + .n_yes_ranges =3D ARRAY_SIZE(axp318_volatile_ranges), +}; + static const struct regmap_range axp717_writeable_ranges[] =3D { regmap_reg_range(AXP717_PMU_FAULT, AXP717_MODULE_EN_CONTROL_1), regmap_reg_range(AXP717_MIN_SYS_V_CONTROL, AXP717_BOOST_CONTROL), @@ -447,6 +473,15 @@ static const struct regmap_config axp313a_regmap_confi= g =3D { .cache_type =3D REGCACHE_MAPLE, }; =20 +static const struct regmap_config axp318_regmap_config =3D { + .reg_bits =3D 8, + .val_bits =3D 8, + .wr_table =3D &axp318_writeable_table, + .volatile_table =3D &axp318_volatile_table, + .max_register =3D AXP318_WDOG_CTRL, + .cache_type =3D REGCACHE_MAPLE, +}; + static const struct regmap_config axp323_regmap_config =3D { .reg_bits =3D 8, .val_bits =3D 8, @@ -663,6 +698,28 @@ static const struct regmap_irq axp313a_regmap_irqs[] = =3D { INIT_REGMAP_IRQ(AXP313A, DIE_TEMP_HIGH, 0, 0), }; =20 +static const struct regmap_irq axp318_regmap_irqs[] =3D { + INIT_REGMAP_IRQ(AXP318, DCDC8_V_LOW, 0, 7), + INIT_REGMAP_IRQ(AXP318, DCDC7_V_LOW, 0, 6), + INIT_REGMAP_IRQ(AXP318, DCDC6_V_LOW, 0, 5), + INIT_REGMAP_IRQ(AXP318, DCDC5_V_LOW, 0, 4), + INIT_REGMAP_IRQ(AXP318, DCDC4_V_LOW, 0, 3), + INIT_REGMAP_IRQ(AXP318, DCDC3_V_LOW, 0, 2), + INIT_REGMAP_IRQ(AXP318, DCDC2_V_LOW, 0, 1), + INIT_REGMAP_IRQ(AXP318, DCDC1_V_LOW, 0, 0), + INIT_REGMAP_IRQ(AXP318, PEK_RIS_EDGE, 1, 6), + INIT_REGMAP_IRQ(AXP318, PEK_FAL_EDGE, 1, 5), + INIT_REGMAP_IRQ(AXP318, PEK_LONG, 1, 4), + INIT_REGMAP_IRQ(AXP318, PEK_SHORT, 1, 3), + INIT_REGMAP_IRQ(AXP318, DIE_TEMP_HIGH_LV2, 1, 2), + INIT_REGMAP_IRQ(AXP318, DIE_TEMP_HIGH_LV1, 1, 1), + INIT_REGMAP_IRQ(AXP318, DCDC9_V_LOW, 1, 0), + INIT_REGMAP_IRQ(AXP318, GPIO3_INPUT, 2, 6), + INIT_REGMAP_IRQ(AXP318, GPIO2_INPUT, 2, 5), + INIT_REGMAP_IRQ(AXP318, GPIO1_INPUT, 2, 4), + INIT_REGMAP_IRQ(AXP318, WDOG_EXPIRE, 3, 0), +}; + static const struct regmap_irq axp717_regmap_irqs[] =3D { INIT_REGMAP_IRQ(AXP717, SOC_DROP_LVL2, 0, 7), INIT_REGMAP_IRQ(AXP717, SOC_DROP_LVL1, 0, 6), @@ -884,6 +941,17 @@ static const struct regmap_irq_chip axp313a_regmap_irq= _chip =3D { .num_regs =3D 1, }; =20 +static const struct regmap_irq_chip axp318_regmap_irq_chip =3D { + .name =3D "axp318w_irq_chip", + .status_base =3D AXP318_IRQ_STATE1, + .ack_base =3D AXP318_IRQ_STATE1, + .unmask_base =3D AXP318_IRQ_EN1, + .init_ack_masked =3D true, + .irqs =3D axp318_regmap_irqs, + .num_irqs =3D ARRAY_SIZE(axp318_regmap_irqs), + .num_regs =3D 4, +}; + static const struct regmap_irq_chip axp717_regmap_irq_chip =3D { .name =3D "axp717_irq_chip", .status_base =3D AXP717_IRQ0_STATE, @@ -1061,6 +1129,10 @@ static const struct mfd_cell axp313a_cells[] =3D { MFD_CELL_RES("axp313a-pek", axp313a_pek_resources), }; =20 +static const struct mfd_cell axp318_cells[] =3D { + MFD_CELL_BASIC("axp20x-regulator", NULL, NULL, 0, 1), +}; + static const struct mfd_cell axp717_cells[] =3D { MFD_CELL_NAME("axp20x-regulator"), MFD_CELL_RES("axp20x-pek", axp717_pek_resources), @@ -1248,6 +1320,9 @@ static int axp20x_power_off(struct sys_off_data *data) case AXP313A_ID: shutdown_reg =3D AXP313A_SHUTDOWN_CTRL; break; + case AXP318_ID: + shutdown_reg =3D AXP318_SHUTDOWN_CTRL; + break; default: shutdown_reg =3D AXP20X_OFF_CTRL; break; @@ -1312,6 +1387,12 @@ int axp20x_match_device(struct axp20x_dev *axp20x) axp20x->regmap_cfg =3D &axp313a_regmap_config; axp20x->regmap_irq_chip =3D &axp313a_regmap_irq_chip; break; + case AXP318_ID: + axp20x->nr_cells =3D ARRAY_SIZE(axp318_cells); + axp20x->cells =3D axp318_cells; + axp20x->regmap_cfg =3D &axp318_regmap_config; + axp20x->regmap_irq_chip =3D &axp318_regmap_irq_chip; + break; case AXP323_ID: axp20x->nr_cells =3D ARRAY_SIZE(axp313a_cells); axp20x->cells =3D axp313a_cells; diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h index 1badb4868d17..0191467de4ec 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h @@ -19,6 +19,7 @@ enum axp20x_variants { AXP223_ID, AXP288_ID, AXP313A_ID, + AXP318_ID, AXP323_ID, AXP717_ID, AXP803_ID, @@ -116,6 +117,71 @@ enum axp20x_variants { #define AXP313A_IRQ_STATE 0x21 #define AXP323_DCDC_MODE_CTRL2 0x22 =20 +#define AXP318_DCDC_OUTPUT_CONTROL1 0x10 +#define AXP318_DCDC_OUTPUT_CONTROL2 0x11 +#define AXP318_DCDC1_CONTROL 0x12 +#define AXP318_DCDC2_CONTROL 0x13 +#define AXP318_DCDC3_CONTROL 0x14 +#define AXP318_DCDC4_CONTROL 0x15 +#define AXP318_DCDC5_CONTROL 0x16 +#define AXP318_DCDC6_CONTROL 0x17 +#define AXP318_DCDC7_CONTROL 0x18 +#define AXP318_DCDC8_CONTROL 0x19 +#define AXP318_DCDC9_CONTROL 0x1a +#define AXP318_LDO_OUTPUT_CONTROL1 0x20 +#define AXP318_LDO_OUTPUT_CONTROL2 0x21 +#define AXP318_LDO_OUTPUT_CONTROL3 0x22 +#define AXP318_LDO_OUTPUT_CONTROL4 0x23 +#define AXP318_ALDO1_CONTROL 0x24 +#define AXP318_ALDO2_CONTROL 0x25 +#define AXP318_ALDO3_CONTROL 0x26 +#define AXP318_ALDO4_CONTROL 0x27 +#define AXP318_ALDO5_CONTROL 0x28 +#define AXP318_ALDO6_CONTROL 0x29 +#define AXP318_BLDO1_CONTROL 0x2a +#define AXP318_BLDO2_CONTROL 0x2b +#define AXP318_BLDO3_CONTROL 0x2c +#define AXP318_BLDO4_CONTROL 0x2d +#define AXP318_BLDO5_CONTROL 0x2e +#define AXP318_CLDO1_CONTROL 0x2f +#define AXP318_CLDO2_CONTROL 0x30 +#define AXP318_CLDO3_CONTROL 0x31 +#define AXP318_CLDO4_CONTROL 0x32 +#define AXP318_CLDO5_CONTROL 0x33 +#define AXP318_DLDO1_CONTROL 0x34 +#define AXP318_DLDO2_CONTROL 0x35 +#define AXP318_DLDO3_CONTROL 0x36 +#define AXP318_DLDO4_CONTROL 0x37 +#define AXP318_DLDO5_CONTROL 0x38 +#define AXP318_DLDO6_CONTROL 0x39 +#define AXP318_ELDO1_CONTROL 0x3a +#define AXP318_ELDO2_CONTROL 0x3b +#define AXP318_ELDO3_CONTROL 0x3c +#define AXP318_ELDO4_CONTROL 0x3d +#define AXP318_ELDO5_CONTROL 0x3e +#define AXP318_ELDO6_CONTROL 0x3f +#define AXP318_IRQ_EN1 0x40 +#define AXP318_IRQ_EN2 0x41 +#define AXP318_IRQ_EN3 0x42 +#define AXP318_IRQ_EN4 0x43 +#define AXP318_IRQ_STATE1 0x48 +#define AXP318_IRQ_STATE2 0x49 +#define AXP318_IRQ_STATE3 0x4a +#define AXP318_IRQ_STATE4 0x4b +#define AXP318_POWER_REASON 0x50 +#define AXP318_SHUTDOWN_SOURCE 0x51 +#define AXP318_SHUTDOWN_SRC_CTRL1 0x52 +#define AXP318_SHUTDOWN_SRC_CTRL2 0x53 +#define AXP318_SHUTDOWN_CTRL 0x55 +#define AXP318_TEMP_ADC_H_EN 0x65 +#define AXP318_TEMP_ADC_L 0x66 +#define AXP318_DIE_TEMP_ADC_H_EN 0x67 +#define AXP318_GPADC_H_EN 0x69 +#define AXP318_GPADC_L 0x6a +#define AXP318_GPIO_CTRL 0x70 +#define AXP318_GPIO_INPUT 0x71 +#define AXP318_WDOG_CTRL 0x77 + #define AXP717_ON_INDICATE 0x00 #define AXP717_PMU_STATUS_2 0x01 #define AXP717_BC_DETECT 0x05 @@ -819,6 +885,28 @@ enum axp313a_irqs { AXP313A_IRQ_PEK_RIS_EDGE, }; =20 +enum axp318_irqs { + AXP318_IRQ_DCDC1_V_LOW, + AXP318_IRQ_DCDC2_V_LOW, + AXP318_IRQ_DCDC3_V_LOW, + AXP318_IRQ_DCDC4_V_LOW, + AXP318_IRQ_DCDC5_V_LOW, + AXP318_IRQ_DCDC6_V_LOW, + AXP318_IRQ_DCDC7_V_LOW, + AXP318_IRQ_DCDC8_V_LOW, + AXP318_IRQ_DCDC9_V_LOW, + AXP318_IRQ_DIE_TEMP_HIGH_LV1, + AXP318_IRQ_DIE_TEMP_HIGH_LV2, + AXP318_IRQ_PEK_SHORT, + AXP318_IRQ_PEK_LONG, + AXP318_IRQ_PEK_FAL_EDGE, + AXP318_IRQ_PEK_RIS_EDGE, + AXP318_IRQ_GPIO1_INPUT =3D 20, + AXP318_IRQ_GPIO2_INPUT, + AXP318_IRQ_GPIO3_INPUT, + AXP318_IRQ_WDOG_EXPIRE =3D 24, +}; + enum axp717_irqs { AXP717_IRQ_VBUS_FAULT, AXP717_IRQ_VBUS_OVER_V, --=20 2.47.3 From nobody Fri Oct 2 12:20:43 2026 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C67CF43849B for ; Fri, 31 Jul 2026 14:43:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509035; cv=none; b=dHe0uU20FJ3YF8jXX45RqUOIr22HhJmxJQAMhCZdWzXK9hP7VAgOh3vzFyRcz0kDZOdbuBvnSEQiob7HzPhgXEbFZvudPmgXS2YD5p9ggPtXHNBRQ9aJjvGSDPcxZiZ+0XmXGmqZ6gjgj+HJpi9YTIFTHmLCMOfgKtwMrffvaT0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785509035; c=relaxed/simple; bh=cPlCNpAmkXW66Y4FH05sass5lvTqJtGFtyB1OWNY78w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ijurz+Nsd/FVxMz1axUbXbJaIiVQR9by1rkvikhTRyTBsVkrFgSOK+PQB0CM8nj7RYV55KoJtbTmlJeWhMnHnhoJVqNTSGcvIQ6Z5xXcwyU8p0tietEuSeLCFfqy0wQ0d+uJFWadSx2s8hgj3qfSsxNUUz78dz9oniA0CnhcdVE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=U2pDU8ZC; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="U2pDU8ZC" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-47fd66a094eso74354f8f.3 for ; Fri, 31 Jul 2026 07:43:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1785509031; x=1786113831; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8QdM7aDJ6BUm8/+T7aYi5rYCae/1VGfhBTecUKPKjBE=; b=U2pDU8ZCwkymsPbMlKuh8MTBEydm1NfdfeghA0f6kUuhkwF+c7uvxx08OJamVzb9q2 +wFgUWeZZ5BwCzUXJYosJboeHfFfgtvkAici2Y0i8XEiVhjjEsKVO4iSN5v/FFn4jAt9 hVCZ/AKOjf2wEhY0lBKIQYQgUcgEtuMXFIHC6Wn1QKEnxicnLA0p62ym2ZCUgyyFYSWK ofpmIS+jN0D0UkYd/mGKgQ2herdZbjWxk1oMi0CtLkztZ50uYcCSR0A2cmZI2k4X+g0q zIm6+dJtQD9qGdRw72w6JwKSMSwG/oUm07lg9tHyXihF6MLQzxpqLqwH91HL3Klg4y9H t4/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785509031; x=1786113831; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=8QdM7aDJ6BUm8/+T7aYi5rYCae/1VGfhBTecUKPKjBE=; b=i9B5VDTt48u5OW/xmA7G7FbZwW0E91thlj11TMryxPgfKwNXV40gg2sxvYcvjxBfAg wPJ8hQNBF0De5gNmbQw6nv8YveLB3+CKV6YXQyEvKwlSJMOUkrIwBLOhl12jkzjPGJL2 8BOMA6/lgY8E2eiJHw+dJ9L3BS5NlvnVbRPPuWqrMeWxwqJIq1A2Ssq7h73rUsVicBxN D14U5O9fPpWG5D++ZgyE4TnlxTI8JMj/w4kmJq0M2siwncJ2ScmrDLFx86kdJz2NOyA6 BjoKtx5a1ujGI6KEkXgiRxsv+kCGV/C8wm9dNH8xLFF4cvkz2vdZCHF3jKYjBE3md5Xh fFwg== X-Forwarded-Encrypted: i=1; AHgh+Rqm7IFjoFHFodPqxJlgoQOrByp/iVc0hUR1wM8Btm11cB6zvwNTpIcHv5L7H/uo7PfHnVacPMavONkmSyo=@vger.kernel.org X-Gm-Message-State: AOJu0YzR9BywAU1UIgM9YhaZPJ3Mk/lQLtetgw59XgzIlN/XWpUOOke0 BzQ1tb+b9RH1kTIuWzWPDc/Uq2NxuMUqhy7YbWnXhikqAddpt580tNrEs2LN9WoQ0CA= X-Gm-Gg: AR+sD13/lty3hDoX+K3CTBTWYJzAp4FangqDLhUUOpSWdygJtK9NjYWBNr3JGek0+9V Z9Kt79sJyjLHx8WFqoFNaku5sOctLFixhj6qh5Swa3ujwOUzMssKd8iV64ZT0dWfxjVAZF8Ocaq 0QM1ITp3KgvKyu/l0/IrtEfGPhIhRUILd4b5RcCrYmeLlzyjLdtmvZV6yZY1P4ubhzwscXFo7zL 3NTeT5tlNgoZFGQA/uwb15SxHHwhTpsMzTlxrZTha+ibLu0hCnUIpULNeGX4KAqmd7jgJ+4J+Ny hk/2fL/HNgFp44GwI2nMYEUlJEcHjmKBS84XUNuQvsaduCSpJdD2JcW0LJ0BeczZy07W6nWBLQI HneNtZvFAx+ol8uMIfE6EhqDD4j8bnOprzeY8uBopJnYwytIitaTOmLWPHDw8kX+YGpFdtVym1G qKjcN+Wx3G5jtzmagGZ1e9UYcTupIUY7RMmqRDqwD4MTqlYZzJuutrp3umCw== X-Received: by 2002:a05:6000:240a:b0:47f:9447:62bf with SMTP id ffacd0b85a97d-47fd2ab7af3mr5342805f8f.2.1785509030936; Fri, 31 Jul 2026 07:43:50 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:d00b:bc94:65a:a73d]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-47fd41d1756sm5428824f8f.4.2026.07.31.07.43.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jul 2026 07:43:50 -0700 (PDT) From: Jerome Brunet Date: Fri, 31 Jul 2026 16:43:30 +0200 Subject: [PATCH v6 5/5] regulator: axp20x: add support for the AXP318W 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: <20260731-axp318-regulator-v6-5-b4e745552a35@baylibre.com> References: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> In-Reply-To: <20260731-axp318-regulator-v6-0-b4e745552a35@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Jerome Brunet X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=21087; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=4RVYcCbWmpUy7Aem4G3dzn5By1vjwTdoe6KYKqM0p+M=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqbLSY6jluuzGopfUEsojtzhTVTzsaLFxleKCFq oSPP8JOaoWJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCamy0mAAKCRDm/A8cN/La hePCD/9iWlAMGfNEjvc6+UxZCjmeS/Um4lR6iI/xcg1UL42/dZtCdwkVF6vcoYuBlC3B+Ludd+3 IA1D51Rx+N+X+6KFWyGPfDHJKKBiRHCtRHy4kjBWmVNIoLSgIeyDAaM7wX5t8bJnCQwgRJR5PCU bDqg0+8TALp+YS3HDd1eDRCp9yvyE38q63GknhQwVuzO/c43io4HpI3EQuDXb2tP95CgiQCwha/ uGFbuwDleAEKhxunn1waUJyj5p2RxOLsUIFHn1sdwVYRYozeAOxktzWFjlOYaMPajB/BMqcvhPa FZkQroCfxiwdYuE4vgCuNmUWWgbv0es1s2J4q+ubU2XMqFxHKwh0mqYmBIP4hxWXvPaCDO1IWdu rluBGsY0AvGQUANgo+H3z6NQwaH3hATKeOTT2R1oUch9PAWMQvJNdCsmSZVfVW4m+aa01ey6sQz mPRCQF385+BM2bK/n2/cIBvBc2WMc2LVCAer8CcXIkQi5epB5bO/A99OPB2u9MMabUGYGwcxCyE DktjrJvR9Klvmj9HM4Y3BZl+fCCla1IXsmhTpFcoG2wcFpWj2PXdebgOuH3r0PWVXdHNfezwO2X jF62tFUwDNIjB8O7JNlHrYKdhAd59dctqJWvUdYjExM5mERTDcR5ko7SU9p6bVRIbIgQ0Jy+v9U FiutM3pNHle8hmg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 From: Andre Przywara The X-Powers AXP318W is a typical PMIC from X-Powers, featuring nine DC/DC converters and 28 LDOs, on the regulator side. Describe the chip's voltage settings and switch registers, how the voltages are encoded, and connect this to the MFD device via its regulator ID. We use just "318" for the internal identifiers, for easier typing and less churn. If something else other than the "AXP318W" shows up, that's an easy change, externally visible strings carry the additional letter already. Reviewed-by: Mark Brown Signed-off-by: Andre Przywara Co-developed-by: Jerome Brunet Signed-off-by: Jerome Brunet --- drivers/regulator/axp20x-regulator.c | 324 +++++++++++++++++++++++++++++++= +++- include/linux/mfd/axp20x.h | 45 +++++ 2 files changed, 360 insertions(+), 9 deletions(-) diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20= x-regulator.c index da891415efc0..9e81e2cb7542 100644 --- a/drivers/regulator/axp20x-regulator.c +++ b/drivers/regulator/axp20x-regulator.c @@ -138,6 +138,29 @@ #define AXP313A_DCDC_V_OUT_MASK GENMASK(6, 0) #define AXP313A_LDO_V_OUT_MASK GENMASK(4, 0) =20 +#define AXP318_DCDC1_PFM_PWM_CTRL BIT(7) +#define AXP318_DCDC23_POLYPHASE_CTRL BIT(6) +#define AXP318_DCDC45_POLYPHASE_CTRL BIT(7) +#define AXP318_DCDC1_V_OUT_MASK GENMASK(4, 0) +#define AXP318_DCDC2_V_OUT_MASK GENMASK(6, 0) +#define AXP318_LDO_V_OUT_MASK GENMASK(4, 0) +#define AXP318_ELDO_V_OUT_MASK GENMASK(5, 0) +#define AXP318_THRESHOLD_VOLTAGE 1540000 +/* + * FIXME: + * Some LDOs of the AXP318 may be fed by different supplies and + * the documentation repeatedly warns that output voltage must + * be less than the supply, which is the case for any LDO really. + * + * The best way to let the framework handle this is to set the + * min_dropout_uV field. However the AXP318 documentation + * does not provide any information about this. + * + * Realistically, it can't be less than 1uV so use this + * for all LDOs until we know more. + */ +#define AXP318_LDO_MIN_DROPOUT 1 /* uV */ + #define AXP717_DCDC1_NUM_VOLTAGES 88 #define AXP717_DCDC2_NUM_VOLTAGES 107 #define AXP717_DCDC3_NUM_VOLTAGES 103 @@ -371,8 +394,8 @@ .ops =3D &axp20x_ops, \ } =20 -#define AXP_DESC(_family, _id, _match, _supply, _min, _max, _step, _vreg, \ - _vmask, _ereg, _emask) \ +#define AXP_DESC_EXT(_family, _id, _match, _supply, _min, _max, _step, _vr= eg, \ + _vmask, _ereg, _emask, _ops, _bpreg, _bpmask, _dropout) \ [_family##_##_id] =3D { \ .name =3D (_match), \ .supply_name =3D (_supply), \ @@ -384,13 +407,32 @@ .owner =3D THIS_MODULE, \ .min_uV =3D (_min) * 1000, \ .uV_step =3D (_step) * 1000, \ + .min_dropout_uV =3D (_dropout), \ .vsel_reg =3D (_vreg), \ .vsel_mask =3D (_vmask), \ .enable_reg =3D (_ereg), \ .enable_mask =3D (_emask), \ - .ops =3D &axp20x_ops, \ + .bypass_reg =3D (_bpreg), \ + .bypass_mask =3D (_bpmask), \ + .ops =3D (_ops), \ } =20 +#define AXP_DESC(_family, _id, _match, _supply, _min, _max, _step, _vreg, \ + _vmask, _ereg, _emask) \ + AXP_DESC_EXT(_family, _id, _match, _supply, _min, _max, _step, _vreg, \ + _vmask, _ereg, _emask, &axp20x_ops, 0, 0, 0) + +#define AXP_DESC_DO(_family, _id, _match, _supply, _min, _max, _step, _vre= g, \ + _vmask, _ereg, _emask, _dropout) \ + AXP_DESC_EXT(_family, _id, _match, _supply, _min, _max, _step, _vreg, \ + _vmask, _ereg, _emask, &axp20x_ops, 0, 0, _dropout) + +#define AXP_DESC_BYPASS(_family, _id, _match, _supply, _min, _max, _step, = _vreg,\ + _vmask, _ereg, _emask, _bpreg, _bpmask, _dropout) \ + AXP_DESC_EXT(_family, _id, _match, _supply, _min, _max, _step, _vreg, \ + _vmask, _ereg, _emask, &axp20x_bypass_ops, _bpreg, \ + _bpmask, _dropout) + #define AXP_DESC_SW(_family, _id, _match, _supply, _ereg, _emask) \ [_family##_##_id] =3D { \ .name =3D (_match), \ @@ -419,8 +461,9 @@ .ops =3D &axp20x_ops_fixed \ } =20 -#define AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges, _n_v= oltages, \ - _vreg, _vmask, _ereg, _emask, _ramp_delay) \ +#define AXP_DESC_RANGES_DELAY_OPS(_family, _id, _match, _supply, _ranges, \ + _n_voltages, _vreg, _vmask, _ereg, _emask, \ + _ramp_delay, _ops) \ [_family##_##_id] =3D { \ .name =3D (_match), \ .supply_name =3D (_supply), \ @@ -436,10 +479,23 @@ .enable_mask =3D (_emask), \ .linear_ranges =3D (_ranges), \ .n_linear_ranges =3D ARRAY_SIZE(_ranges), \ - .ramp_delay =3D (_ramp_delay), \ - .ops =3D &axp20x_ops_range, \ + .ramp_delay =3D (_ramp_delay), \ + .ops =3D (_ops), \ } =20 +#define AXP_DESC_RANGES_THRESHOLD(_family, _id, _match, _supply, _ranges, \ + _n_voltages, _vreg, _vmask, _ereg, _emask) \ + AXP_DESC_RANGES_DELAY_OPS(_family, _id, _match, _supply, _ranges, \ + _n_voltages, _vreg, _vmask, _ereg, _emask, \ + 0, &axp318_threshold_ops_range) + +#define AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges, \ + _n_voltages, _vreg, _vmask, _ereg, _emask, \ + _ramp_delay) \ + AXP_DESC_RANGES_DELAY_OPS(_family, _id, _match, _supply, _ranges, \ + _n_voltages, _vreg, _vmask, _ereg, _emask, \ + _ramp_delay, &axp20x_ops_range) + #define AXP_DESC_RANGES(_family, _id, _match, _supply, _ranges, _n_voltage= s, \ _vreg, _vmask, _ereg, _emask) \ AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges, \ @@ -567,6 +623,50 @@ static int axp20x_regulator_enable_regmap(struct regul= ator_dev *rdev) return regulator_enable_regmap(rdev); }; =20 +static int axp318_threshold_check(struct regulator_dev *rdev, + unsigned int sel) +{ + int old_sel, old_uV, new_uV, enabled; + + /* Only applicable if the regulator is enabled */ + enabled =3D rdev->desc->ops->is_enabled(rdev); + if (enabled <=3D 0) + return enabled; + + old_sel =3D rdev->desc->ops->get_voltage_sel(rdev); + if (old_sel < 0) + return old_sel; + + old_uV =3D rdev->desc->ops->list_voltage(rdev, old_sel); + if (old_uV < 0) + return old_uV; + + new_uV =3D rdev->desc->ops->list_voltage(rdev, sel); + if (new_uV < 0) + return new_uV; + + /* Crossing the threshold ? */ + if ((old_uV <=3D AXP318_THRESHOLD_VOLTAGE && + new_uV > AXP318_THRESHOLD_VOLTAGE) || + (new_uV <=3D AXP318_THRESHOLD_VOLTAGE && + old_uV > AXP318_THRESHOLD_VOLTAGE)) + return -EBUSY; + + return 0; +} + +static int axp318_threshold_set_voltage_sel(struct regulator_dev *rdev, + unsigned int sel) +{ + int ret; + + ret =3D axp318_threshold_check(rdev, sel); + if (ret < 0) + return ret; + + return regulator_set_voltage_sel_regmap(rdev, sel); +} + static const struct regulator_ops axp20x_ops_fixed =3D { .list_voltage =3D regulator_list_voltage_linear, }; @@ -580,6 +680,15 @@ static const struct regulator_ops axp20x_ops_range =3D= { .is_enabled =3D regulator_is_enabled_regmap, }; =20 +static const struct regulator_ops axp318_threshold_ops_range =3D { + .set_voltage_sel =3D axp318_threshold_set_voltage_sel, + .get_voltage_sel =3D regulator_get_voltage_sel_regmap, + .list_voltage =3D regulator_list_voltage_linear_range, + .enable =3D regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .is_enabled =3D regulator_is_enabled_regmap, +}; + static const struct regulator_ops axp20x_ops =3D { .set_voltage_sel =3D regulator_set_voltage_sel_regmap, .get_voltage_sel =3D regulator_get_voltage_sel_regmap, @@ -590,6 +699,18 @@ static const struct regulator_ops axp20x_ops =3D { .set_ramp_delay =3D axp20x_set_ramp_delay, }; =20 +static const struct regulator_ops axp20x_bypass_ops =3D { + .set_voltage_sel =3D regulator_set_voltage_sel_regmap, + .get_voltage_sel =3D regulator_get_voltage_sel_regmap, + .list_voltage =3D regulator_list_voltage_linear, + .enable =3D axp20x_regulator_enable_regmap, + .disable =3D regulator_disable_regmap, + .is_enabled =3D regulator_is_enabled_regmap, + .set_ramp_delay =3D axp20x_set_ramp_delay, + .get_bypass =3D regulator_get_bypass_regmap, + .set_bypass =3D regulator_set_bypass_regmap, +}; + static const struct regulator_ops axp20x_ops_sw =3D { .enable =3D regulator_enable_regmap, .disable =3D regulator_disable_regmap, @@ -765,6 +886,158 @@ static const struct regulator_desc axp313a_regulators= [] =3D { AXP_DESC_FIXED(AXP313A, RTC_LDO, "rtc-ldo", "vin1", 1800), }; =20 +static const struct linear_range axp318_dcdc2_ranges[] =3D { + REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), + REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000), +}; + +static const struct linear_range axp318_dcdc6_ranges[] =3D { + REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), + REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000), + REGULATOR_LINEAR_RANGE(1800000, 88, 118, 20000), + REGULATOR_LINEAR_RANGE(2440000, 119, 127, 40000), +}; + +static const struct linear_range axp318_dcdc7_ranges[] =3D { + REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), + REGULATOR_LINEAR_RANGE(1220000, 71, 102, 20000), +}; + +static const struct linear_range axp318_dcdc8_ranges[] =3D { + REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), + REGULATOR_LINEAR_RANGE(1220000, 71, 102, 20000), + REGULATOR_LINEAR_RANGE(1900000, 103, 118, 100000), +}; + +static const struct regulator_desc axp318_regulators[] =3D { + AXP_DESC(AXP318, DCDC1, "dcdc1", "vin19", 1000, 3400, 100, + AXP318_DCDC1_CONTROL, AXP318_DCDC1_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(0)), + AXP_DESC_RANGES(AXP318, DCDC2, "dcdc2", "vin23", + axp318_dcdc2_ranges, 88, + AXP318_DCDC2_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(1)), + AXP_DESC_RANGES(AXP318, DCDC3, "dcdc3", "vin23", + axp318_dcdc2_ranges, 88, + AXP318_DCDC3_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(2)), + AXP_DESC_RANGES(AXP318, DCDC4, "dcdc4", "vin45", + axp318_dcdc2_ranges, 88, + AXP318_DCDC4_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(3)), + AXP_DESC_RANGES(AXP318, DCDC5, "dcdc5", "vin45", + axp318_dcdc2_ranges, 88, + AXP318_DCDC5_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(4)), + AXP_DESC_RANGES_THRESHOLD(AXP318, DCDC6, "dcdc6", "vin678", + axp318_dcdc6_ranges, 128, + AXP318_DCDC6_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(5)), + AXP_DESC_RANGES_THRESHOLD(AXP318, DCDC7, "dcdc7", "vin678", + axp318_dcdc7_ranges, 103, + AXP318_DCDC7_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(6)), + AXP_DESC_RANGES_THRESHOLD(AXP318, DCDC8, "dcdc8", "vin678", + axp318_dcdc8_ranges, 119, + AXP318_DCDC8_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL1, BIT(7)), + AXP_DESC_RANGES_THRESHOLD(AXP318, DCDC9, "dcdc9", "vin19", + axp318_dcdc8_ranges, 119, + AXP318_DCDC9_CONTROL, AXP318_DCDC2_V_OUT_MASK, + AXP318_DCDC_OUTPUT_CONTROL2, BIT(0)), + AXP_DESC_SW(AXP318, SWOUT1, "swout1", NULL, + AXP318_DCDC_OUTPUT_CONTROL2, BIT(3)), + AXP_DESC_SW(AXP318, SWOUT2, "swout2", NULL, + AXP318_DCDC_OUTPUT_CONTROL2, BIT(4)), + AXP_DESC_DO(AXP318, ALDO1, "aldo1", "aldo156in", 500, 3400, 100, + AXP318_ALDO1_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(0), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ALDO2, "aldo2", "aldo234in", 500, 3400, 100, + AXP318_ALDO2_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(1), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ALDO3, "aldo3", "aldo234in", 500, 3400, 100, + AXP318_ALDO3_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(2), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ALDO4, "aldo4", "aldo234in", 500, 3400, 100, + AXP318_ALDO4_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(3), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ALDO5, "aldo5", "aldo156in", 500, 3400, 100, + AXP318_ALDO5_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(4), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ALDO6, "aldo6", "aldo156in", 500, 3400, 100, + AXP318_ALDO6_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(5), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, BLDO1, "bldo1", "bldoin", 500, 3400, 100, + AXP318_BLDO1_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(6), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, BLDO2, "bldo2", "bldoin", 500, 3400, 100, + AXP318_BLDO2_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL1, BIT(7), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, BLDO3, "bldo3", "bldoin", 500, 3400, 100, + AXP318_BLDO3_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(0), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, BLDO4, "bldo4", "bldoin", 500, 3400, 100, + AXP318_BLDO4_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(1), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, BLDO5, "bldo5", "bldoin", 500, 3400, 100, + AXP318_BLDO5_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(2), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, CLDO1, "cldo1", "cldoin", 500, 3400, 100, + AXP318_CLDO1_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(3), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, CLDO2, "cldo2", "cldoin", 500, 3400, 100, + AXP318_CLDO2_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(4), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, CLDO3, "cldo3", "cldoin", 500, 3400, 100, + AXP318_CLDO3_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(5), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, CLDO4, "cldo4", "cldoin", 500, 3400, 100, + AXP318_CLDO4_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(6), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, CLDO5, "cldo5", "cldoin", 500, 3400, 100, + AXP318_CLDO5_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL2, BIT(7), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, DLDO1, "dldo1", "dldoin", 500, 3400, 100, + AXP318_DLDO1_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(0), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, DLDO2, "dldo2", "dldoin", 500, 3400, 100, + AXP318_DLDO2_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(1), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, DLDO3, "dldo3", "dldoin", 500, 3400, 100, + AXP318_DLDO3_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(2), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, DLDO4, "dldo4", "dldoin", 500, 3400, 100, + AXP318_DLDO4_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(3), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, DLDO5, "dldo5", "dldoin", 500, 3400, 100, + AXP318_DLDO5_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(4), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, DLDO6, "dldo6", "dldoin", 500, 3400, 100, + AXP318_DLDO6_CONTROL, AXP318_LDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(5), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ELDO1, "eldo1", "eldoin", 500, 1500, 25, + AXP318_ELDO1_CONTROL, AXP318_ELDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(6), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ELDO2, "eldo2", "eldoin", 500, 1500, 25, + AXP318_ELDO2_CONTROL, AXP318_ELDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL3, BIT(7), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ELDO3, "eldo3", "eldoin", 500, 1500, 25, + AXP318_ELDO3_CONTROL, AXP318_ELDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL4, BIT(0), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_BYPASS(AXP318, ELDO4, "eldo4", "eldoin", 500, 1500, 25, + AXP318_ELDO4_CONTROL, AXP318_ELDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL4, BIT(1), + AXP318_ELDO4_CONTROL, BIT(6), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_BYPASS(AXP318, ELDO5, "eldo5", "eldoin", 500, 1500, 25, + AXP318_ELDO5_CONTROL, AXP318_ELDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL4, BIT(2), + AXP318_ELDO5_CONTROL, BIT(6), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_DO(AXP318, ELDO6, "eldo6", "eldoin", 500, 1500, 25, + AXP318_ELDO6_CONTROL, AXP318_ELDO_V_OUT_MASK, + AXP318_LDO_OUTPUT_CONTROL4, BIT(3), AXP318_LDO_MIN_DROPOUT), + AXP_DESC_FIXED(AXP318, RTC_LDO, "rtc-ldo", "ips", 1800), +}; + static const struct linear_range axp717_dcdc1_ranges[] =3D { REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000), @@ -1347,6 +1620,7 @@ static int axp20x_set_dcdc_freq(struct platform_devic= e *pdev, u32 dcdcfreq) step =3D 150; break; case AXP313A_ID: + case AXP318_ID: case AXP323_ID: case AXP717_ID: case AXP15060_ID: @@ -1430,6 +1704,20 @@ static int axp20x_set_dcdc_workmode(struct regulator= _dev *rdev, int id, u32 work workmode <<=3D ffs(mask) - 1; break; =20 + case AXP318_ID: + /* + * Only DCDC1 has PWM control on the AXP318 + * The other DCDCs control DVM through bit 7 of the related + * registers. Work mode could possibly extended to deal with + * this but it is not how it is documented at the moment + */ + if (id !=3D AXP318_DCDC1) + return -EINVAL; + reg =3D AXP318_DCDC1_CONTROL; + mask =3D AXP318_DCDC1_PFM_PWM_CTRL; + workmode <<=3D ffs(mask) - 1; + break; + case AXP806_ID: /* * AXP806 DCDC regulator IDs have the same range as AXP22X. @@ -1543,6 +1831,17 @@ static bool axp20x_is_polyphase_slave(struct axp20x_= dev *axp20x, int id) } break; =20 + case AXP318_ID: + regmap_read(axp20x->regmap, AXP318_DCDC_CONTROL1, ®); + + switch (id) { + case AXP318_DCDC3: + return !!(reg & AXP318_DCDC23_POLYPHASE_CTRL); + case AXP318_DCDC5: + return !!(reg & AXP318_DCDC45_POLYPHASE_CTRL); + } + break; + default: return false; } @@ -1585,6 +1884,10 @@ static int axp20x_regulator_probe(struct platform_de= vice *pdev) regulators =3D axp313a_regulators; nregulators =3D AXP313A_REG_ID_MAX; break; + case AXP318_ID: + regulators =3D axp318_regulators; + nregulators =3D AXP318_REG_ID_MAX; + break; case AXP717_ID: regulators =3D axp717_regulators; nregulators =3D AXP717_REG_ID_MAX; @@ -1651,7 +1954,9 @@ static int axp20x_regulator_probe(struct platform_dev= ice *pdev) if ((regulators =3D=3D axp22x_regulators && i =3D=3D AXP22X_DC1SW) || (regulators =3D=3D axp803_regulators && i =3D=3D AXP803_DC1SW) || (regulators =3D=3D axp809_regulators && i =3D=3D AXP809_DC1SW) || - (regulators =3D=3D axp15060_regulators && i =3D=3D AXP15060_SW)) { + (regulators =3D=3D axp15060_regulators && i =3D=3D AXP15060_SW) || + (regulators =3D=3D axp318_regulators && i =3D=3D AXP318_SWOUT1) || + (regulators =3D=3D axp318_regulators && i =3D=3D AXP318_SWOUT2)) { new_desc =3D devm_kzalloc(&pdev->dev, sizeof(*desc), GFP_KERNEL); if (!new_desc) @@ -1709,7 +2014,8 @@ static int axp20x_regulator_probe(struct platform_dev= ice *pdev) */ if ((regulators =3D=3D axp22x_regulators && i =3D=3D AXP22X_DCDC1) || (regulators =3D=3D axp809_regulators && i =3D=3D AXP809_DCDC1) || - (regulators =3D=3D axp15060_regulators && i =3D=3D AXP15060_DCDC1)) + (regulators =3D=3D axp15060_regulators && i =3D=3D AXP15060_DCDC1) || + (regulators =3D=3D axp318_regulators && i =3D=3D AXP318_DCDC1)) of_property_read_string(rdev->dev.of_node, "regulator-name", &dcdc1_name); diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h index 0191467de4ec..251f057ea76d 100644 --- a/include/linux/mfd/axp20x.h +++ b/include/linux/mfd/axp20x.h @@ -128,6 +128,7 @@ enum axp20x_variants { #define AXP318_DCDC7_CONTROL 0x18 #define AXP318_DCDC8_CONTROL 0x19 #define AXP318_DCDC9_CONTROL 0x1a +#define AXP318_DCDC_CONTROL1 0x1b #define AXP318_LDO_OUTPUT_CONTROL1 0x20 #define AXP318_LDO_OUTPUT_CONTROL2 0x21 #define AXP318_LDO_OUTPUT_CONTROL3 0x22 @@ -564,6 +565,50 @@ enum { AXP313A_REG_ID_MAX, }; =20 +enum { + AXP318_DCDC1 =3D 0, + AXP318_DCDC2, + AXP318_DCDC3, + AXP318_DCDC4, + AXP318_DCDC5, + AXP318_DCDC6, + AXP318_DCDC7, + AXP318_DCDC8, + AXP318_DCDC9, + AXP318_ALDO1, + AXP318_ALDO2, + AXP318_ALDO3, + AXP318_ALDO4, + AXP318_ALDO5, + AXP318_ALDO6, + AXP318_BLDO1, + AXP318_BLDO2, + AXP318_BLDO3, + AXP318_BLDO4, + AXP318_BLDO5, + AXP318_CLDO1, + AXP318_CLDO2, + AXP318_CLDO3, + AXP318_CLDO4, + AXP318_CLDO5, + AXP318_DLDO1, + AXP318_DLDO2, + AXP318_DLDO3, + AXP318_DLDO4, + AXP318_DLDO5, + AXP318_DLDO6, + AXP318_ELDO1, + AXP318_ELDO2, + AXP318_ELDO3, + AXP318_ELDO4, + AXP318_ELDO5, + AXP318_ELDO6, + AXP318_SWOUT1, + AXP318_SWOUT2, + AXP318_RTC_LDO, + AXP318_REG_ID_MAX, +}; + enum { AXP717_DCDC1 =3D 0, AXP717_DCDC2, --=20 2.47.3