// 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" );
Messung V0.5 in Prozent C=100 H=99 G=99
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-08)
¤
*© Formatika GbR, Deutschland