brintos

brintos / linux-shallow public Read only

0
0
Text · 8.8 KiB · 2a48425 Raw
265 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * Marvell PXA25x family pin control4 *5 * Copyright (C) 2016 Robert Jarzmik6 */7#include <linux/module.h>8#include <linux/platform_device.h>9#include <linux/of.h>10#include <linux/pinctrl/pinctrl.h>11 12#include "pinctrl-pxa2xx.h"13 14static const struct pxa_desc_pin pxa25x_pins[] = {15	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(0)),16	PXA_GPIO_PIN(PXA_PINCTRL_PIN(1),17		     PXA_FUNCTION(0, 1, "GP_RST")),18	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(2)),19	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(3)),20	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(4)),21	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(5)),22	PXA_GPIO_PIN(PXA_PINCTRL_PIN(6),23		     PXA_FUNCTION(1, 1, "MMCCLK")),24	PXA_GPIO_PIN(PXA_PINCTRL_PIN(7),25		     PXA_FUNCTION(1, 1, "48_MHz")),26	PXA_GPIO_PIN(PXA_PINCTRL_PIN(8),27		     PXA_FUNCTION(1, 1, "MMCCS0")),28	PXA_GPIO_PIN(PXA_PINCTRL_PIN(9),29		     PXA_FUNCTION(1, 1, "MMCCS1")),30	PXA_GPIO_PIN(PXA_PINCTRL_PIN(10),31		     PXA_FUNCTION(1, 1, "RTCCLK")),32	PXA_GPIO_PIN(PXA_PINCTRL_PIN(11),33		     PXA_FUNCTION(1, 1, "3_6_MHz")),34	PXA_GPIO_PIN(PXA_PINCTRL_PIN(12),35		     PXA_FUNCTION(1, 1, "32_kHz")),36	PXA_GPIO_PIN(PXA_PINCTRL_PIN(13),37		     PXA_FUNCTION(1, 2, "MBGNT")),38	PXA_GPIO_PIN(PXA_PINCTRL_PIN(14),39		     PXA_FUNCTION(0, 1, "MBREQ")),40	PXA_GPIO_PIN(PXA_PINCTRL_PIN(15),41		     PXA_FUNCTION(1, 2, "nCS_1")),42	PXA_GPIO_PIN(PXA_PINCTRL_PIN(16),43		     PXA_FUNCTION(1, 2, "PWM0")),44	PXA_GPIO_PIN(PXA_PINCTRL_PIN(17),45		     PXA_FUNCTION(1, 2, "PWM1")),46	PXA_GPIO_PIN(PXA_PINCTRL_PIN(18),47		     PXA_FUNCTION(0, 1, "RDY")),48	PXA_GPIO_PIN(PXA_PINCTRL_PIN(19),49		     PXA_FUNCTION(0, 1, "DREQ[1]")),50	PXA_GPIO_PIN(PXA_PINCTRL_PIN(20),51		     PXA_FUNCTION(0, 1, "DREQ[0]")),52	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(21)),53	PXA_GPIO_ONLY_PIN(PXA_PINCTRL_PIN(22)),54	PXA_GPIO_PIN(PXA_PINCTRL_PIN(23),55		     PXA_FUNCTION(1, 2, "SCLK")),56	PXA_GPIO_PIN(PXA_PINCTRL_PIN(24),57		     PXA_FUNCTION(1, 2, "SFRM")),58	PXA_GPIO_PIN(PXA_PINCTRL_PIN(25),59		     PXA_FUNCTION(1, 2, "TXD")),60	PXA_GPIO_PIN(PXA_PINCTRL_PIN(26),61		     PXA_FUNCTION(0, 1, "RXD")),62	PXA_GPIO_PIN(PXA_PINCTRL_PIN(27),63		     PXA_FUNCTION(0, 1, "EXTCLK")),64	PXA_GPIO_PIN(PXA_PINCTRL_PIN(28),65		     PXA_FUNCTION(0, 1, "BITCLK"),66		     PXA_FUNCTION(0, 2, "BITCLK"),67		     PXA_FUNCTION(1, 1, "BITCLK")),68	PXA_GPIO_PIN(PXA_PINCTRL_PIN(29),69		     PXA_FUNCTION(0, 1, "SDATA_IN0"),70		     PXA_FUNCTION(0, 2, "SDATA_IN")),71	PXA_GPIO_PIN(PXA_PINCTRL_PIN(30),72		     PXA_FUNCTION(1, 1, "SDATA_OUT"),73		     PXA_FUNCTION(1, 2, "SDATA_OUT")),74	PXA_GPIO_PIN(PXA_PINCTRL_PIN(31),75		     PXA_FUNCTION(1, 1, "SYNC"),76		     PXA_FUNCTION(1, 2, "SYNC")),77	PXA_GPIO_PIN(PXA_PINCTRL_PIN(32),78		     PXA_FUNCTION(0, 1, "SDATA_IN1"),79		     PXA_FUNCTION(1, 1, "SYSCLK")),80	PXA_GPIO_PIN(PXA_PINCTRL_PIN(33),81		     PXA_FUNCTION(1, 2, "nCS[5]")),82	PXA_GPIO_PIN(PXA_PINCTRL_PIN(34),83		     PXA_FUNCTION(0, 1, "FFRXD"),84		     PXA_FUNCTION(1, 2, "MMCCS0")),85	PXA_GPIO_PIN(PXA_PINCTRL_PIN(35),86		     PXA_FUNCTION(0, 1, "CTS")),87	PXA_GPIO_PIN(PXA_PINCTRL_PIN(36),88		     PXA_FUNCTION(0, 1, "DCD")),89	PXA_GPIO_PIN(PXA_PINCTRL_PIN(37),90		     PXA_FUNCTION(0, 1, "DSR")),91	PXA_GPIO_PIN(PXA_PINCTRL_PIN(38),92		     PXA_FUNCTION(0, 1, "RI")),93	PXA_GPIO_PIN(PXA_PINCTRL_PIN(39),94		     PXA_FUNCTION(1, 1, "MMCC1"),95		     PXA_FUNCTION(1, 2, "FFTXD")),96	PXA_GPIO_PIN(PXA_PINCTRL_PIN(40),97		     PXA_FUNCTION(1, 2, "DTR")),98	PXA_GPIO_PIN(PXA_PINCTRL_PIN(41),99		     PXA_FUNCTION(1, 2, "RTS")),100	PXA_GPIO_PIN(PXA_PINCTRL_PIN(42),101		     PXA_FUNCTION(0, 1, "BTRXD"),102		     PXA_FUNCTION(0, 3, "HWRXD")),103	PXA_GPIO_PIN(PXA_PINCTRL_PIN(43),104		     PXA_FUNCTION(1, 2, "BTTXD"),105		     PXA_FUNCTION(1, 3, "HWTXD")),106	PXA_GPIO_PIN(PXA_PINCTRL_PIN(44),107		     PXA_FUNCTION(0, 1, "BTCTS"),108		     PXA_FUNCTION(0, 3, "HWCTS")),109	PXA_GPIO_PIN(PXA_PINCTRL_PIN(45),110		     PXA_FUNCTION(1, 2, "BTRTS"),111		     PXA_FUNCTION(1, 3, "HWRTS")),112	PXA_GPIO_PIN(PXA_PINCTRL_PIN(46),113		     PXA_FUNCTION(0, 1, "ICP_RXD"),114		     PXA_FUNCTION(0, 2, "RXD")),115	PXA_GPIO_PIN(PXA_PINCTRL_PIN(47),116		     PXA_FUNCTION(1, 1, "TXD"),117		     PXA_FUNCTION(1, 2, "ICP_TXD")),118	PXA_GPIO_PIN(PXA_PINCTRL_PIN(48),119		     PXA_FUNCTION(1, 1, "HWTXD"),120		     PXA_FUNCTION(1, 2, "nPOE")),121	PXA_GPIO_PIN(PXA_PINCTRL_PIN(49),122		     PXA_FUNCTION(0, 1, "HWRXD"),123		     PXA_FUNCTION(1, 2, "nPWE")),124	PXA_GPIO_PIN(PXA_PINCTRL_PIN(50),125		     PXA_FUNCTION(0, 1, "HWCTS"),126		     PXA_FUNCTION(1, 2, "nPIOR")),127	PXA_GPIO_PIN(PXA_PINCTRL_PIN(51),128		     PXA_FUNCTION(1, 1, "HWRTS"),129		     PXA_FUNCTION(1, 2, "nPIOW")),130	PXA_GPIO_PIN(PXA_PINCTRL_PIN(52),131		     PXA_FUNCTION(1, 2, "nPCE[1]")),132	PXA_GPIO_PIN(PXA_PINCTRL_PIN(53),133		     PXA_FUNCTION(1, 1, "MMCCLK"),134		     PXA_FUNCTION(1, 2, "nPCE[2]")),135	PXA_GPIO_PIN(PXA_PINCTRL_PIN(54),136		     PXA_FUNCTION(1, 1, "MMCCLK"),137		     PXA_FUNCTION(1, 2, "nPSKTSEL")),138	PXA_GPIO_PIN(PXA_PINCTRL_PIN(55),139		     PXA_FUNCTION(1, 2, "nPREG")),140	PXA_GPIO_PIN(PXA_PINCTRL_PIN(56),141		     PXA_FUNCTION(0, 1, "nPWAIT")),142	PXA_GPIO_PIN(PXA_PINCTRL_PIN(57),143		     PXA_FUNCTION(0, 1, "nIOIS16")),144	PXA_GPIO_PIN(PXA_PINCTRL_PIN(58),145		     PXA_FUNCTION(1, 2, "LDD<0>")),146	PXA_GPIO_PIN(PXA_PINCTRL_PIN(59),147		     PXA_FUNCTION(1, 2, "LDD<1>")),148	PXA_GPIO_PIN(PXA_PINCTRL_PIN(60),149		     PXA_FUNCTION(1, 2, "LDD<2>")),150	PXA_GPIO_PIN(PXA_PINCTRL_PIN(61),151		     PXA_FUNCTION(1, 2, "LDD<3>")),152	PXA_GPIO_PIN(PXA_PINCTRL_PIN(62),153		     PXA_FUNCTION(1, 2, "LDD<4>")),154	PXA_GPIO_PIN(PXA_PINCTRL_PIN(63),155		     PXA_FUNCTION(1, 2, "LDD<5>")),156	PXA_GPIO_PIN(PXA_PINCTRL_PIN(64),157		     PXA_FUNCTION(1, 2, "LDD<6>")),158	PXA_GPIO_PIN(PXA_PINCTRL_PIN(65),159		     PXA_FUNCTION(1, 2, "LDD<7>")),160	PXA_GPIO_PIN(PXA_PINCTRL_PIN(66),161		     PXA_FUNCTION(0, 1, "MBREQ"),162		     PXA_FUNCTION(1, 2, "LDD<8>")),163	PXA_GPIO_PIN(PXA_PINCTRL_PIN(67),164		     PXA_FUNCTION(1, 1, "MMCCS0"),165		     PXA_FUNCTION(1, 2, "LDD<9>")),166	PXA_GPIO_PIN(PXA_PINCTRL_PIN(68),167		     PXA_FUNCTION(1, 1, "MMCCS1"),168		     PXA_FUNCTION(1, 2, "LDD<10>")),169	PXA_GPIO_PIN(PXA_PINCTRL_PIN(69),170		     PXA_FUNCTION(1, 1, "MMCCLK"),171		     PXA_FUNCTION(1, 2, "LDD<11>")),172	PXA_GPIO_PIN(PXA_PINCTRL_PIN(70),173		     PXA_FUNCTION(1, 1, "RTCCLK"),174		     PXA_FUNCTION(1, 2, "LDD<12>")),175	PXA_GPIO_PIN(PXA_PINCTRL_PIN(71),176		     PXA_FUNCTION(1, 1, "3_6_MHz"),177		     PXA_FUNCTION(1, 2, "LDD<13>")),178	PXA_GPIO_PIN(PXA_PINCTRL_PIN(72),179		     PXA_FUNCTION(1, 1, "32_kHz"),180		     PXA_FUNCTION(1, 2, "LDD<14>")),181	PXA_GPIO_PIN(PXA_PINCTRL_PIN(73),182		     PXA_FUNCTION(1, 1, "MBGNT"),183		     PXA_FUNCTION(1, 2, "LDD<15>")),184	PXA_GPIO_PIN(PXA_PINCTRL_PIN(74),185		     PXA_FUNCTION(1, 2, "LCD_FCLK")),186	PXA_GPIO_PIN(PXA_PINCTRL_PIN(75),187		     PXA_FUNCTION(1, 2, "LCD_LCLK")),188	PXA_GPIO_PIN(PXA_PINCTRL_PIN(76),189		     PXA_FUNCTION(1, 2, "LCD_PCLK")),190	PXA_GPIO_PIN(PXA_PINCTRL_PIN(77),191		     PXA_FUNCTION(1, 2, "LCD_ACBIAS")),192	PXA_GPIO_PIN(PXA_PINCTRL_PIN(78),193		     PXA_FUNCTION(1, 2, "nCS<2>")),194	PXA_GPIO_PIN(PXA_PINCTRL_PIN(79),195		     PXA_FUNCTION(1, 2, "nCS<3>")),196	PXA_GPIO_PIN(PXA_PINCTRL_PIN(80),197		     PXA_FUNCTION(1, 2, "nCS<4>")),198	PXA_GPIO_PIN(PXA_PINCTRL_PIN(81),199		     PXA_FUNCTION(0, 1, "NSSPSCLK"),200		     PXA_FUNCTION(1, 1, "NSSPSCLK")),201	PXA_GPIO_PIN(PXA_PINCTRL_PIN(82),202		     PXA_FUNCTION(0, 1, "NSSPSFRM"),203		     PXA_FUNCTION(1, 1, "NSSPSFRM")),204	PXA_GPIO_PIN(PXA_PINCTRL_PIN(83),205		     PXA_FUNCTION(0, 2, "NSSPRXD"),206		     PXA_FUNCTION(1, 1, "NSSPTXD")),207	PXA_GPIO_PIN(PXA_PINCTRL_PIN(84),208		     PXA_FUNCTION(0, 2, "NSSPRXD"),209		     PXA_FUNCTION(1, 1, "NSSPTXD")),210};211 212static int pxa25x_pinctrl_probe(struct platform_device *pdev)213{214	int ret, i;215	void __iomem *base_af[8];216	void __iomem *base_dir[4];217	void __iomem *base_sleep[4];218 219	base_af[0] = devm_platform_ioremap_resource(pdev, 0);220	if (IS_ERR(base_af[0]))221		return PTR_ERR(base_af[0]);222 223	base_dir[0] = devm_platform_ioremap_resource(pdev, 1);224	if (IS_ERR(base_dir[0]))225		return PTR_ERR(base_dir[0]);226 227	base_dir[3] = devm_platform_ioremap_resource(pdev, 2);228	if (IS_ERR(base_dir[3]))229		return PTR_ERR(base_dir[3]);230 231	base_sleep[0] = devm_platform_ioremap_resource(pdev, 3);232	if (IS_ERR(base_sleep[0]))233		return PTR_ERR(base_sleep[0]);234 235	for (i = 0; i < ARRAY_SIZE(base_af); i++)236		base_af[i] = base_af[0] + sizeof(base_af[0]) * i;237	for (i = 0; i < 3; i++)238		base_dir[i] = base_dir[0] + sizeof(base_dir[0]) * i;239	for (i = 0; i < ARRAY_SIZE(base_sleep); i++)240		base_sleep[i] = base_sleep[0] + sizeof(base_af[0]) * i;241 242	ret = pxa2xx_pinctrl_init(pdev, pxa25x_pins, ARRAY_SIZE(pxa25x_pins),243				  base_af, base_dir, base_sleep);244	return ret;245}246 247static const struct of_device_id pxa25x_pinctrl_match[] = {248	{ .compatible = "marvell,pxa25x-pinctrl", },249	{}250};251MODULE_DEVICE_TABLE(of, pxa25x_pinctrl_match);252 253static struct platform_driver pxa25x_pinctrl_driver = {254	.probe	= pxa25x_pinctrl_probe,255	.driver	= {256		.name		= "pxa25x-pinctrl",257		.of_match_table	= pxa25x_pinctrl_match,258	},259};260module_platform_driver(pxa25x_pinctrl_driver);261 262MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>");263MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver");264MODULE_LICENSE("GPL v2");265