Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Pinctrl data for Wondermedia WM8505 SoC
0004  *
0005  * Copyright (c) 2013 Tony Prisk <linux@prisktech.co.nz>
0006  */
0007 
0008 #include <linux/io.h>
0009 #include <linux/init.h>
0010 #include <linux/pinctrl/pinctrl.h>
0011 #include <linux/platform_device.h>
0012 #include <linux/slab.h>
0013 
0014 #include "pinctrl-wmt.h"
0015 
0016 /*
0017  * Describe the register offsets within the GPIO memory space
0018  * The dedicated external GPIO's should always be listed in bank 0
0019  * so they are exported in the 0..31 range which is what users
0020  * expect.
0021  *
0022  * Do not reorder these banks as it will change the pin numbering
0023  */
0024 static const struct wmt_pinctrl_bank_registers wm8505_banks[] = {
0025     WMT_PINCTRL_BANK(0x64, 0x8C, 0xB4, 0xDC, NO_REG, NO_REG),   /* 0 */
0026     WMT_PINCTRL_BANK(0x40, 0x68, 0x90, 0xB8, NO_REG, NO_REG),   /* 1 */
0027     WMT_PINCTRL_BANK(0x44, 0x6C, 0x94, 0xBC, NO_REG, NO_REG),   /* 2 */
0028     WMT_PINCTRL_BANK(0x48, 0x70, 0x98, 0xC0, NO_REG, NO_REG),   /* 3 */
0029     WMT_PINCTRL_BANK(0x4C, 0x74, 0x9C, 0xC4, NO_REG, NO_REG),   /* 4 */
0030     WMT_PINCTRL_BANK(0x50, 0x78, 0xA0, 0xC8, NO_REG, NO_REG),   /* 5 */
0031     WMT_PINCTRL_BANK(0x54, 0x7C, 0xA4, 0xD0, NO_REG, NO_REG),   /* 6 */
0032     WMT_PINCTRL_BANK(0x58, 0x80, 0xA8, 0xD4, NO_REG, NO_REG),   /* 7 */
0033     WMT_PINCTRL_BANK(0x5C, 0x84, 0xAC, 0xD8, NO_REG, NO_REG),   /* 8 */
0034     WMT_PINCTRL_BANK(0x60, 0x88, 0xB0, 0xDC, NO_REG, NO_REG),   /* 9 */
0035     WMT_PINCTRL_BANK(0x500, 0x504, 0x508, 0x50C, NO_REG, NO_REG),   /* 10 */
0036 };
0037 
0038 /* Please keep sorted by bank/bit */
0039 #define WMT_PIN_EXTGPIO0    WMT_PIN(0, 0)
0040 #define WMT_PIN_EXTGPIO1    WMT_PIN(0, 1)
0041 #define WMT_PIN_EXTGPIO2    WMT_PIN(0, 2)
0042 #define WMT_PIN_EXTGPIO3    WMT_PIN(0, 3)
0043 #define WMT_PIN_EXTGPIO4    WMT_PIN(0, 4)
0044 #define WMT_PIN_EXTGPIO5    WMT_PIN(0, 5)
0045 #define WMT_PIN_EXTGPIO6    WMT_PIN(0, 6)
0046 #define WMT_PIN_EXTGPIO7    WMT_PIN(0, 7)
0047 #define WMT_PIN_WAKEUP0     WMT_PIN(0, 16)
0048 #define WMT_PIN_WAKEUP1     WMT_PIN(0, 17)
0049 #define WMT_PIN_WAKEUP2     WMT_PIN(0, 18)
0050 #define WMT_PIN_WAKEUP3     WMT_PIN(0, 19)
0051 #define WMT_PIN_SUSGPIO0    WMT_PIN(0, 21)
0052 #define WMT_PIN_SDDATA0     WMT_PIN(1, 0)
0053 #define WMT_PIN_SDDATA1     WMT_PIN(1, 1)
0054 #define WMT_PIN_SDDATA2     WMT_PIN(1, 2)
0055 #define WMT_PIN_SDDATA3     WMT_PIN(1, 3)
0056 #define WMT_PIN_MMCDATA0    WMT_PIN(1, 4)
0057 #define WMT_PIN_MMCDATA1    WMT_PIN(1, 5)
0058 #define WMT_PIN_MMCDATA2    WMT_PIN(1, 6)
0059 #define WMT_PIN_MMCDATA3    WMT_PIN(1, 7)
0060 #define WMT_PIN_VDIN0       WMT_PIN(2, 0)
0061 #define WMT_PIN_VDIN1       WMT_PIN(2, 1)
0062 #define WMT_PIN_VDIN2       WMT_PIN(2, 2)
0063 #define WMT_PIN_VDIN3       WMT_PIN(2, 3)
0064 #define WMT_PIN_VDIN4       WMT_PIN(2, 4)
0065 #define WMT_PIN_VDIN5       WMT_PIN(2, 5)
0066 #define WMT_PIN_VDIN6       WMT_PIN(2, 6)
0067 #define WMT_PIN_VDIN7       WMT_PIN(2, 7)
0068 #define WMT_PIN_VDOUT0      WMT_PIN(2, 8)
0069 #define WMT_PIN_VDOUT1      WMT_PIN(2, 9)
0070 #define WMT_PIN_VDOUT2      WMT_PIN(2, 10)
0071 #define WMT_PIN_VDOUT3      WMT_PIN(2, 11)
0072 #define WMT_PIN_VDOUT4      WMT_PIN(2, 12)
0073 #define WMT_PIN_VDOUT5      WMT_PIN(2, 13)
0074 #define WMT_PIN_VDOUT6      WMT_PIN(2, 14)
0075 #define WMT_PIN_VDOUT7      WMT_PIN(2, 15)
0076 #define WMT_PIN_VDOUT8      WMT_PIN(2, 16)
0077 #define WMT_PIN_VDOUT9      WMT_PIN(2, 17)
0078 #define WMT_PIN_VDOUT10     WMT_PIN(2, 18)
0079 #define WMT_PIN_VDOUT11     WMT_PIN(2, 19)
0080 #define WMT_PIN_VDOUT12     WMT_PIN(2, 20)
0081 #define WMT_PIN_VDOUT13     WMT_PIN(2, 21)
0082 #define WMT_PIN_VDOUT14     WMT_PIN(2, 22)
0083 #define WMT_PIN_VDOUT15     WMT_PIN(2, 23)
0084 #define WMT_PIN_VDOUT16     WMT_PIN(2, 24)
0085 #define WMT_PIN_VDOUT17     WMT_PIN(2, 25)
0086 #define WMT_PIN_VDOUT18     WMT_PIN(2, 26)
0087 #define WMT_PIN_VDOUT19     WMT_PIN(2, 27)
0088 #define WMT_PIN_VDOUT20     WMT_PIN(2, 28)
0089 #define WMT_PIN_VDOUT21     WMT_PIN(2, 29)
0090 #define WMT_PIN_VDOUT22     WMT_PIN(2, 30)
0091 #define WMT_PIN_VDOUT23     WMT_PIN(2, 31)
0092 #define WMT_PIN_VHSYNC      WMT_PIN(3, 0)
0093 #define WMT_PIN_VVSYNC      WMT_PIN(3, 1)
0094 #define WMT_PIN_VGAHSYNC    WMT_PIN(3, 2)
0095 #define WMT_PIN_VGAVSYNC    WMT_PIN(3, 3)
0096 #define WMT_PIN_VDHSYNC     WMT_PIN(3, 4)
0097 #define WMT_PIN_VDVSYNC     WMT_PIN(3, 5)
0098 #define WMT_PIN_NORD0       WMT_PIN(4, 0)
0099 #define WMT_PIN_NORD1       WMT_PIN(4, 1)
0100 #define WMT_PIN_NORD2       WMT_PIN(4, 2)
0101 #define WMT_PIN_NORD3       WMT_PIN(4, 3)
0102 #define WMT_PIN_NORD4       WMT_PIN(4, 4)
0103 #define WMT_PIN_NORD5       WMT_PIN(4, 5)
0104 #define WMT_PIN_NORD6       WMT_PIN(4, 6)
0105 #define WMT_PIN_NORD7       WMT_PIN(4, 7)
0106 #define WMT_PIN_NORD8       WMT_PIN(4, 8)
0107 #define WMT_PIN_NORD9       WMT_PIN(4, 9)
0108 #define WMT_PIN_NORD10      WMT_PIN(4, 10)
0109 #define WMT_PIN_NORD11      WMT_PIN(4, 11)
0110 #define WMT_PIN_NORD12      WMT_PIN(4, 12)
0111 #define WMT_PIN_NORD13      WMT_PIN(4, 13)
0112 #define WMT_PIN_NORD14      WMT_PIN(4, 14)
0113 #define WMT_PIN_NORD15      WMT_PIN(4, 15)
0114 #define WMT_PIN_NORA0       WMT_PIN(5, 0)
0115 #define WMT_PIN_NORA1       WMT_PIN(5, 1)
0116 #define WMT_PIN_NORA2       WMT_PIN(5, 2)
0117 #define WMT_PIN_NORA3       WMT_PIN(5, 3)
0118 #define WMT_PIN_NORA4       WMT_PIN(5, 4)
0119 #define WMT_PIN_NORA5       WMT_PIN(5, 5)
0120 #define WMT_PIN_NORA6       WMT_PIN(5, 6)
0121 #define WMT_PIN_NORA7       WMT_PIN(5, 7)
0122 #define WMT_PIN_NORA8       WMT_PIN(5, 8)
0123 #define WMT_PIN_NORA9       WMT_PIN(5, 9)
0124 #define WMT_PIN_NORA10      WMT_PIN(5, 10)
0125 #define WMT_PIN_NORA11      WMT_PIN(5, 11)
0126 #define WMT_PIN_NORA12      WMT_PIN(5, 12)
0127 #define WMT_PIN_NORA13      WMT_PIN(5, 13)
0128 #define WMT_PIN_NORA14      WMT_PIN(5, 14)
0129 #define WMT_PIN_NORA15      WMT_PIN(5, 15)
0130 #define WMT_PIN_NORA16      WMT_PIN(5, 16)
0131 #define WMT_PIN_NORA17      WMT_PIN(5, 17)
0132 #define WMT_PIN_NORA18      WMT_PIN(5, 18)
0133 #define WMT_PIN_NORA19      WMT_PIN(5, 19)
0134 #define WMT_PIN_NORA20      WMT_PIN(5, 20)
0135 #define WMT_PIN_NORA21      WMT_PIN(5, 21)
0136 #define WMT_PIN_NORA22      WMT_PIN(5, 22)
0137 #define WMT_PIN_NORA23      WMT_PIN(5, 23)
0138 #define WMT_PIN_NORA24      WMT_PIN(5, 24)
0139 #define WMT_PIN_AC97SDI     WMT_PIN(6, 0)
0140 #define WMT_PIN_AC97SYNC    WMT_PIN(6, 1)
0141 #define WMT_PIN_AC97SDO     WMT_PIN(6, 2)
0142 #define WMT_PIN_AC97BCLK    WMT_PIN(6, 3)
0143 #define WMT_PIN_AC97RST     WMT_PIN(6, 4)
0144 #define WMT_PIN_SFDO        WMT_PIN(7, 0)
0145 #define WMT_PIN_SFCS0       WMT_PIN(7, 1)
0146 #define WMT_PIN_SFCS1       WMT_PIN(7, 2)
0147 #define WMT_PIN_SFCLK       WMT_PIN(7, 3)
0148 #define WMT_PIN_SFDI        WMT_PIN(7, 4)
0149 #define WMT_PIN_SPI0CLK     WMT_PIN(8, 0)
0150 #define WMT_PIN_SPI0MISO    WMT_PIN(8, 1)
0151 #define WMT_PIN_SPI0MOSI    WMT_PIN(8, 2)
0152 #define WMT_PIN_SPI0SS      WMT_PIN(8, 3)
0153 #define WMT_PIN_SPI1CLK     WMT_PIN(8, 4)
0154 #define WMT_PIN_SPI1MISO    WMT_PIN(8, 5)
0155 #define WMT_PIN_SPI1MOSI    WMT_PIN(8, 6)
0156 #define WMT_PIN_SPI1SS      WMT_PIN(8, 7)
0157 #define WMT_PIN_SPI2CLK     WMT_PIN(8, 8)
0158 #define WMT_PIN_SPI2MISO    WMT_PIN(8, 9)
0159 #define WMT_PIN_SPI2MOSI    WMT_PIN(8, 10)
0160 #define WMT_PIN_SPI2SS      WMT_PIN(8, 11)
0161 #define WMT_PIN_UART0_RTS   WMT_PIN(9, 0)
0162 #define WMT_PIN_UART0_TXD   WMT_PIN(9, 1)
0163 #define WMT_PIN_UART0_CTS   WMT_PIN(9, 2)
0164 #define WMT_PIN_UART0_RXD   WMT_PIN(9, 3)
0165 #define WMT_PIN_UART1_RTS   WMT_PIN(9, 4)
0166 #define WMT_PIN_UART1_TXD   WMT_PIN(9, 5)
0167 #define WMT_PIN_UART1_CTS   WMT_PIN(9, 6)
0168 #define WMT_PIN_UART1_RXD   WMT_PIN(9, 7)
0169 #define WMT_PIN_UART2_RTS   WMT_PIN(9, 8)
0170 #define WMT_PIN_UART2_TXD   WMT_PIN(9, 9)
0171 #define WMT_PIN_UART2_CTS   WMT_PIN(9, 10)
0172 #define WMT_PIN_UART2_RXD   WMT_PIN(9, 11)
0173 #define WMT_PIN_UART3_RTS   WMT_PIN(9, 12)
0174 #define WMT_PIN_UART3_TXD   WMT_PIN(9, 13)
0175 #define WMT_PIN_UART3_CTS   WMT_PIN(9, 14)
0176 #define WMT_PIN_UART3_RXD   WMT_PIN(9, 15)
0177 #define WMT_PIN_I2C0SCL     WMT_PIN(10, 0)
0178 #define WMT_PIN_I2C0SDA     WMT_PIN(10, 1)
0179 #define WMT_PIN_I2C1SCL     WMT_PIN(10, 2)
0180 #define WMT_PIN_I2C1SDA     WMT_PIN(10, 3)
0181 #define WMT_PIN_I2C2SCL     WMT_PIN(10, 4)
0182 #define WMT_PIN_I2C2SDA     WMT_PIN(10, 5)
0183 
0184 static const struct pinctrl_pin_desc wm8505_pins[] = {
0185     PINCTRL_PIN(WMT_PIN_EXTGPIO0, "extgpio0"),
0186     PINCTRL_PIN(WMT_PIN_EXTGPIO1, "extgpio1"),
0187     PINCTRL_PIN(WMT_PIN_EXTGPIO2, "extgpio2"),
0188     PINCTRL_PIN(WMT_PIN_EXTGPIO3, "extgpio3"),
0189     PINCTRL_PIN(WMT_PIN_EXTGPIO4, "extgpio4"),
0190     PINCTRL_PIN(WMT_PIN_EXTGPIO5, "extgpio5"),
0191     PINCTRL_PIN(WMT_PIN_EXTGPIO6, "extgpio6"),
0192     PINCTRL_PIN(WMT_PIN_EXTGPIO7, "extgpio7"),
0193     PINCTRL_PIN(WMT_PIN_WAKEUP0, "wakeup0"),
0194     PINCTRL_PIN(WMT_PIN_WAKEUP1, "wakeup1"),
0195     PINCTRL_PIN(WMT_PIN_WAKEUP2, "wakeup2"),
0196     PINCTRL_PIN(WMT_PIN_WAKEUP3, "wakeup3"),
0197     PINCTRL_PIN(WMT_PIN_SUSGPIO0, "susgpio0"),
0198     PINCTRL_PIN(WMT_PIN_SDDATA0, "sd_data0"),
0199     PINCTRL_PIN(WMT_PIN_SDDATA1, "sd_data1"),
0200     PINCTRL_PIN(WMT_PIN_SDDATA2, "sd_data2"),
0201     PINCTRL_PIN(WMT_PIN_SDDATA3, "sd_data3"),
0202     PINCTRL_PIN(WMT_PIN_MMCDATA0, "mmc_data0"),
0203     PINCTRL_PIN(WMT_PIN_MMCDATA1, "mmc_data1"),
0204     PINCTRL_PIN(WMT_PIN_MMCDATA2, "mmc_data2"),
0205     PINCTRL_PIN(WMT_PIN_MMCDATA3, "mmc_data3"),
0206     PINCTRL_PIN(WMT_PIN_VDIN0, "vdin0"),
0207     PINCTRL_PIN(WMT_PIN_VDIN1, "vdin1"),
0208     PINCTRL_PIN(WMT_PIN_VDIN2, "vdin2"),
0209     PINCTRL_PIN(WMT_PIN_VDIN3, "vdin3"),
0210     PINCTRL_PIN(WMT_PIN_VDIN4, "vdin4"),
0211     PINCTRL_PIN(WMT_PIN_VDIN5, "vdin5"),
0212     PINCTRL_PIN(WMT_PIN_VDIN6, "vdin6"),
0213     PINCTRL_PIN(WMT_PIN_VDIN7, "vdin7"),
0214     PINCTRL_PIN(WMT_PIN_VDOUT0, "vdout0"),
0215     PINCTRL_PIN(WMT_PIN_VDOUT1, "vdout1"),
0216     PINCTRL_PIN(WMT_PIN_VDOUT2, "vdout2"),
0217     PINCTRL_PIN(WMT_PIN_VDOUT3, "vdout3"),
0218     PINCTRL_PIN(WMT_PIN_VDOUT4, "vdout4"),
0219     PINCTRL_PIN(WMT_PIN_VDOUT5, "vdout5"),
0220     PINCTRL_PIN(WMT_PIN_VDOUT6, "vdout6"),
0221     PINCTRL_PIN(WMT_PIN_VDOUT7, "vdout7"),
0222     PINCTRL_PIN(WMT_PIN_VDOUT8, "vdout8"),
0223     PINCTRL_PIN(WMT_PIN_VDOUT9, "vdout9"),
0224     PINCTRL_PIN(WMT_PIN_VDOUT10, "vdout10"),
0225     PINCTRL_PIN(WMT_PIN_VDOUT11, "vdout11"),
0226     PINCTRL_PIN(WMT_PIN_VDOUT12, "vdout12"),
0227     PINCTRL_PIN(WMT_PIN_VDOUT13, "vdout13"),
0228     PINCTRL_PIN(WMT_PIN_VDOUT14, "vdout14"),
0229     PINCTRL_PIN(WMT_PIN_VDOUT15, "vdout15"),
0230     PINCTRL_PIN(WMT_PIN_VDOUT16, "vdout16"),
0231     PINCTRL_PIN(WMT_PIN_VDOUT17, "vdout17"),
0232     PINCTRL_PIN(WMT_PIN_VDOUT18, "vdout18"),
0233     PINCTRL_PIN(WMT_PIN_VDOUT19, "vdout19"),
0234     PINCTRL_PIN(WMT_PIN_VDOUT20, "vdout20"),
0235     PINCTRL_PIN(WMT_PIN_VDOUT21, "vdout21"),
0236     PINCTRL_PIN(WMT_PIN_VDOUT22, "vdout22"),
0237     PINCTRL_PIN(WMT_PIN_VDOUT23, "vdout23"),
0238     PINCTRL_PIN(WMT_PIN_VHSYNC, "v_hsync"),
0239     PINCTRL_PIN(WMT_PIN_VVSYNC, "v_vsync"),
0240     PINCTRL_PIN(WMT_PIN_VGAHSYNC, "vga_hsync"),
0241     PINCTRL_PIN(WMT_PIN_VGAVSYNC, "vga_vsync"),
0242     PINCTRL_PIN(WMT_PIN_VDHSYNC, "vd_hsync"),
0243     PINCTRL_PIN(WMT_PIN_VDVSYNC, "vd_vsync"),
0244     PINCTRL_PIN(WMT_PIN_NORD0, "nor_d0"),
0245     PINCTRL_PIN(WMT_PIN_NORD1, "nor_d1"),
0246     PINCTRL_PIN(WMT_PIN_NORD2, "nor_d2"),
0247     PINCTRL_PIN(WMT_PIN_NORD3, "nor_d3"),
0248     PINCTRL_PIN(WMT_PIN_NORD4, "nor_d4"),
0249     PINCTRL_PIN(WMT_PIN_NORD5, "nor_d5"),
0250     PINCTRL_PIN(WMT_PIN_NORD6, "nor_d6"),
0251     PINCTRL_PIN(WMT_PIN_NORD7, "nor_d7"),
0252     PINCTRL_PIN(WMT_PIN_NORD8, "nor_d8"),
0253     PINCTRL_PIN(WMT_PIN_NORD9, "nor_d9"),
0254     PINCTRL_PIN(WMT_PIN_NORD10, "nor_d10"),
0255     PINCTRL_PIN(WMT_PIN_NORD11, "nor_d11"),
0256     PINCTRL_PIN(WMT_PIN_NORD12, "nor_d12"),
0257     PINCTRL_PIN(WMT_PIN_NORD13, "nor_d13"),
0258     PINCTRL_PIN(WMT_PIN_NORD14, "nor_d14"),
0259     PINCTRL_PIN(WMT_PIN_NORD15, "nor_d15"),
0260     PINCTRL_PIN(WMT_PIN_NORA0, "nor_a0"),
0261     PINCTRL_PIN(WMT_PIN_NORA1, "nor_a1"),
0262     PINCTRL_PIN(WMT_PIN_NORA2, "nor_a2"),
0263     PINCTRL_PIN(WMT_PIN_NORA3, "nor_a3"),
0264     PINCTRL_PIN(WMT_PIN_NORA4, "nor_a4"),
0265     PINCTRL_PIN(WMT_PIN_NORA5, "nor_a5"),
0266     PINCTRL_PIN(WMT_PIN_NORA6, "nor_a6"),
0267     PINCTRL_PIN(WMT_PIN_NORA7, "nor_a7"),
0268     PINCTRL_PIN(WMT_PIN_NORA8, "nor_a8"),
0269     PINCTRL_PIN(WMT_PIN_NORA9, "nor_a9"),
0270     PINCTRL_PIN(WMT_PIN_NORA10, "nor_a10"),
0271     PINCTRL_PIN(WMT_PIN_NORA11, "nor_a11"),
0272     PINCTRL_PIN(WMT_PIN_NORA12, "nor_a12"),
0273     PINCTRL_PIN(WMT_PIN_NORA13, "nor_a13"),
0274     PINCTRL_PIN(WMT_PIN_NORA14, "nor_a14"),
0275     PINCTRL_PIN(WMT_PIN_NORA15, "nor_a15"),
0276     PINCTRL_PIN(WMT_PIN_NORA16, "nor_a16"),
0277     PINCTRL_PIN(WMT_PIN_NORA17, "nor_a17"),
0278     PINCTRL_PIN(WMT_PIN_NORA18, "nor_a18"),
0279     PINCTRL_PIN(WMT_PIN_NORA19, "nor_a19"),
0280     PINCTRL_PIN(WMT_PIN_NORA20, "nor_a20"),
0281     PINCTRL_PIN(WMT_PIN_NORA21, "nor_a21"),
0282     PINCTRL_PIN(WMT_PIN_NORA22, "nor_a22"),
0283     PINCTRL_PIN(WMT_PIN_NORA23, "nor_a23"),
0284     PINCTRL_PIN(WMT_PIN_NORA24, "nor_a24"),
0285     PINCTRL_PIN(WMT_PIN_AC97SDI, "ac97_sdi"),
0286     PINCTRL_PIN(WMT_PIN_AC97SYNC, "ac97_sync"),
0287     PINCTRL_PIN(WMT_PIN_AC97SDO, "ac97_sdo"),
0288     PINCTRL_PIN(WMT_PIN_AC97BCLK, "ac97_bclk"),
0289     PINCTRL_PIN(WMT_PIN_AC97RST, "ac97_rst"),
0290     PINCTRL_PIN(WMT_PIN_SFDO, "sf_do"),
0291     PINCTRL_PIN(WMT_PIN_SFCS0, "sf_cs0"),
0292     PINCTRL_PIN(WMT_PIN_SFCS1, "sf_cs1"),
0293     PINCTRL_PIN(WMT_PIN_SFCLK, "sf_clk"),
0294     PINCTRL_PIN(WMT_PIN_SFDI, "sf_di"),
0295     PINCTRL_PIN(WMT_PIN_SPI0CLK, "spi0_clk"),
0296     PINCTRL_PIN(WMT_PIN_SPI0MISO, "spi0_miso"),
0297     PINCTRL_PIN(WMT_PIN_SPI0MOSI, "spi0_mosi"),
0298     PINCTRL_PIN(WMT_PIN_SPI0SS, "spi0_ss"),
0299     PINCTRL_PIN(WMT_PIN_SPI1CLK, "spi1_clk"),
0300     PINCTRL_PIN(WMT_PIN_SPI1MISO, "spi1_miso"),
0301     PINCTRL_PIN(WMT_PIN_SPI1MOSI, "spi1_mosi"),
0302     PINCTRL_PIN(WMT_PIN_SPI1SS, "spi1_ss"),
0303     PINCTRL_PIN(WMT_PIN_SPI2CLK, "spi2_clk"),
0304     PINCTRL_PIN(WMT_PIN_SPI2MISO, "spi2_miso"),
0305     PINCTRL_PIN(WMT_PIN_SPI2MOSI, "spi2_mosi"),
0306     PINCTRL_PIN(WMT_PIN_SPI2SS, "spi2_ss"),
0307     PINCTRL_PIN(WMT_PIN_UART0_RTS, "uart0_rts"),
0308     PINCTRL_PIN(WMT_PIN_UART0_TXD, "uart0_txd"),
0309     PINCTRL_PIN(WMT_PIN_UART0_CTS, "uart0_cts"),
0310     PINCTRL_PIN(WMT_PIN_UART0_RXD, "uart0_rxd"),
0311     PINCTRL_PIN(WMT_PIN_UART1_RTS, "uart1_rts"),
0312     PINCTRL_PIN(WMT_PIN_UART1_TXD, "uart1_txd"),
0313     PINCTRL_PIN(WMT_PIN_UART1_CTS, "uart1_cts"),
0314     PINCTRL_PIN(WMT_PIN_UART1_RXD, "uart1_rxd"),
0315     PINCTRL_PIN(WMT_PIN_UART2_RTS, "uart2_rts"),
0316     PINCTRL_PIN(WMT_PIN_UART2_TXD, "uart2_txd"),
0317     PINCTRL_PIN(WMT_PIN_UART2_CTS, "uart2_cts"),
0318     PINCTRL_PIN(WMT_PIN_UART2_RXD, "uart2_rxd"),
0319     PINCTRL_PIN(WMT_PIN_UART3_RTS, "uart3_rts"),
0320     PINCTRL_PIN(WMT_PIN_UART3_TXD, "uart3_txd"),
0321     PINCTRL_PIN(WMT_PIN_UART3_CTS, "uart3_cts"),
0322     PINCTRL_PIN(WMT_PIN_UART3_RXD, "uart3_rxd"),
0323     PINCTRL_PIN(WMT_PIN_I2C0SCL, "i2c0_scl"),
0324     PINCTRL_PIN(WMT_PIN_I2C0SDA, "i2c0_sda"),
0325     PINCTRL_PIN(WMT_PIN_I2C1SCL, "i2c1_scl"),
0326     PINCTRL_PIN(WMT_PIN_I2C1SDA, "i2c1_sda"),
0327     PINCTRL_PIN(WMT_PIN_I2C2SCL, "i2c2_scl"),
0328     PINCTRL_PIN(WMT_PIN_I2C2SDA, "i2c2_sda"),
0329 };
0330 
0331 /* Order of these names must match the above list */
0332 static const char * const wm8505_groups[] = {
0333     "extgpio0",
0334     "extgpio1",
0335     "extgpio2",
0336     "extgpio3",
0337     "extgpio4",
0338     "extgpio5",
0339     "extgpio6",
0340     "extgpio7",
0341     "wakeup0",
0342     "wakeup1",
0343     "wakeup2",
0344     "wakeup3",
0345     "susgpio0",
0346     "sd_data0",
0347     "sd_data1",
0348     "sd_data2",
0349     "sd_data3",
0350     "mmc_data0",
0351     "mmc_data1",
0352     "mmc_data2",
0353     "mmc_data3",
0354     "vdin0",
0355     "vdin1",
0356     "vdin2",
0357     "vdin3",
0358     "vdin4",
0359     "vdin5",
0360     "vdin6",
0361     "vdin7",
0362     "vdout0",
0363     "vdout1",
0364     "vdout2",
0365     "vdout3",
0366     "vdout4",
0367     "vdout5",
0368     "vdout6",
0369     "vdout7",
0370     "vdout8",
0371     "vdout9",
0372     "vdout10",
0373     "vdout11",
0374     "vdout12",
0375     "vdout13",
0376     "vdout14",
0377     "vdout15",
0378     "vdout16",
0379     "vdout17",
0380     "vdout18",
0381     "vdout19",
0382     "vdout20",
0383     "vdout21",
0384     "vdout22",
0385     "vdout23",
0386     "v_hsync",
0387     "v_vsync",
0388     "vga_hsync",
0389     "vga_vsync",
0390     "vd_hsync",
0391     "vd_vsync",
0392     "nor_d0",
0393     "nor_d1",
0394     "nor_d2",
0395     "nor_d3",
0396     "nor_d4",
0397     "nor_d5",
0398     "nor_d6",
0399     "nor_d7",
0400     "nor_d8",
0401     "nor_d9",
0402     "nor_d10",
0403     "nor_d11",
0404     "nor_d12",
0405     "nor_d13",
0406     "nor_d14",
0407     "nor_d15",
0408     "nor_a0",
0409     "nor_a1",
0410     "nor_a2",
0411     "nor_a3",
0412     "nor_a4",
0413     "nor_a5",
0414     "nor_a6",
0415     "nor_a7",
0416     "nor_a8",
0417     "nor_a9",
0418     "nor_a10",
0419     "nor_a11",
0420     "nor_a12",
0421     "nor_a13",
0422     "nor_a14",
0423     "nor_a15",
0424     "nor_a16",
0425     "nor_a17",
0426     "nor_a18",
0427     "nor_a19",
0428     "nor_a20",
0429     "nor_a21",
0430     "nor_a22",
0431     "nor_a23",
0432     "nor_a24",
0433     "ac97_sdi",
0434     "ac97_sync",
0435     "ac97_sdo",
0436     "ac97_bclk",
0437     "ac97_rst",
0438     "sf_do",
0439     "sf_cs0",
0440     "sf_cs1",
0441     "sf_clk",
0442     "sf_di",
0443     "spi0_clk",
0444     "spi0_miso",
0445     "spi0_mosi",
0446     "spi0_ss",
0447     "spi1_clk",
0448     "spi1_miso",
0449     "spi1_mosi",
0450     "spi1_ss",
0451     "spi2_clk",
0452     "spi2_miso",
0453     "spi2_mosi",
0454     "spi2_ss",
0455     "uart0_rts",
0456     "uart0_txd",
0457     "uart0_cts",
0458     "uart0_rxd",
0459     "uart1_rts",
0460     "uart1_txd",
0461     "uart1_cts",
0462     "uart1_rxd",
0463     "uart2_rts",
0464     "uart2_txd",
0465     "uart2_cts",
0466     "uart2_rxd",
0467     "uart3_rts",
0468     "uart3_txd",
0469     "uart3_cts",
0470     "uart3_rxd",
0471     "i2c0_scl",
0472     "i2c0_sda",
0473     "i2c1_scl",
0474     "i2c1_sda",
0475     "i2c2_scl",
0476     "i2c2_sda",
0477 };
0478 
0479 static int wm8505_pinctrl_probe(struct platform_device *pdev)
0480 {
0481     struct wmt_pinctrl_data *data;
0482 
0483     data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
0484     if (!data)
0485         return -ENOMEM;
0486 
0487     data->banks = wm8505_banks;
0488     data->nbanks = ARRAY_SIZE(wm8505_banks);
0489     data->pins = wm8505_pins;
0490     data->npins = ARRAY_SIZE(wm8505_pins);
0491     data->groups = wm8505_groups;
0492     data->ngroups = ARRAY_SIZE(wm8505_groups);
0493 
0494     return wmt_pinctrl_probe(pdev, data);
0495 }
0496 
0497 static const struct of_device_id wmt_pinctrl_of_match[] = {
0498     { .compatible = "wm,wm8505-pinctrl" },
0499     { /* sentinel */ },
0500 };
0501 
0502 static struct platform_driver wmt_pinctrl_driver = {
0503     .probe  = wm8505_pinctrl_probe,
0504     .driver = {
0505         .name   = "pinctrl-wm8505",
0506         .of_match_table = wmt_pinctrl_of_match,
0507         .suppress_bind_attrs = true,
0508     },
0509 };
0510 builtin_platform_driver(wmt_pinctrl_driver);