From nobody Sat Sep 26 06:20:39 2026 Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com [209.85.167.171]) (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 E24A451120B for ; Thu, 3 Sep 2026 20:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466208; cv=none; b=UrSc8hqaw7jCXbwuHexKnI8VNvckoPC7RB1lky+kHxLUke3WXrggNMvJzPKS3oLwUA3O2wxcLSMnkrvFfHJCqqlYprjZfEFQENkanE9h+3qzZC8FwskqfbLVSEm+uRJd6++I2sgHm6KFS5Kao/7IcvFksAK4XxlSPjXUdV/NrWw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466208; c=relaxed/simple; bh=aY/rMmEKLqBf233eHDiUJ3zou1QJ7V8sN56XAz6YXB0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WF38glwXTB0mNwo2zjrVlE4CRcsCuU+xZ1MOoIqU/Fd0OFMXeB6e0puh13BP483SlBBjiyjylhn/dihp1T0rKK/2GB2wGJtjFMaBVw93dJx+kO8xSCX9JSKfAq0mJ6fA5GiS3zCfy3YnXe3jn8i4lwG7qGYNQPE61CPLBpkfdjE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=r3KHNSxa; arc=none smtp.client-ip=209.85.167.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="r3KHNSxa" Received: by mail-oi1-f171.google.com with SMTP id 5614622812f47-4b21f09ea42so230894b6e.2 for ; Thu, 03 Sep 2026 13:09:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788466194; x=1789070994; 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=rV5vJv57NRYvAfyYD49PPV4JWlfjLZkBj9GOzwHcEV8=; b=r3KHNSxavUcqBTpFFFCW1zUTZvQ+1WlkUa0aZSx0GuqyWMPHyIP+HbANPbh/mL3yD6 5j/rkG3aHrPjHiWkpI/9Yp+9mvdfhL4cRFq4b25TWDUjuhYSVgnR7T8LVGPCZ9BWc/wb Hu7Lu9NWJLSE6dsN4vjmazQ3T+sUv7CqOkCpHLihzG9qYXXZS5ER+f2EpgWdME5YTSu1 XzW9d0u91qFZk+mgQUQi5D6KyxrVJE+2f9C6475ohVPvslhMiPaYcz8hOroW0Aw4dxRL rVdnjcIYEsPkImD2PMPnJ9q6sJrGN/QjdNxrXJAB3PINpnaYIBHxsKCqTY9zRkvGEw4S 86aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788466194; x=1789070994; 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=rV5vJv57NRYvAfyYD49PPV4JWlfjLZkBj9GOzwHcEV8=; b=OjfQOe0TTk4fnWzI/7b6vqySZmsNixe7rk7Mrwif8vzkltyCFwMbFK0gV56BDX29g0 GmcMus14+uztuWYSpK+MYOF11j3cjxuDSeHKsw09ZnWxvQZ74jslVSr5CgcGersWJXE2 1E4SR0cZhNPGMyMEPBsgTAyBPcqOg8Y1pMi6Wa6LT6GNSmpgsEhqWPuDHl6NJO72/d4q s7Q23L09V7haL+lJ6oSKyijd1rt5I5HDGGD2CKhYXhX85p8RrDIOlJgw6rQZrhkLF7yB NEklbnjG1PFNY6QxnvQ2prpJ7llBPnQjrcv1PCDxx73oiX8OEPoZWyXnw9JuNtED/Tso 160A== X-Forwarded-Encrypted: i=1; AKwUvBx48WLGnP7KYTQdbRpr/jSqeAGEuGHReWVJaOlbmFy7ibq4FOkVwuaKPNd6joTjRq1W4kl9VC8Ia7bF64o=@vger.kernel.org X-Gm-Message-State: AFuF++mn8XOwx25tDK5mxkf+FXva//rDQOG6PMxspG7LmxXHq/lp+mk9 tr4fQCpoxLquWluql0bm5joZQccnmacuO/slaWbjZbyTKqilS6fe8jQD X-Gm-Gg: AYBFou107ty92bo5smichmWuWLe2VC72YJg/frH9Q8gbL9bfPz3eIo474IilSHg1oAa NQjLqH2GtQlWjkVrMmr+gB9VGXFHXTkEZFOc3+Xj6b6MJaKnp8wKG2QKitslhgC03s9FoYrxJlt wytFX/343uxZzsDmTJ2YzLo2a/gS1lkY2bwyzSeIYKksJRIZLjHfz6XVJMi2gs+1/bmMeq/1PBF iOx4kGY8+3BoNJWIj0puTkkR2bvpjuzRJkVfW63Ow1P7Et+qs3Q28jmBa862dIB8kaGotDGyEk1 VJ254R74t14X2ZcalW0VncZv9wA389/my+4xl7ph0b0cj789l5BF9SGhdJqtwV2ygn79CMK5Sf3 L8Cixvngn8r0cOnA6lzuloaFaOPyn4BXb9xVUUm6YmYQqIOV160uAenAiv+5a30VZABthe+y0+Y Sr+o4r6drtxKCxwrQMdz4bbsT8rkhs39SzWOhAH2lu0bzNrM7zLgnO9+nAqWCeSGiqv0+ZHq9VA foMlZ48JxYjik/A43oEWUkCXFCWQqtRPe/lfHae/urt/I07IoeygYw5/Std0SzJgMkvt6Cdiafl InrA9s/JCyi64sKWU8zVo5ZCm8cg+zu9WDzy/lTgsfNOi7A19TTt9zLbWGsiCOcAnPnyAJKO+yE cRIlCntEI03OHf52t5t9MJf/y06tcuQ== X-Received: by 2002:a05:6808:c165:b0:4ab:2c58:4514 with SMTP id 5614622812f47-4b95c5ba1f8mr1065523b6e.0.1788466193773; Thu, 03 Sep 2026 13:09:53 -0700 (PDT) Received: from [127.0.1.1] (184-96-151-165.hlrn.qwest.net. [184.96.151.165]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b971246d9csm252885b6e.7.2026.09.03.13.09.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 13:09:53 -0700 (PDT) From: James Hilliard Date: Thu, 03 Sep 2026 14:09:40 -0600 Subject: [PATCH v9 1/4] dt-bindings: mfd: x-powers: Add AC200 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: <20260903-submit-ac200-mfd-v9-1-6b7ed278989c@gmail.com> References: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> In-Reply-To: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> To: Lee Jones , Arnd Bergmann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , James Hilliard Cc: Andrew Lunn , "Jagielski, Jedrzej" , Andre Przywara , Chen-Yu Tsai , Jernej Skrabec , linux-sunxi@lists.linux.dev, mfd@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski X-Mailer: b4 0.15.2 The AC200 is an I2C-controlled mixed-signal companion IC containing audio, video, RTC and Fast Ethernet PHY functions. Describe the parent device and its shared input clock. The Ethernet PHY is represented by a PHY package on its MDIO bus, with a phandle back to this device for access to the package control registers, so it does not require an MFD child node. Function-specific supplies belong to their consumer bindings rather than the shared parent. The input clock must run at 24 or 27 MHz when the Ethernet PHY is used, matching the rates encoded by its documented clock selector. Reviewed-by: Krzysztof Kozlowski Signed-off-by: James Hilliard --- .../devicetree/bindings/mfd/x-powers,ac200.yaml | 50 ++++++++++++++++++= ++++ MAINTAINERS | 7 +++ 2 files changed, 57 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml b/Do= cumentation/devicetree/bindings/mfd/x-powers,ac200.yaml new file mode 100644 index 000000000000..ca7a910b2c73 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml @@ -0,0 +1,50 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/x-powers,ac200.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: X-Powers AC200 mixed-signal IC + +maintainers: + - James Hilliard + - Jernej Skrabec + +description: + The AC200 is a mixed-signal companion IC containing audio, video, RTC and + Fast Ethernet PHY functions. Its control registers are accessed over I2C. + +properties: + compatible: + const: x-powers,ac200 + + reg: + maxItems: 1 + + clocks: + maxItems: 1 + description: + AC200 input clock. When using the Ethernet PHY, its configured rate = must + be 24 or 27 MHz, matching the rates encoded by the documented EPHY c= lock + selector. + +required: + - compatible + - reg + - clocks + +additionalProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + mixed-signal@10 { + compatible =3D "x-powers,ac200"; + reg =3D <0x10>; + clocks =3D <&pwm 5>; + }; + }; +... diff --git a/MAINTAINERS b/MAINTAINERS index 3a19da74d00c..419340093c9b 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -29504,6 +29504,13 @@ F: drivers/net/wwan/ F: include/linux/wwan.h F: include/uapi/linux/wwan.h =20 +X-POWERS AC200 DRIVERS +M: Jernej Skrabec +M: James Hilliard +L: linux-sunxi@lists.linux.dev +S: Maintained +F: Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml + X-POWERS AXP288 PMIC DRIVERS M: Hans de Goede S: Maintained --=20 2.53.0 From nobody Sat Sep 26 06:20:39 2026 Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) (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 DED2750C28B for ; Thu, 3 Sep 2026 20:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466219; cv=none; b=Yl45fu3yy+sqjAA+1eIBqm8o2RXlP0Tlz9vPMNyAeHFVstuK82M3DbeP7hvhhUY1rLC7GxVnPIDRzbBCfYDDWnjzWTiJRLEpb/wWQ7tRVLHWAJob9OjlWNuMJ030Bnv4PbxFSuwsqYBsZlizy8ynUKlB1blHUEcmFwEn9+nddgQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466219; c=relaxed/simple; bh=yFKfRHQGDijdEKRtQlfMmeXlW6cJECeONVvRTmHPL90=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dJ0J7/KS+nYcVvhlBGSHP/Lcmk3Az0d/+y/O5GPvGa9FTD7O4aLdocjwbqKtGinKOWTYxHYDVPlI2JSSFDMhQ/pmcF2t6+8hxhcVea2WqZbiBsVxQlTJpi9rh89VduhIVpcQ1D8BwuXpQ8uPyHCMkayqh0xtATcvcCJXYPqORK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ivt2d3kG; arc=none smtp.client-ip=209.85.167.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ivt2d3kG" Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-4a46a53abc9so284049b6e.3 for ; Thu, 03 Sep 2026 13:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788466195; x=1789070995; 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=85h9R8hU4OlIInyy88aMVvVOyqXeqxmnt2NxcH2V/5I=; b=ivt2d3kGCLlTNvHMDhdQJb7g/K6Xj97Lt+xbu4WjP2EI9iNFXkauKr++NIoAfRiZMP FpwugRePWhUtBCSevqyVfL9GSfdI98RvrsX9wEKcSUs5diLYY9ZlS1kVt9ix41UBtm7e LfPEIQK8mgwU2oMTo9lBxi+xBcaHRhDYkrTBflLxpUuSP1jsHVRzZ+O70QjIxousjl3U h5jKsMtl/T0v/p3J7KC+EQjGFRFMU8pxZlPFaH1bUH8D1rBwfBR/2MtYLAax4PT4KppW hXGG5Q0A452ALZ0IVwE4asOzYWBx/R338aUZs6Ueh4/oEPU/uZBmM+X6PPs8A0tFVo93 KARA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788466195; x=1789070995; 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=85h9R8hU4OlIInyy88aMVvVOyqXeqxmnt2NxcH2V/5I=; b=Q5x3jqLGZpv3FfRyQzQLZmAuM6s9YM/BBo8HFSuIC5wPR60kXe0pYF0dm/sO7kIhVx GAsXsy4aApvEpYIo6sbbRT4dW+A4LJn8EuL8q6vQLICApSPZGn56UcOJ5mAIRNEFqPPT YEBOsR3Ui0uPA8aElKz5UE37QQ3cyCSy24LK9W6Iz3oLUVdWHJY+1E4o/7kqY3C/4akV fOJmmHlfE8o40OXU5siMlKH4v4D4K9cB8X/KKgoNd33f/AkKk9nuAniFE+GHsdC6mb/j xVUHachCPICmvuI3e4LPVKaigRoKdjvGKgXZDPyvlucDZnnl5fZhzyjsY2Qes38XlGZk pz8Q== X-Forwarded-Encrypted: i=1; AKwUvBzYfhPAbHCJh7N1O49Ev3wcEcIaycoca+SMlUyGlobMgNUEJJVteUbYgKw6bKUYOrff5AUp3KaqSSFeCLU=@vger.kernel.org X-Gm-Message-State: AFuF++mnwmqTcwTnGFw2JUgEuui4SweYORIN2mkQZhM42QRIeWBZxx2f 2vJhIeCF9/VPrSIZy7Cui7SsvLFtH9o4ofhgU8hAQNldmwKbtxGrnAK9 X-Gm-Gg: AYBFou3WF4fLyhZuBpeq68XANqHPweMkJoDjIZjMH7Ivdi7Qvvbdz4sArlBuc+YevgJ Em5GaSMvD6yNPuRlHqZva5u80YEvnEGA//ZZwOexyo3n32ObfdGxsYOLxxqppbpNsWuBHgqzVV4 Eno/DyKH3z3MCrGM0NBSzqEYPuKvxRk/aBSHsDrkUJglna/I8YZFntVRvdY7QsXhgoUyyQqI8zx WVxvp9n6gvIuYOmI8e5Hf0MebmipTzSPDQhfGpld308eEkSmB3ftjkzOTymn3HJhDM+/uhuJxeW Gy4Rv1vavCZzhdsznWuzQMci4cwgMvWwTMFCZtNBmLZLAUGG/zBBb675TuLbqWAMzfjJjLQrgxZ PKhJHKJZLbfnOjoGsBlQUqZ8QWy8efxDqf8OyQW5gL9QrKGshYe4W7HB7u9tf1jf1CS5HAN89WS wi4Pl8djRazcsIfHbnFVcjd5JdcdIOcNLsWMHfpE/3HYUos1EPjfwZPUT+2zuoRxxn+2nPSpQqi bZYMAudWPL2VAFms7fP2ZGtUiagttR44k0vIdXwpazsvi7wfE39bOs99YQaux2hhwJu+QJYkBD1 gXYlT+p6D2Bcoxee2d/j4mdTFPJ8ZT37kvqtpmAmqy0PNUfPmcfxANaqztZNeXRCM9eAvuuLdFG kRsns8C5S+vNqencGj/ErfTDRVm8idm4= X-Received: by 2002:a05:6808:30a4:b0:496:892:c58f with SMTP id 5614622812f47-4b960164768mr965196b6e.2.1788466194662; Thu, 03 Sep 2026 13:09:54 -0700 (PDT) Received: from [127.0.1.1] (184-96-151-165.hlrn.qwest.net. [184.96.151.165]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b971246d9csm252885b6e.7.2026.09.03.13.09.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 13:09:54 -0700 (PDT) From: James Hilliard Date: Thu, 03 Sep 2026 14:09:41 -0600 Subject: [PATCH v9 2/4] mfd: ac200: Add X-Powers AC200 support 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: <20260903-submit-ac200-mfd-v9-2-6b7ed278989c@gmail.com> References: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> In-Reply-To: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> To: Lee Jones , Arnd Bergmann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , James Hilliard Cc: Andrew Lunn , "Jagielski, Jedrzej" , Andre Przywara , Chen-Yu Tsai , Jernej Skrabec , linux-sunxi@lists.linux.dev, mfd@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 The X-Powers AC200 is a mixed-signal companion IC with a paged register map accessed over I2C. Enable and rate-lock the shared input clock, wait 40 ms before the first register access, initialize the paged regmap and deassert the common reset. Set only the deassert bit instead of forcing a reset cycle, so state established by firmware or independently powered functions remains intact. Leave the common reset deasserted during driver removal and system shutdown; function drivers own their block resets. The Ethernet PHY is enumerated on its MDIO bus rather than as an MFD child. It follows the x-powers,ac200 phandle and uses this regmap for ancillary package-control access. The audio codec and TV encoder are added as MFD children by subsequent patches. Cache only the common page selector. Individual functions can reset independently and invalidate their other registers, so leave all functional registers volatile. Signed-off-by: James Hilliard --- MAINTAINERS | 1 + drivers/mfd/Kconfig | 12 ++++++ drivers/mfd/Makefile | 1 + drivers/mfd/ac200.c | 113 +++++++++++++++++++++++++++++++++++++++++++++++= ++++ 4 files changed, 127 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 419340093c9b..1d03b0060bda 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -29510,6 +29510,7 @@ M: James Hilliard L: linux-sunxi@lists.linux.dev S: Maintained F: Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml +F: drivers/mfd/ac200.c =20 X-POWERS AXP288 PMIC DRIVERS M: Hans de Goede diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 857ca3bb0d5b..6dea35c8c18e 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -205,6 +205,18 @@ config MFD_AC100 This driver include only the core APIs. You have to select individual components like codecs or RTC under the corresponding menus. =20 +config MFD_AC200 + tristate "X-Powers AC200" + depends on COMMON_CLK + depends on I2C + depends on OF + select REGMAP_I2C + help + Support for the X-Powers AC200 mixed-signal companion IC. The AC200 + contains audio, video, RTC and Fast Ethernet PHY functions and is + co-packaged with some Allwinner H6 and H616 SoCs. This driver provides + the shared register access used by the individual function drivers. + config MFD_AXP20X tristate select MFD_CORE diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 72d3944b0ad8..f8101d2a9ce9 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -150,6 +150,7 @@ obj-$(CONFIG_MFD_DA9052_SPI) +=3D da9052-spi.o obj-$(CONFIG_MFD_DA9052_I2C) +=3D da9052-i2c.o =20 obj-$(CONFIG_MFD_AC100) +=3D ac100.o +obj-$(CONFIG_MFD_AC200) +=3D ac200.o obj-$(CONFIG_MFD_AXP20X) +=3D axp20x.o obj-$(CONFIG_MFD_AXP20X_I2C) +=3D axp20x-i2c.o obj-$(CONFIG_MFD_AXP20X_RSB) +=3D axp20x-rsb.o diff --git a/drivers/mfd/ac200.c b/drivers/mfd/ac200.c new file mode 100644 index 000000000000..94aa13deb0f8 --- /dev/null +++ b/drivers/mfd/ac200.c @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * MFD core driver for the X-Powers AC200 + * + * Copyright (C) 2019 Jernej Skrabec + * Copyright (C) 2026 James Hilliard + */ + +#include +#include +#include +#include +#include + +#define AC200_SYS_CONTROL_REG 0x0002 +#define AC200_SYS_CONTROL_CHIP_RESET_DEASSERT BIT(0) + +/* Interface register accessible from every register page. */ +#define AC200_TWI_REG_ADDR_H 0x00fe +#define AC200_MAX_REG 0xa1f2 + +static const struct regmap_range_cfg ac200_range_cfg[] =3D { + { + .range_max =3D AC200_MAX_REG, + .selector_reg =3D AC200_TWI_REG_ADDR_H, + .selector_mask =3D 0xff, + .window_len =3D 256, + }, +}; + +/* + * Each AC200 sub-block can reset independently, invalidating its register + * contents without regmap's knowledge. Cache only the common page selecto= r; + * this avoids a selector read-modify-write for every access on the same p= age + * without ever returning stale functional-register values. + */ +static bool ac200_volatile_reg(struct device *dev, unsigned int reg) +{ + return reg !=3D AC200_TWI_REG_ADDR_H; +} + +static const struct regmap_config ac200_regmap_config =3D { + .name =3D "ac200", + .reg_bits =3D 8, + .reg_stride =3D 2, + .val_bits =3D 16, + .ranges =3D ac200_range_cfg, + .num_ranges =3D ARRAY_SIZE(ac200_range_cfg), + .max_register =3D AC200_MAX_REG, + .volatile_reg =3D ac200_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, +}; + +static int ac200_probe(struct i2c_client *client) +{ + struct device *dev =3D &client->dev; + struct regmap *regmap; + struct clk *clk; + int ret; + + clk =3D devm_clk_get_enabled(dev, NULL); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), + "failed to enable input clock\n"); + + ret =3D devm_clk_rate_exclusive_get(dev, clk); + if (ret) + return dev_err_probe(dev, ret, "failed to lock clock rate\n"); + + regmap =3D devm_regmap_init_i2c(client, &ac200_regmap_config); + if (IS_ERR(regmap)) + return dev_err_probe(dev, PTR_ERR(regmap), + "failed to initialize regmap\n"); + + /* + * No minimum delay is documented. Match the vendor driver's 40 ms delay + * before its first AC200 register access after enabling the input clock. + */ + msleep(40); + + ret =3D regmap_set_bits(regmap, AC200_SYS_CONTROL_REG, + AC200_SYS_CONTROL_CHIP_RESET_DEASSERT); + if (ret) + return ret; + + return 0; +} + +static const struct of_device_id ac200_of_match[] =3D { + { .compatible =3D "x-powers,ac200" }, + { } +}; +MODULE_DEVICE_TABLE(of, ac200_of_match); + +static const struct i2c_device_id ac200_i2c_ids[] =3D { + { .name =3D "ac200" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, ac200_i2c_ids); + +static struct i2c_driver ac200_driver =3D { + .driver =3D { + .name =3D "ac200", + .of_match_table =3D ac200_of_match, + }, + .probe =3D ac200_probe, + .id_table =3D ac200_i2c_ids, +}; +module_i2c_driver(ac200_driver); + +MODULE_AUTHOR("James Hilliard "); +MODULE_DESCRIPTION("X-Powers AC200 MFD core driver"); +MODULE_LICENSE("GPL"); --=20 2.53.0 From nobody Sat Sep 26 06:20:39 2026 Received: from mail-oi1-f180.google.com (mail-oi1-f180.google.com [209.85.167.180]) (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 7287B39E196 for ; Thu, 3 Sep 2026 20:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466217; cv=none; b=C6lOYUQG/RArv2YZXt7YzKQ0UvfD7P2GeAkJtLqQY23POl90XTEW1uy3Jzp6bQwShaaMnLjR/9mntvYTmrhsQdSyZeKxPphJmIbrKGCPDDpOuw85n2wzTLB8z0Fh73u008o5Ov3V66LF8ee1DyxHJMBcDtbsB2xEec3vVKa/Yes= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466217; c=relaxed/simple; bh=mH14szGLvIYL5H6TXttKxaAR0CFbgwfmQQqN74KFZFM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OlNvJcVDwIw8WbzF7jwqEwhnk1Gq1TGtiAZo8qTSnvm/4LuHatHW5ouf+AaMpJHMhggremq+dVQzJidUff81QpETrI+PIWUQ3XsNrlqjwK3sECpv9ryx9sGcgp2DIyorJNkdEQreX72c19NOynGdj9lgeGTeSxuA9M0QMdsQDSA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kDJGVIdY; arc=none smtp.client-ip=209.85.167.180 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kDJGVIdY" Received: by mail-oi1-f180.google.com with SMTP id 5614622812f47-4b28df1f600so206148b6e.2 for ; Thu, 03 Sep 2026 13:09:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788466195; x=1789070995; 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=I04cR33VXyehaIB9vYInZkrZkowazKWlWZnlj/UHpYc=; b=kDJGVIdYexyMwn0Ds+egzoFNWWR4OsdMDOZ67cj9EfKtf3rCmSn8fjJj5DmzBzc2Yr ndFkzEi9dch3M8Ui8q2rTnVE+CZYlCJuzIGIdrhzx6jj3lz3oWXqXNHLymGWdxlx8A3g QGS2VTFmUlzkP6iy8z4UjKwOay8B0JbJRcUGY66ioEhR08G89no+vMdSijqS7gByDfKD dlX+CtBzjpRSOHgCTPbvGU9HoYhdVGKhBowOcvI7crIO5fXe/6a6Icdihx902uXxjpQ3 +JKuB1vbQaqWuhtGcnOZRMf5uWdVd3HZy+j+/3d5nrxxvWAcI2b80RvnK7qEw/dthrPd Ggpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788466195; x=1789070995; 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=I04cR33VXyehaIB9vYInZkrZkowazKWlWZnlj/UHpYc=; b=Wvm3RJVhBM6D/x49qhpLm3paoFigxGo6FG7qKmoq0/BMT8zgXbF3zLLvnGQZzQp1BY OpdD8dMjvMqX0GvsJEznPnjrAE/FIKVadUON35aP12Mjoi2dWaiCapkjkpRDfovfDIVw +/hw3jWwGf5wx4lXDvxNKQpF2ecPaC/YEhvJ6fgTSM2D4i6WsQ3uCgEe3gK976mjvTpl dMO7sjTQ8VXitgVHao+h6DKXUhBW4++lkdv+oiHFpZmjHefi1D+IAHAcFSHX43Ljsubq DNYAGEUIhrvNYnGBZcQnKFdgBCrSf20XuOmFP+EPOyYo4SDrIWUZiIfvxWfptpv6HuFj GXEw== X-Forwarded-Encrypted: i=1; AKwUvByKD1lk1heitE1b2mlyJkT+UOlT+Rcj0hF1D0MvrFs/TanHgR4Q/5OrAfjEceFg2qYlNot+xW2BPf518Os=@vger.kernel.org X-Gm-Message-State: AFuF++n/TLYIQ9qLdOJUMtnOApsU3zmECaj7VJkOH/8lJIFt0eWNgVew gEmslKJwBwan3m6ZNknaq3m3QkwgBhRMpug0upthwwP+HkWpfjg9VH4B X-Gm-Gg: AYBFou33E9gq4FFRwN6umoF/M1akXe1WJsxs6wAqozMsguqI+lr+EHA/AvPnVRGNGlB WlbvmXDfGx01rI2IctEzolGdKpESsuy1XHjpM65fv5j4ySlSpLTHRzRo7wZwSf5DOmWGIkQUPGA c2QXEciUZyzUUv/O7r6YdaB+D7Z0OMhVbHb0NpywTs3U+s63S224cf7AlpPaR6zLLMq56l5p9v1 HrATO8dFrqU7T3xoDjGgqFiC5G72zcnwBXtYMDxI11yYW8lQNE/ATL0OTNOzx5vrH2x8sd+P318 kjVR79uEk5OIxsY3HWWbDFU5zOdkagSNCvElUNHvAz5ZowyWFje2geY4dB/DYzILyIaWNnxhTEO xxNTLiSsRJ4NsTnjCcJChfNfiFLBT3czp16j4XsSNylJmzx8Smxg1QYq/rGlinSpbTKAGxGRsfK q5yvgtiT0tNQVWBEBqcM9uY01ZhbYKGT49VRdnwzUebLFsCv59E24O75zmB2SVPnmLlllVxJxOk mhphGR7UmvUK/orPI/20COM3PqmaSn9LABWa9LmBR7OMr/qhNpYxl+jAhFrXFpFYEDraSl5fZro LxouYCRqiRGdnYBURVlnvLuZM9b5YEr/fPzAHkTN3//I8+LxB+guDtJzxkqwBcKQ9TGP0xOvgWv zp8Q4UIyIF9rnAUcaqjllwDhzYrswNQ== X-Received: by 2002:a05:6808:3098:b0:4b3:74fe:2f77 with SMTP id 5614622812f47-4b961a7cde9mr979497b6e.11.1788466195567; Thu, 03 Sep 2026 13:09:55 -0700 (PDT) Received: from [127.0.1.1] (184-96-151-165.hlrn.qwest.net. [184.96.151.165]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b971246d9csm252885b6e.7.2026.09.03.13.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 13:09:55 -0700 (PDT) From: James Hilliard Date: Thu, 03 Sep 2026 14:09:42 -0600 Subject: [PATCH v9 3/4] dt-bindings: mfd: x-powers: Describe AC200 functions 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: <20260903-submit-ac200-mfd-v9-3-6b7ed278989c@gmail.com> References: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> In-Reply-To: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> To: Lee Jones , Arnd Bergmann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , James Hilliard Cc: Andrew Lunn , "Jagielski, Jedrzej" , Andre Przywara , Chen-Yu Tsai , Jernej Skrabec , linux-sunxi@lists.linux.dev, mfd@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 From: Jernej Skrabec Describe the AC200 audio codec and TV encoder as child nodes of the shared I2C register provider. Keep their analog supplies on the function consumers and describe the TV encoder display graph and optional bandgap calibration cell. Add the shared interrupt-controller properties and interrupt numbers needed by the TV encoder. The Ethernet PHY remains represented on its primary MDIO bus and is therefore not an MFD child. Signed-off-by: Jernej Skrabec Signed-off-by: James Hilliard --- .../devicetree/bindings/mfd/x-powers,ac200.yaml | 136 +++++++++++++++++= ++++ MAINTAINERS | 1 + include/dt-bindings/mfd/x-powers,ac200.h | 13 ++ 3 files changed, 150 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml b/Do= cumentation/devicetree/bindings/mfd/x-powers,ac200.yaml index ca7a910b2c73..935dc07138cb 100644 --- a/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml +++ b/Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml @@ -28,15 +28,114 @@ properties: be 24 or 27 MHz, matching the rates encoded by the documented EPHY c= lock selector. =20 + interrupts: + maxItems: 1 + description: + The shared open-drain INTB output for the TV encoder, Ethernet PHY a= nd + RTC interrupts. + + interrupt-controller: true + + '#interrupt-cells': + const: 1 + description: + The interrupt number, as defined in + include/dt-bindings/mfd/x-powers,ac200.h. + + codec: + type: object + $ref: /schemas/sound/dai-common.yaml# + unevaluatedProperties: false + + properties: + compatible: + const: x-powers,ac200-codec + + '#sound-dai-cells': + const: 0 + + ac-ldoin-supply: + description: The 3.3 V supply for the audio codec LDO input. + + required: + - compatible + - '#sound-dai-cells' + - ac-ldoin-supply + + tv-encoder: + type: object + additionalProperties: false + + properties: + compatible: + const: x-powers,ac200-tve + + interrupts: + maxItems: 1 + description: Cable detection interrupt. + + tv-vcc-supply: + description: The 3.3 V supply for the composite-video DAC. + + nvmem-cells: + maxItems: 1 + + nvmem-cell-names: + items: + - const: bandgap + + ports: + $ref: /schemas/graph.yaml#/properties/ports + + properties: + port@0: + $ref: /schemas/graph.yaml#/properties/port + description: Input from the display pipeline, carrying CCIR656. + + port@1: + $ref: /schemas/graph.yaml#/properties/port + description: Output to the composite-video connector. + + required: + - port@0 + - port@1 + + required: + - compatible + - interrupts + - tv-vcc-supply + - ports + + dependencies: + nvmem-cells: [ nvmem-cell-names ] + nvmem-cell-names: [ nvmem-cells ] + required: - compatible - reg - clocks =20 +allOf: + - if: + required: + - tv-encoder + then: + required: + - interrupts + - interrupt-controller + - '#interrupt-cells' + +dependencies: + interrupt-controller: [ '#interrupt-cells', interrupts ] + '#interrupt-cells': [ interrupt-controller ] + additionalProperties: false =20 examples: - | + #include + #include + i2c { #address-cells =3D <1>; #size-cells =3D <0>; @@ -45,6 +144,43 @@ examples: compatible =3D "x-powers,ac200"; reg =3D <0x10>; clocks =3D <&pwm 5>; + interrupt-parent =3D <&pio>; + interrupts =3D <1 20 IRQ_TYPE_LEVEL_LOW>; + interrupt-controller; + #interrupt-cells =3D <1>; + + codec { + compatible =3D "x-powers,ac200-codec"; + #sound-dai-cells =3D <0>; + ac-ldoin-supply =3D <®_aldo2>; + }; + + tv-encoder { + compatible =3D "x-powers,ac200-tve"; + interrupts =3D ; + tv-vcc-supply =3D <®_aldo2>; + + ports { + #address-cells =3D <1>; + #size-cells =3D <0>; + + port@0 { + reg =3D <0>; + + tve_in: endpoint { + remote-endpoint =3D <&tcon_out_tve>; + }; + }; + + port@1 { + reg =3D <1>; + + tve_out: endpoint { + remote-endpoint =3D <&composite_in>; + }; + }; + }; + }; }; }; ... diff --git a/MAINTAINERS b/MAINTAINERS index 1d03b0060bda..8a48f6a1e593 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -29511,6 +29511,7 @@ L: linux-sunxi@lists.linux.dev S: Maintained F: Documentation/devicetree/bindings/mfd/x-powers,ac200.yaml F: drivers/mfd/ac200.c +F: include/dt-bindings/mfd/x-powers,ac200.h =20 X-POWERS AXP288 PMIC DRIVERS M: Hans de Goede diff --git a/include/dt-bindings/mfd/x-powers,ac200.h b/include/dt-bindings= /mfd/x-powers,ac200.h new file mode 100644 index 000000000000..cc59e2ab4912 --- /dev/null +++ b/include/dt-bindings/mfd/x-powers,ac200.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ +/* + * Interrupt numbers of the X-Powers AC200 interrupt controller. + */ + +#ifndef _DT_BINDINGS_MFD_X_POWERS_AC200_H +#define _DT_BINDINGS_MFD_X_POWERS_AC200_H + +#define AC200_IRQ_TVE 0 +#define AC200_IRQ_EPHY 1 +#define AC200_IRQ_RTC 2 + +#endif /* _DT_BINDINGS_MFD_X_POWERS_AC200_H */ --=20 2.53.0 From nobody Sat Sep 26 06:20:39 2026 Received: from mail-oi1-f178.google.com (mail-oi1-f178.google.com [209.85.167.178]) (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 66083501F5B for ; Thu, 3 Sep 2026 20:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466210; cv=none; b=F1L7bt7GMHOcr9F/QM7knoM2cRPFyMvmK3Iqc+G9t0v0ooKCa4QkWkoxATJVhxpAAJgaj9uvYiv6lZmyAebU2/CRE/3H0AQjdy3m39+95n052xGijR8ZE+za4UtntUrfcSa1jwJrwFYwArTHY95jJZ7/EUaU9wb09VuCBPXJTYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788466210; c=relaxed/simple; bh=EsDOJ0cNSYW7sXQZ77r0mY6GpFlyh6wTRO3okImB9VI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DUCrrpB2D30V6XbscBqMHyg/FpoS37z7GVzLZkL+TmItES3eLvQtc0OJ4h4xv1xoHorKL5Cux6WgCMOIELdPh2CzXy9KNWPO+yWoGmoqs0T1JXXpFC+hml+QWI1EG29k8i5saxQK6cH7P/OPFHDvGVopt1BI8gfuQHaejjXGNZI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Llg930U2; arc=none smtp.client-ip=209.85.167.178 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Llg930U2" Received: by mail-oi1-f178.google.com with SMTP id 5614622812f47-4b28df1f600so206163b6e.2 for ; Thu, 03 Sep 2026 13:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1788466196; x=1789070996; 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=amt0kuMl9qCLLKww37f3Z87aRc1WA5oYLF+FoLpW7xg=; b=Llg930U25Fn9PB1pLaypZSguelk3/0Su4V+BnIlJaAoOULGKjn68Hd3SBKUMjGAMKp lix/WXYlkuBkYFIkh7EeEnHK0x9RP6TIPXL4lWUiHLvmdNyYf1804WwlJVrX0Y53sH4e MP3JFFMXEt9sgYnc4xgvX7XcCPaBq0lGf/VIhjUZjlOuirbLtRP7pAVWEnqppCQD/+UC 36KMsPN9WnZ7MkjnJE6pItee37PR3FQLjFugBx04c+c2Fp1zM3zNBkiRUB+IGGgOz71+ dYhSVOgoTJJdWDYM0fC22tu6Qsr4JFzcbl8ssgXBvbwS9/ubAy0ciX25pBV/2RBO4MJ2 tLvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788466196; x=1789070996; 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=amt0kuMl9qCLLKww37f3Z87aRc1WA5oYLF+FoLpW7xg=; b=Yut9Eg1eFEFXhTwNyRRyR3xfSu27qRSjpIiZ5MbGVPzftpurtd7tTlXgMOXpAm3tx6 HQ9rVSqh8zjSytLdlEOeBawTHS+TVUaMtrdQ+/GrEfR8VYmAFjJdkGFRrBLNkAHoMnSq Hwjsc4r9EZfdRTp7ISqEYTqiePT6FRqhSwE+TPBS2oIJLVEqJkxE25yDnUKZNnQpz3xj jp8DSn2O45nJ2E4c9f5UNCbsE4yzfloLgTtp6f3ZdJBY40Wy007i4g193m28CoVaWUAd MYbtiJDjC6TnPYTnVLvp2dDs45DEmBrVayRkqtzPWfMbj8HHShrVLh5N7NdmdOdXy3bw C86w== X-Forwarded-Encrypted: i=1; AKwUvBzPlOlx+Qs8cGAz6YzlBSJ4BSC31mwAzLWEhfV7qIdnHA4qYQkQVqmMeMRfRoe5zFPOUaVemDemPAVQu6Q=@vger.kernel.org X-Gm-Message-State: AFuF++kNzYm7PAFtXngE9VJpm4N60HUCraks/lwZX+revFxa8l+dQUno OJLRz5sZN1L8ZBCRPgOhzzTa/wf6UEvHbMbRWQBtf0iuoGWwfdYdEOV9 X-Gm-Gg: AYBFou1F+TGDvBTIhdkXNudWBJJxHr6OeVVGlQzdzqHZxZWgHXUVN6P4A9IRiwLNA7l VxUFEm4YF7aLHik0m0q1sLA7mXGZ4iA7KYIB0WFWxKUqLWjFhrQ94fcEEob197CmGfHkOkMWJ3s rgdSyK6ywCBa+fHlCYRmY0lfFyOhQdRqxbAgN4lw/plDobd/ysSSN/69zd4XfNYO5ciPuhT6CJM WCb3le4WdAy7XeaI4gLKbhE7zfTfBROqmtt4Kabj5G39W/3IjBEV4mKkVpqVyvIZQjkqXZNLunw 0tTCV8YcZRP+zBtXcTnIdr8P510JyzoC35/FXHLZPuzL1M6guWtjkvwZNgSwtK4zf7gzpK1fNGQ gS/hA5twmI1e5PuKRpY7J2hDXTxrYNZJiZDJVeYWkz7a8Lcfj9RhIo39GIe4YM8G15lz6YcveZR c7jJfgCJRl7X6Vp9ha1WHMT3MwSjWFcQQQGK9GVmYNopVb7ZHmBojQStTcGQtUt1uEiCZiZyHM7 qOnbUjfwTw41ubhOfenvP1o4NIVg26M11eG6MlDE/sCIRB0jYQkC2yJo2gJfTafxa1pMZuT/VFM cL6G2Ezcrx/ZdmPPdyi7epSn8urJJMwDHm1x7pSwjA4It76CK4OENVNzPNQVz2D7jNnT7Spon8T tOu3w4TFlM/389AWP064/jZ+pPPJxeQ== X-Received: by 2002:a05:6808:1445:b0:4b3:880a:f07f with SMTP id 5614622812f47-4b95fb4ebcamr1040808b6e.1.1788466196555; Thu, 03 Sep 2026 13:09:56 -0700 (PDT) Received: from [127.0.1.1] (184-96-151-165.hlrn.qwest.net. [184.96.151.165]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b971246d9csm252885b6e.7.2026.09.03.13.09.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 03 Sep 2026 13:09:56 -0700 (PDT) From: James Hilliard Date: Thu, 03 Sep 2026 14:09:43 -0600 Subject: [PATCH v9 4/4] mfd: ac200: Add codec and TV encoder 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: <20260903-submit-ac200-mfd-v9-4-6b7ed278989c@gmail.com> References: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> In-Reply-To: <20260903-submit-ac200-mfd-v9-0-6b7ed278989c@gmail.com> To: Lee Jones , Arnd Bergmann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , James Hilliard Cc: Andrew Lunn , "Jagielski, Jedrzej" , Andre Przywara , Chen-Yu Tsai , Jernej Skrabec , linux-sunxi@lists.linux.dev, mfd@lists.linux.dev, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 From: Jernej Skrabec Register the AC200 audio codec and TV encoder as MFD cells when their enabled child nodes are present. Filtering the cell list avoids creating unused platform devices, or warnings about missing firmware nodes, on boards which use only the separately enumerated MDIO PHY. Add a regmap IRQ controller for the shared level-triggered INTB output so the TV encoder can consume its cable-detection interrupt. The source function remains responsible for clearing its interrupt condition. Signed-off-by: Jernej Skrabec Signed-off-by: Andre Przywara Signed-off-by: James Hilliard --- drivers/mfd/Kconfig | 5 ++- drivers/mfd/ac200.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 122 insertions(+), 2 deletions(-) diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 6dea35c8c18e..5193c6f71bd8 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -210,12 +210,15 @@ config MFD_AC200 depends on COMMON_CLK depends on I2C depends on OF + select MFD_CORE select REGMAP_I2C + select REGMAP_IRQ help Support for the X-Powers AC200 mixed-signal companion IC. The AC200 contains audio, video, RTC and Fast Ethernet PHY functions and is co-packaged with some Allwinner H6 and H616 SoCs. This driver provides - the shared register access used by the individual function drivers. + the shared register access and instantiates the individual function + devices. =20 config MFD_AXP20X tristate diff --git a/drivers/mfd/ac200.c b/drivers/mfd/ac200.c index 94aa13deb0f8..f7d818141d9c 100644 --- a/drivers/mfd/ac200.c +++ b/drivers/mfd/ac200.c @@ -9,11 +9,24 @@ #include #include #include +#include +#include +#include #include +#include #include =20 +#include + #define AC200_SYS_CONTROL_REG 0x0002 #define AC200_SYS_CONTROL_CHIP_RESET_DEASSERT BIT(0) +#define AC200_SYS_IRQ_ENABLE_REG 0x0004 +#define AC200_SYS_IRQ_INTB_ENABLE BIT(15) +#define AC200_SYS_IRQ_INTB_ACTIVE_HIGH BIT(14) +#define AC200_SYS_IRQ_RTC BIT(12) +#define AC200_SYS_IRQ_EPHY BIT(8) +#define AC200_SYS_IRQ_TVE BIT(4) +#define AC200_SYS_IRQ_STATUS_REG 0x0006 =20 /* Interface register accessible from every register page. */ #define AC200_TWI_REG_ADDR_H 0x00fe @@ -51,6 +64,103 @@ static const struct regmap_config ac200_regmap_config = =3D { .cache_type =3D REGCACHE_MAPLE, }; =20 +static const struct regmap_irq ac200_irqs[] =3D { + REGMAP_IRQ_REG(AC200_IRQ_TVE, 0, AC200_SYS_IRQ_TVE), + REGMAP_IRQ_REG(AC200_IRQ_EPHY, 0, AC200_SYS_IRQ_EPHY), + REGMAP_IRQ_REG(AC200_IRQ_RTC, 0, AC200_SYS_IRQ_RTC), +}; + +/* + * SYS_IRQ_ENABLE is an enable register rather than a mask register, hence + * unmask_base. SYS_IRQ_STATUS reflects the source levels, so the function + * which raised an interrupt is responsible for clearing it. + */ +static const struct regmap_irq_chip ac200_irq_chip =3D { + .name =3D "ac200", + .status_base =3D AC200_SYS_IRQ_STATUS_REG, + .unmask_base =3D AC200_SYS_IRQ_ENABLE_REG, + .num_regs =3D 1, + .irqs =3D ac200_irqs, + .num_irqs =3D ARRAY_SIZE(ac200_irqs), +}; + +static const struct mfd_cell ac200_cells[] =3D { + { + .name =3D "ac200-codec", + .of_compatible =3D "x-powers,ac200-codec", + }, { + .name =3D "ac200-tve", + .of_compatible =3D "x-powers,ac200-tve", + }, +}; + +static int ac200_init_irq(struct device *dev, struct regmap *regmap, int i= rq) +{ + struct regmap_irq_chip_data *irq_data; + unsigned int trigger; + u16 value =3D AC200_SYS_IRQ_INTB_ENABLE; + int ret; + + trigger =3D irq_get_trigger_type(irq); + switch (trigger) { + case IRQ_TYPE_LEVEL_HIGH: + value |=3D AC200_SYS_IRQ_INTB_ACTIVE_HIGH; + break; + case IRQ_TYPE_NONE: + case IRQ_TYPE_LEVEL_LOW: + break; + default: + return dev_err_probe(dev, -EINVAL, + "INTB is level triggered, not type %u\n", + trigger); + } + + ret =3D regmap_update_bits(regmap, AC200_SYS_IRQ_ENABLE_REG, + AC200_SYS_IRQ_INTB_ENABLE | + AC200_SYS_IRQ_INTB_ACTIVE_HIGH, value); + if (ret) + return ret; + + ret =3D devm_regmap_add_irq_chip(dev, regmap, irq, IRQF_ONESHOT, 0, + &ac200_irq_chip, &irq_data); + if (ret) + return dev_err_probe(dev, ret, "failed to add IRQ chip\n"); + + return 0; +} + +static int ac200_add_devices(struct device *dev) +{ + struct mfd_cell cells[ARRAY_SIZE(ac200_cells)]; + unsigned int num_cells =3D 0; + unsigned int i; + int ret; + + for (i =3D 0; i < ARRAY_SIZE(ac200_cells); i++) { + const struct mfd_cell *cell =3D &ac200_cells[i]; + struct device_node *child; + + child =3D of_get_compatible_child(dev->of_node, + cell->of_compatible); + if (!child) + continue; + if (of_device_is_available(child)) + cells[num_cells++] =3D *cell; + of_node_put(child); + } + + if (!num_cells) + return 0; + + ret =3D devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, cells, num_cells, + NULL, 0, NULL); + if (ret) + return dev_err_probe(dev, ret, + "failed to add function devices\n"); + + return 0; +} + static int ac200_probe(struct i2c_client *client) { struct device *dev =3D &client->dev; @@ -83,7 +193,13 @@ static int ac200_probe(struct i2c_client *client) if (ret) return ret; =20 - return 0; + if (client->irq > 0) { + ret =3D ac200_init_irq(dev, regmap, client->irq); + if (ret) + return ret; + } + + return ac200_add_devices(dev); } =20 static const struct of_device_id ac200_of_match[] =3D { @@ -108,6 +224,7 @@ static struct i2c_driver ac200_driver =3D { }; module_i2c_driver(ac200_driver); =20 +MODULE_AUTHOR("Jernej Skrabec "); MODULE_AUTHOR("James Hilliard "); MODULE_DESCRIPTION("X-Powers AC200 MFD core driver"); MODULE_LICENSE("GPL"); --=20 2.53.0