// SPDX-License-Identifier: GPL-2.0-only
/*
 * Marvell PXA25x family pin control
 *
 * Copyright (C) 2016 Robert Jarzmik
 */
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/pinctrl/pinctrl.h>

#include "pinctrl-pxa2xx.h"

static const struct pxa_desc_pin pxa25x_pins[] = {
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
		     PXA_FUNCTION(0, 1, "GP_RST")),
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
		     PXA_FUNCTION(1, 1, "MMCCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
		     PXA_FUNCTION(1, 1, "48_MHz")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
		     PXA_FUNCTION(1, 1, "MMCCS0")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
		     PXA_FUNCTION(1, 1, "MMCCS1")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
		     PXA_FUNCTION(1, 1, "RTCCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
		     PXA_FUNCTION(1, 1, "3_6_MHz")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
		     PXA_FUNCTION(1, 1, "32_kHz")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
		     PXA_FUNCTION(1, 2, "MBGNT")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
		     PXA_FUNCTION(0, 1, "MBREQ")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
		     PXA_FUNCTION(1, 2, "nCS_1")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
		     PXA_FUNCTION(1, 2, "PWM0")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
		     PXA_FUNCTION(1, 2, "PWM1")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
		     PXA_FUNCTION(0, 1, "RDY")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
		     PXA_FUNCTION(0, 1, "DREQ[1]")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
		     PXA_FUNCTION(0, 1, "DREQ[0]")),
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
		     PXA_FUNCTION(1, 2, "SCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
		     PXA_FUNCTION(1, 2, "SFRM")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
		     PXA_FUNCTION(1, 2, "TXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
		     PXA_FUNCTION(0, 1, "RXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
		     PXA_FUNCTION(0, 1, "EXTCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
		     PXA_FUNCTION(0, 1, "BITCLK"),
		     PXA_FUNCTION(0, 2, "BITCLK"),
		     PXA_FUNCTION(1, 1, "BITCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
		     PXA_FUNCTION(0, 1, "SDATA_IN0"),
		     PXA_FUNCTION(0, 2, "SDATA_IN")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
		     PXA_FUNCTION(1, 1, "SDATA_OUT"),
		     PXA_FUNCTION(1, 2, "SDATA_OUT")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
		     PXA_FUNCTION(1, 1, "SYNC"),
		     PXA_FUNCTION(1, 2, "SYNC")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
		     PXA_FUNCTION(0, 1, "SDATA_IN1"),
		     PXA_FUNCTION(1, 1, "SYSCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
		     PXA_FUNCTION(1, 2, "nCS[5]")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
		     PXA_FUNCTION(0, 1, "FFRXD"),
		     PXA_FUNCTION(1, 2, "MMCCS0")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
		     PXA_FUNCTION(0, 1, "CTS")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
		     PXA_FUNCTION(0, 1, "DCD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
		     PXA_FUNCTION(0, 1, "DSR")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
		     PXA_FUNCTION(0, 1, "RI")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
		     PXA_FUNCTION(1, 1, "MMCC1"),
		     PXA_FUNCTION(1, 2, "FFTXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
		     PXA_FUNCTION(1, 2, "DTR")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
		     PXA_FUNCTION(1, 2, "RTS")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
		     PXA_FUNCTION(0, 1, "BTRXD"),
		     PXA_FUNCTION(0, 3, "HWRXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
		     PXA_FUNCTION(1, 2, "BTTXD"),
		     PXA_FUNCTION(1, 3, "HWTXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
		     PXA_FUNCTION(0, 1, "BTCTS"),
		     PXA_FUNCTION(0, 3, "HWCTS")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
		     PXA_FUNCTION(1, 2, "BTRTS"),
		     PXA_FUNCTION(1, 3, "HWRTS")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
		     PXA_FUNCTION(0, 1, "ICP_RXD"),
		     PXA_FUNCTION(0, 2, "RXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
		     PXA_FUNCTION(1, 1, "TXD"),
		     PXA_FUNCTION(1, 2, "ICP_TXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
		     PXA_FUNCTION(1, 1, "HWTXD"),
		     PXA_FUNCTION(1, 2, "nPOE")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
		     PXA_FUNCTION(0, 1, "HWRXD"),
		     PXA_FUNCTION(1, 2, "nPWE")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
		     PXA_FUNCTION(0, 1, "HWCTS"),
		     PXA_FUNCTION(1, 2, "nPIOR")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
		     PXA_FUNCTION(1, 1, "HWRTS"),
		     PXA_FUNCTION(1, 2, "nPIOW")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
		     PXA_FUNCTION(1, 2, "nPCE[1]")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
		     PXA_FUNCTION(1, 1, "MMCCLK"),
		     PXA_FUNCTION(1, 2, "nPCE[2]")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
		     PXA_FUNCTION(1, 1, "MMCCLK"),
		     PXA_FUNCTION(1, 2, "nPSKTSEL")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
		     PXA_FUNCTION(1, 2, "nPREG")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
		     PXA_FUNCTION(0, 1, "nPWAIT")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
		     PXA_FUNCTION(0, 1, "nIOIS16")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
		     PXA_FUNCTION(1, 2, "LDD<0>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
		     PXA_FUNCTION(1, 2, "LDD<1>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
		     PXA_FUNCTION(1, 2, "LDD<2>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
		     PXA_FUNCTION(1, 2, "LDD<3>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
		     PXA_FUNCTION(1, 2, "LDD<4>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
		     PXA_FUNCTION(1, 2, "LDD<5>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
		     PXA_FUNCTION(1, 2, "LDD<6>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
		     PXA_FUNCTION(1, 2, "LDD<7>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
		     PXA_FUNCTION(0, 1, "MBREQ"),
		     PXA_FUNCTION(1, 2, "LDD<8>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
		     PXA_FUNCTION(1, 1, "MMCCS0"),
		     PXA_FUNCTION(1, 2, "LDD<9>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
		     PXA_FUNCTION(1, 1, "MMCCS1"),
		     PXA_FUNCTION(1, 2, "LDD<10>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
		     PXA_FUNCTION(1, 1, "MMCCLK"),
		     PXA_FUNCTION(1, 2, "LDD<11>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
		     PXA_FUNCTION(1, 1, "RTCCLK"),
		     PXA_FUNCTION(1, 2, "LDD<12>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
		     PXA_FUNCTION(1, 1, "3_6_MHz"),
		     PXA_FUNCTION(1, 2, "LDD<13>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
		     PXA_FUNCTION(1, 1, "32_kHz"),
		     PXA_FUNCTION(1, 2, "LDD<14>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
		     PXA_FUNCTION(1, 1, "MBGNT"),
		     PXA_FUNCTION(1, 2, "LDD<15>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
		     PXA_FUNCTION(1, 2, "LCD_FCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
		     PXA_FUNCTION(1, 2, "LCD_LCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
		     PXA_FUNCTION(1, 2, "LCD_PCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
		     PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
		     PXA_FUNCTION(1, 2, "nCS<2>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
		     PXA_FUNCTION(1, 2, "nCS<3>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
		     PXA_FUNCTION(1, 2, "nCS<4>")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
		     PXA_FUNCTION(0, 1, "NSSPSCLK"),
		     PXA_FUNCTION(1, 1, "NSSPSCLK")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
		     PXA_FUNCTION(0, 1, "NSSPSFRM"),
		     PXA_FUNCTION(1, 1, "NSSPSFRM")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
		     PXA_FUNCTION(0, 2, "NSSPRXD"),
		     PXA_FUNCTION(1, 1, "NSSPTXD")),
	PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
		     PXA_FUNCTION(0, 2, "NSSPRXD"),
		     PXA_FUNCTION(1, 1, "NSSPTXD")),
};

static int pxa25x_pinctrl_probe(struct platform_device *pdev)
{
	int ret, i;
	void __iomem *base_af[8];
	void __iomem *base_dir[4];
	void __iomem *base_sleep[4];

	base_af[0] = devm_platform_ioremap_resource(pdev, 0);
	if (IS_ERR(base_af[0]))
		return PTR_ERR(base_af[0]);

	base_dir[0] = devm_platform_ioremap_resource(pdev, 1);
	if (IS_ERR(base_dir[0]))
		return PTR_ERR(base_dir[0]);

	base_dir[3] = devm_platform_ioremap_resource(pdev, 2);
	if (IS_ERR(base_dir[3]))
		return PTR_ERR(base_dir[3]);

	base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);
	if (IS_ERR(base_sleep[0]))
		return PTR_ERR(base_sleep[0]);

	for (i = 0; i < ARRAY_SIZE(base_af); i++)
		base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
	for (i = 0; i < 3; i++)
		base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
	for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
		base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;

	ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
				  base_af, base_dir, base_sleep);
	return ret;
}

static const struct of_device_id pxa25x_pinctrl_match[] = {
	{ .compatible = "marvell,pxa25x-pinctrl", },
	{}
};
MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);

static struct platform_driver pxa25x_pinctrl_driver = {
	.probe	= pxa25x_pinctrl_probe,
	.driver	= {
		.name		= "pxa25x-pinctrl",
		.of_match_table	= pxa25x_pinctrl_match,
	},
};
module_platform_driver(pxa25x_pinctrl_driver);

MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
MODULE_LICENSE("GPL v2");
