11951384cSRobert Jarzmik /*
21951384cSRobert Jarzmik  * Marvell PXA25x family pin control
31951384cSRobert Jarzmik  *
41951384cSRobert Jarzmik  * Copyright (C) 2016 Robert Jarzmik
51951384cSRobert Jarzmik  *
61951384cSRobert Jarzmik  * This program is free software; you can redistribute it and/or modify
71951384cSRobert Jarzmik  * it under the terms of the GNU General Public License as published by
81951384cSRobert Jarzmik  * the Free Software Foundation; version 2 of the License.
91951384cSRobert Jarzmik  *
101951384cSRobert Jarzmik  */
111951384cSRobert Jarzmik #include <linux/module.h>
121951384cSRobert Jarzmik #include <linux/platform_device.h>
131951384cSRobert Jarzmik #include <linux/of.h>
141951384cSRobert Jarzmik #include <linux/of_device.h>
151951384cSRobert Jarzmik #include <linux/pinctrl/pinctrl.h>
161951384cSRobert Jarzmik 
171951384cSRobert Jarzmik #include "pinctrl-pxa2xx.h"
181951384cSRobert Jarzmik 
191951384cSRobert Jarzmik static const struct pxa_desc_pin pxa25x_pins[] = {
201951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),
211951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),
221951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "GP_RST")),
231951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),
241951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),
251951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),
261951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),
271951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),
281951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCLK")),
291951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),
301951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "48_MHz")),
311951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),
321951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCS0")),
331951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),
341951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCS1")),
351951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),
361951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "RTCCLK")),
371951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),
381951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "3_6_MHz")),
391951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),
401951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "32_kHz")),
411951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),
421951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "MBGNT")),
431951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),
441951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "MBREQ")),
451951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),
461951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nCS_1")),
471951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),
481951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "PWM0")),
491951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),
501951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "PWM1")),
511951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),
521951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "RDY")),
531951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),
541951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "DREQ[1]")),
551951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),
561951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "DREQ[0]")),
571951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),
581951384cSRobert Jarzmik 	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),
591951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),
601951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "SCLK")),
611951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),
621951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "SFRM")),
631951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),
641951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "TXD")),
651951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),
661951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "RXD")),
671951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),
681951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "EXTCLK")),
691951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),
701951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "BITCLK"),
711951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 2, "BITCLK"),
721951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "BITCLK")),
731951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),
741951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "SDATA_IN0"),
751951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 2, "SDATA_IN")),
761951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),
771951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "SDATA_OUT"),
781951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "SDATA_OUT")),
791951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),
801951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "SYNC"),
811951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "SYNC")),
821951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),
831951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "SDATA_IN1"),
841951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "SYSCLK")),
851951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),
861951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nCS[5]")),
871951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),
881951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "FFRXD"),
891951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "MMCCS0")),
901951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),
911951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "CTS")),
921951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),
931951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "DCD")),
941951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),
951951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "DSR")),
961951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),
971951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "RI")),
981951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),
991951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCC1"),
1001951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "FFTXD")),
1011951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),
1021951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "DTR")),
1031951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),
1041951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "RTS")),
1051951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),
1061951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "BTRXD"),
1071951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 3, "HWRXD")),
1081951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),
1091951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "BTTXD"),
1101951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 3, "HWTXD")),
1111951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),
1121951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "BTCTS"),
1131951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 3, "HWCTS")),
1141951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),
1151951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "BTRTS"),
1161951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 3, "HWRTS")),
1171951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),
1181951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "ICP_RXD"),
1191951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 2, "RXD")),
1201951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),
1211951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "TXD"),
1221951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "ICP_TXD")),
1231951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),
1241951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "HWTXD"),
1251951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPOE")),
1261951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),
1271951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "HWRXD"),
1281951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPWE")),
1291951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),
1301951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "HWCTS"),
1311951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPIOR")),
1321951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),
1331951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "HWRTS"),
1341951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPIOW")),
1351951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),
1361951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPCE[1]")),
1371951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),
1381951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCLK"),
1391951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPCE[2]")),
1401951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),
1411951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCLK"),
1421951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPSKTSEL")),
1431951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),
1441951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nPREG")),
1451951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),
1461951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "nPWAIT")),
1471951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),
1481951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "nIOIS16")),
1491951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),
1501951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<0>")),
1511951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),
1521951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<1>")),
1531951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),
1541951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<2>")),
1551951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),
1561951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<3>")),
1571951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),
1581951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<4>")),
1591951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),
1601951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<5>")),
1611951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),
1621951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<6>")),
1631951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),
1641951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<7>")),
1651951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),
1661951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "MBREQ"),
1671951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<8>")),
1681951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),
1691951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCS0"),
1701951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<9>")),
1711951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),
1721951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCS1"),
1731951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<10>")),
1741951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),
1751951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MMCCLK"),
1761951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<11>")),
1771951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),
1781951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "RTCCLK"),
1791951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<12>")),
1801951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),
1811951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "3_6_MHz"),
1821951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<13>")),
1831951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),
1841951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "32_kHz"),
1851951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<14>")),
1861951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),
1871951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "MBGNT"),
1881951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LDD<15>")),
1891951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),
1901951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LCD_FCLK")),
1911951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),
1921951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LCD_LCLK")),
1931951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),
1941951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LCD_PCLK")),
1951951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),
1961951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "LCD_ACBIAS")),
1971951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),
1981951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nCS<2>")),
1991951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),
2001951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nCS<3>")),
2011951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),
2021951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 2, "nCS<4>")),
2031951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),
2041951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "NSSPSCLK"),
2051951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "NSSPSCLK")),
2061951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),
2071951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 1, "NSSPSFRM"),
2081951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "NSSPSFRM")),
2091951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),
2101951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 2, "NSSPRXD"),
2111951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "NSSPTXD")),
2121951384cSRobert Jarzmik 	PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),
2131951384cSRobert Jarzmik 		     PXA_FUNCTION(0, 2, "NSSPRXD"),
2141951384cSRobert Jarzmik 		     PXA_FUNCTION(1, 1, "NSSPTXD")),
2151951384cSRobert Jarzmik };
2161951384cSRobert Jarzmik 
2171951384cSRobert Jarzmik static int pxa25x_pinctrl_probe(struct platform_device *pdev)
2181951384cSRobert Jarzmik {
2191951384cSRobert Jarzmik 	int ret, i;
2201951384cSRobert Jarzmik 	void __iomem *base_af[8];
2211951384cSRobert Jarzmik 	void __iomem *base_dir[4];
2221951384cSRobert Jarzmik 	void __iomem *base_sleep[4];
2231951384cSRobert Jarzmik 	struct resource *res;
2241951384cSRobert Jarzmik 
2251951384cSRobert Jarzmik 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2261951384cSRobert Jarzmik 	base_af[0] = devm_ioremap_resource(&pdev->dev, res);
2271951384cSRobert Jarzmik 	if (IS_ERR(base_af[0]))
2281951384cSRobert Jarzmik 		return PTR_ERR(base_af[0]);
2291951384cSRobert Jarzmik 
2301951384cSRobert Jarzmik 	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
2311951384cSRobert Jarzmik 	base_dir[0] = devm_ioremap_resource(&pdev->dev, res);
2321951384cSRobert Jarzmik 	if (IS_ERR(base_dir[0]))
2331951384cSRobert Jarzmik 		return PTR_ERR(base_dir[0]);
2341951384cSRobert Jarzmik 
2351951384cSRobert Jarzmik 	res = platform_get_resource(pdev, IORESOURCE_MEM, 2);
2361951384cSRobert Jarzmik 	base_dir[3] = devm_ioremap_resource(&pdev->dev, res);
2371951384cSRobert Jarzmik 	if (IS_ERR(base_dir[3]))
2381951384cSRobert Jarzmik 		return PTR_ERR(base_dir[3]);
2391951384cSRobert Jarzmik 
2401951384cSRobert Jarzmik 	res = platform_get_resource(pdev, IORESOURCE_MEM, 3);
2411951384cSRobert Jarzmik 	base_sleep[0] = devm_ioremap_resource(&pdev->dev, res);
2421951384cSRobert Jarzmik 	if (IS_ERR(base_sleep[0]))
2431951384cSRobert Jarzmik 		return PTR_ERR(base_sleep[0]);
2441951384cSRobert Jarzmik 
2451951384cSRobert Jarzmik 	for (i = 0; i < ARRAY_SIZE(base_af); i++)
2461951384cSRobert Jarzmik 		base_af[i] = base_af[0] + sizeof(base_af[0]) * i;
2471951384cSRobert Jarzmik 	for (i = 0; i < 3; i++)
2481951384cSRobert Jarzmik 		base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;
2491951384cSRobert Jarzmik 	for (i = 0; i < ARRAY_SIZE(base_sleep); i++)
2501951384cSRobert Jarzmik 		base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;
2511951384cSRobert Jarzmik 
2521951384cSRobert Jarzmik 	ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),
2531951384cSRobert Jarzmik 				  base_af, base_dir, base_sleep);
2541951384cSRobert Jarzmik 	return ret;
2551951384cSRobert Jarzmik }
2561951384cSRobert Jarzmik 
2571951384cSRobert Jarzmik static const struct of_device_id pxa25x_pinctrl_match[] = {
2581951384cSRobert Jarzmik 	{ .compatible = "marvell,pxa25x-pinctrl", },
2591951384cSRobert Jarzmik 	{}
2601951384cSRobert Jarzmik };
2611951384cSRobert Jarzmik MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);
2621951384cSRobert Jarzmik 
2631951384cSRobert Jarzmik static struct platform_driver pxa25x_pinctrl_driver = {
2641951384cSRobert Jarzmik 	.probe	= pxa25x_pinctrl_probe,
2651951384cSRobert Jarzmik 	.driver	= {
2661951384cSRobert Jarzmik 		.name		= "pxa25x-pinctrl",
2671951384cSRobert Jarzmik 		.of_match_table	= pxa25x_pinctrl_match,
2681951384cSRobert Jarzmik 	},
2691951384cSRobert Jarzmik };
2701951384cSRobert Jarzmik module_platform_driver(pxa25x_pinctrl_driver);
2711951384cSRobert Jarzmik 
2721951384cSRobert Jarzmik MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");
2731951384cSRobert Jarzmik MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");
2741951384cSRobert Jarzmik MODULE_LICENSE("GPL v2");
275