From nobody Sat Jul 25 04:54:59 2026 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 57166429CDF for ; Fri, 17 Jul 2026 14:31:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298718; cv=none; b=RtzurH/2qb7GqWGLn2fNr3Pqyj8e/+IUh2veJP1FPSjY1S87CJfdI8F49FCIbIhi47IaaqLRk2ihi4Jbmkt4g6eXHHwotkb9jPfDG88fpIHa3Q2ADp0tHja2w70nFK2QDNpjzhbm8az/MAXOXeVkb2TUC2XoV4+V+W9OWrkFfEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298718; c=relaxed/simple; bh=LxL3P7ZDDGnSBlu/ddOmtGsoPccExZSdj2/X5iSlPsQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JQvu99KZ5IsIQcHVUk7J1V/86aOpXzhF0M//kVpfmuK7GvdVMggA8HmvQqWbv17kn6OkdBsyi2fvsKriMPG3vI1dawWQDQkyFjgyQlLZmszNhKG0/Om4kNBa8hTMOMkz3c5JEL3eARclNPmgh6ue0/Lg2sVOBpzBF21Biq0AniU= 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=PUdtB1QH; arc=none smtp.client-ip=209.85.221.50 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="PUdtB1QH" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-47640541585so3971750f8f.1 for ; Fri, 17 Jul 2026 07:31:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1784298714; x=1784903514; 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=tQrvCLaskKYjL8vcT0t1hmEL3tKSyDUY1GNsxXEl0Is=; b=PUdtB1QHLeXsdmk7dz7uaepHhss342rm28H9EJEMb+PRntvc7dkcf2x3Y9VHgHI9t4 MZ45uYg1hSUVRTsZnLWEixYF+vGMV/JZSwMHZeNOTgiEoAgBUsFH9kB4Xv4A+z9yQh3N 2jqgYnzz91nPiZogqNdFb9nDuhHnLQJh+VBwkJ1TABcJopnsy4KAJxC3kk60ZC8i11Rk XuH73DQ8pF8Zth12DXRgLF60A44s/8U2RxUo4flQklJmkppJxT43jUgFx2gYJg2/CTzB uoi4T7pp6WsAZgYLajRbvHpu6dK/jfEjvRNLxvXbA1c9sQau+9sXIX8DxivbG89y6DJY 1tAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784298714; x=1784903514; 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=tQrvCLaskKYjL8vcT0t1hmEL3tKSyDUY1GNsxXEl0Is=; b=cKdGEiE1NErbPSlbNb5Qa4tAY1J50kllNohgCi+u/TfABh2JgAwW12LEs4hAVjYe/4 kKNZJLBHhLKBHYZI7zNvxRqKFQZwawCxvAu2GsuM6ZF3vIx+A7ObitQmrbGHGzcbcg4/ Rg7fAi6Lj+9B05oVZn/J2srqGPv3Kt5pOtrx0bESdyBpgqdQQgkQXE9Bp4t72BBkjpxz gqa7ZFh6MabvjgquGI3wgW2qEgr67uqlxK3hNG12f6ez3FpzTf/KDH2Wdg2N6v286YrY h//4g48EVqAal6a54xyOaTsAJTJ2YZ7e45KzbLzjLlGlCIgHm6Tm283y1pDNLuZIqfPj cAWQ== X-Forwarded-Encrypted: i=1; AHgh+RogHebMMQbtbpYc6kO23HfyGuYFuVqzL/6eYwMhFUGbTJjtxflA7dzp9MGM3WjGgfHw2tQyEUPY8ExN6Dg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/98CbTaq68+43QMqFJmfgd9rpOr71SPwq29NdNUddDMdSj9wA 67jW0Nv2afrt9paVZh1YWm+D6OPt6pWA6t3jkaaKqVzFKidwUQLhuO2W4AhU/4ER6v8= X-Gm-Gg: AfdE7cmsKKUsBeDuBdnrHFj4I96LJBfLWE6lJ6X7agyJFtapDpHPt+0UXphwSgIHOte wwe/Lj4eKN4aas9+cwOJKJWOIMBqZov7UePoFvZN5hjri7bo8v6LwwroUWFkx4Xpf9r8wUz6Zp8 AoQbhKQuU9m1TAdvkmHiRXj9GEJ5OEQexJc5SuOs2hYzacotJfOwXOiCMqwiTD/jXJE/wfaq5j6 LcQf3LEzPoD1uYbEu/b2kA8MEODZY7kSmXwpA+5B4dckxntDURhVq5qzvKQHYUQ0466oybngpR6 80cyjdQc6T3V95Xj5CAM/w8hp0hYWHVEZMQ0Oc2U7M+kAs0vvScBBuZ3g5mZhYzPu8yXI4N3vlz 7ybJdlTMCF6eDzRH3QqKd96ebNVrXMelph9h1RlDHrtVODuv1C3QA0eruBpo/z/Dwd4vX6jKM/L tP X-Received: by 2002:a05:600c:4fc9:b0:493:e974:41ac with SMTP id 5b1f17b1804b1-4954a3f3b28mr34473155e9.16.1784298714581; Fri, 17 Jul 2026 07:31:54 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:8e22:8a15:f33f:dc60]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4954a2f210csm56767835e9.15.2026.07.17.07.31.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 07:31:52 -0700 (PDT) From: Jerome Brunet Date: Fri, 17 Jul 2026 16:31:23 +0200 Subject: [PATCH v4 1/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: <20260717-axp318-regulator-v4-1-50aff97084dd@baylibre.com> References: <20260717-axp318-regulator-v4-0-50aff97084dd@baylibre.com> In-Reply-To: <20260717-axp318-regulator-v4-0-50aff97084dd@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=SCsGgJ9Tp6R0f+PpY/7kge/G93NkJs0Y9x0DlFSpF7Y=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqWjzO5pQzJSJfnAyElhla3aRSQmtl3yFgL0YDg r3eZdRP0BuJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCalo8zgAKCRDm/A8cN/La hURwD/9yHwBLUFDDtLObo9ab7SQ83ljbDMPKW38CKsAOP79NHyslfJyXqOzH7TGaiGVyQnTYHMK wNENTXgMY5H7dGfYKg6XpGwAcSTQe7oi0hO+ZrHAfnCDU1OPcgFfLMWOq09rC7xzA1kaWZ9kVkR BC2HAeunffTJrGaRVa+N1MEx8eRdmAg19Ow9ECZCk7JV4alk8bRtl4epnuz7/R+UKtwHNM3NkyW bwJuSP5ONqXV3zZK/HzByaS0Fm136Q8wZ5XIfJm07L4/ccDkIl/p8KUqw1V5uggw9PLmwgpIBUk S+AEV9WxFVUzBp1LKFFHQOm0pg6QFTs9n2156eR9g10axbAbM6hNt/2wzBdqWCo5GEapfwtO2J8 R/2w5kXm8VhHpmuLfvd8A1xvumN8kGGXAm1Dwt67mqGMpgVZyiu22ayvq3z3krFR42dj1S0JgCL W/Sz6R6A8haUQYJVK5C1wua5pkv47QEMKLmblB892IZ8CtfzO4lHEYtmV5LF9vg8RuUdfRHKLQD RjLDZ1RioC0+goiK6ciQanRNFIFjdLSqe4kWPbWG5za4chLuaVk8bOGnCpXTmnRUchpFoadEz2+ jWLM2Nz4UZKrUzkqQ1HoMoyiIPT+JzSCCrlDhYUDntYVYZXoh8UIqUL6U0L0/7fI4V6q/F4z7m2 dMjW+SWym9FBzuA== 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..95b3984fe0f9 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-9]= |rtc(_|-)ldo|cpusldo|drivevbus|dc5ldo|boost)$": $ref: /schemas/regulator/regulator.yaml# type: object unevaluatedProperties: false --=20 2.47.3 From nobody Sat Jul 25 04:54:59 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.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 C117B42A15F for ; Fri, 17 Jul 2026 14:31:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298720; cv=none; b=RhANKcXw+ZVK0rqJcu9MoqVjjBnYdWDi91lC9rg1IEOgBlMqGwZJW2npqfKkIaNKxqnrPeNmYz+AMHxYYOzMP49D+bIJkbXtQSZ+YydByMlXFjVs58b3/kJ7FJHBXG9z6Wsrr7s4fSa89VqK7nUxco3bQbFWIMFzwMZzGBJevuE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298720; c=relaxed/simple; bh=dapfWzwFw7N9+0T5Th2tpRD3Gkw4nnDOeT41m3sguVg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Gp3ZWOVk9rXwKrYQ/0S0hjvBC285Z7gU1nt0iAz+INXPHiFSR6AHoXvMAdA3+H2rNWGIuSbQNzogfMBANTFxXURlRiSBzmTo26CAoP0ZAaIBR2Xx3yki8WrUkmstFHShsrXmXgyXrgzuvBTXuyVXJiuuz8WFOIbM8woNo0eeRZs= 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=kZ6P71Vs; arc=none smtp.client-ip=209.85.128.50 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="kZ6P71Vs" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-493ce08a75bso32550825e9.1 for ; Fri, 17 Jul 2026 07:31:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1784298717; x=1784903517; 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=chY7tzupiopCRfMCqCz7npd4DoRhrYxEUBLPFEzj+yQ=; b=kZ6P71VsOjLcX+RYlYpgh43TisIvbNJHIccm99cevhb/dTLMyBVDmjFtXszq2R2oUo jYIz4//cqWqNBo5T+N1L4ig71j6IAqKK3cV5ReiSmMzEneD1Kzq+TwTc3+6oT+kg4XHp KOrJxS8GEOobAY/N9ecXitCMl5T0Zaai2TGmoSm9+29lK0wZ75B5l10zFC6hbwiiHHWU 0C1qX/l3RIUjqHVugbrharCo+/JYO1dcObqKA0ybZgdxWl09u7qVaijq7BkSqc3XfhCM KIZAB6k+moesACMVYbrF8S1fOrkR22qBTqUT9pptlgQddxx3tP9BkyzqoK8BnwhlNBue IrQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784298717; x=1784903517; 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=chY7tzupiopCRfMCqCz7npd4DoRhrYxEUBLPFEzj+yQ=; b=YEEmW+W8Iw/OoiS1IS+tLrfSi7Rv9e2+n7nhRTePP4SdEGhY30zne0jfrpnvE2aeNu lATYstQZSUR5xp0TVc1YPZ0Neao4NpETCJCagx3j9rKZazFaZLhtxGVCmASdCGlWl9Ex oXzkEEkEMeS93/ZeXUHoCOrgdIZS8f42dUeAMOn3UxOg7MzYilDDdvGyDwb0hkOn/ruT onljsJDztn7DlbFo3Q5tz6Sgl+p4Q+yvef5JlVXHoxIBe4PgDeCcXYaGymXiz8304U3W Y7JcDQp9dJMa/rgc+mDcEuOD6xCzYJKkxeb/i9sDWyvvP1PJqSwUDlHz3jqnK80aAn9c 79Ng== X-Forwarded-Encrypted: i=1; AHgh+Ro1rS7iwLr2Cb6cfnYF4AMQu3zBImZG/RyJoC30zRC8HdbQCqzGCRBTl8NKBuCfh2jtOuUdpJvHDUXeOBA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/D/AoHah56/BTceO2nX0bCg62upJjbrmrjLvDYkTnUEQcu+fn 8bFGI3WxBWxYH+GN4WPTnEof9pNw7wgXrND0VWYrmo1XfoPzkDyaeQsh5KDrRCuupP8= X-Gm-Gg: AfdE7cnXXCxytDRbzfslixb8AqPTrXDLg4SbJ4oSS3uA+9yR70PzvoWoatDYidvZNly e+hK9e0XTHvJX7fLeKTwNSsmkT5tZnf4LRQnrOObxhnKcSeupHFeMSIi466M5p/V8gr9PiYbXjl QfZ7cZnr/gzgfkArkuQBfd8sqQOKwGnU8KMeun+ug+GN7msKCAsnfAC+v2PUrGfzOlFoS3HJolg xCRvBcN9uB5804Xng3onYTKIJtIMEeScvTYCIcIWeDBnwUtRHyzXD0VathPtW5a+7chvbiJZE4a VqB5es5uNEZYI9EGlLsgXKLlurROJYd57JtqIdaImCIWrANvmXYMJ54SevzKDGGQKYrpS0wmXfQ 0NLT/lObqA+6R8AAhqSAP0UtNMLTudnBkBG9hZgBxrExr7HOeB0njJd+kFdJaZLWefKbOjY6SQO qx X-Received: by 2002:a05:600c:41ca:b0:495:21e7:fd53 with SMTP id 5b1f17b1804b1-4954a50dacfmr26899695e9.18.1784298717051; Fri, 17 Jul 2026 07:31:57 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:8e22:8a15:f33f:dc60]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4954a2e8529sm51016675e9.11.2026.07.17.07.31.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 07:31:56 -0700 (PDT) From: Jerome Brunet Date: Fri, 17 Jul 2026 16:31:24 +0200 Subject: [PATCH v4 2/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: <20260717-axp318-regulator-v4-2-50aff97084dd@baylibre.com> References: <20260717-axp318-regulator-v4-0-50aff97084dd@baylibre.com> In-Reply-To: <20260717-axp318-regulator-v4-0-50aff97084dd@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=10508; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=RSJx3xrn1LKzCm3QWrkhnB9gvVmFcRlnpJzZgZvZnI8=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqWjzP7mou9AzyXwIupDHuItthoKpQxjy4UfKWG ehLrIgCAqiJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCalo8zwAKCRDm/A8cN/La hcUFD/48zzm8bM8gTneGJkB2VoI7scKObpND70roEaBRqB0COQkH4rjsAvRv9RDVHKjQGx/TczG QYpwdtndK3X+jVu3/2OrZgiOUmSrnvzZz4ViRNgtaVCyhojJR+HZ6TMFtOZlPbiJrfDieKTzeqi 40WgE2QbmsfTi4txc+fF4UG20pI7g3FIL0gAUcLfmKX9R8cOt9/zzUntcKFR9Uwwm/HYpXbI8Rr E/DoL5hN9xv6TicrRcJ2mEhP4DuGCfJSbc1lJhHhTaR+Z9OSDjc+DyXkQquxRJ2T5iFIr38tWom 8NLiQRb216f2hoxCyQvVISLrXTU625c+gQzYnS4c/Ez+LJUsaxjvEkJxck9xpyjWZY7UENBldhd TJDR9nw/UJENj916RGkkcBriqnyXXAlIEi8HvMiYqF3duq7silx+RoXG6u0iIx7NxZrUqpQ1gSZ m/q2oP3i/zuRviKN+g+xT0c7IYB0jbld6zl//7+VF17gx3ss1T6bFCiXP6IcEKdGxus1nIKMpPq x+BWwbFc2BGUloCtwTwg7YVAzybCm3DWNsL6l0fcKPAFtdaBgMZcRNWnA5f5l5ifh0hFfbqpWdU dYUV8R6j46eKl2psVHmI0aZlBojuWywIrZ00JQr5+tI5+lClW7DKNIYBWqAT5fiFeaqpa4hwp21 m6iQGZ2c+22HjPw== 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 | 78 +++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 86 ++++++++++++++++++++++++++++++++++++++++++= ++++ 3 files changed, 166 insertions(+) diff --git a/drivers/mfd/axp20x-i2c.c b/drivers/mfd/axp20x-i2c.c index 5c93136f977e..4e4ebfc78525 100644 --- a/drivers/mfd/axp20x-i2c.c +++ b/drivers/mfd/axp20x-i2c.c @@ -65,6 +65,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 }, @@ -83,6 +84,7 @@ static const struct i2c_device_id axp20x_i2c_id[] =3D { { "axp221" }, { "axp223" }, { "axp313a" }, + { "axp318w" }, { "axp717" }, { "axp803" }, { "axp806" }, diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 679364189ea5..c8aeebd01bbc 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_CTRL, 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_REASON), + 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 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 struct mfd_cell axp717_cells[] =3D { MFD_CELL_NAME("axp20x-regulator"), MFD_CELL_RES("axp20x-pek", axp717_pek_resources), @@ -1313,6 +1385,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 b352661d99a1..c1f9dc06387a 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,69 @@ 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_REASON 0x51 +#define AXP318_SHUTDOWN_CTRL 0x52 +#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 +883,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 Sat Jul 25 04:54:59 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.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 48B7642A150 for ; Fri, 17 Jul 2026 14:32:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298723; cv=none; b=TrC5B3zHm/Itq/Ft13FsQe14FUXuMdfaPFlwm0TkSVNWBAUS9afD0j1R4zeiVte35m3pB+oAzqhPofgVRInFlbNdbSVaiyXu6o2sfCQ2k1wwFCKeTpHOyDTmOtmJcFLDL4An6gcWa56TFC44vKY4tMER1FWNnjflmW+Xkbs1yxk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298723; c=relaxed/simple; bh=bA8lkVa6MhT21HmHeSNZxVJnTSK1jb7w+kbz7hqzzyw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jc1f6W0qoIirboymbLnCNPxH51nDnubYsYtHHJ3g2ABYIe3b1dpZQ6GoQMbEW/XPR4F3sIXUBl7UcXthAbVcoUX1n9agbkKTgszhw2PI1+eaF1VX3FbyxGwtbqHf78RQHbXZN9w2dNzspFKpxGIOe6ADd2b5prRdrcZ6QVT7r5E= 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=eDKtOoyf; arc=none smtp.client-ip=209.85.128.54 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="eDKtOoyf" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-4954dff6536so947875e9.0 for ; Fri, 17 Jul 2026 07:32:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1784298719; x=1784903519; 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=tvg1048boO0grk708g2we8TSqKA9YID/DFGl64E7ytM=; b=eDKtOoyfJksHivnmog+9r+gsR3Z+U0ejSxhjkQBJ5qoPlkmEL4CYlq6g585t7SEePl rDtfkmp+Mb/LMOaQEFj4CzhuPT7FO5BJbRVBexnnyJD1j+rcG7UyD0uj4j3a2JZzZCyc ziJhtRft+z/J9BWXwv76SMWZrFc4VYXvRsrTmlpU0lZRAEG9Ix8xTakR0Dm0cFA4Rbhi xMsyehcqmGk0L0BCSKm6/PLSgjHsyUaVQOaA0y+Psxd+ERWXjXZNVE1h+vF2AICUurYy g3nxjn8opXElEq8BdN04bncqVwErmFgeUBPmhCiDu+Sa4I0uPEwiOQ2glAfLiz5PqGw0 9gkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784298719; x=1784903519; 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=tvg1048boO0grk708g2we8TSqKA9YID/DFGl64E7ytM=; b=cqDhbi7KABMGyG7nRkzBMn0N2SuwlfU6Z7T90ncBuP7Rg1wjBcajTZ47vqT/x2R2S3 pbinuyh+tU499aTbPpYpD7VoLDbZOrb1OQLE5p2qZUHKUhJ6j4Tl3v7BmXVLfFN6Gpfq FUXL6R8MZy+y3Q25ss/txl30kv0MVIQa69sqR+pzBSGI8NY6wNFMbg1tAw2IYhd0RquF XrqnJqgiHYcZN7S3jBzxLdAd81e2qldrJZ2WJqi/uaF434OtLC3o04UNGW4m2GZYbSyJ bOdPIl/gYw9DlYwjJ7XMNd3pF8VxT8KYBP5v/HCe3LzImG+fg6+ytoCoHQZWHsG4uQ6b lusg== X-Forwarded-Encrypted: i=1; AHgh+RrU2Rhn7qV8SyI6RwEvi07dgCR81ZmbdUyfFRG/58RHK8qm+f1pvmWkNyemQyostnSJsila+20PkFaMGcw=@vger.kernel.org X-Gm-Message-State: AOJu0Yz4hS4bhM+5HldscTOqthw1PzeRqySRFySRDocEppuYFTkFweqC uzZ9z8oUqhDzZKm5soOqocMKCmm/7ji1nxU69588nSwyJXjuLsWjOmjlBAP4fDTZxpg= X-Gm-Gg: AfdE7cnWibenR6IrRQ/1P66Dv53yrVoFHa/UG5xaOSH5xX4wZOAL/RkraaY62yhDNEo OoXUv3tEbbsQpVC9nvdqMXLAA/yZ+9h0aeDcNM7TFYWxenTu9VeTeoVgsDtPVs/VurAln5N2O/L MCUGZoHNHWgkHCqG29OP/kTVAG3Pad1WBsMojbCd7A6J9SqolUI7/R7ajzmSXgoZB8+6HnLQphF e/8MFRHpyEclET5X5FeEYvcj0GVqGZCrAq4rxImte5prK55rknnZak6Q/O9QRtIkFXZow/Bnp6L g8yvGMYRrDpxhOo+EEKWDS9zIoNqUlYZLm7lWzCDM/3Vp2qirVUXNoIlCk3CCazTQiQqL8pINaG 7fDc6hgEt0xDq7/DG5b3/iboWKqPoG3aQuZXDCp9Al8VhYrLtKclnYOMNozIo4ZJcY18ltFxTK8 dpePvlJM7r/Rc= X-Received: by 2002:a05:600c:4687:b0:495:4e1d:82e6 with SMTP id 5b1f17b1804b1-4954e1d837bmr5313105e9.36.1784298719527; Fri, 17 Jul 2026 07:31:59 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:8e22:8a15:f33f:dc60]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-49549a359a6sm55783625e9.1.2026.07.17.07.31.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 07:31:58 -0700 (PDT) From: Jerome Brunet Date: Fri, 17 Jul 2026 16:31:25 +0200 Subject: [PATCH v4 3/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: <20260717-axp318-regulator-v4-3-50aff97084dd@baylibre.com> References: <20260717-axp318-regulator-v4-0-50aff97084dd@baylibre.com> In-Reply-To: <20260717-axp318-regulator-v4-0-50aff97084dd@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=1244; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=bA8lkVa6MhT21HmHeSNZxVJnTSK1jb7w+kbz7hqzzyw=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqWjzQ4Xzl9JkmP2zOxXMetVyOdlQ/qdYj4kOJ2 JPxUFa9njOJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCalo80AAKCRDm/A8cN/La hYBFD/9qMvJwd2gJeWMEqujSohQ4ebJc363dsM7Y4Hy2GxQiqig4vn4R2bP3J9nucE2uB9Dac5p 2jCJlO8gKjLfxpGvDeCmAxXYf3kF45tXbZ26nNZUZtXWqUneaijhaei37FDS24uhLALG3QkDHgv 7U7/IFSXeCwoMqaJmU7mNL5xE3aDBqprLfnKavVT7Zb76hsqrJim/tYPHZv7c8v2P+ge8cvb6vy alV7pgR6D2C1zD0QmF0EqLCfJkrBlwOJgheu8jgcdyjF3T6nOsP6uXLwKJeaF5IR1lzWtSArxf4 55fei/Qd7z6D77jrvutoY7i5MFEoEezsCenTqjwLz+xk02Jkj9Z3KSBtZHKwGtNCjeUcQBcs/i/ p+k2hhTDmiajq9BsxXcQHLssg8OpfznjOAOmZ5dkp1o2HrZ71CXc41CUvi8Kg9oDdwXQ6KTU4/P OqTgcN2TTLd16QS0MYloQ9IJMeCBIpXvtRNCZv1RvS+6h0E1O2MSsFgGeyxK1DCA86ep6525lGv 0fU1q4vUn53GdcHJ/Jk6SfvCyWV4pKc8wUVL0zi372Ev7vy2X3ndSUMUWVLnY4r05mUoYaJ8cmr 5EFlwP63frOvyNGSMQNq4cvddz9U2KkFonGKVsaUqIMkOgNx1KU+30R4tkKZyXu5Z8FIxXwIMPY ePFAirRzg0Hu8sg== 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 consitent with the other supported chips 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 c8aeebd01bbc..2bbe73afff43 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -1123,7 +1123,7 @@ 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), @@ -1133,7 +1133,7 @@ static const struct mfd_cell axp318_cells[] =3D { MFD_CELL_BASIC("axp20x-regulator", NULL, NULL, 0, 1), }; =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 Sat Jul 25 04:54:59 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 A93F742A7AB for ; Fri, 17 Jul 2026 14:32:03 +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=1784298725; cv=none; b=pIukQiYr+iV8qcEHB49Zc1dydsg/X7tMlPuNkvMuuEH87NhMyov5StBh5W1KhxCriuFGW0YgSZh7vnDc6Ck4DDg9mlrxSaJ9cjnStmKexZ4e688Z3S6YcA/iiyajHSTPCWb/cvPIIzGtD0s0hUt1N2hsXkIB7Hoiua6wGuP67tI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298725; c=relaxed/simple; bh=emDMT9NIkUOn9WbfqG2lTPmNFmGjyQ6ZUvObpV0fse4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WXt8BvFNp2y62cdoPsYF86YN0+SbzdEus6WI8jAnEHBc35hM5DO2HNkNrKfkvPp9Hu85lC9NyuxHdbXKmQI0svuCULCR19t3YhWuS8R7yZKJfo4+wRfSCx5BfE9UuGDo//jqEA6UkoWCPEQdLvkpJ6bvrBRjjKpujFIMxtRw3Ck= 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=iKM6R/Do; 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="iKM6R/Do" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-47d70879764so5720306f8f.2 for ; Fri, 17 Jul 2026 07:32:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1784298722; x=1784903522; 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=JbFe/xqqWwVO7S5FZ/SPGOsIDhaRTrMUwAwwo3v1d3c=; b=iKM6R/Do/+kyRGSsm6qy7Eku0FDMs0JsBMzTo6JnD/uz7WBlp5uVeGovLcAWOGkzEo Z+fTJj/saafVQiwIU6hTmdEsY4Tx33SOWMdmgZ5CTWkYSPgBCXfUVttyJtPJfjYwBrtu SEDcrULRfgBRevigjudB2jfW7hjUBg0N3bHOhDN2dkIk4/RhCvlSW9n9gN1SVz/eEq94 qrXbYdnsiDlYDFiIlfWiLiotzhfbxxQ3KxKZPSmMB/xuPFrkNO6RwVubn7BzzM5xKtUM TjthYsq7ckw3/WlXEwcIJgauk5sowKPXqZRn8U23aE1OOpNUPDXXPlyfkjbYmToLGw4N Qnhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784298722; x=1784903522; 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=JbFe/xqqWwVO7S5FZ/SPGOsIDhaRTrMUwAwwo3v1d3c=; b=Fyf714JKbPDs42F1tax1eXGZFpSLLSeGFTK2edJJ0yuEJsCwpoSy1HfhGU6pEOVion rlJ2b1cVRQxnPiyYaydyIsKXcYMZW8fbiPwvLK+n+J9O5EgfCwBbyr67WlvClfbbCGza /8sywwFcEtbu9+S0syFhzJXfgZ/Ow14jQyfhgqMlgDORe5GvGX7+KHo6lsx9dUiloLwq wN4u/yE0OXBPB/ZpuJS67t2BcDgkUeyoGTvVdLfhV4/2UiX1+guJQR++m/c3wLA0nRM/ ZUmwHBDZYwTUULmUrzmXEpJrgjEyzfBVK9J1tPiS8c4H0ddCMf/5ZApiAqKVRokYvMJK UabA== X-Forwarded-Encrypted: i=1; AHgh+RpXPPlpvsjRt5yPD8nby78zYhiGfDm6uguLnHvNCbtyDh8VAPmvuADiCD2W5SUMBEB4M9FsfQzy0f0ypos=@vger.kernel.org X-Gm-Message-State: AOJu0YxQFBNj7ec0QW77IqVASDCBldXQYMaPCBRsoVS2xI9KBixxvvX+ 3S6M+JjGxESJ/r5qq8j2O+G4AwIHGb17h6Qu6PBYwh9Dxn4VXT3Lo4UcE1qfRRBx9qw= X-Gm-Gg: AfdE7ckuPwls/VY7krMihDsNjwJri85QwQNLnudNNlaI//ZaCoIvc6JWUrrbn9W7Oum RyhzDQ1R3O0xdd/LtkNKFxA58DKZRFn4GyjhiiqaMJ9uuSj+C/1UCac5RNQr5UYjVkQe9NJhe7w 8XdbPbtdUqtpVJRgePRAEpuHs1eZ24sDoqojhppkztYG/57tGJ81D1h71SYQVZMluRxijTuMKrE y1yN1wgfYfvEkO3hjZ0i3I+Q2sgJzrTHmcdITnOia8AsaYUMFM1YmYcw54BNLYQYGgMK5QudDlD 56OoUG2ul95wJFyo+A7VYHdFGlttM1dZuUQe35sGyMjQXKL7pkLhnt1CchcIp/dz9C65zecHaDc rFOqFbjb0MQg8oxxuVyvwsEQZDhyAcqACG4BJ0YNh/r5e10GJ9uV2fp26BoN0tsKikd+W6Jnhkz Mr X-Received: by 2002:a05:600c:1509:b0:494:6baa:ccef with SMTP id 5b1f17b1804b1-4954a3dcaa5mr21904115e9.11.1784298721998; Fri, 17 Jul 2026 07:32:01 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:8e22:8a15:f33f:dc60]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-47f63ee9281sm4815844f8f.36.2026.07.17.07.32.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 07:32:01 -0700 (PDT) From: Jerome Brunet Date: Fri, 17 Jul 2026 16:31:26 +0200 Subject: [PATCH v4 4/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: <20260717-axp318-regulator-v4-4-50aff97084dd@baylibre.com> References: <20260717-axp318-regulator-v4-0-50aff97084dd@baylibre.com> In-Reply-To: <20260717-axp318-regulator-v4-0-50aff97084dd@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=3202; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=emDMT9NIkUOn9WbfqG2lTPmNFmGjyQ6ZUvObpV0fse4=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqWjzReCRYZxUGT43zb0ThRQ5oxtrJNQwDM6D86 e6witjKCFCJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCalo80QAKCRDm/A8cN/La hRCeD/9mtk/YuSR0N3RlnumgDn7oIem0X4A1ex7l6FOWE03Xm5vI3XhccX4SnKOU7SkSZ+YUOE8 fXGGUE1Og00+sEsOeBCU5oBBui9Z6M2wmS+vVmWd5GWe4TXd3lrXCl5MWgtUnorDR4qfaNXJjY1 zVO3f47Veh+n/rVrt/KqWNn3Zy+xyIikVhM31DUIO5zXCHhy3F95LUI47FwJGTXyNI4XwEt0Jdk yNFaW4iUtlQLP3lTEchV14siGAqEBe4guTVY2YjFcAg1YqVyLyyG2hGZd1T9Qj9MxqD2PKVJXeT mniBD6oG3NZ8ijrqVa+WTz/qQu7q7ZHao9ZsQksWdxYfDH4TkkIuKloqAXa0/eSVAyRRukRX7ml 8XXP8HX/xvzrqWSOC2zv8/9z0h/wZHlnoLwBCV0Co0lD3VbdigmV3PwzbV0USqFFjaMx4A/edvS l+9EgX02ly6v+x3GQ1ohWU6f0Ntxd9rvSL/eoRX1GGd+dJWoa9QN0g6SYIHOmzNn+1XPjOhCS6I IUArsPZQ9qF6Ggkp5hiCKWv0tJxf9eVQd//sf7hyZi8rywdHZXclqo1h67z+x3bxu3PlPuTzi7W 27APUSh0gZsutOeVlJc2VpUYVWueBVZhJt7h1nNoyV1TG7OYTc9GTHyPhMokZRzQthI8MdvauKO dQ5jqSS/MAlXVUQ== 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 driver, 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") Signed-off-by: Jerome Brunet --- drivers/mfd/axp20x-i2c.c | 26 ++++++++++++++------------ drivers/mfd/axp20x-rsb.c | 1 + drivers/mfd/axp20x.c | 1 - 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/drivers/mfd/axp20x-i2c.c b/drivers/mfd/axp20x-i2c.c index 4e4ebfc78525..64c212b76e5e 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; @@ -77,18 +78,19 @@ 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" }, - { "axp318w" }, - { "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 "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 }, + { .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 2bbe73afff43..25509e47bedc 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -1339,7 +1339,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); --=20 2.47.3 From nobody Sat Jul 25 04:54:59 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 CC3E542B313 for ; Fri, 17 Jul 2026 14:32:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298729; cv=none; b=MMM0ub2gwVTx3fjtQN2gAlUDcwS9oNZJ7Uc5sQh2hoQA6zRrODM6QK1DyflhjYcrw1NFM7CeWUlBSAOThhoi5z2TjkUHb+AKIveAS/fixWMAy6Z4kdXyc/fM/1krqd4h0PBYc+YxzL1EqsBSndxkeOwoSfhZ+jhETBQO7Ah4dmg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784298729; c=relaxed/simple; bh=sPyPkKkA7B6OSHuLq+IOkQW1+TpMgs8cUjWHQQWzW20=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=biUCh7XFBVkm8/WH2T+1Dg5bFw1FtLP9LcQwEG+GI6gQftOe5HSITCG8o9fSiosW8GrZnRAKDZoBrh0U/DkenJgpVotJs7gVvj1qouGKDa8ajKkqOMRFQPikrrxc8kyZ7utRZY+lNozKg1GTkhvrkmBEPSq9uvEBL6P0wiHVavk= 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=FnuWK8nA; arc=none smtp.client-ip=209.85.128.43 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="FnuWK8nA" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-493ce08a75bso32551665e9.1 for ; Fri, 17 Jul 2026 07:32:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1784298725; x=1784903525; 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=R5kUjSYYkjpDH6Vg3nnJ0fk0+aFrx51UmVjPW4elpks=; b=FnuWK8nAPSXUWQ8Amvgq56Z/VWNPKpgOiimBzdQ9HHsRjy//u5JYlnoAbWNHYOUMyF 2r18WUKHhmyXeKrdJGjpePao/jfro22vjbdXey7Tm9uElJFSoTFirICDTBO0XLNfq944 I+DghsHGcyD79vv39v6mVpfA3v5tFthobTLGCOsgFwdnn0Xk3m7BYL6bhlCBULfFUner m1MMZC7IKEJeoBEY19tWfD3vX9bQKEmwL73i91GVR/DYBIq/kwKgjT3oOPTSIYJP/t9i Hyo0InitXQjArqskgS5Rhh+tcd880Ez9G3lOex296J4ulzc0+p1xEukNvnpQKsOo4CWD 61Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784298725; x=1784903525; 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=R5kUjSYYkjpDH6Vg3nnJ0fk0+aFrx51UmVjPW4elpks=; b=lvt2eBUZvoFN4OT/z92JN1212p7Zsg1PvStwuRjMNiqpSf3dA0MlZ37jmojY7hcJkr 6rJfCpREHCnaki7GS5tcPRQGgQT4j5XQBIGJ8IFOqZvL+ztQTpn+WmfdoE7y66iMO2dp U6/O1Cd8x/pjxS/SCDA9LFxN4dgPhU/x5hU3QUHaUVIXzhFWGFkpREozdvuqNwMcWvmu WsMdMKJjSjm/8kd9mH7kavhpISxcA+0J9sPSf1asxUOYWw8SGpT58yCC+txzaedPR4yK 8aV4VaZAouLai392o5gMWJ04vvnUvdVu8n2PxUBaCt6UNwbrzh2w8hNF5+/M4Mpvtx8F fVNg== X-Forwarded-Encrypted: i=1; AHgh+RooMsIxXFj7sMei5EemCAavaGA+IZbxrkIuFcEiNBi5NiPfe8qNkDZe7CyRlq/FN/RLw8GlieHdWMF/lEo=@vger.kernel.org X-Gm-Message-State: AOJu0YyejU6tfSFNzVngGjJ0veA4ye2OgTwF6TkVcToKF5RCdIFfUiJV 2sfTJC5Ung1Gz1Nx6ojJfnhPnsSyDMQJ+/Me2Jqe+poFjZm6wZZbACwVlnUFmumdSb4= X-Gm-Gg: AfdE7ck637Cdq8feFEZTrtJT3qNpa6wlwxpLQLen70yZSNS/+S0dHvoWpHvAK67dfxo jcbJnDLV156VH5o4tn1kL86qaCz2WN936mpdBZUrXEFQXF6SqiF7uPSRzj5S2YoOXXANDMP3qqe Bmgiw47BjyAHuIlnBWsMQjmaSFE9nvrf79PRcLxzVkv4RzMNs0kZufKRVMdgDaUBXUU5NPJZ78t Fn3bc4j28r3ZlP9LZha0CblwnB/035o3ozRIgMNiChKB1nbugib/d7OVxDCTBnozg0ezfJtKfyp 5mEYib/KeyjcztXmLfUHjDy3MlezDOMnxcGHgwXzi8Jk3mVL6R6o5wVGcu2fhgXMnw618t1+Cwm 2uD2bV+edOUh8bXd8LvZHhXr0JaS3cM9MWyh56eu+2rfHjpEGNBUV6qPcXjAeml6w2yTXN6bRK/ le X-Received: by 2002:a05:600c:3512:b0:493:cfe8:5b36 with SMTP id 5b1f17b1804b1-4954a3eec4bmr37133505e9.8.1784298724975; Fri, 17 Jul 2026 07:32:04 -0700 (PDT) Received: from localhost ([2a01:e0a:3c5:5fb1:8e22:8a15:f33f:dc60]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-495499d1d4asm36014595e9.2.2026.07.17.07.32.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 07:32:03 -0700 (PDT) From: Jerome Brunet Date: Fri, 17 Jul 2026 16:31:27 +0200 Subject: [PATCH v4 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: <20260717-axp318-regulator-v4-5-50aff97084dd@baylibre.com> References: <20260717-axp318-regulator-v4-0-50aff97084dd@baylibre.com> In-Reply-To: <20260717-axp318-regulator-v4-0-50aff97084dd@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=21093; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=6aWVgGJ9syvPUIAv3daQmyMDpN9KF/7cWr0tcqwN8WM=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqWjzSp2uR0Nqr44pA5bCdbQq0KR1htjvvYgfSb I+IdFH5klaJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCalo80gAKCRDm/A8cN/La hSgvEACdJM2y1dWWLiZW7RdYuGiYNmZjr2DkxGKUtwyu0g+NDiNaapV1gJXB/C9809/7OIruRJ4 Kc+PmoehhdV8josAGbUS9BC+DBMsGMxhvAKmP25bXYBRP2wIukQcD0jk17XS3ewyhQ5ng9PgCpn Xcy4B6ahZNGMPmyYqCS1wyiROIP6KSW97GA9/CUlrIeZbI+btYY9VuLRr12pYuoxmF77wRTcJsh MjA8M98XrTePuIrbGXLyBjyAcVUDOV8yQcXRcf+X5OO/HsiSCTNGJbRKxbsa3h+UNDShDJsAp3E LsUBziPj1PdD1okuw5SF4iH3r+6xicpKNS1u9DA/Q8W6TPssCZ4nr/0111DSlLUfA05fhIJrXRx 3XZOZQXv3pZEKEqqVCMFvTEESb0y2fldV2Tb1H7BLbX3OG46+XwcpmC9ibPzMDhTQIpDnOKlJRR d0gW0O9oMB1NJp/O/13IcvlYT0m0NfZ8k13csvFsaAMILzJIub7mLeEST+ifXzOBLXXwiTF42yL vaUi+QcuhcvVdOZxoFbI5aWp5TI6T08GNLH6ykUyljaTBFsslFCslkdaEpoSQhOYS/824FkqrhR BcO8tID53jgeOh/p8RwS+u/YHhPJCHheOEDXtkYfzUrXrNaeiUZECLOcyqzjKu9Yeb/QVdOLBPa 1vSImZMNnRKLuOA== 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 | 326 +++++++++++++++++++++++++++++++= +++- include/linux/mfd/axp20x.h | 45 +++++ 2 files changed, 362 insertions(+), 9 deletions(-) diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20= x-regulator.c index da891415efc0..8f6d28a1f76f 100644 --- a/drivers/regulator/axp20x-regulator.c +++ b/drivers/regulator/axp20x-regulator.c @@ -138,6 +138,30 @@ #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 +395,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 +408,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 +462,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 +480,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 +624,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 +681,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 +700,19 @@ 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 +888,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 +1622,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 +1706,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 +1833,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 +1886,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 +1956,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 +2016,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 c1f9dc06387a..10a959f362d3 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 @@ -562,6 +563,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