]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
pinctrl: sunxi: Add support for the Allwinner A523
authorAndre Przywara <andre.przywara@arm.com>
Thu, 6 Mar 2025 23:58:26 +0000 (23:58 +0000)
committerLinus Walleij <linus.walleij@linaro.org>
Thu, 13 Mar 2025 13:48:57 +0000 (14:48 +0100)
The Allwinner A523 contains pins in 10 out of the 11 possible pin banks;
it just skips port A.
Use the newly introduced DT based pinctrl driver to describe just the
generic pinctrl properties, so advertise the number of pins per bank
and the interrupt capabilities. The actual function/mux assignment is
taken from the devicetree.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Link: https://lore.kernel.org/20250306235827.4895-8-andre.przywara@arm.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/sunxi/Kconfig
drivers/pinctrl/sunxi/Makefile
drivers/pinctrl/sunxi/pinctrl-sun55i-a523.c [new file with mode: 0644]

index a78fdbbdfc0c7f794de38f3a317b8396b1e87ee2..0cbe466683650d0168f48b11df832408315c0b47 100644 (file)
@@ -131,4 +131,9 @@ config PINCTRL_SUN50I_H616_R
        default ARM64 && ARCH_SUNXI
        select PINCTRL_SUNXI
 
+config PINCTRL_SUN55I_A523
+       bool "Support for the Allwinner A523 PIO"
+       default ARM64 && ARCH_SUNXI
+       select PINCTRL_SUNXI
+
 endif
index f5bad7a5295192f8e4bef5e8d20b10d9bc56500c..4e55508ff7f7658fbfae5e84e0c0cf78791b3dcd 100644 (file)
@@ -27,5 +27,6 @@ obj-$(CONFIG_PINCTRL_SUN50I_H6)               += pinctrl-sun50i-h6.o
 obj-$(CONFIG_PINCTRL_SUN50I_H6_R)      += pinctrl-sun50i-h6-r.o
 obj-$(CONFIG_PINCTRL_SUN50I_H616)      += pinctrl-sun50i-h616.o
 obj-$(CONFIG_PINCTRL_SUN50I_H616_R)    += pinctrl-sun50i-h616-r.o
+obj-$(CONFIG_PINCTRL_SUN55I_A523)      += pinctrl-sun55i-a523.o
 obj-$(CONFIG_PINCTRL_SUN9I_A80)                += pinctrl-sun9i-a80.o
 obj-$(CONFIG_PINCTRL_SUN9I_A80_R)      += pinctrl-sun9i-a80-r.o
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun55i-a523.c b/drivers/pinctrl/sunxi/pinctrl-sun55i-a523.c
new file mode 100644 (file)
index 0000000..7d2308c
--- /dev/null
@@ -0,0 +1,54 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Allwinner A523 SoC pinctrl driver.
+ *
+ * Copyright (C) 2023 Arm Ltd.
+ */
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+
+#include "pinctrl-sunxi.h"
+
+static const u8 a523_nr_bank_pins[SUNXI_PINCTRL_MAX_BANKS] =
+/*       PA  PB  PC  PD  PE  PF  PG  PH  PI  PJ  PK */
+       {  0, 15, 17, 24, 16,  7, 15, 20, 17, 28, 24 };
+
+static const unsigned int a523_irq_bank_map[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+
+static const u8 a523_irq_bank_muxes[SUNXI_PINCTRL_MAX_BANKS] =
+/*       PA  PB  PC  PD  PE  PF  PG  PH  PI  PJ  PK */
+       {  0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14};
+
+static struct sunxi_pinctrl_desc a523_pinctrl_data = {
+       .irq_banks = ARRAY_SIZE(a523_irq_bank_map),
+       .irq_bank_map = a523_irq_bank_map,
+       .irq_read_needs_mux = true,
+       .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
+};
+
+static int a523_pinctrl_probe(struct platform_device *pdev)
+{
+       return sunxi_pinctrl_dt_table_init(pdev, a523_nr_bank_pins,
+                                          a523_irq_bank_muxes,
+                                          &a523_pinctrl_data,
+                                          SUNXI_PINCTRL_NEW_REG_LAYOUT |
+                                          SUNXI_PINCTRL_ELEVEN_BANKS);
+}
+
+static const struct of_device_id a523_pinctrl_match[] = {
+       { .compatible = "allwinner,sun55i-a523-pinctrl", },
+       {}
+};
+
+static struct platform_driver a523_pinctrl_driver = {
+       .probe  = a523_pinctrl_probe,
+       .driver = {
+               .name           = "sun55i-a523-pinctrl",
+               .of_match_table = a523_pinctrl_match,
+       },
+};
+builtin_platform_driver(a523_pinctrl_driver);