From patchwork Thu Sep 10 10:44:35 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 3268 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4]) by mxe881.netcup.net (Postfix) with ESMTPS id D642E1C2C08 for ; Thu, 10 Sep 2026 12:57:47 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=baylibre.com; spf=pass (sender IP is 104.64.211.4) smtp.mailfrom=linux-sunxi+bounces-25786-noreply=patchwork.local@lists.linux.dev smtp.helo=sin.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 104.64.211.4 as permitted sender) client-ip=104.64.211.4; envelope-from=linux-sunxi+bounces-25786-noreply=patchwork.local@lists.linux.dev; helo=sin.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id B770E34AFB for ; Thu, 10 Sep 2026 10:45:07 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 47C1245D5D9; Thu, 10 Sep 2026 10:44:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="Z0o4bIk7" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 60C2E29CB52 for ; Thu, 10 Sep 2026 10:44:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037095; cv=none; b=fmX5bI4ocU4KtVjuY4pr2wXyLDOmpcl9d0NKYfb5reY7hOLp72pmgYZX20KdgDcOo6v3goNK5mv52ceCJUAzLDjebc1rwyWzugqUxKi1Px4SCMzPRYk4fUyY3md+ir7UZBgaVQxgl8kGph/OFaVsEiOmi4Ckkn9jIbT+CdzCiRQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037095; c=relaxed/simple; bh=6WS2gG4eQGvXIRMEkRovIFW0AaWwhRZ2tj+ICuFq6Q8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eVHwPBZNCho4MsWp7HCWaEx6BxmYgEmaDxLiXgKybVje+pOYUMhMyYkMLeXR2m9Z59ZyY1CF5pNdA8hmlwtrrjW6Z/d/XtCtHxDfv5IrWpY6fJBKtkp8GdWnMv+/soVMmasMX5GnT8pn4rS6Kur4YNCnIMXhs0scUsDp7Vc0x70= 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=Z0o4bIk7; arc=none smtp.client-ip=209.85.221.52 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 Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-4858303de5dso8106702f8f.2 for ; Thu, 10 Sep 2026 03:44:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789037087; x=1789641887; darn=lists.linux.dev; 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=eC2Iu7WVN9Kv8E55jimB5I9lAFW6apWINO+cxwm+DSo=; b=Z0o4bIk7fZTF4XxagPFXDT9HsWqd7vtTqrNBdLlNS3ZvMNHToV19dMx31BDTNDDj65 Lb5iOoY74xvmGv2Sngpv6Y2JYntbrjcPAcO39AkMll/nVYFDpgaRET0zenzlTUMTdBhO pXfhaZw8+wBth2SLOMgoK+UrJ8S+HXaRUf4+hgTaqkGeV3Hhd9yIuJbYFWsMpIdoRbDG TtYtEGJZAJdx8LeTh3NSKVlmk0Z5qodQXXkOT4C7i2i2xNiF/mddeKvH77D5eLccNrYv jj7iG3Le7o8qwfZm/uxyg7/HvYGYrenzzt8F+1jayEzQs1PZ8AlVXnoPxs1bVAbwtntZ qLvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789037087; x=1789641887; 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=eC2Iu7WVN9Kv8E55jimB5I9lAFW6apWINO+cxwm+DSo=; b=YGTcpotbOht0AfDHeUHuubF5WB1dZOj4bhhnBpgQue3vo2SQMbfw8/o4AyZ78hTNZ2 49fn4lTYkqKi2+p/gZhC/ZrKWjiND+HdFpBPDj0bx1XqJATx4t/Qe6SrHQXEctrvL5A6 CgdPpqOKlgzNvM7nI8xd+KaeZ/1P7RkjpjRRD2piLjEX0sONwRPvxccF5DsaNadVxwiO Pfp3C4e/5kxQWqGptyTlFkdkOxGqoIua2FM4uYFtSjr9HBsIj/SNtAKFtd/g4Mw5hO2l h1hN7b2obcbXDFC6DF2ysYKVMdMZ4+1Vv6JQR9am9LWdaxYAagP4vwYQRVQJoOJYNWwG 0pHg== X-Forwarded-Encrypted: i=1; AKwUvBz6ILGWJywkGJspjQXc+M87ReCzHZnb7SmBZ6HVmQvkDQJhMp4DXCEAM8Z++liSPiAznnxda5drGhJbUg==@lists.linux.dev X-Gm-Message-State: AFuF++nZdcrsaj9KBKRH/1MmrVuz8BSp+R0xX0L4H15O/TEJ9swg1SvH qw4T/RMZ4sXta4JliqGasu/Ntyxt8h9MFmy0IpUN2Sk/uhm/Yyovfbi4VRJ2bNg3qhkqOps72Ve 1QGBqJRw= X-Gm-Gg: AYBFou335/tDs60AQREH/B4ZC+uQ7oJwKBAHo3iJx0PlVLaHRjVuEIZrKpNHKVLbE9p 6dYzHvpqi8qTVNqGHgs8sPEs1eiTJoOh6WPnFassVApFEDGkE+vC50xNvg6uFCyCFE12ovAjeVu 0f8asKRvt4JsV+VljyoZn1Y6FGZfkSkw3wRXcJvndw81vd7eM6uGsGxc0iJ7BrEBr/+VA5pGY5r v0cMIPawoPyc9KAP84yGIZDViKG1/VlrIf69pskC65t0wgyqdiTUaTohh11L+b3H6tHsNmbpzof CKtShA0i167nVEre8oWTTsh+HvMKhqLbKs8JIPJQZW7zQvUceKABX8m839G6ySyWeKC9yYyjZsU nCnNzG07p1KnrjtrZmEahTF/FSsnvN8Vax85c069sJluI8y2NK3Ag1uHMUZHCjbR0nVeXMikSKS ze5mHSBwMyNW+yMr2rAO/YnRKVXhBJ9L+r+q1AIHCHY59qRLUYyfhzgNmspSr4EcceqbYH5Vk8G FOJqZFunmXsQfk7xG1/9h2iMY8c X-Received: by 2002:a05:6000:4208:b0:485:b14f:ec4a with SMTP id ffacd0b85a97d-485b14fed77mr7249343f8f.31.1789037087270; Thu, 10 Sep 2026 03:44:47 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-485883a9234sm49704577f8f.14.2026.09.10.03.44.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:44:46 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:44:35 +0200 Subject: [PATCH v8 1/5] mfd: axp20x: Constify axp313 and axp717 cells Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20260910-axp318-regulator-v8-1-e906a61a7f3d@baylibre.com> References: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> In-Reply-To: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown , Hans de Goede Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, mfd@lists.linux.dev, linux-sunxi@lists.linux.dev, Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1161; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=6WS2gG4eQGvXIRMEkRovIFW0AaWwhRZ2tj+ICuFq6Q8=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqoooW3XYdrGA3KXtzcIR+JsuUVh9ymx6dcnVt/ 3lMv7hoH7qJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKKFgAKCRDm/A8cN/La hT/nEACAUvPFNOyTux9/TqLqgaGtiABfBVtMqJII4GxR7MUjAI9HuWXyDKHYmwU/DD80jc0vNYR +TNIfEDACQsGNbmw2OEbBnHMcHJy1LRHRwYerIeV6Kf6mdqADJBGE1vZ/VmrHJGc7hU/5djRNJc 3WT7Q83Vaqp+dlI/0Jayk+vn/z/j9TyRZj06rnoFJx5kkCo2hhP7Wf5PDTdsuoUfpao6RX1kUX3 0sC+iYR86a5aL5PX5/xfWV3qlmJKfNI21T959srQs8/QAKVDUEV/K97fkidL0ugo5v3+ZQnI4ga /h5395TZEY0INuitubtV4wt7v91lK7l3hBHju/XpYngXuKZa03tSQGWr0uNi01Y08KL2SnP1pz8 LdXKx1fo1zx0ocRbDue1nPnylVFyODT6EPJ0ntiJWtJ22h6IoguCeed+29FsoXHVBWstGAqRFYS M/hE8JjHeDf1y5SXu2AyMo/y8ElK4Q7G2/7cASfl+4oYT8QTnJGHzXuH61vf973ugr6A3iFVqdQ 1a1F0Usdjf49WBJIEdP36gou6wA0hxkmPVHZzvn85B6jRA0afDjITcYnLLiYZ0e9vVNQJq4Ne4E 4FWxx8ED7tr57+avcAz3HzFUQJ0/Ljh1yMtYjRQdrw1WyQvgLMxKTJ59E492NQmSYCaZ1l611bs ySxSuvDzhQB9fzg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= 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 50df66de24e0..4d770e718716 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -1055,13 +1055,13 @@ static const struct mfd_cell axp152_cells[] = { }, }; -static struct mfd_cell axp313a_cells[] = { +static const struct mfd_cell axp313a_cells[] = { /* 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), }; -static struct mfd_cell axp717_cells[] = { +static const struct mfd_cell axp717_cells[] = { MFD_CELL_NAME("axp20x-regulator"), MFD_CELL_RES("axp20x-pek", axp717_pek_resources), MFD_CELL_OF("axp717-adc", From patchwork Thu Sep 10 10:44:36 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 3269 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 13F491C00CF for ; Thu, 10 Sep 2026 12:57:52 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=baylibre.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-25787-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-25787-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sea.lore.kernel.org (Postfix) with ESMTP id 6C8A4A43E0 for ; Thu, 10 Sep 2026 10:45:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9239645D929; Thu, 10 Sep 2026 10:44:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="FoNHlj+Y" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-wm2-f12.google.com (mail-wm2-f12.google.com [74.125.225.140]) (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 88A2545A29B for ; Thu, 10 Sep 2026 10:44:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.140 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037097; cv=none; b=QowwBCl6I2NJ1S/xFsizOKVcwfjLOqIZD2/pxr6rEyUKKjY3KpPvrSKk2V12yELP/ZkGXtO9b5SRpdzBb9X/fgg0ZeJ1ds/PU0WWUE9rVyQf0ExJJwBR69YVmvxFLpJbOPHd3/8d/mq6VEZA5rbd4IemkADT3heBnyHfhrVy8yA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037097; c=relaxed/simple; bh=je4IU/IAiNq5H5O0okakTCOl1tHQPQzrOgxF5PvigMM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gQhhROVO+f4LlsImVo0EfNU+1U/ceAb+JUqHaBBijmDMcMTL1I6VCkHCdBsRsvFjTchjYxVcpCTURYIr8/1g8RikZUtnCQTdgEZRHvHi+of7BR/YNu90icZrrFadBqM00xYCvB9CAfLGDvJAn164LlpUUh2KTtVU9ijysg9gmIo= 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=FoNHlj+Y; arc=none smtp.client-ip=74.125.225.140 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 Received: by mail-wm2-f12.google.com with SMTP id 5b1f17b1804b1-49b94fce6e8so9993545e9.2 for ; Thu, 10 Sep 2026 03:44:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789037089; x=1789641889; darn=lists.linux.dev; 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=oFwgLyL207NuimkwPEL2xJQg2+Ohyu6vwh5w42Gzx6g=; b=FoNHlj+YF/mA2BP/A2fUAlZjgdhYjZTtRrEUXjQQzFiLr4dyYVTJRovuoZlcAY8bPM nfFLcvR/QR8i7grxY+HspKvualmcoVAdZLcAJ3t/fLKgSurRv44RXhHXcQSfNch/y8Sv NdllWMrOxOX+Wuq+znn+r4atuDyEMnUX7pHYxnaZg/GgJi7+nqymZBSlh6XU9O5O15AF tK3dskOC995mYu3kcb3qtqNrevVBJw2hz9s6K7PNBowEVJGsMi05ZK92Kes2p7HfaIFz 5MIIfpxBa5ACK8U6QS5KmORVRUoJjkbrwIcrL5QGNP+irDowFIJU4HLaCNvmcDAVEPF5 cqeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789037089; x=1789641889; 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=oFwgLyL207NuimkwPEL2xJQg2+Ohyu6vwh5w42Gzx6g=; b=l9S3Nc6kgnHInGhVxbyReZk+ndNBwvaZzEa90EVE8IonqSUCSItk5KGCYMlhpIn8oI npZYgjFyo4+LJaaUnHzy1CnuQZuKShEh3QDjMFEm8AopqQkvLkdzr+ZjmgQ97HHVZTjo s7F5xovFMnWCk4eunSGV5Kc77tIb0fI+PGD/G0DcQAssx1T0cSIhsP4Oqtqhyc36txrt X+opoQkUh649nNgWzIUlTW0Dkm9Mdk6cJN6TqUrpqRm1JdTKW8FIK0KxH7Ls4Nr2/1wx xIgcm3DJmuzCLqEXVR5aS9MCTdYC4rD4kTNrHmBmkI3H5lZajHskkD1RvkgxxlnxKRzu 5n3g== X-Forwarded-Encrypted: i=1; AKwUvBwCyDJTcdgr3VS07Du/Fj8VRmT7pXrMfJjsLf4GyhDEEY/I2ekKDnUPDhlwFQ2V7TU2R6qyPVTt79THOQ==@lists.linux.dev X-Gm-Message-State: AFuF++nD0y4REIodSJklsEV6oP3TIGeAmnXntkaLGnOjwDjhJwGRCBaN VCHh3cmbzBOoe6fCr/JioGr2TDdT2fr3sIluXgtWwDBMdEKK+h5iGlCBiI2VwVYaibU= X-Gm-Gg: AYBFou1XPoakiNJod5d66Y2LqH9UYPhWy6K9d5snJkX+tyGfX34cwL45vUH9pr+t6Z2 B0rNrGrGdBjLCwPZtVPUUnMAOI+jcy+a837BbOx5luLpsGh0cjMY7w2QmL4ul9usJhTWxnVb1Rq Dc/0SESQOKlP/byOCquBwFaBBjC72UGEnk69GpNxHaVDzY6gaAim+pKoA+F5uPlyT8TpSk0aYlQ oeolSJDCxf7S/rTjxnVNDaqc5ZXmkh4YhztNGblNW6fFtDxyIOC3+d7oTIBf72Y6Cvc7QjPyLij Xw5sm5KXt+6QjBwqC4Wzq+17rxqHkdauK8qoL9s/Aioi1NvbfB1ZDjCItq7WiOTM63Umxj7Yz98 kWGl9tPJhuM3LLpeJ6VGx3TbjTGWynuVKh+nfaGzVYobtBlnyqcg4NeaEnSz0GwTP/orqDxJ7Ya p0HX6k/qtkyX3nakpf0AV4Ll+4e2/AtPvNR312w11pZ55yInRs5XcDfrJbUye6XF9j70uIQWgdz IAlUq3nhGVadthYrg== X-Received: by 2002:a05:600c:4f4b:b0:49d:1fd8:b874 with SMTP id 5b1f17b1804b1-49d2590a8aamr63493805e9.19.1789037089485; Thu, 10 Sep 2026 03:44:49 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49d20fc1be3sm59311885e9.4.2026.09.10.03.44.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:44:49 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:44:36 +0200 Subject: [PATCH v8 2/5] mfd: axp20x-i2c: Fix i2c instantiation Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20260910-axp318-regulator-v8-2-e906a61a7f3d@baylibre.com> References: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> In-Reply-To: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown , Hans de Goede Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, mfd@lists.linux.dev, linux-sunxi@lists.linux.dev, Sashiko , Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3852; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=je4IU/IAiNq5H5O0okakTCOl1tHQPQzrOgxF5PvigMM=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqoooXI2FPbcy5D4dzaZLIQfK0JjInNHjIj/fsQ C2n7o393jWJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKKFwAKCRDm/A8cN/La hcYjEACMMwiVJofpRxE5wvVz8a5UJPrh5vMeNxuETytkLx6pEu4wj/5Vd3oH/Ijh8pEUCbBTU2E CaJLHpMHIiMREmTK3U3bk//62uew5b68ZGF9ABO4OXPv1VhjJkS2BXk9Veb1vWWeqdbrL+I8G2E V97hM7Jfrhn0McyS6uOttH45cE0oPS0oQwsiMW3k3XwiKmXwhS/UsuDYGudk99sKd9qTix8WlQP w7SM8F8JLocGKhi2ZHAKgLBdwDgIpdO53baiC3+LWMaFzLMfxVdMYN2wBmhkMjin58fxNXr/70n 83NPdV0x3jJ9T7VFEU5mV3mG685ZJZipllGx0BDVRPUjsRdvY3/nprekZ1Y7k5nl877fX5YbSgI t82+BAxr4mrFhTKWk/eNT7+zKMK1oypunbaEtiFKPvakLsB5je5v77RtvOGG9NoRS65KquLClfn Dh7qF+cM3wngtumnzIY7TV5H+vH7qgWfeEv8xCtBtJ03j0S5STgBteCAREueO2ypoUOMrxLOcdS LmlDY2GYAz1Sg9g4/Oh1rXZJWxCqNhYqSQRC5NX5ApGLIDaBShA4pTKRZEyVV7sxgu8o/mPzt7p xNPQA30W1rWcMZd19ko+k1aiQDJXPBjQAMRAfK804dz6wWel6pqxNPCSfq3/rDXPS3CjxVpvpoJ 867+tHFELvOIvvA== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-2.16 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; MAILLIST(-0.15)[generic]; MIME_GOOD(-0.10)[text/plain]; BAD_REP_POLICIES(0.10)[]; HAS_LIST_UNSUB(-0.01)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1]; PRECEDENCE_BULK(0.00)[]; TAGGED_RCPT(0.00)[dt]; DMARC_NA(0.00)[baylibre.com]; FROM_HAS_DN(0.00)[]; FORGED_SENDER_MAILLIST(0.00)[]; RCPT_COUNT_TWELVE(0.00)[15]; DBL_BLOCKED_OPENRESOLVER(0.00)[baylibre.com:email,sea.lore.kernel.org:rdns,sea.lore.kernel.org:helo]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_NEQ_ENVFROM(0.00)[jbrunet@baylibre.com,linux-sunxi@lists.linux.dev]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10]; FREEMAIL_TO(0.00)[arm.com,kernel.org,gmail.com]; TO_DN_SOME(0.00)[]; RECEIVED_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[74.125.225.140:received,82.67.6.57:received,100.90.174.1:received]; RCVD_COUNT_FIVE(0.00)[6]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-25787-noreply=patchwork.local]; MID_RHS_MATCH_FROM(0.00)[]; RBL_SPAMHAUS_BLOCKED_OPENRESOLVER(0.00)[172.234.253.10:from] X-Rspamd-Queue-Id: 13F491C00CF X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= 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.org Fixes: 41751b033aaa ("mfd: axp20x-i2c: Add i2c-ids to fix module auto-loading") 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 = i2c->irq; dev_set_drvdata(axp20x->dev, axp20x); + axp20x->variant = (kernel_ulong_t)i2c_get_match_data(i2c); ret = axp20x_match_device(axp20x); if (ret) return ret; @@ -76,17 +77,18 @@ MODULE_DEVICE_TABLE(of, axp20x_i2c_of_match); #endif static const struct i2c_device_id axp20x_i2c_id[] = { - { "axp152" }, - { "axp192" }, - { "axp202" }, - { "axp209" }, - { "axp221" }, - { "axp223" }, - { "axp313a" }, - { "axp717" }, - { "axp803" }, - { "axp806" }, - { "axp15060" }, + { .name = "axp152", .driver_data = AXP152_ID }, + { .name = "axp192", .driver_data = AXP192_ID }, + { .name = "axp202", .driver_data = AXP202_ID }, + { .name = "axp209", .driver_data = AXP209_ID }, + { .name = "axp221", .driver_data = AXP221_ID }, + { .name = "axp223", .driver_data = AXP223_ID }, + { .name = "axp313a", .driver_data = AXP313A_ID }, + { .name = "axp323", .driver_data = AXP323_ID }, + { .name = "axp717", .driver_data = AXP717_ID }, + { .name = "axp803", .driver_data = AXP803_ID }, + { .name = "axp806", .driver_data = AXP806_ID }, + { .name = "axp15060", .driver_data = 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 = rdev->irq; dev_set_drvdata(&rdev->dev, axp20x); + axp20x->variant = (kernel_ulong_t)device_get_match_data(axp20x->dev); ret = axp20x_match_device(axp20x); if (ret) return ret; diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 4d770e718716..de6946d4bb13 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 = NULL; int nr_cells_no_irq = 0; - axp20x->variant = (long)device_get_match_data(dev); switch (axp20x->variant) { case AXP152_ID: axp20x->nr_cells = 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 regmap *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. From patchwork Thu Sep 10 10:44:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 3267 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114]) by mxe881.netcup.net (Postfix) with ESMTPS id 72A761C2C0C for ; Thu, 10 Sep 2026 12:53:26 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=baylibre.com; spf=pass (sender IP is 172.105.105.114) smtp.mailfrom=linux-sunxi+bounces-25788-noreply=patchwork.local@lists.linux.dev smtp.helo=tor.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.105.105.114 as permitted sender) client-ip=172.105.105.114; envelope-from=linux-sunxi+bounces-25788-noreply=patchwork.local@lists.linux.dev; helo=tor.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by tor.lore.kernel.org (Postfix) with ESMTP id 448063758D for ; Thu, 10 Sep 2026 10:45:13 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9390D45D92D; Thu, 10 Sep 2026 10:44:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="TIixQVJY" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-wr2-f12.google.com (mail-wr2-f12.google.com [74.125.225.76]) (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 538A5455622 for ; Thu, 10 Sep 2026 10:44:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.76 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037097; cv=none; b=mDzlTt/KMP2kmHrzzfkO8sw02ouQyVBkZ+3VVDeDQ0mUvGpmWAjbB67BPDGoJ5BchYeV0T74h9GCsFeXUSd9eTUzTbgYy2Lo+zaxd7x5Mpbrdh7ncsCmTsyx+2bbLZEumzBMO67xEAXLA2kgUsupER+/nVJ3GNXUtM130s7Y/nM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037097; c=relaxed/simple; bh=3nicj74Hxx6yjlTiwkNZyN2t5b9AT5SF1NRF97CcdWo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s5iN63ZMYt6dTvd3obBksfyr4gNcjjiQuSVQuy4epuAXhXR0SDrnm+54SIW9ANbsE2zNm/ZD2zONG8Pw5LZQrPdMxUyc/PgMSp/Vy1ABAqMlGTLwjxQVKPNICMCIkoQI0TRRT6JzSyn+cqkUZDz0nELt6Rmme5ZXMfCBT0H4E9c= 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=TIixQVJY; arc=none smtp.client-ip=74.125.225.76 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 Received: by mail-wr2-f12.google.com with SMTP id ffacd0b85a97d-484366874b0so1224880f8f.2 for ; Thu, 10 Sep 2026 03:44:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789037091; x=1789641891; darn=lists.linux.dev; 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=dNdJC8F+FI98g8O8yjU0PBhO99fdyGD2hFZaDczCwSw=; b=TIixQVJYxLjx3X1bTQTK6k74zg3V1cnfW58o/EJPs5MEaC9gnBxWTSk7uZ0F36bg9p dUXjy+JhSdtI2ZSwt+wkMld/83J/DXbV7EThOmIteocp71CojUdK+JyEgCCO9EwtkJ4C txnpn7y0u2wIiev0acGU9dxpblU+3eF1EM5p3PZSZ3/cAfN4TS9DyLL8lTLi02KHk3Ln M+VwTRZNaDL+LHVIQq8iMH+oww5dkdPj4XAvOZwiA/8yXrG34B2rQrTMZfNRyPb/8hwp QO+uOskqpqazt7YUubGTuISidsAlyZ6Ev2xKLfUZZUgwzl0SpZQN2HSTL2ontS8IDnsF Bd0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789037091; x=1789641891; 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=dNdJC8F+FI98g8O8yjU0PBhO99fdyGD2hFZaDczCwSw=; b=ot9TmMQOdA/SWKh3Ultyk21+Tw1St/sAUH6kv61WvJFJB4Ob61pS+bOAYR4TfffOX7 CgYHatbC3ZD7vDJ3qKsUTkGTJr4tFdfK1ineGvBCWnYgtkPYQlorSIckU0Lu+OrOHwZ8 +Nhh8BvGoYUaSkB4iYb63Oiv5kpXS/T8LeYp7Mtk/OhwzH0cZ2AfL2phAxmmw+Qyj8sT oFE1juyJW5ZMLMRHG6e0cVLEGKIgEnqrN787dMYb3yJVug0ouQfvJJjYJiYTseMfYKaV f4IJbxZl3dKZ1kCi2lZDvzO296SmWSzdM1oOhzImqrboj9W12uyPSaG0tQLJA4e3nw8u jhtw== X-Forwarded-Encrypted: i=1; AKwUvBxUVrwVzYXeBKTwKydwaPyc3xfvr2sW41RDeu488dPhnhptx6W/X4sju5EjH1OQ940eO/pzZmFJ9xWOAQ==@lists.linux.dev X-Gm-Message-State: AFuF++k5W1SFL7kdgk94xgFB6ClDHIoU0NHE1OH5WW/wRxkLNFD4nq14 t5un8gqihREX5zsxyrAS1aTwcRfDvIKKBA9mza3ivFRFgXFWJdl3hncSQ9uZDeCYuB4= X-Gm-Gg: AYBFou2N+WwdzmRumjBtpm/H5lnCP1ELP9x0yl2upPhwq47vCtBLn2EhSMBW+geE5lk ocdbsonF0DXJ7CZaPsYyo/IBasXelN9vRuFjLUy9/aVqnqgqZEky5ayTtyj8aHTS8rQj+wmKtEP Q2Uu7EKFASJgdUISZed1v2ZLZtuJ0MvJagHasyaYxZp1zvgj9Bj/MT6kRLey+fPnO+fKwTwcRfI rqK2MVj7NKfAimYP7VHw1rre7Y2xR12WD9yMEZZYGEx8OxB0+CC3X2hs15vPazMMV7r7N5tTEmm OzNPjlLx1IOIs5DpJX3jY6vs2jyBy4+bBOjjuj4tsOK/zlopV/7G6zkY7xFwDbZIYF3Wy5oL/KH y4ufEUFxYLzQ+H2EZc3UgQgW6sdjOOgZoCE+SPing9DdXlAZo0JLOFSEnhe6iMDf9L0PbnfDnfw uH+as/SjU0vDCHspKx2lJiq0jPvOkViMfVoBZ4vd0lkRu9EvKxdRntaJYgP3Wme8/BvZutChEQg RYJXbB8UTdipxjgHgA8Xsp146Of X-Received: by 2002:a05:6000:4b0c:b0:482:dac8:cd0d with SMTP id ffacd0b85a97d-485aaddef7amr22611052f8f.21.1789037091565; Thu, 10 Sep 2026 03:44:51 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4858d312ca0sm52826286f8f.4.2026.09.10.03.44.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:44:51 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:44:37 +0200 Subject: [PATCH v8 3/5] dt-bindings: mfd: x-powers,axp152: Document AXP318W Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20260910-axp318-regulator-v8-3-e906a61a7f3d@baylibre.com> References: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> In-Reply-To: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown , Hans de Goede Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, mfd@lists.linux.dev, linux-sunxi@lists.linux.dev, Conor Dooley , Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=3988; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=LBdBMXYah5b+O3yxBs9VZHzS2W2px3jjTuPIQfDgazg=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqoooYcq9NPLrJjbzNHBDceVlyXxodJiDIF3o1j uP2FnaCXZKJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKKGAAKCRDm/A8cN/La hX4TD/0aixhIChR8fwPiI2ZsPUSeOT6RQoSd5UZ2+mVFMj1cxLeoY0/ityCYTKcdmRkcDbJzWjZ pI3QgldSkswPWmBrRXu6MHUNtJBnlQciA7EEaas8IcWccgXA+OF8/fzfOM+5CEejrl0/sXbPdWw UmsEjHx3y+t0S/jUUXAbS/NKJlhNvC+fIoNqNuj5Q8NiNilYvJWLOFMRtn/NYRkGDvL8krkjHCU C6619HmWZO0gfPLGGtK7rVL4VR0DsQY0Pf08Ox1DREHKcNAGFGu+6sW7HkRAQGKdANEP17oZS9c bgGLvc/fEmSq0l6zhAMqRHwQsjCBAvYHP108+dpfRodRrih2cuL8iZccJuHMURO7I9SaUaK6VEw AHIVyseMkMIKGq86sZmksCW8SmhPERhSeND4mWqY6x6hoJvE6HGRoOA5mgY43ll7rZYSvwyu0fX qGVyXIXg6VOeEYF8Z3NHa5gFnUngDR5NXgxkaJcgY8mvRPjlhfPYVclKi7cxvwsZNcVIwjH9GAa B8qilD92l3RlWYaKJEI41C5XPvwnOl/A61xzBaF+uhwIjjrNBdy+VN24cYvOzN0AbONxO0QaB+I wKlsP8X1ZpmZjhFFqFi9wk8UU4Gx+uHNwYphQaU14yMg1MyUjerkEYjSO4zlRWD1kcnuOtRQcGT E+R85hsYUQHpMbg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= 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 | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml index 45f015d63df1..edca6b1e9f70 100644 --- a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml +++ b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml @@ -70,6 +70,7 @@ allOf: enum: - x-powers,axp15060 - x-powers,axp305 + - x-powers,axp318w - x-powers,axp313a - x-powers,axp323 @@ -83,6 +84,7 @@ allOf: contains: enum: - x-powers,axp313a + - x-powers,axp318w - x-powers,axp323 - x-powers,axp15060 - x-powers,axp717 @@ -102,6 +104,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 +159,18 @@ properties: description: > DCDC1 power supply node, if present. + vin19-supply: + description: > + Combined DCDC1/DCDC9 power supply node, if present. + vin2-supply: description: > DCDC2 power supply node, if present. + vin23-supply: + description: > + Combined DCDC2/DCDC3 power supply node, if present. + vin3-supply: description: > DCDC3 power supply node, if present. @@ -168,6 +179,10 @@ properties: description: > DCDC4 power supply node, if present. + vin45-supply: + description: > + Combined DCDC4/DCDC5 power supply node, if present. + vin5-supply: description: > DCDC5 power supply node, if present. @@ -176,6 +191,10 @@ properties: description: > DCDC6 power supply node, if present. + vin678-supply: + description: > + Combined DCDC6/DCDC7/DCDC8 power supply node, if present. + vin7-supply: description: > DCDC7 power supply node, if present. @@ -220,6 +239,14 @@ properties: description: > ALDO* power supply node, if present. + 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 +304,7 @@ properties: Defines the work frequency of DC-DC in kHz. patternProperties: - "^(([a-f])?ldo[0-9]|dcdc[0-7a-e]|ldo(_|-)io(0|1)|(dc1)?sw|rtc(_|-)ldo|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 From patchwork Thu Sep 10 10:44:38 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 3270 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id EC14B1C00CF for ; Thu, 10 Sep 2026 12:58:03 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=baylibre.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-25789-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-25789-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sea.lore.kernel.org (Postfix) with ESMTP id B2E1535C8A for ; Thu, 10 Sep 2026 10:45:18 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 00A6745D934; Thu, 10 Sep 2026 10:45:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="i0qzLPFS" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35F5245C717 for ; Thu, 10 Sep 2026 10:44:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037099; cv=none; b=dAqDII+d1NBv0WRblapyxks7ARQCi+ZR+tE3gQjaZa4hg5cBfQ49IH3mS+RX1HL+u9P3+C1sc/8GwzMtwAFcTTy328BRLqZH2zpzMKtstJJdxPN+5VmIyXpniPmVGTVVd/2S1x5eQWd0y4z4gWre903eFoZ6g+K9RhiH/qGvhyA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037099; c=relaxed/simple; bh=GJPDThOnszeiZ3vt9KH8FW9Eaxz3tFiR4MX/ju/T7HQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NVdgrMeeRI11+/yYfazOUjogVJ85nFxSC7VJla7i/X3QqiAo/91uCNORlhH2V7eOKGPVB0K92IVW0IuK9IKi3nfgG3mzm7wZqHtFX9gqv4E1l5j30zIoHuniQ1b//TN0BKx2Y5EYvtUQUtpCfAaQ5ZV/J0wsEaKDtb4XEGSiqjE= 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=i0qzLPFS; arc=none smtp.client-ip=209.85.128.53 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 Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-49a97714f5dso66377815e9.0 for ; Thu, 10 Sep 2026 03:44:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789037094; x=1789641894; darn=lists.linux.dev; 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=4df3jNNf+SwA47LnnMoTuv12BdxZ5QKPK9X6Eu1aAJA=; b=i0qzLPFS49dCEkRHW/r+MjMo8LCg3ilCam9+/ruZfyT/Jn+XqzjIC7ajvD75PNzRs4 3CiXCgU06hgiPISkChsLVOR0Pj326cLVPGkuV8Gp3jpl1u7rwAb+Np3ILV6B9WAqDifB amauiF2s8VBqQ9j+SS2XoD9+zhgsRmHZ3VdSZk1of3L+lxhGKgR458J1TtU2G/ITJWq+ ODg/VUuHSayqU5bRineX5FC5JjkFEWbRlWP9YdKuiiLkd4DAITpqg/K3N9rpbCMkwGRM N97MNAVm7HTdrZ5+v87Z/pEuX+I81Q7pJp5JaIB2bW7TQ5igOYbCLJBRiBMbR0Qzv7U1 +2Eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789037094; x=1789641894; 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=4df3jNNf+SwA47LnnMoTuv12BdxZ5QKPK9X6Eu1aAJA=; b=mR9AVZV8/UFaVnnCwDdshVpKbjLdUP4IoUhmnGO90T23PigsyVTp0LNOBWPjzyLVp3 0EQxR9tAzzAIrl0/4dFm9HNWrf8zGAbCONw2wsjRz7J6SgWcj1foNKYO0QHon2efhV8w vL7nGOaNcN4luT6GgSgCNizR/YBEWWalmRAUGkGqMyb/rzmQDyNU3/FbPI5Qw/pMWL5r EM7hSB7aVza8zD0C/v5wkaVcpwMv6sE8Ju2yYMo6m5YprA/s41Nab5vxqxYaRUwbLl8a Z/6LhBqxoMCeoelh86ElJeB7I1WHPzW7VkKaxtJ4dP8OOTLbUUpOd8xCpD22mIMGyDc2 dZRA== X-Forwarded-Encrypted: i=1; AKwUvBwDSEVtXnfpMX71ZEKS2siV2QOdUb2MZYETtVVfHyGbvHNaqjmypvwdo1xlJA8f+59QCqxo/EUQTGqACw==@lists.linux.dev X-Gm-Message-State: AFuF++nzA8ybV+UFW7wTR08v1LfUsL0i9vrpNnFmcC65l9TBdoNAS89l PQ112gBI8h0nLpHkkO7RS7k+mbhDsEwBLCpYkdMvt3/V8h1STAPo7M6T235MkkUw1p8= X-Gm-Gg: AYBFou2NParaEg3KzHRemsC9pf4RZ4fB9T7t0dFG3Y5d0GQ8+JrO7DPAfVFsQGJ85Oj HwlJ7dqEybju6jhaCVza1eKraP5/3/ANAv9iugxYNs+UxqUPaUBLvJjEr1ImiFmhkmvYss2ok6v E9PNUWXCM6ab1zZJQBitnzxVq6iUqXGCvAACxRyx7J9zN6bvllFfbAB/KyjzCGM8vq7NSn62SVE 69vqiFHVqQIWX7HyHdazqAR4IyrCPOOIGjmlHNIL5aq5iwIRSs3MSvilBVuO+FVTwas+/ye/oGX 19fV4T0ozMGmzDN8T5XHHsxAcnnb73OFQCuHTvvsRko9FATdaSDO9k18f6BnAql1N43DePXy6E9 hKfKafbvnxXK95iadpHKkVcr3cfH2lUv+S0R4YifGF59HL9DRU8qz8ZPafDTUjXp1FFRRflmMxP l4pdCZajZRcyWfGQXl0Ns/qp6jcbn/d/EMuYpW0iRi6WYSA5pQvQDdws8N+Y94Z5g9fAoEOgBne RrZQu/2HC3hu9DKyQ== X-Received: by 2002:a05:600c:314f:b0:49c:ffde:45ff with SMTP id 5b1f17b1804b1-49cffde4629mr343074845e9.17.1789037093673; Thu, 10 Sep 2026 03:44:53 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49d26c04ba2sm63146745e9.12.2026.09.10.03.44.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:44:53 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:44:38 +0200 Subject: [PATCH v8 4/5] mfd: axp20x: Add support for AXP318W PMIC Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20260910-axp318-regulator-v8-4-e906a61a7f3d@baylibre.com> References: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> In-Reply-To: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown , Hans de Goede Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, mfd@lists.linux.dev, linux-sunxi@lists.linux.dev, Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=12979; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=8KErW1FkPZKKzrIm6143ej3q+jSd6lOTIZxIGTzIMGo=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqoooZtwfiBaHUIc8bzVQcykinbG3jRWKj8fjox NIeKZfBzUSJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKKGQAKCRDm/A8cN/La hRy8D/9GH+zGwxI2z3NnksSzCSQdAbEpiilj6AFFhkRZAWbZa9WT/fOFqI2qzwqa6nGBxFAqPNB eYxtbVCAukj6vUjEdx6TqhxQJxGQ9CC9GR/yKN6vkaHT4kxuUNaNDa0HQXfelX+YJxp2sxro5DC ZR7qYdI8We1o3y2xswhEXMgotPIJfwoq6hI161gJu5ULgMVxUuPh8nlGxLmjvU9H/2yUNGvnvtZ L+VXqPAFO3WodftTWKMfRoNN5Ht0bv5rocXFQtnH2hIWfukQZjJLcfqK5Umj2Ka8hqI+gt6gId9 z81ezeFU42Duvvb6aBXHPzzYLiS6Ts0mF7KBwQVyOPH8x2tdPH0/Bf4z/NYkW9zuSVorn+bMHT7 8J/o+jime1TJ28cySojjjjuWhPc6gKxWiaIj3m+GsFi68TVsJxHnOWNaommCvRu7H/jBsrdjrgt 4o1lk9JCcxzsIYLPjoR6LAej+NnB/edeG2FXpF2e/dPpmAddYmXmACIRGm8Z/yi4ifEwRDVmeR4 2xFgxONyaba/66TW9VC+FIIPsK8uArZgvsGcFfU8Hcw7y577j8UzDwdpoj7SIh5gNePhWtLKSyY vInDaICxHYkvRlY90mhCOMRcICydeqTvpPxOYZ1BACOZkiEujjQmTvICjVR/TBo0MRrggTLp5i7 fwA9c4ZFiLIYV3Q== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= 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. Reviewed-by: Chen-Yu Tsai Signed-off-by: Andre Przywara Co-developed-by: Jerome Brunet Signed-off-by: Jerome Brunet --- drivers/mfd/axp20x-i2c.c | 2 + drivers/mfd/axp20x.c | 88 +++++++++++++++++++++++++++ include/linux/mfd/axp20x.h | 145 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 235 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[] = { { .compatible = "x-powers,axp221", .data = (void *)AXP221_ID }, { .compatible = "x-powers,axp223", .data = (void *)AXP223_ID }, { .compatible = "x-powers,axp313a", .data = (void *)AXP313A_ID }, + { .compatible = "x-powers,axp318w", .data = (void *)AXP318_ID }, { .compatible = "x-powers,axp323", .data = (void *)AXP323_ID }, { .compatible = "x-powers,axp717", .data = (void *)AXP717_ID }, { .compatible = "x-powers,axp803", .data = (void *)AXP803_ID }, @@ -84,6 +85,7 @@ static const struct i2c_device_id axp20x_i2c_id[] = { { .name = "axp221", .driver_data = AXP221_ID }, { .name = "axp223", .driver_data = AXP223_ID }, { .name = "axp313a", .driver_data = AXP313A_ID }, + { .name = "axp318w", .driver_data = AXP318_ID }, { .name = "axp323", .driver_data = AXP323_ID }, { .name = "axp717", .driver_data = AXP717_ID }, { .name = "axp803", .driver_data = AXP803_ID }, diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index de6946d4bb13..67ab529ebd2c 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -42,6 +42,7 @@ static const char * const axp20x_model_names[] = { [AXP223_ID] = "AXP223", [AXP288_ID] = "AXP288", [AXP313A_ID] = "AXP313a", + [AXP318_ID] = "AXP318W", [AXP323_ID] = "AXP323", [AXP717_ID] = "AXP717", [AXP803_ID] = "AXP803", @@ -218,6 +219,38 @@ static const struct regmap_access_table axp313a_volatile_table = { .n_yes_ranges = ARRAY_SIZE(axp313a_volatile_ranges), }; +static const struct regmap_range axp318_writeable_ranges[] = { + regmap_reg_range(AXP20X_DATACACHE(0), AXP20X_DATACACHE(3)), + regmap_reg_range(AXP318_DCDC_OUTPUT_CONTROL1, AXP318_DCDC_MODE_CTRL1), + regmap_reg_range(AXP318_DCDC_MODE_CTRL3, AXP318_DCDC_MODE_CTRL3), + regmap_reg_range(AXP318_LDO_OUTPUT_CONTROL1, AXP318_IRQ_EN4), + regmap_reg_range(AXP318_IRQ_STATE1, AXP318_IRQ_STATE4), + regmap_reg_range(AXP318_SHUTDOWN_SRC_CTRL1, AXP318_POK_CTRL), + regmap_reg_range(AXP318_WAKEUP_PWROK_PIN_CFG, AXP318_WAKEUP_PWROK_PIN_CFG), + regmap_reg_range(AXP318_TS_PIN_CFG, AXP318_TS_PIN_CFG), + regmap_reg_range(AXP318_TEMP_ADC_H_EN, 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[] = { + regmap_reg_range(AXP318_IRQ_STATE1, 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 = { + .yes_ranges = axp318_writeable_ranges, + .n_yes_ranges = ARRAY_SIZE(axp318_writeable_ranges), +}; + +static const struct regmap_access_table axp318_volatile_table = { + .yes_ranges = axp318_volatile_ranges, + .n_yes_ranges = ARRAY_SIZE(axp318_volatile_ranges), +}; + static const struct regmap_range axp717_writeable_ranges[] = { regmap_reg_range(AXP717_PMU_FAULT, AXP717_MODULE_EN_CONTROL_1), regmap_reg_range(AXP717_MIN_SYS_V_CONTROL, AXP717_BOOST_CONTROL), @@ -447,6 +480,15 @@ static const struct regmap_config axp313a_regmap_config = { .cache_type = REGCACHE_MAPLE, }; +static const struct regmap_config axp318_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .wr_table = &axp318_writeable_table, + .volatile_table = &axp318_volatile_table, + .max_register = AXP318_WDOG_CTRL, + .cache_type = REGCACHE_MAPLE, +}; + static const struct regmap_config axp323_regmap_config = { .reg_bits = 8, .val_bits = 8, @@ -663,6 +705,28 @@ static const struct regmap_irq axp313a_regmap_irqs[] = { INIT_REGMAP_IRQ(AXP313A, DIE_TEMP_HIGH, 0, 0), }; +static const struct regmap_irq axp318_regmap_irqs[] = { + 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_SHORT, 1, 4), + INIT_REGMAP_IRQ(AXP318, PEK_LONG, 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[] = { INIT_REGMAP_IRQ(AXP717, SOC_DROP_LVL2, 0, 7), INIT_REGMAP_IRQ(AXP717, SOC_DROP_LVL1, 0, 6), @@ -884,6 +948,17 @@ static const struct regmap_irq_chip axp313a_regmap_irq_chip = { .num_regs = 1, }; +static const struct regmap_irq_chip axp318_regmap_irq_chip = { + .name = "axp318w_irq_chip", + .status_base = AXP318_IRQ_STATE1, + .ack_base = AXP318_IRQ_STATE1, + .unmask_base = AXP318_IRQ_EN1, + .init_ack_masked = true, + .irqs = axp318_regmap_irqs, + .num_irqs = ARRAY_SIZE(axp318_regmap_irqs), + .num_regs = 4, +}; + static const struct regmap_irq_chip axp717_regmap_irq_chip = { .name = "axp717_irq_chip", .status_base = AXP717_IRQ0_STATE, @@ -1061,6 +1136,10 @@ static const struct mfd_cell axp313a_cells[] = { MFD_CELL_RES("axp313a-pek", axp313a_pek_resources), }; +static const struct mfd_cell axp318_cells[] = { + MFD_CELL_NAME("axp20x-regulator"), +}; + static const struct mfd_cell axp717_cells[] = { MFD_CELL_NAME("axp20x-regulator"), MFD_CELL_RES("axp20x-pek", axp717_pek_resources), @@ -1248,6 +1327,9 @@ static int axp20x_power_off(struct sys_off_data *data) case AXP313A_ID: shutdown_reg = AXP313A_SHUTDOWN_CTRL; break; + case AXP318_ID: + shutdown_reg = AXP318_SHUTDOWN_CTRL; + break; default: shutdown_reg = AXP20X_OFF_CTRL; break; @@ -1312,6 +1394,12 @@ int axp20x_match_device(struct axp20x_dev *axp20x) axp20x->regmap_cfg = &axp313a_regmap_config; axp20x->regmap_irq_chip = &axp313a_regmap_irq_chip; break; + case AXP318_ID: + axp20x->nr_cells = ARRAY_SIZE(axp318_cells); + axp20x->cells = axp318_cells; + axp20x->regmap_cfg = &axp318_regmap_config; + axp20x->regmap_irq_chip = &axp318_regmap_irq_chip; + break; case AXP323_ID: axp20x->nr_cells = ARRAY_SIZE(axp313a_cells); axp20x->cells = axp313a_cells; diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h index 1badb4868d17..5c307f41a31f 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,84 @@ enum axp20x_variants { #define AXP313A_IRQ_STATE 0x21 #define AXP323_DCDC_MODE_CTRL2 0x22 +#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_DCDC_MODE_CTRL1 0x1b +#define AXP318_DCDC_MODE_CTRL3 0x1d +#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_DISCHARGE_OVERTEMP_CTRL 0x54 +#define AXP318_SHUTDOWN_CTRL 0x55 +#define AXP318_WAKEUP_VOFF_CTRL 0x56 +#define AXP318_POK_CTRL 0x57 +#define AXP318_WAKEUP_PWROK_PIN_CFG 0x5d +#define AXP318_TS_PIN_CFG 0x60 +#define AXP318_TEMP_ADC_H_EN 0x65 +#define AXP318_TEMP_ADC_L 0x66 +#define AXP318_DIE_TEMP_ADC_H_EN 0x67 +#define AXP318_DIE_TEMP_ADC_L 0x68 +#define AXP318_GPADC_H_EN 0x69 +#define AXP318_GPADC_L 0x6a +#define AXP318_GPIO_CTRL 0x70 +#define AXP318_GPIO_INPUT 0x71 +#define AXP318_GPIO_OUTPUT 0x72 +#define AXP318_PWM_CTRL1 0x73 +#define AXP318_PWM_CTRL2 0x74 +#define AXP318_PWM_CTRL3 0x75 +#define AXP318_BACKUP_BATTERY_CTRL 0x76 +#define AXP318_WDOG_CTRL 0x77 + #define AXP717_ON_INDICATE 0x00 #define AXP717_PMU_STATUS_2 0x01 #define AXP717_BC_DETECT 0x05 @@ -498,6 +577,50 @@ enum { AXP313A_REG_ID_MAX, }; +enum { + AXP318_DCDC1 = 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 = 0, AXP717_DCDC2, @@ -819,6 +942,28 @@ enum axp313a_irqs { AXP313A_IRQ_PEK_RIS_EDGE, }; +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_LONG, + AXP318_IRQ_PEK_SHORT, + AXP318_IRQ_PEK_FAL_EDGE, + AXP318_IRQ_PEK_RIS_EDGE, + AXP318_IRQ_GPIO1_INPUT = 20, + AXP318_IRQ_GPIO2_INPUT, + AXP318_IRQ_GPIO3_INPUT, + AXP318_IRQ_WDOG_EXPIRE = 24, +}; + enum axp717_irqs { AXP717_IRQ_VBUS_FAULT, AXP717_IRQ_VBUS_OVER_V, From patchwork Thu Sep 10 10:44:39 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 3271 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sin.lore.kernel.org (sin.lore.kernel.org [104.64.211.4]) by mxe881.netcup.net (Postfix) with ESMTPS id 1F95B1C2BFD for ; Thu, 10 Sep 2026 13:02:48 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=baylibre.com; spf=pass (sender IP is 104.64.211.4) smtp.mailfrom=linux-sunxi+bounces-25790-noreply=patchwork.local@lists.linux.dev smtp.helo=sin.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 104.64.211.4 as permitted sender) client-ip=104.64.211.4; envelope-from=linux-sunxi+bounces-25790-noreply=patchwork.local@lists.linux.dev; helo=sin.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sin.lore.kernel.org (Postfix) with ESMTP id 6684F2A761 for ; Thu, 10 Sep 2026 10:45:45 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7D18D46AA64; Thu, 10 Sep 2026 10:45:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="hB5JKsij" X-Original-To: linux-sunxi@lists.linux.dev Received: from mail-wr2-f12.google.com (mail-wr2-f12.google.com [74.125.225.76]) (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 92A8D45D92C for ; Thu, 10 Sep 2026 10:44:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.225.76 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037104; cv=none; b=pXOsSIWC38lxASlyRRvRdRyM3fmLosIWuUkznwdC4YT8oGm8dJoLCcmXKaITXbCHLSOPg8ciAqBeHMIJNjQV+7glqnQrk+atYmFXf3FcDkVOVcm6H8omOMW32MXrt2mf1fLYKs0zPbIXkP+Xch5F/meoiTwrPPIPO60M5uutT9g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789037104; c=relaxed/simple; bh=HxfOQgxeNC2M/0FZuUE7U8uVbNE1FfEV8GtT6PXgiCc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eY4olyj3ZAB8cs2hpJhpUq9a2GuySR8HDpJEvxdzejZdR9gAZ+7Jb59RFhwjP8/fe0+rQjG82DN6MIsmVEvYNvzPGar12IuGI9qoHJL66SR11qSC2VOiNnJu1ObDuGO+zYBblKGhvFzYslb6b+52rhpHacVq+xiYxEKzbXnfjP4= 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=hB5JKsij; arc=none smtp.client-ip=74.125.225.76 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 Received: by mail-wr2-f12.google.com with SMTP id ffacd0b85a97d-485b1d2874aso1026120f8f.1 for ; Thu, 10 Sep 2026 03:44:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1789037096; x=1789641896; darn=lists.linux.dev; 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=9frimrJtum7yK2qZWoLc4swbgstoZT3xwJT/qEIOZUI=; b=hB5JKsijFo8dxT2rUDIEQs/+TBcHmJtWhN5+9txSNg36gY9UPNRIVla5prLU4Z90uc o6fISETw9yO95l13XOf+o+OBQ3aYLJGOnmk1vfJb2w/n6Z4wM4a6IjIZMsCVGVBAPbTC nlIc+eSAgAjw6rEEtmxenlY+ra2yciBXF5ARMTh87cgTbFuxGvtIVWUljeSeIbeHkEWM jRCZyPzfcOaI2ObvGOGd8SxmJKfE39jSNXWb1pOYyAo17/NpLeshVQnGQCI3Rq7jg6B5 9ypYtbdDw6wSOOOU5i04PC+yJUWviITNT4vc41uPson7FHD9kHhlXkaLc31a4Y5e6ZKQ wEGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789037096; x=1789641896; 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=9frimrJtum7yK2qZWoLc4swbgstoZT3xwJT/qEIOZUI=; b=i4HhrRF99PMYT8f30Cn018bejXUMve5fvLDm1GN9Vx1M1Q3xUEd89yCnUBW48/5FJM CFDlViAerS/KjdrmOCprbA4aSp4Nk8mL34V7rLj5ptHH3mJwYDNbxmCGahPWoZVBvglf LBbz61s9jiqaj0GDNym2OfprJHfCHTgMkaPp+cxDumuZseOuWKGS9ZWBluBljdduyXc2 BWgRxwmyyVwea6tzBDgXEO9TORgrPXQcQAvRgeWLbZPF20H3MFzk8YrWLr81CMG0CILD Lvf5Wzi5qg0GxmCrdlWsj3bsShINsgXMc7dL5LN7q98XIwxHsuTdgzccNyPoxC5T28ry JEuQ== X-Forwarded-Encrypted: i=1; AKwUvByqrMRHJzq3p9iaCACY2hr9Ykal5i83XoU4B706lD5NLOoQkA0pxJyUje6jc/64/7AMy6+htAnLeYBSjQ==@lists.linux.dev X-Gm-Message-State: AFuF++mq2JTAavpyBq6Xf+G3PlRwDjwVmeneraq+xz/GjUMpkioVp3fJ lhPnt7GCWzPdPNhvbOrOs0gzX920aoUCGjSWlMDhQYL7aGX0qBmIgsCpsjEu5yDS/dI= X-Gm-Gg: AYBFou0JTz/3K5bYWjTZALps7uAm/Qesxn0KOty1+zzUHpPxBt9PdHPoNmdrTLQwt3a QABxNIqiTVYKwoG+uaJ7Tan4cCyaHkq7CsOAsvA0sF9EJsAUR7camFxPhmuMQAhJzQsSW7+LyXT pNUzueCPP70r/qQNVorErjIRbdSFWdBYRJdEYEjx4Kr88Su+zvnEuj1MCn84oM2er2wkLgTDLDK mIpKJ3Iqk7EzvTqLHLxCTBFDxc4gPagMbGaqWl1ukjUkCuTn3ug4ieNKtJSOL/HLK8paRglGP8u E9w7BlgKB04w6Z5xZjOId+2HW6iSLuzuQZKw/sfCpJPHPMydG5yAuHUF4fIQs1IPIV4OCv/ZhDH +Xn6MxIGuf6KC8b0rM9iaN5meUL3OfGJ5C8EWvuAxWpH/wxV8gYJNfa5H5bpvLu8qX9wy4iAJci 6cnsedHNfbWoRxUDj2YAXVnqSmF3z/iMrqmyU1GUr9fvE2uUj+/cqHUHvO7KeuK76EgiqcdRU7T PMEQffk0w7i2qtG9Q== X-Received: by 2002:a05:6000:430e:b0:482:ea08:8c8a with SMTP id ffacd0b85a97d-485c23e5411mr11946509f8f.20.1789037095733; Thu, 10 Sep 2026 03:44:55 -0700 (PDT) Received: from localhost (82-67-6-57.subs.proxad.net. [82.67.6.57]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-485885bf3f0sm55469516f8f.33.2026.09.10.03.44.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 03:44:55 -0700 (PDT) From: Jerome Brunet Date: Thu, 10 Sep 2026 12:44:39 +0200 Subject: [PATCH v8 5/5] regulator: axp20x: add support for the AXP318W Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20260910-axp318-regulator-v8-5-e906a61a7f3d@baylibre.com> References: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> In-Reply-To: <20260910-axp318-regulator-v8-0-e906a61a7f3d@baylibre.com> To: Andre Przywara , Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Chen-Yu Tsai , Liam Girdwood , Mark Brown , Hans de Goede Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, mfd@lists.linux.dev, linux-sunxi@lists.linux.dev, Jerome Brunet X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=19549; i=jbrunet@baylibre.com; h=from:subject:message-id; bh=mM00w2khOQ1luc9sLRr+7THG50AYVfTw02Km56a/ykA=; b=owEBbQKS/ZANAwAKAeb8Dxw38tqFAcsmYgBqoooa9MAMJ8ZCbXCtk9zZke11ozFa5OPMx9QDa jWdZ+yIBsyJAjMEAAEKAB0WIQT04VmuGPP1bV8btxvm/A8cN/LahQUCaqKKGgAKCRDm/A8cN/La hSnRD/0R5wSQLlb9w3tUVKCKUEq6SrCyoRjzmrp/xX9hqm4tX3HM4tPz60xGFi4vUBPYUuo9iqy DNPQ0WxR6eCDCDm1EcljHW+gO0zveVlJY282jqYRXThIppWooDdXNiUrutitxLCj7i+NaohrUfD 7lEdKn+YYiLG7hKfr1eTBX8w1SoP/Smu0fr4+8Opy9YcjfXHSrHDHa7EKb8NvTHbZRDVaBpmtkP vMZN1fF+uoXXs+RCl2ue/01Ex9u1yIREoY31JPVSsDkkE6Rh2TLY211xNSTyqDPHefOabXrNK16 /6E1ek1726zmQbNBTTO0CL7u9vEwpcA0Kj9vSMSpSIcQDYE7Br5apN3IRvoP48O/auC4K4eaPf9 i0bsnfGNOkzqS7a9dT3IAeXS3cDJTxegNVnOgiMmZ5GyHP5+U97Y/8d0ZUbBrM+dwLt3mwyKLsG kkK1t9xUZO2GbiSLhD8vjMeIwR86wFTv2TJSJVu5oU9/IpS0EYYmHLQoORRc4S/TnB2iqh4mGaC 47T3lfmHLjRDo+YBwci47/79m2vkTZQmbwOelm498F4fLrbBbtsns4kmiwver0sXaNL8vRvoeN1 AtjYNJZCNFKnOuFlmDYwrgxLtPfORFVpJ5ARUqz7oFPKEvCRfs5uJY6sCqlA8hIBa2VClstAs4L 4Ts4G8MaFSOOpZg== X-Developer-Key: i=jbrunet@baylibre.com; a=openpgp; fpr=F29F26CF27BAE1A9719AE6BDC3C92AAF3E60AED9 X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= 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: Chen-Yu Tsai Reviewed-by: Mark Brown Signed-off-by: Andre Przywara Co-developed-by: Jerome Brunet Signed-off-by: Jerome Brunet --- drivers/regulator/axp20x-regulator.c | 319 ++++++++++++++++++++++++++++++++++- 1 file changed, 310 insertions(+), 9 deletions(-) diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c index da891415efc0..732541ee619e 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) +#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 = &axp20x_ops, \ } -#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, _vreg, \ + _vmask, _ereg, _emask, _ops, _bpreg, _bpmask, _dropout) \ [_family##_##_id] = { \ .name = (_match), \ .supply_name = (_supply), \ @@ -384,13 +407,32 @@ .owner = THIS_MODULE, \ .min_uV = (_min) * 1000, \ .uV_step = (_step) * 1000, \ + .min_dropout_uV = (_dropout), \ .vsel_reg = (_vreg), \ .vsel_mask = (_vmask), \ .enable_reg = (_ereg), \ .enable_mask = (_emask), \ - .ops = &axp20x_ops, \ + .bypass_reg = (_bpreg), \ + .bypass_mask = (_bpmask), \ + .ops = (_ops), \ } +#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, _vreg, \ + _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] = { \ .name = (_match), \ @@ -419,8 +461,9 @@ .ops = &axp20x_ops_fixed \ } -#define AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges, _n_voltages, \ - _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] = { \ .name = (_match), \ .supply_name = (_supply), \ @@ -436,10 +479,23 @@ .enable_mask = (_emask), \ .linear_ranges = (_ranges), \ .n_linear_ranges = ARRAY_SIZE(_ranges), \ - .ramp_delay = (_ramp_delay), \ - .ops = &axp20x_ops_range, \ + .ramp_delay = (_ramp_delay), \ + .ops = (_ops), \ } +#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_voltages, \ _vreg, _vmask, _ereg, _emask) \ AXP_DESC_RANGES_DELAY(_family, _id, _match, _supply, _ranges, \ @@ -567,6 +623,50 @@ static int axp20x_regulator_enable_regmap(struct regulator_dev *rdev) return regulator_enable_regmap(rdev); }; +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 = rdev->desc->ops->is_enabled(rdev); + if (enabled <= 0) + return enabled; + + old_sel = rdev->desc->ops->get_voltage_sel(rdev); + if (old_sel < 0) + return old_sel; + + old_uV = rdev->desc->ops->list_voltage(rdev, old_sel); + if (old_uV < 0) + return old_uV; + + new_uV = rdev->desc->ops->list_voltage(rdev, sel); + if (new_uV < 0) + return new_uV; + + /* Crossing the threshold ? */ + if ((old_uV <= AXP318_THRESHOLD_VOLTAGE && + new_uV > AXP318_THRESHOLD_VOLTAGE) || + (new_uV <= 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 = 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 = { .list_voltage = regulator_list_voltage_linear, }; @@ -580,6 +680,15 @@ static const struct regulator_ops axp20x_ops_range = { .is_enabled = regulator_is_enabled_regmap, }; +static const struct regulator_ops axp318_threshold_ops_range = { + .set_voltage_sel = axp318_threshold_set_voltage_sel, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .list_voltage = regulator_list_voltage_linear_range, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, +}; + static const struct regulator_ops axp20x_ops = { .set_voltage_sel = regulator_set_voltage_sel_regmap, .get_voltage_sel = regulator_get_voltage_sel_regmap, @@ -590,6 +699,18 @@ static const struct regulator_ops axp20x_ops = { .set_ramp_delay = axp20x_set_ramp_delay, }; +static const struct regulator_ops axp20x_bypass_ops = { + .set_voltage_sel = regulator_set_voltage_sel_regmap, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .list_voltage = regulator_list_voltage_linear, + .enable = axp20x_regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, + .set_ramp_delay = axp20x_set_ramp_delay, + .get_bypass = regulator_get_bypass_regmap, + .set_bypass = regulator_set_bypass_regmap, +}; + static const struct regulator_ops axp20x_ops_sw = { .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, @@ -765,6 +886,158 @@ static const struct regulator_desc axp313a_regulators[] = { AXP_DESC_FIXED(AXP313A, RTC_LDO, "rtc-ldo", "vin1", 1800), }; +static const struct linear_range axp318_dcdc2_ranges[] = { + REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), + REGULATOR_LINEAR_RANGE(1220000, 71, 87, 20000), +}; + +static const struct linear_range axp318_dcdc6_ranges[] = { + 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[] = { + REGULATOR_LINEAR_RANGE(500000, 0, 70, 10000), + REGULATOR_LINEAR_RANGE(1220000, 71, 102, 20000), +}; + +static const struct linear_range axp318_dcdc8_ranges[] = { + 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[] = { + 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[] = { 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_device *pdev, u32 dcdcfreq) step = 150; break; case AXP313A_ID: + case AXP318_ID: case AXP323_ID: case AXP717_ID: case AXP15060_ID: @@ -1430,6 +1704,15 @@ static int axp20x_set_dcdc_workmode(struct regulator_dev *rdev, int id, u32 work workmode <<= ffs(mask) - 1; break; + case AXP318_ID: + /* Only DCDC1 has PWM control on the AXP318 */ + if (id != AXP318_DCDC1) + return -EINVAL; + reg = AXP318_DCDC1_CONTROL; + mask = AXP318_DCDC1_PFM_PWM_CTRL; + workmode <<= ffs(mask) - 1; + break; + case AXP806_ID: /* * AXP806 DCDC regulator IDs have the same range as AXP22X. @@ -1543,6 +1826,17 @@ static bool axp20x_is_polyphase_slave(struct axp20x_dev *axp20x, int id) } break; + case AXP318_ID: + regmap_read(axp20x->regmap, AXP318_DCDC_MODE_CTRL1, ®); + + 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 +1879,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev) regulators = axp313a_regulators; nregulators = AXP313A_REG_ID_MAX; break; + case AXP318_ID: + regulators = axp318_regulators; + nregulators = AXP318_REG_ID_MAX; + break; case AXP717_ID: regulators = axp717_regulators; nregulators = AXP717_REG_ID_MAX; @@ -1651,7 +1949,9 @@ static int axp20x_regulator_probe(struct platform_device *pdev) if ((regulators == axp22x_regulators && i == AXP22X_DC1SW) || (regulators == axp803_regulators && i == AXP803_DC1SW) || (regulators == axp809_regulators && i == AXP809_DC1SW) || - (regulators == axp15060_regulators && i == AXP15060_SW)) { + (regulators == axp15060_regulators && i == AXP15060_SW) || + (regulators == axp318_regulators && i == AXP318_SWOUT1) || + (regulators == axp318_regulators && i == AXP318_SWOUT2)) { new_desc = devm_kzalloc(&pdev->dev, sizeof(*desc), GFP_KERNEL); if (!new_desc) @@ -1709,7 +2009,8 @@ static int axp20x_regulator_probe(struct platform_device *pdev) */ if ((regulators == axp22x_regulators && i == AXP22X_DCDC1) || (regulators == axp809_regulators && i == AXP809_DCDC1) || - (regulators == axp15060_regulators && i == AXP15060_DCDC1)) + (regulators == axp15060_regulators && i == AXP15060_DCDC1) || + (regulators == axp318_regulators && i == AXP318_DCDC1)) of_property_read_string(rdev->dev.of_node, "regulator-name", &dcdc1_name);