1*b8a51e95SAndre Przywara // SPDX-License-Identifier: GPL-2.0 2*b8a51e95SAndre Przywara /* 3*b8a51e95SAndre Przywara * Allwinner A523 SoC r-pinctrl driver. 4*b8a51e95SAndre Przywara * 5*b8a51e95SAndre Przywara * Copyright (C) 2024 Arm Ltd. 6*b8a51e95SAndre Przywara */ 7*b8a51e95SAndre Przywara 8*b8a51e95SAndre Przywara #include <linux/module.h> 9*b8a51e95SAndre Przywara #include <linux/platform_device.h> 10*b8a51e95SAndre Przywara #include <linux/of.h> 11*b8a51e95SAndre Przywara #include <linux/of_device.h> 12*b8a51e95SAndre Przywara #include <linux/pinctrl/pinctrl.h> 13*b8a51e95SAndre Przywara 14*b8a51e95SAndre Przywara #include "pinctrl-sunxi.h" 15*b8a51e95SAndre Przywara 16*b8a51e95SAndre Przywara static const u8 a523_r_nr_bank_pins[SUNXI_PINCTRL_MAX_BANKS] = 17*b8a51e95SAndre Przywara /* PL PM */ 18*b8a51e95SAndre Przywara { 14, 6 }; 19*b8a51e95SAndre Przywara 20*b8a51e95SAndre Przywara static const unsigned int a523_r_irq_bank_map[] = { 0, 1 }; 21*b8a51e95SAndre Przywara 22*b8a51e95SAndre Przywara static const u8 a523_r_irq_bank_muxes[SUNXI_PINCTRL_MAX_BANKS] = 23*b8a51e95SAndre Przywara /* PL PM */ 24*b8a51e95SAndre Przywara { 14, 14 }; 25*b8a51e95SAndre Przywara 26*b8a51e95SAndre Przywara static struct sunxi_pinctrl_desc a523_r_pinctrl_data = { 27*b8a51e95SAndre Przywara .irq_banks = ARRAY_SIZE(a523_r_irq_bank_map), 28*b8a51e95SAndre Przywara .irq_bank_map = a523_r_irq_bank_map, 29*b8a51e95SAndre Przywara .irq_read_needs_mux = true, 30*b8a51e95SAndre Przywara .io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL, 31*b8a51e95SAndre Przywara .pin_base = PL_BASE, 32*b8a51e95SAndre Przywara }; 33*b8a51e95SAndre Przywara 34*b8a51e95SAndre Przywara static int a523_r_pinctrl_probe(struct platform_device *pdev) 35*b8a51e95SAndre Przywara { 36*b8a51e95SAndre Przywara return sunxi_pinctrl_dt_table_init(pdev, a523_r_nr_bank_pins, 37*b8a51e95SAndre Przywara a523_r_irq_bank_muxes, 38*b8a51e95SAndre Przywara &a523_r_pinctrl_data, 39*b8a51e95SAndre Przywara SUNXI_PINCTRL_NEW_REG_LAYOUT); 40*b8a51e95SAndre Przywara } 41*b8a51e95SAndre Przywara 42*b8a51e95SAndre Przywara static const struct of_device_id a523_r_pinctrl_match[] = { 43*b8a51e95SAndre Przywara { .compatible = "allwinner,sun55i-a523-r-pinctrl", }, 44*b8a51e95SAndre Przywara {} 45*b8a51e95SAndre Przywara }; 46*b8a51e95SAndre Przywara 47*b8a51e95SAndre Przywara static struct platform_driver a523_r_pinctrl_driver = { 48*b8a51e95SAndre Przywara .probe = a523_r_pinctrl_probe, 49*b8a51e95SAndre Przywara .driver = { 50*b8a51e95SAndre Przywara .name = "sun55i-a523-r-pinctrl", 51*b8a51e95SAndre Przywara .of_match_table = a523_r_pinctrl_match, 52*b8a51e95SAndre Przywara }, 53*b8a51e95SAndre Przywara }; 54*b8a51e95SAndre Przywara builtin_platform_driver(a523_r_pinctrl_driver); 55