brintos

brintos / linux-shallow public Read only

0
0
Text · 22.6 KiB · 9a250c4 Raw
692 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Marvell Armada CP110 pinctrl driver based on mvebu pinctrl core4 *5 * Copyright (C) 2017 Marvell6 *7 * Hanna Hawa <hannah@marvell.com>8 */9 10#include <linux/err.h>11#include <linux/init.h>12#include <linux/io.h>13#include <linux/mfd/syscon.h>14#include <linux/of.h>15#include <linux/pinctrl/pinctrl.h>16#include <linux/platform_device.h>17#include <linux/property.h>18 19#include "pinctrl-mvebu.h"20 21/*22 * Even if the pin controller is the same the MMP available depend on the SoC23 * integration.24 *  - In Armada7K (single CP) almost all the MPPs are available (except the25 *    MMP 39 to 43)26 *  - In Armada8K (dual CP) the MPPs are split into 2 parts, MPPs 0-31 from27 *    CPS, and MPPs 32-62 from CPM, the below flags (V_ARMADA_8K_CPM,28 *    V_ARMADA_8K_CPS) set which MPP is available to the CPx.29 * The x_PLUS enum mean that the MPP available for CPx and for Armada70x030 */31enum {32	V_ARMADA_7K = BIT(0),33	V_ARMADA_8K_CPM = BIT(1),34	V_ARMADA_8K_CPS = BIT(2),35	V_CP115_STANDALONE = BIT(3),36	V_ARMADA_7K_8K_CPM = (V_ARMADA_7K | V_ARMADA_8K_CPM),37	V_ARMADA_7K_8K_CPS = (V_ARMADA_7K | V_ARMADA_8K_CPS),38};39 40static struct mvebu_mpp_mode armada_cp110_mpp_modes[] = {41	MPP_MODE(0,42		 MPP_FUNCTION(0,	"gpio",		NULL),43		 MPP_FUNCTION(1,	"dev",		"ale1"),44		 MPP_FUNCTION(2,	"au",		"i2smclk"),45		 MPP_FUNCTION(3,	"ge0",		"rxd3"),46		 MPP_FUNCTION(4,	"tdm",		"pclk"),47		 MPP_FUNCTION(6,	"ptp",		"pulse"),48		 MPP_FUNCTION(7,	"mss_i2c",	"sda"),49		 MPP_FUNCTION(8,	"uart0",	"rxd"),50		 MPP_FUNCTION(9,	"sata0",	"present_act"),51		 MPP_FUNCTION(10,	"ge",		"mdio")),52	MPP_MODE(1,53		 MPP_FUNCTION(0,	"gpio",		NULL),54		 MPP_FUNCTION(1,	"dev",		"ale0"),55		 MPP_FUNCTION(2,	"au",		"i2sdo_spdifo"),56		 MPP_FUNCTION(3,	"ge0",		"rxd2"),57		 MPP_FUNCTION(4,	"tdm",		"drx"),58		 MPP_FUNCTION(6,	"ptp",		"clk"),59		 MPP_FUNCTION(7,	"mss_i2c",	"sck"),60		 MPP_FUNCTION(8,	"uart0",	"txd"),61		 MPP_FUNCTION(9,	"sata1",	"present_act"),62		 MPP_FUNCTION(10,	"ge",		"mdc")),63	MPP_MODE(2,64		 MPP_FUNCTION(0,	"gpio",		NULL),65		 MPP_FUNCTION(1,	"dev",		"ad15"),66		 MPP_FUNCTION(2,	"au",		"i2sextclk"),67		 MPP_FUNCTION(3,	"ge0",		"rxd1"),68		 MPP_FUNCTION(4,	"tdm",		"dtx"),69		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),70		 MPP_FUNCTION(6,	"ptp",		"pclk_out"),71		 MPP_FUNCTION(7,	"i2c1",		"sck"),72		 MPP_FUNCTION(8,	"uart1",	"rxd"),73		 MPP_FUNCTION(9,	"sata0",	"present_act"),74		 MPP_FUNCTION(10,	"xg",		"mdc")),75	MPP_MODE(3,76		 MPP_FUNCTION(0,	"gpio",		NULL),77		 MPP_FUNCTION(1,	"dev",		"ad14"),78		 MPP_FUNCTION(2,	"au",		"i2slrclk"),79		 MPP_FUNCTION(3,	"ge0",		"rxd0"),80		 MPP_FUNCTION(4,	"tdm",		"fsync"),81		 MPP_FUNCTION(5,	"mss_uart",	"txd"),82		 MPP_FUNCTION(6,	"pcie",		"rstoutn"),83		 MPP_FUNCTION(7,	"i2c1",		"sda"),84		 MPP_FUNCTION(8,	"uart1",	"txd"),85		 MPP_FUNCTION(9,	"sata1",	"present_act"),86		 MPP_FUNCTION(10,	"xg",		"mdio")),87	MPP_MODE(4,88		 MPP_FUNCTION(0,	"gpio",		NULL),89		 MPP_FUNCTION(1,	"dev",		"ad13"),90		 MPP_FUNCTION(2,	"au",		"i2sbclk"),91		 MPP_FUNCTION(3,	"ge0",		"rxctl"),92		 MPP_FUNCTION(4,	"tdm",		"rstn"),93		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),94		 MPP_FUNCTION(6,	"uart1",	"cts"),95		 MPP_FUNCTION(7,	"pcie0",	"clkreq"),96		 MPP_FUNCTION(8,	"uart3",	"rxd"),97		 MPP_FUNCTION(10,	"ge",		"mdc")),98	MPP_MODE(5,99		 MPP_FUNCTION(0,	"gpio",		NULL),100		 MPP_FUNCTION(1,	"dev",		"ad12"),101		 MPP_FUNCTION(2,	"au",		"i2sdi"),102		 MPP_FUNCTION(3,	"ge0",		"rxclk"),103		 MPP_FUNCTION(4,	"tdm",		"intn"),104		 MPP_FUNCTION(5,	"mss_uart",	"txd"),105		 MPP_FUNCTION(6,	"uart1",	"rts"),106		 MPP_FUNCTION(7,	"pcie1",	"clkreq"),107		 MPP_FUNCTION(8,	"uart3",	"txd"),108		 MPP_FUNCTION(10,	"ge",		"mdio")),109	MPP_MODE(6,110		 MPP_FUNCTION(0,	"gpio",		NULL),111		 MPP_FUNCTION(1,	"dev",		"ad11"),112		 MPP_FUNCTION(3,	"ge0",		"txd3"),113		 MPP_FUNCTION(4,	"spi0",		"csn2"),114		 MPP_FUNCTION(5,	"au",		"i2sextclk"),115		 MPP_FUNCTION(6,	"sata1",	"present_act"),116		 MPP_FUNCTION(7,	"pcie2",	"clkreq"),117		 MPP_FUNCTION(8,	"uart0",	"rxd"),118		 MPP_FUNCTION(9,	"ptp",		"pulse")),119	MPP_MODE(7,120		 MPP_FUNCTION(0,	"gpio",		NULL),121		 MPP_FUNCTION(1,	"dev",		"ad10"),122		 MPP_FUNCTION(3,	"ge0",		"txd2"),123		 MPP_FUNCTION(4,	"spi0",		"csn1"),124		 MPP_FUNCTION(5,	"spi1",		"csn1"),125		 MPP_FUNCTION(6,	"sata0",	"present_act"),126		 MPP_FUNCTION(7,	"led",		"data"),127		 MPP_FUNCTION(8,	"uart0",	"txd"),128		 MPP_FUNCTION(9,	"ptp",		"clk")),129	MPP_MODE(8,130		 MPP_FUNCTION(0,	"gpio",		NULL),131		 MPP_FUNCTION(1,	"dev",		"ad9"),132		 MPP_FUNCTION(3,	"ge0",		"txd1"),133		 MPP_FUNCTION(4,	"spi0",		"csn0"),134		 MPP_FUNCTION(5,	"spi1",		"csn0"),135		 MPP_FUNCTION(6,	"uart0",	"cts"),136		 MPP_FUNCTION(7,	"led",		"stb"),137		 MPP_FUNCTION(8,	"uart2",	"rxd"),138		 MPP_FUNCTION(9,	"ptp",		"pclk_out"),139		 MPP_FUNCTION(10,	"synce1",	"clk")),140	MPP_MODE(9,141		 MPP_FUNCTION(0,	"gpio",		NULL),142		 MPP_FUNCTION(1,	"dev",		"ad8"),143		 MPP_FUNCTION(3,	"ge0",		"txd0"),144		 MPP_FUNCTION(4,	"spi0",		"mosi"),145		 MPP_FUNCTION(5,	"spi1",		"mosi"),146		 MPP_FUNCTION(7,	"pcie",		"rstoutn"),147		 MPP_FUNCTION(10,	"synce2",	"clk")),148	MPP_MODE(10,149		 MPP_FUNCTION(0,	"gpio",		NULL),150		 MPP_FUNCTION(1,	"dev",		"readyn"),151		 MPP_FUNCTION(3,	"ge0",		"txctl"),152		 MPP_FUNCTION(4,	"spi0",		"miso"),153		 MPP_FUNCTION(5,	"spi1",		"miso"),154		 MPP_FUNCTION(6,	"uart0",	"cts"),155		 MPP_FUNCTION(7,	"sata1",	"present_act")),156	MPP_MODE(11,157		 MPP_FUNCTION(0,	"gpio",		NULL),158		 MPP_FUNCTION(1,	"dev",		"wen1"),159		 MPP_FUNCTION(3,	"ge0",		"txclkout"),160		 MPP_FUNCTION(4,	"spi0",		"clk"),161		 MPP_FUNCTION(5,	"spi1",		"clk"),162		 MPP_FUNCTION(6,	"uart0",	"rts"),163		 MPP_FUNCTION(7,	"led",		"clk"),164		 MPP_FUNCTION(8,	"uart2",	"txd"),165		 MPP_FUNCTION(9,	"sata0",	"present_act")),166	MPP_MODE(12,167		 MPP_FUNCTION(0,	"gpio",		NULL),168		 MPP_FUNCTION(1,	"dev",		"clk_out"),169		 MPP_FUNCTION(2,	"nf",		"rbn1"),170		 MPP_FUNCTION(3,	"spi1",		"csn1"),171		 MPP_FUNCTION(4,	"ge0",		"rxclk")),172	MPP_MODE(13,173		 MPP_FUNCTION(0,	"gpio",		NULL),174		 MPP_FUNCTION(1,	"dev",		"burstn"),175		 MPP_FUNCTION(2,	"nf",		"rbn0"),176		 MPP_FUNCTION(3,	"spi1",		"miso"),177		 MPP_FUNCTION(4,	"ge0",		"rxctl"),178		 MPP_FUNCTION(8,	"mss_spi",	"miso")),179	MPP_MODE(14,180		 MPP_FUNCTION(0,	"gpio",		NULL),181		 MPP_FUNCTION(1,	"dev",		"bootcsn"),182		 MPP_FUNCTION(2,	"dev",		"csn0"),183		 MPP_FUNCTION(3,	"spi1",		"csn0"),184		 MPP_FUNCTION(4,	"spi0",		"csn3"),185		 MPP_FUNCTION(5,	"au",		"i2sextclk"),186		 MPP_FUNCTION(6,	"spi0",		"miso"),187		 MPP_FUNCTION(7,	"sata0",	"present_act"),188		 MPP_FUNCTION(8,	"mss_spi",	"csn")),189	MPP_MODE(15,190		 MPP_FUNCTION(0,	"gpio",		NULL),191		 MPP_FUNCTION(1,	"dev",		"ad7"),192		 MPP_FUNCTION(3,	"spi1",		"mosi"),193		 MPP_FUNCTION(6,	"spi0",		"mosi"),194		 MPP_FUNCTION(8,	"mss_spi",	"mosi"),195		 MPP_FUNCTION(11,	"ptp",		"pulse_cp2cp")),196	MPP_MODE(16,197		 MPP_FUNCTION(0,	"gpio",		NULL),198		 MPP_FUNCTION(1,	"dev",		"ad6"),199		 MPP_FUNCTION(3,	"spi1",		"clk"),200		 MPP_FUNCTION(8,	"mss_spi",	"clk")),201	MPP_MODE(17,202		 MPP_FUNCTION(0,	"gpio",		NULL),203		 MPP_FUNCTION(1,	"dev",		"ad5"),204		 MPP_FUNCTION(4,	"ge0",		"txd3")),205	MPP_MODE(18,206		 MPP_FUNCTION(0,	"gpio",		NULL),207		 MPP_FUNCTION(1,	"dev",		"ad4"),208		 MPP_FUNCTION(4,	"ge0",		"txd2"),209		 MPP_FUNCTION(11,	"ptp",		"clk_cp2cp")),210	MPP_MODE(19,211		 MPP_FUNCTION(0,	"gpio",		NULL),212		 MPP_FUNCTION(1,	"dev",		"ad3"),213		 MPP_FUNCTION(4,	"ge0",		"txd1"),214		 MPP_FUNCTION(11,	"wakeup",	"out_cp2cp")),215	MPP_MODE(20,216		 MPP_FUNCTION(0,	"gpio",		NULL),217		 MPP_FUNCTION(1,	"dev",		"ad2"),218		 MPP_FUNCTION(4,	"ge0",		"txd0")),219	MPP_MODE(21,220		 MPP_FUNCTION(0,	"gpio",		NULL),221		 MPP_FUNCTION(1,	"dev",		"ad1"),222		 MPP_FUNCTION(4,	"ge0",		"txctl"),223		 MPP_FUNCTION(11,	"sei",		"in_cp2cp")),224	MPP_MODE(22,225		 MPP_FUNCTION(0,	"gpio",		NULL),226		 MPP_FUNCTION(1,	"dev",		"ad0"),227		 MPP_FUNCTION(4,	"ge0",		"txclkout"),228		 MPP_FUNCTION(11,	"wakeup",	"in_cp2cp")),229	MPP_MODE(23,230		 MPP_FUNCTION(0,	"gpio",		NULL),231		 MPP_FUNCTION(1,	"dev",		"a1"),232		 MPP_FUNCTION(5,	"au",		"i2smclk"),233		 MPP_FUNCTION(11,	"link",		"rd_in_cp2cp")),234	MPP_MODE(24,235		 MPP_FUNCTION(0,	"gpio",		NULL),236		 MPP_FUNCTION(1,	"dev",		"a0"),237		 MPP_FUNCTION(5,	"au",		"i2slrclk")),238	MPP_MODE(25,239		 MPP_FUNCTION(0,	"gpio",		NULL),240		 MPP_FUNCTION(1,	"dev",		"oen"),241		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo")),242	MPP_MODE(26,243		 MPP_FUNCTION(0,	"gpio",		NULL),244		 MPP_FUNCTION(1,	"dev",		"wen0"),245		 MPP_FUNCTION(5,	"au",		"i2sbclk")),246	MPP_MODE(27,247		 MPP_FUNCTION(0,	"gpio",		NULL),248		 MPP_FUNCTION(1,	"dev",		"csn0"),249		 MPP_FUNCTION(2,	"spi1",		"miso"),250		 MPP_FUNCTION(3,	"mss_gpio4",	NULL),251		 MPP_FUNCTION(4,	"ge0",		"rxd3"),252		 MPP_FUNCTION(5,	"spi0",		"csn4"),253		 MPP_FUNCTION(8,	"ge",		"mdio"),254		 MPP_FUNCTION(9,	"sata0",	"present_act"),255		 MPP_FUNCTION(10,	"uart0",	"rts"),256		 MPP_FUNCTION(11,	"rei",		"in_cp2cp")),257	MPP_MODE(28,258		 MPP_FUNCTION(0,	"gpio",		NULL),259		 MPP_FUNCTION(1,	"dev",		"csn1"),260		 MPP_FUNCTION(2,	"spi1",		"csn0"),261		 MPP_FUNCTION(3,	"mss_gpio5",	NULL),262		 MPP_FUNCTION(4,	"ge0",		"rxd2"),263		 MPP_FUNCTION(5,	"spi0",		"csn5"),264		 MPP_FUNCTION(6,	"pcie2",	"clkreq"),265		 MPP_FUNCTION(7,	"ptp",		"pulse"),266		 MPP_FUNCTION(8,	"ge",		"mdc"),267		 MPP_FUNCTION(9,	"sata1",	"present_act"),268		 MPP_FUNCTION(10,	"uart0",	"cts"),269		 MPP_FUNCTION(11,	"led",		"data")),270	MPP_MODE(29,271		 MPP_FUNCTION(0,	"gpio",		NULL),272		 MPP_FUNCTION(1,	"dev",		"csn2"),273		 MPP_FUNCTION(2,	"spi1",		"mosi"),274		 MPP_FUNCTION(3,	"mss_gpio6",	NULL),275		 MPP_FUNCTION(4,	"ge0",		"rxd1"),276		 MPP_FUNCTION(5,	"spi0",		"csn6"),277		 MPP_FUNCTION(6,	"pcie1",	"clkreq"),278		 MPP_FUNCTION(7,	"ptp",		"clk"),279		 MPP_FUNCTION(8,	"mss_i2c",	"sda"),280		 MPP_FUNCTION(9,	"sata0",	"present_act"),281		 MPP_FUNCTION(10,	"uart0",	"rxd"),282		 MPP_FUNCTION(11,	"led",		"stb")),283	MPP_MODE(30,284		 MPP_FUNCTION(0,	"gpio",		NULL),285		 MPP_FUNCTION(1,	"dev",		"csn3"),286		 MPP_FUNCTION(2,	"spi1",		"clk"),287		 MPP_FUNCTION(3,	"mss_gpio7",	NULL),288		 MPP_FUNCTION(4,	"ge0",		"rxd0"),289		 MPP_FUNCTION(5,	"spi0",		"csn7"),290		 MPP_FUNCTION(6,	"pcie0",	"clkreq"),291		 MPP_FUNCTION(7,	"ptp",		"pclk_out"),292		 MPP_FUNCTION(8,	"mss_i2c",	"sck"),293		 MPP_FUNCTION(9,	"sata1",	"present_act"),294		 MPP_FUNCTION(10,	"uart0",	"txd"),295		 MPP_FUNCTION(11,	"led",		"clk")),296	MPP_MODE(31,297		 MPP_FUNCTION(0,	"gpio",		NULL),298		 MPP_FUNCTION(1,	"dev",		"a2"),299		 MPP_FUNCTION(3,	"mss_gpio4",	NULL),300		 MPP_FUNCTION(6,	"pcie",		"rstoutn"),301		 MPP_FUNCTION(8,	"ge",		"mdc")),302	MPP_MODE(32,303		 MPP_FUNCTION(0,	"gpio",		NULL),304		 MPP_FUNCTION(1,	"mii",		"col"),305		 MPP_FUNCTION(2,	"mii",		"txerr"),306		 MPP_FUNCTION(3,	"mss_spi",	"miso"),307		 MPP_FUNCTION(4,	"tdm",		"drx"),308		 MPP_FUNCTION(5,	"au",		"i2sextclk"),309		 MPP_FUNCTION(6,	"au",		"i2sdi"),310		 MPP_FUNCTION(7,	"ge",		"mdio"),311		 MPP_FUNCTION(8,	"sdio",		"v18_en"),312		 MPP_FUNCTION(9,	"pcie1",	"clkreq"),313		 MPP_FUNCTION(10,	"mss_gpio0",	NULL)),314	MPP_MODE(33,315		 MPP_FUNCTION(0,	"gpio",		NULL),316		 MPP_FUNCTION(1,	"mii",		"txclk"),317		 MPP_FUNCTION(2,	"sdio",		"pwr10"),318		 MPP_FUNCTION(3,	"mss_spi",	"csn"),319		 MPP_FUNCTION(4,	"tdm",		"fsync"),320		 MPP_FUNCTION(5,	"au",		"i2smclk"),321		 MPP_FUNCTION(6,	"sdio",		"bus_pwr"),322		 MPP_FUNCTION(8,	"xg",		"mdio"),323		 MPP_FUNCTION(9,	"pcie2",	"clkreq"),324		 MPP_FUNCTION(10,	"mss_gpio1",	NULL)),325	MPP_MODE(34,326		 MPP_FUNCTION(0,	"gpio",		NULL),327		 MPP_FUNCTION(1,	"mii",		"rxerr"),328		 MPP_FUNCTION(2,	"sdio",		"pwr11"),329		 MPP_FUNCTION(3,	"mss_spi",	"mosi"),330		 MPP_FUNCTION(4,	"tdm",		"dtx"),331		 MPP_FUNCTION(5,	"au",		"i2slrclk"),332		 MPP_FUNCTION(6,	"sdio",		"wr_protect"),333		 MPP_FUNCTION(7,	"ge",		"mdc"),334		 MPP_FUNCTION(9,	"pcie0",	"clkreq"),335		 MPP_FUNCTION(10,	"mss_gpio2",	NULL)),336	MPP_MODE(35,337		 MPP_FUNCTION(0,	"gpio",		NULL),338		 MPP_FUNCTION(1,	"sata1",	"present_act"),339		 MPP_FUNCTION(2,	"i2c1",		"sda"),340		 MPP_FUNCTION(3,	"mss_spi",	"clk"),341		 MPP_FUNCTION(4,	"tdm",		"pclk"),342		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo"),343		 MPP_FUNCTION(6,	"sdio",		"card_detect"),344		 MPP_FUNCTION(7,	"xg",		"mdio"),345		 MPP_FUNCTION(8,	"ge",		"mdio"),346		 MPP_FUNCTION(9,	"pcie",		"rstoutn"),347		 MPP_FUNCTION(10,	"mss_gpio3",	NULL)),348	MPP_MODE(36,349		 MPP_FUNCTION(0,	"gpio",		NULL),350		 MPP_FUNCTION(1,	"synce2",	"clk"),351		 MPP_FUNCTION(2,	"i2c1",		"sck"),352		 MPP_FUNCTION(3,	"ptp",		"clk"),353		 MPP_FUNCTION(4,	"synce1",	"clk"),354		 MPP_FUNCTION(5,	"au",		"i2sbclk"),355		 MPP_FUNCTION(6,	"sata0",	"present_act"),356		 MPP_FUNCTION(7,	"xg",		"mdc"),357		 MPP_FUNCTION(8,	"ge",		"mdc"),358		 MPP_FUNCTION(9,	"pcie2",	"clkreq"),359		 MPP_FUNCTION(10,	"mss_gpio5",	NULL)),360	MPP_MODE(37,361		 MPP_FUNCTION(0,	"gpio",		NULL),362		 MPP_FUNCTION(1,	"uart2",	"rxd"),363		 MPP_FUNCTION(2,	"i2c0",		"sck"),364		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),365		 MPP_FUNCTION(4,	"tdm",		"intn"),366		 MPP_FUNCTION(5,	"mss_i2c",	"sck"),367		 MPP_FUNCTION(6,	"sata1",	"present_act"),368		 MPP_FUNCTION(7,	"ge",		"mdc"),369		 MPP_FUNCTION(8,	"xg",		"mdc"),370		 MPP_FUNCTION(9,	"pcie1",	"clkreq"),371		 MPP_FUNCTION(10,	"mss_gpio6",	NULL),372		 MPP_FUNCTION(11,	"link",		"rd_out_cp2cp")),373	MPP_MODE(38,374		 MPP_FUNCTION(0,	"gpio",		NULL),375		 MPP_FUNCTION(1,	"uart2",	"txd"),376		 MPP_FUNCTION(2,	"i2c0",		"sda"),377		 MPP_FUNCTION(3,	"ptp",		"pulse"),378		 MPP_FUNCTION(4,	"tdm",		"rstn"),379		 MPP_FUNCTION(5,	"mss_i2c",	"sda"),380		 MPP_FUNCTION(6,	"sata0",	"present_act"),381		 MPP_FUNCTION(7,	"ge",		"mdio"),382		 MPP_FUNCTION(8,	"xg",		"mdio"),383		 MPP_FUNCTION(9,	"au",		"i2sextclk"),384		 MPP_FUNCTION(10,	"mss_gpio7",	NULL),385		 MPP_FUNCTION(11,	"ptp",		"pulse_cp2cp")),386	MPP_MODE(39,387		 MPP_FUNCTION(0,	"gpio",		NULL),388		 MPP_FUNCTION(1,	"sdio",		"wr_protect"),389		 MPP_FUNCTION(4,	"au",		"i2sbclk"),390		 MPP_FUNCTION(5,	"ptp",		"clk"),391		 MPP_FUNCTION(6,	"spi0",		"csn1"),392		 MPP_FUNCTION(9,	"sata1",	"present_act"),393		 MPP_FUNCTION(10,	"mss_gpio0",	NULL)),394	MPP_MODE(40,395		 MPP_FUNCTION(0,	"gpio",		NULL),396		 MPP_FUNCTION(1,	"sdio",		"pwr11"),397		 MPP_FUNCTION(2,	"synce1",	"clk"),398		 MPP_FUNCTION(3,	"mss_i2c",	"sda"),399		 MPP_FUNCTION(4,	"au",		"i2sdo_spdifo"),400		 MPP_FUNCTION(5,	"ptp",		"pclk_out"),401		 MPP_FUNCTION(6,	"spi0",		"clk"),402		 MPP_FUNCTION(7,	"uart1",	"txd"),403		 MPP_FUNCTION(8,	"ge",		"mdio"),404		 MPP_FUNCTION(9,	"sata0",	"present_act"),405		 MPP_FUNCTION(10,	"mss_gpio1",	NULL)),406	MPP_MODE(41,407		 MPP_FUNCTION(0,	"gpio",		NULL),408		 MPP_FUNCTION(1,	"sdio",		"pwr10"),409		 MPP_FUNCTION(2,	"sdio",		"bus_pwr"),410		 MPP_FUNCTION(3,	"mss_i2c",	"sck"),411		 MPP_FUNCTION(4,	"au",		"i2slrclk"),412		 MPP_FUNCTION(5,	"ptp",		"pulse"),413		 MPP_FUNCTION(6,	"spi0",		"mosi"),414		 MPP_FUNCTION(7,	"uart1",	"rxd"),415		 MPP_FUNCTION(8,	"ge",		"mdc"),416		 MPP_FUNCTION(9,	"sata1",	"present_act"),417		 MPP_FUNCTION(10,	"mss_gpio2",	NULL),418		 MPP_FUNCTION(11,	"rei",		"out_cp2cp")),419	MPP_MODE(42,420		 MPP_FUNCTION(0,	"gpio",		NULL),421		 MPP_FUNCTION(1,	"sdio",		"v18_en"),422		 MPP_FUNCTION(2,	"sdio",		"wr_protect"),423		 MPP_FUNCTION(3,	"synce2",	"clk"),424		 MPP_FUNCTION(4,	"au",		"i2smclk"),425		 MPP_FUNCTION(5,	"mss_uart",	"txd"),426		 MPP_FUNCTION(6,	"spi0",		"miso"),427		 MPP_FUNCTION(7,	"uart1",	"cts"),428		 MPP_FUNCTION(8,	"xg",		"mdc"),429		 MPP_FUNCTION(9,	"sata0",	"present_act"),430		 MPP_FUNCTION(10,	"mss_gpio4",	NULL)),431	MPP_MODE(43,432		 MPP_FUNCTION(0,	"gpio",		NULL),433		 MPP_FUNCTION(1,	"sdio",		"card_detect"),434		 MPP_FUNCTION(3,	"synce1",	"clk"),435		 MPP_FUNCTION(4,	"au",		"i2sextclk"),436		 MPP_FUNCTION(5,	"mss_uart",	"rxd"),437		 MPP_FUNCTION(6,	"spi0",		"csn0"),438		 MPP_FUNCTION(7,	"uart1",	"rts"),439		 MPP_FUNCTION(8,	"xg",		"mdio"),440		 MPP_FUNCTION(9,	"sata1",	"present_act"),441		 MPP_FUNCTION(10,	"mss_gpio5",	NULL),442		 MPP_FUNCTION(11,	"wakeup",	"out_cp2cp")),443	MPP_MODE(44,444		 MPP_FUNCTION(0,	"gpio",		NULL),445		 MPP_FUNCTION(1,	"ge1",		"txd2"),446		 MPP_FUNCTION(7,	"uart0",	"rts"),447		 MPP_FUNCTION(11,	"ptp",		"clk_cp2cp")),448	MPP_MODE(45,449		 MPP_FUNCTION(0,	"gpio",		NULL),450		 MPP_FUNCTION(1,	"ge1",		"txd3"),451		 MPP_FUNCTION(7,	"uart0",	"txd"),452		 MPP_FUNCTION(9,	"pcie",		"rstoutn")),453	MPP_MODE(46,454		 MPP_FUNCTION(0,	"gpio",		NULL),455		 MPP_FUNCTION(1,	"ge1",		"txd1"),456		 MPP_FUNCTION(7,	"uart1",	"rts")),457	MPP_MODE(47,458		 MPP_FUNCTION(0,	"gpio",		NULL),459		 MPP_FUNCTION(1,	"ge1",		"txd0"),460		 MPP_FUNCTION(5,	"spi1",		"clk"),461		 MPP_FUNCTION(7,	"uart1",	"txd"),462		 MPP_FUNCTION(8,	"ge",		"mdc")),463	MPP_MODE(48,464		 MPP_FUNCTION(0,	"gpio",		NULL),465		 MPP_FUNCTION(1,	"ge1",		"txctl_txen"),466		 MPP_FUNCTION(5,	"spi1",		"mosi"),467		 MPP_FUNCTION(8,	"xg",		"mdc"),468		 MPP_FUNCTION(11,	"wakeup",	"in_cp2cp")),469	MPP_MODE(49,470		 MPP_FUNCTION(0,	"gpio",		NULL),471		 MPP_FUNCTION(1,	"ge1",		"txclkout"),472		 MPP_FUNCTION(2,	"mii",		"crs"),473		 MPP_FUNCTION(5,	"spi1",		"miso"),474		 MPP_FUNCTION(7,	"uart1",	"rxd"),475		 MPP_FUNCTION(8,	"ge",		"mdio"),476		 MPP_FUNCTION(9,	"pcie0",	"clkreq"),477		 MPP_FUNCTION(10,	"sdio",		"v18_en"),478		 MPP_FUNCTION(11,	"sei",		"out_cp2cp")),479	MPP_MODE(50,480		 MPP_FUNCTION(0,	"gpio",		NULL),481		 MPP_FUNCTION(1,	"ge1",		"rxclk"),482		 MPP_FUNCTION(2,	"mss_i2c",	"sda"),483		 MPP_FUNCTION(5,	"spi1",		"csn0"),484		 MPP_FUNCTION(6,	"uart2",	"txd"),485		 MPP_FUNCTION(7,	"uart0",	"rxd"),486		 MPP_FUNCTION(8,	"xg",		"mdio"),487		 MPP_FUNCTION(10,	"sdio",		"pwr11")),488	MPP_MODE(51,489		 MPP_FUNCTION(0,	"gpio",		NULL),490		 MPP_FUNCTION(1,	"ge1",		"rxd0"),491		 MPP_FUNCTION(2,	"mss_i2c",	"sck"),492		 MPP_FUNCTION(5,	"spi1",		"csn1"),493		 MPP_FUNCTION(6,	"uart2",	"rxd"),494		 MPP_FUNCTION(7,	"uart0",	"cts"),495		 MPP_FUNCTION(10,	"sdio",		"pwr10")),496	MPP_MODE(52,497		 MPP_FUNCTION(0,	"gpio",		NULL),498		 MPP_FUNCTION(1,	"ge1",		"rxd1"),499		 MPP_FUNCTION(2,	"synce1",	"clk"),500		 MPP_FUNCTION(4,	"synce2",	"clk"),501		 MPP_FUNCTION(5,	"spi1",		"csn2"),502		 MPP_FUNCTION(7,	"uart1",	"cts"),503		 MPP_FUNCTION(8,	"led",		"clk"),504		 MPP_FUNCTION(9,	"pcie",		"rstoutn"),505		 MPP_FUNCTION(10,	"pcie0",	"clkreq")),506	MPP_MODE(53,507		 MPP_FUNCTION(0,	"gpio",		NULL),508		 MPP_FUNCTION(1,	"ge1",		"rxd2"),509		 MPP_FUNCTION(3,	"ptp",		"clk"),510		 MPP_FUNCTION(5,	"spi1",		"csn3"),511		 MPP_FUNCTION(7,	"uart1",	"rxd"),512		 MPP_FUNCTION(8,	"led",		"stb"),513		 MPP_FUNCTION(11,	"sdio",		"led")),514	MPP_MODE(54,515		 MPP_FUNCTION(0,	"gpio",		NULL),516		 MPP_FUNCTION(1,	"ge1",		"rxd3"),517		 MPP_FUNCTION(2,	"synce2",	"clk"),518		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),519		 MPP_FUNCTION(4,	"synce1",	"clk"),520		 MPP_FUNCTION(8,	"led",		"data"),521		 MPP_FUNCTION(10,	"sdio",		"hw_rst"),522		 MPP_FUNCTION(11,	"sdio_wp",	"wr_protect")),523	MPP_MODE(55,524		 MPP_FUNCTION(0,	"gpio",		NULL),525		 MPP_FUNCTION(1,	"ge1",		"rxctl_rxdv"),526		 MPP_FUNCTION(3,	"ptp",		"pulse"),527		 MPP_FUNCTION(10,	"sdio",		"led"),528		 MPP_FUNCTION(11,	"sdio_cd",	"card_detect")),529	MPP_MODE(56,530		 MPP_FUNCTION(0,	"gpio",		NULL),531		 MPP_FUNCTION(4,	"tdm",		"drx"),532		 MPP_FUNCTION(5,	"au",		"i2sdo_spdifo"),533		 MPP_FUNCTION(6,	"spi0",		"clk"),534		 MPP_FUNCTION(7,	"uart1",	"rxd"),535		 MPP_FUNCTION(9,	"sata1",	"present_act"),536		 MPP_FUNCTION(14,	"sdio",		"clk")),537	MPP_MODE(57,538		 MPP_FUNCTION(0,	"gpio",		NULL),539		 MPP_FUNCTION(2,	"mss_i2c",	"sda"),540		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),541		 MPP_FUNCTION(4,	"tdm",		"intn"),542		 MPP_FUNCTION(5,	"au",		"i2sbclk"),543		 MPP_FUNCTION(6,	"spi0",		"mosi"),544		 MPP_FUNCTION(7,	"uart1",	"txd"),545		 MPP_FUNCTION(9,	"sata0",	"present_act"),546		 MPP_FUNCTION(14,	"sdio",		"cmd")),547	MPP_MODE(58,548		 MPP_FUNCTION(0,	"gpio",		NULL),549		 MPP_FUNCTION(2,	"mss_i2c",	"sck"),550		 MPP_FUNCTION(3,	"ptp",		"clk"),551		 MPP_FUNCTION(4,	"tdm",		"rstn"),552		 MPP_FUNCTION(5,	"au",		"i2sdi"),553		 MPP_FUNCTION(6,	"spi0",		"miso"),554		 MPP_FUNCTION(7,	"uart1",	"cts"),555		 MPP_FUNCTION(8,	"led",		"clk"),556		 MPP_FUNCTION(14,	"sdio",		"d0")),557	MPP_MODE(59,558		 MPP_FUNCTION(0,	"gpio",		NULL),559		 MPP_FUNCTION(1,	"mss_gpio7",	NULL),560		 MPP_FUNCTION(2,	"synce2",	"clk"),561		 MPP_FUNCTION(4,	"tdm",		"fsync"),562		 MPP_FUNCTION(5,	"au",		"i2slrclk"),563		 MPP_FUNCTION(6,	"spi0",		"csn0"),564		 MPP_FUNCTION(7,	"uart0",	"cts"),565		 MPP_FUNCTION(8,	"led",		"stb"),566		 MPP_FUNCTION(9,	"uart1",	"txd"),567		 MPP_FUNCTION(14,	"sdio",		"d1")),568	MPP_MODE(60,569		 MPP_FUNCTION(0,	"gpio",		NULL),570		 MPP_FUNCTION(1,	"mss_gpio6",	NULL),571		 MPP_FUNCTION(3,	"ptp",		"pulse"),572		 MPP_FUNCTION(4,	"tdm",		"dtx"),573		 MPP_FUNCTION(5,	"au",		"i2smclk"),574		 MPP_FUNCTION(6,	"spi0",		"csn1"),575		 MPP_FUNCTION(7,	"uart0",	"rts"),576		 MPP_FUNCTION(8,	"led",		"data"),577		 MPP_FUNCTION(9,	"uart1",	"rxd"),578		 MPP_FUNCTION(14,	"sdio",		"d2")),579	MPP_MODE(61,580		 MPP_FUNCTION(0,	"gpio",		NULL),581		 MPP_FUNCTION(1,	"mss_gpio5",	NULL),582		 MPP_FUNCTION(3,	"ptp",		"clk"),583		 MPP_FUNCTION(4,	"tdm",		"pclk"),584		 MPP_FUNCTION(5,	"au",		"i2sextclk"),585		 MPP_FUNCTION(6,	"spi0",		"csn2"),586		 MPP_FUNCTION(7,	"uart0",	"txd"),587		 MPP_FUNCTION(8,	"uart2",	"txd"),588		 MPP_FUNCTION(9,	"sata1",	"present_act"),589		 MPP_FUNCTION(10,	"ge",		"mdio"),590		 MPP_FUNCTION(14,	"sdio",		"d3")),591	MPP_MODE(62,592		 MPP_FUNCTION(0,	"gpio",		NULL),593		 MPP_FUNCTION(1,	"mss_gpio4",	NULL),594		 MPP_FUNCTION(2,	"synce1",	"clk"),595		 MPP_FUNCTION(3,	"ptp",		"pclk_out"),596		 MPP_FUNCTION(5,	"sata1",	"present_act"),597		 MPP_FUNCTION(6,	"spi0",		"csn3"),598		 MPP_FUNCTION(7,	"uart0",	"rxd"),599		 MPP_FUNCTION(8,	"uart2",	"rxd"),600		 MPP_FUNCTION(9,	"sata0",	"present_act"),601		 MPP_FUNCTION(10,	"ge",		"mdc"),602		 MPP_FUNCTION(14,	"sdio",		"ds")),603};604 605static const struct of_device_id armada_cp110_pinctrl_of_match[] = {606	{607		.compatible	= "marvell,armada-7k-pinctrl",608		.data		= (void *) V_ARMADA_7K,609	},610	{611		.compatible	= "marvell,armada-8k-cpm-pinctrl",612		.data		= (void *) V_ARMADA_8K_CPM,613	},614	{615		.compatible	= "marvell,armada-8k-cps-pinctrl",616		.data		= (void *) V_ARMADA_8K_CPS,617	},618	{619		.compatible	= "marvell,cp115-standalone-pinctrl",620		.data		= (void *) V_CP115_STANDALONE,621	},622	{ },623};624 625static const struct mvebu_mpp_ctrl armada_cp110_mpp_controls[] = {626	MPP_FUNC_CTRL(0, 62, NULL, mvebu_regmap_mpp_ctrl),627};628 629static void mvebu_pinctrl_assign_variant(struct mvebu_mpp_mode *m,630					 u8 variant)631{632	struct mvebu_mpp_ctrl_setting *s;633 634	for (s = m->settings ; s->name ; s++)635		s->variant = variant;636}637 638static int armada_cp110_pinctrl_probe(struct platform_device *pdev)639{640	struct mvebu_pinctrl_soc_info *soc;641	int i;642 643	if (!pdev->dev.parent)644		return -ENODEV;645 646	soc = devm_kzalloc(&pdev->dev,647			   sizeof(struct mvebu_pinctrl_soc_info), GFP_KERNEL);648	if (!soc)649		return -ENOMEM;650 651	soc->variant = (unsigned long)device_get_match_data(&pdev->dev) & 0xff;652	soc->controls = armada_cp110_mpp_controls;653	soc->ncontrols = ARRAY_SIZE(armada_cp110_mpp_controls);654	soc->modes = armada_cp110_mpp_modes;655	soc->nmodes = ARRAY_SIZE(armada_cp110_mpp_modes);656	for (i = 0; i < ARRAY_SIZE(armada_cp110_mpp_modes); i++) {657		struct mvebu_mpp_mode *m = &armada_cp110_mpp_modes[i];658 659		switch (i) {660		case 0 ... 31:661			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPS |662							 V_CP115_STANDALONE));663			break;664		case 32 ... 38:665			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |666							 V_CP115_STANDALONE));667			break;668		case 39 ... 43:669			mvebu_pinctrl_assign_variant(m, (V_ARMADA_8K_CPM |670							 V_CP115_STANDALONE));671			break;672		case 44 ... 62:673			mvebu_pinctrl_assign_variant(m, (V_ARMADA_7K_8K_CPM |674							 V_CP115_STANDALONE));675			break;676		}677	}678	pdev->dev.platform_data = soc;679 680	return mvebu_pinctrl_simple_regmap_probe(pdev, pdev->dev.parent, 0);681}682 683static struct platform_driver armada_cp110_pinctrl_driver = {684	.driver = {685		.name = "armada-cp110-pinctrl",686		.of_match_table = of_match_ptr(armada_cp110_pinctrl_of_match),687	},688	.probe = armada_cp110_pinctrl_probe,689};690 691builtin_platform_driver(armada_cp110_pinctrl_driver);692