18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Marvell PXA25x family pin control
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2016 Robert Jarzmik
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci#include <linux/module.h>
88c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
98c2ecf20Sopenharmony_ci#include <linux/of.h>
108c2ecf20Sopenharmony_ci#include <linux/of_device.h>
118c2ecf20Sopenharmony_ci#include <linux/pinctrl/pinctrl.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include "pinctrl-pxa2xx.h"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cistatic const struct pxa_desc_pin pxa25x_pins[] = {
168c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
178c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
188c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "GP_RST")),
198c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
208c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
218c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
228c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
238c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
248c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCLK")),
258c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
268c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "48_MHz")),
278c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
288c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCS0")),
298c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
308c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCS1")),
318c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
328c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "RTCCLK")),
338c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
348c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "3_6_MHz")),
358c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
368c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "32_kHz")),
378c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
388c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "MBGNT")),
398c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
408c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "MBREQ")),
418c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
428c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nCS_1")),
438c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
448c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "PWM0")),
458c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
468c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "PWM1")),
478c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
488c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "RDY")),
498c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
508c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "DREQ[1]")),
518c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
528c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "DREQ[0]")),
538c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
548c2ecf20Sopenharmony_ci	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
558c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
568c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "SCLK")),
578c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
588c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "SFRM")),
598c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
608c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "TXD")),
618c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
628c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "RXD")),
638c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
648c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "EXTCLK")),
658c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
668c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "BITCLK"),
678c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 2, "BITCLK"),
688c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "BITCLK")),
698c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
708c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "SDATA_IN0"),
718c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 2, "SDATA_IN")),
728c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
738c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "SDATA_OUT"),
748c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "SDATA_OUT")),
758c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
768c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "SYNC"),
778c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "SYNC")),
788c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
798c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "SDATA_IN1"),
808c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "SYSCLK")),
818c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
828c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nCS[5]")),
838c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
848c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "FFRXD"),
858c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "MMCCS0")),
868c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
878c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "CTS")),
888c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
898c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "DCD")),
908c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
918c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "DSR")),
928c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
938c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "RI")),
948c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
958c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCC1"),
968c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "FFTXD")),
978c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
988c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "DTR")),
998c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
1008c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "RTS")),
1018c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
1028c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "BTRXD"),
1038c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 3, "HWRXD")),
1048c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
1058c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "BTTXD"),
1068c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 3, "HWTXD")),
1078c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
1088c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "BTCTS"),
1098c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 3, "HWCTS")),
1108c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
1118c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "BTRTS"),
1128c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 3, "HWRTS")),
1138c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
1148c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "ICP_RXD"),
1158c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 2, "RXD")),
1168c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
1178c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "TXD"),
1188c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "ICP_TXD")),
1198c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
1208c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "HWTXD"),
1218c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPOE")),
1228c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
1238c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "HWRXD"),
1248c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPWE")),
1258c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
1268c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "HWCTS"),
1278c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPIOR")),
1288c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
1298c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "HWRTS"),
1308c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPIOW")),
1318c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
1328c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPCE[1]")),
1338c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
1348c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCLK"),
1358c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPCE[2]")),
1368c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
1378c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCLK"),
1388c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPSKTSEL")),
1398c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
1408c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nPREG")),
1418c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
1428c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "nPWAIT")),
1438c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
1448c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "nIOIS16")),
1458c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
1468c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<0>")),
1478c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
1488c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<1>")),
1498c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
1508c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<2>")),
1518c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
1528c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<3>")),
1538c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
1548c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<4>")),
1558c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
1568c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<5>")),
1578c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
1588c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<6>")),
1598c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
1608c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<7>")),
1618c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
1628c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "MBREQ"),
1638c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<8>")),
1648c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
1658c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCS0"),
1668c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<9>")),
1678c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
1688c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCS1"),
1698c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<10>")),
1708c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
1718c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MMCCLK"),
1728c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<11>")),
1738c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
1748c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "RTCCLK"),
1758c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<12>")),
1768c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
1778c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "3_6_MHz"),
1788c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<13>")),
1798c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
1808c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "32_kHz"),
1818c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<14>")),
1828c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
1838c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "MBGNT"),
1848c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LDD<15>")),
1858c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
1868c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LCD_FCLK")),
1878c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
1888c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LCD_LCLK")),
1898c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
1908c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LCD_PCLK")),
1918c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
1928c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
1938c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
1948c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nCS<2>")),
1958c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
1968c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nCS<3>")),
1978c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
1988c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 2, "nCS<4>")),
1998c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
2008c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "NSSPSCLK"),
2018c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "NSSPSCLK")),
2028c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
2038c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 1, "NSSPSFRM"),
2048c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "NSSPSFRM")),
2058c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
2068c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 2, "NSSPRXD"),
2078c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "NSSPTXD")),
2088c2ecf20Sopenharmony_ci	PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
2098c2ecf20Sopenharmony_ci		     PXA_FUNCTION(0, 2, "NSSPRXD"),
2108c2ecf20Sopenharmony_ci		     PXA_FUNCTION(1, 1, "NSSPTXD")),
2118c2ecf20Sopenharmony_ci};
2128c2ecf20Sopenharmony_ci
2138c2ecf20Sopenharmony_cistatic int pxa25x_pinctrl_probe(struct platform_device *pdev)
2148c2ecf20Sopenharmony_ci{
2158c2ecf20Sopenharmony_ci	int ret, i;
2168c2ecf20Sopenharmony_ci	void __iomem *base_af[8];
2178c2ecf20Sopenharmony_ci	void __iomem *base_dir[4];
2188c2ecf20Sopenharmony_ci	void __iomem *base_sleep[4];
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci	base_af[0] = devm_platform_ioremap_resource(pdev, 0);
2218c2ecf20Sopenharmony_ci	if (IS_ERR(base_af[0]))
2228c2ecf20Sopenharmony_ci		return PTR_ERR(base_af[0]);
2238c2ecf20Sopenharmony_ci
2248c2ecf20Sopenharmony_ci	base_dir[0] = devm_platform_ioremap_resource(pdev, 1);
2258c2ecf20Sopenharmony_ci	if (IS_ERR(base_dir[0]))
2268c2ecf20Sopenharmony_ci		return PTR_ERR(base_dir[0]);
2278c2ecf20Sopenharmony_ci
2288c2ecf20Sopenharmony_ci	base_dir[3] = devm_platform_ioremap_resource(pdev, 2);
2298c2ecf20Sopenharmony_ci	if (IS_ERR(base_dir[3]))
2308c2ecf20Sopenharmony_ci		return PTR_ERR(base_dir[3]);
2318c2ecf20Sopenharmony_ci
2328c2ecf20Sopenharmony_ci	base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);
2338c2ecf20Sopenharmony_ci	if (IS_ERR(base_sleep[0]))
2348c2ecf20Sopenharmony_ci		return PTR_ERR(base_sleep[0]);
2358c2ecf20Sopenharmony_ci
2368c2ecf20Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(base_af); i++)
2378c2ecf20Sopenharmony_ci		base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
2388c2ecf20Sopenharmony_ci	for (i = 0; i < 3; i++)
2398c2ecf20Sopenharmony_ci		base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
2408c2ecf20Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
2418c2ecf20Sopenharmony_ci		base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;
2428c2ecf20Sopenharmony_ci
2438c2ecf20Sopenharmony_ci	ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
2448c2ecf20Sopenharmony_ci				  base_af, base_dir, base_sleep);
2458c2ecf20Sopenharmony_ci	return ret;
2468c2ecf20Sopenharmony_ci}
2478c2ecf20Sopenharmony_ci
2488c2ecf20Sopenharmony_cistatic const struct of_device_id pxa25x_pinctrl_match[] = {
2498c2ecf20Sopenharmony_ci	{ .compatible = "marvell,pxa25x-pinctrl", },
2508c2ecf20Sopenharmony_ci	{}
2518c2ecf20Sopenharmony_ci};
2528c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_cistatic struct platform_driver pxa25x_pinctrl_driver = {
2558c2ecf20Sopenharmony_ci	.probe	= pxa25x_pinctrl_probe,
2568c2ecf20Sopenharmony_ci	.driver	= {
2578c2ecf20Sopenharmony_ci		.name		= "pxa25x-pinctrl",
2588c2ecf20Sopenharmony_ci		.of_match_table	= pxa25x_pinctrl_match,
2598c2ecf20Sopenharmony_ci	},
2608c2ecf20Sopenharmony_ci};
2618c2ecf20Sopenharmony_cimodule_platform_driver(pxa25x_pinctrl_driver);
2628c2ecf20Sopenharmony_ci
2638c2ecf20Sopenharmony_ciMODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
2648c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
2658c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2");
266