// SPDX-License-Identifier: GPL-2.0-only /* * Marvell PXA25x family pin control * * Copyright (C) 2016 Robert Jarzmik */ #include #include #include #include #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 "); MODULE_DESCRIPTION("Marvell PXA25x pinctrl driver"); MODULE_LICENSE("GPL v2");