xref: /linux/drivers/pinctrl/mediatek/pinctrl-mt8516.c (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
126466711SFabien Parent // SPDX-License-Identifier: GPL-2.0
226466711SFabien Parent /*
326466711SFabien Parent  * Copyright (c) 2019 MediaTek Inc.
426466711SFabien Parent  * Author: Min.Guo <min.guo@mediatek.com>
526466711SFabien Parent  */
626466711SFabien Parent 
726466711SFabien Parent #include <dt-bindings/pinctrl/mt65xx.h>
826466711SFabien Parent #include <linux/of.h>
926466711SFabien Parent #include <linux/of_device.h>
1026466711SFabien Parent #include <linux/module.h>
1126466711SFabien Parent #include <linux/pinctrl/pinctrl.h>
1226466711SFabien Parent #include <linux/platform_device.h>
1326466711SFabien Parent #include <linux/regmap.h>
1426466711SFabien Parent 
1526466711SFabien Parent #include "pinctrl-mtk-common.h"
1626466711SFabien Parent #include "pinctrl-mtk-mt8516.h"
1726466711SFabien Parent 
1826466711SFabien Parent static const struct mtk_drv_group_desc mt8516_drv_grp[] = {
1926466711SFabien Parent 	/* 0E4E8SR 4/8/12/16 */
2026466711SFabien Parent 	MTK_DRV_GRP(4, 16, 1, 2, 4),
2126466711SFabien Parent 	/* 0E2E4SR  2/4/6/8 */
2226466711SFabien Parent 	MTK_DRV_GRP(2, 8, 1, 2, 2),
2326466711SFabien Parent 	/* E8E4E2  2/4/6/8/10/12/14/16 */
2426466711SFabien Parent 	MTK_DRV_GRP(2, 16, 0, 2, 2)
2526466711SFabien Parent };
2626466711SFabien Parent 
2726466711SFabien Parent static const struct mtk_pin_drv_grp mt8516_pin_drv[] = {
2826466711SFabien Parent 	MTK_PIN_DRV_GRP(0, 0xd00, 0, 0),
2926466711SFabien Parent 	MTK_PIN_DRV_GRP(1, 0xd00, 0, 0),
3026466711SFabien Parent 	MTK_PIN_DRV_GRP(2, 0xd00, 0, 0),
3126466711SFabien Parent 	MTK_PIN_DRV_GRP(3, 0xd00, 0, 0),
3226466711SFabien Parent 	MTK_PIN_DRV_GRP(4, 0xd00, 0, 0),
3326466711SFabien Parent 
3426466711SFabien Parent 	MTK_PIN_DRV_GRP(5, 0xd00, 4, 0),
3526466711SFabien Parent 	MTK_PIN_DRV_GRP(6, 0xd00, 4, 0),
3626466711SFabien Parent 	MTK_PIN_DRV_GRP(7, 0xd00, 4, 0),
3726466711SFabien Parent 	MTK_PIN_DRV_GRP(8, 0xd00, 4, 0),
3826466711SFabien Parent 	MTK_PIN_DRV_GRP(9, 0xd00, 4, 0),
3926466711SFabien Parent 	MTK_PIN_DRV_GRP(10, 0xd00, 4, 0),
4026466711SFabien Parent 
4126466711SFabien Parent 	MTK_PIN_DRV_GRP(11, 0xd00, 8, 0),
4226466711SFabien Parent 	MTK_PIN_DRV_GRP(12, 0xd00, 8, 0),
4326466711SFabien Parent 	MTK_PIN_DRV_GRP(13, 0xd00, 8, 0),
4426466711SFabien Parent 
4526466711SFabien Parent 	MTK_PIN_DRV_GRP(14, 0xd00, 12, 2),
4626466711SFabien Parent 	MTK_PIN_DRV_GRP(15, 0xd00, 12, 2),
4726466711SFabien Parent 	MTK_PIN_DRV_GRP(16, 0xd00, 12, 2),
4826466711SFabien Parent 	MTK_PIN_DRV_GRP(17, 0xd00, 12, 2),
4926466711SFabien Parent 
5026466711SFabien Parent 	MTK_PIN_DRV_GRP(18, 0xd10, 0, 0),
5126466711SFabien Parent 	MTK_PIN_DRV_GRP(19, 0xd10, 0, 0),
5226466711SFabien Parent 	MTK_PIN_DRV_GRP(20, 0xd10, 0, 0),
5326466711SFabien Parent 
5426466711SFabien Parent 	MTK_PIN_DRV_GRP(21, 0xd00, 12, 2),
5526466711SFabien Parent 	MTK_PIN_DRV_GRP(22, 0xd00, 12, 2),
5626466711SFabien Parent 	MTK_PIN_DRV_GRP(23, 0xd00, 12, 2),
5726466711SFabien Parent 
5826466711SFabien Parent 	MTK_PIN_DRV_GRP(24, 0xd00, 8, 0),
5926466711SFabien Parent 	MTK_PIN_DRV_GRP(25, 0xd00, 8, 0),
6026466711SFabien Parent 
6126466711SFabien Parent 	MTK_PIN_DRV_GRP(26, 0xd10, 4, 1),
6226466711SFabien Parent 	MTK_PIN_DRV_GRP(27, 0xd10, 4, 1),
6326466711SFabien Parent 	MTK_PIN_DRV_GRP(28, 0xd10, 4, 1),
6426466711SFabien Parent 	MTK_PIN_DRV_GRP(29, 0xd10, 4, 1),
6526466711SFabien Parent 	MTK_PIN_DRV_GRP(30, 0xd10, 4, 1),
6626466711SFabien Parent 
6726466711SFabien Parent 	MTK_PIN_DRV_GRP(31, 0xd10, 8, 1),
6826466711SFabien Parent 	MTK_PIN_DRV_GRP(32, 0xd10, 8, 1),
6926466711SFabien Parent 	MTK_PIN_DRV_GRP(33, 0xd10, 8, 1),
7026466711SFabien Parent 
7126466711SFabien Parent 	MTK_PIN_DRV_GRP(34, 0xd10, 12, 0),
7226466711SFabien Parent 	MTK_PIN_DRV_GRP(35, 0xd10, 12, 0),
7326466711SFabien Parent 
7426466711SFabien Parent 	MTK_PIN_DRV_GRP(36, 0xd20, 0, 0),
7526466711SFabien Parent 	MTK_PIN_DRV_GRP(37, 0xd20, 0, 0),
7626466711SFabien Parent 	MTK_PIN_DRV_GRP(38, 0xd20, 0, 0),
7726466711SFabien Parent 	MTK_PIN_DRV_GRP(39, 0xd20, 0, 0),
7826466711SFabien Parent 
7926466711SFabien Parent 	MTK_PIN_DRV_GRP(40, 0xd20, 4, 1),
8026466711SFabien Parent 
8126466711SFabien Parent 	MTK_PIN_DRV_GRP(41, 0xd20, 8, 1),
8226466711SFabien Parent 	MTK_PIN_DRV_GRP(42, 0xd20, 8, 1),
8326466711SFabien Parent 	MTK_PIN_DRV_GRP(43, 0xd20, 8, 1),
8426466711SFabien Parent 
8526466711SFabien Parent 	MTK_PIN_DRV_GRP(44, 0xd20, 12, 1),
8626466711SFabien Parent 	MTK_PIN_DRV_GRP(45, 0xd20, 12, 1),
8726466711SFabien Parent 	MTK_PIN_DRV_GRP(46, 0xd20, 12, 1),
8826466711SFabien Parent 	MTK_PIN_DRV_GRP(47, 0xd20, 12, 1),
8926466711SFabien Parent 
9026466711SFabien Parent 	MTK_PIN_DRV_GRP(48, 0xd30, 0, 1),
9126466711SFabien Parent 	MTK_PIN_DRV_GRP(49, 0xd30, 0, 1),
9226466711SFabien Parent 	MTK_PIN_DRV_GRP(50, 0xd30, 0, 1),
9326466711SFabien Parent 	MTK_PIN_DRV_GRP(51, 0xd30, 0, 1),
9426466711SFabien Parent 
9526466711SFabien Parent 	MTK_PIN_DRV_GRP(54, 0xd30, 8, 1),
9626466711SFabien Parent 
9726466711SFabien Parent 	MTK_PIN_DRV_GRP(55, 0xd30, 12, 1),
9826466711SFabien Parent 	MTK_PIN_DRV_GRP(56, 0xd30, 12, 1),
9926466711SFabien Parent 	MTK_PIN_DRV_GRP(57, 0xd30, 12, 1),
10026466711SFabien Parent 
10126466711SFabien Parent 	MTK_PIN_DRV_GRP(62, 0xd40, 8, 1),
10226466711SFabien Parent 	MTK_PIN_DRV_GRP(63, 0xd40, 8, 1),
10326466711SFabien Parent 	MTK_PIN_DRV_GRP(64, 0xd40, 8, 1),
10426466711SFabien Parent 	MTK_PIN_DRV_GRP(65, 0xd40, 8, 1),
10526466711SFabien Parent 	MTK_PIN_DRV_GRP(66, 0xd40, 8, 1),
10626466711SFabien Parent 	MTK_PIN_DRV_GRP(67, 0xd40, 8, 1),
10726466711SFabien Parent 
10826466711SFabien Parent 	MTK_PIN_DRV_GRP(68, 0xd40, 12, 2),
10926466711SFabien Parent 
11026466711SFabien Parent 	MTK_PIN_DRV_GRP(69, 0xd50, 0, 2),
11126466711SFabien Parent 
11226466711SFabien Parent 	MTK_PIN_DRV_GRP(70, 0xd50, 4, 2),
11326466711SFabien Parent 	MTK_PIN_DRV_GRP(71, 0xd50, 4, 2),
11426466711SFabien Parent 	MTK_PIN_DRV_GRP(72, 0xd50, 4, 2),
11526466711SFabien Parent 	MTK_PIN_DRV_GRP(73, 0xd50, 4, 2),
11626466711SFabien Parent 
11726466711SFabien Parent 	MTK_PIN_DRV_GRP(100, 0xd50, 8, 1),
11826466711SFabien Parent 	MTK_PIN_DRV_GRP(101, 0xd50, 8, 1),
11926466711SFabien Parent 	MTK_PIN_DRV_GRP(102, 0xd50, 8, 1),
12026466711SFabien Parent 	MTK_PIN_DRV_GRP(103, 0xd50, 8, 1),
12126466711SFabien Parent 
12226466711SFabien Parent 	MTK_PIN_DRV_GRP(104, 0xd50, 12, 2),
12326466711SFabien Parent 
12426466711SFabien Parent 	MTK_PIN_DRV_GRP(105, 0xd60, 0, 2),
12526466711SFabien Parent 
12626466711SFabien Parent 	MTK_PIN_DRV_GRP(106, 0xd60, 4, 2),
12726466711SFabien Parent 	MTK_PIN_DRV_GRP(107, 0xd60, 4, 2),
12826466711SFabien Parent 	MTK_PIN_DRV_GRP(108, 0xd60, 4, 2),
12926466711SFabien Parent 	MTK_PIN_DRV_GRP(109, 0xd60, 4, 2),
13026466711SFabien Parent 
13126466711SFabien Parent 	MTK_PIN_DRV_GRP(110, 0xd70, 0, 2),
13226466711SFabien Parent 	MTK_PIN_DRV_GRP(111, 0xd70, 0, 2),
13326466711SFabien Parent 	MTK_PIN_DRV_GRP(112, 0xd70, 0, 2),
13426466711SFabien Parent 	MTK_PIN_DRV_GRP(113, 0xd70, 0, 2),
13526466711SFabien Parent 
13626466711SFabien Parent 	MTK_PIN_DRV_GRP(114, 0xd70, 4, 2),
13726466711SFabien Parent 
13826466711SFabien Parent 	MTK_PIN_DRV_GRP(115, 0xd60, 12, 2),
13926466711SFabien Parent 
14026466711SFabien Parent 	MTK_PIN_DRV_GRP(116, 0xd60, 8, 2),
14126466711SFabien Parent 
14226466711SFabien Parent 	MTK_PIN_DRV_GRP(117, 0xd70, 0, 2),
14326466711SFabien Parent 	MTK_PIN_DRV_GRP(118, 0xd70, 0, 2),
14426466711SFabien Parent 	MTK_PIN_DRV_GRP(119, 0xd70, 0, 2),
14526466711SFabien Parent 	MTK_PIN_DRV_GRP(120, 0xd70, 0, 2),
14626466711SFabien Parent };
14726466711SFabien Parent 
14826466711SFabien Parent static const struct mtk_pin_spec_pupd_set_samereg mt8516_spec_pupd[] = {
14926466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(14, 0xe50, 14, 13, 12),
15026466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(15, 0xe60, 2, 1, 0),
15126466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(16, 0xe60, 6, 5, 4),
15226466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(17, 0xe60, 10, 9, 8),
15326466711SFabien Parent 
15426466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(21, 0xe60, 14, 13, 12),
15526466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(22, 0xe70, 2, 1, 0),
15626466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(23, 0xe70, 6, 5, 4),
15726466711SFabien Parent 
15826466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(40, 0xe80, 2, 1, 0),
15926466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(41, 0xe80, 6, 5, 4),
16026466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(42, 0xe90, 2, 1, 0),
16126466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(43, 0xe90, 6, 5, 4),
16226466711SFabien Parent 
16326466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(68, 0xe50, 10, 9, 8),
16426466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(69, 0xe50, 6, 5, 4),
16526466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(70, 0xe40, 6, 5, 4),
16626466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(71, 0xe40, 10, 9, 8),
16726466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(72, 0xe40, 14, 13, 12),
16826466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(73, 0xe50, 2, 1, 0),
16926466711SFabien Parent 
17026466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(104, 0xe40, 2, 1, 0),
17126466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(105, 0xe30, 14, 13, 12),
17226466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(106, 0xe20, 14, 13, 12),
17326466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(107, 0xe30, 2, 1, 0),
17426466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(108, 0xe30, 6, 5, 4),
17526466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(109, 0xe30, 10, 9, 8),
17626466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(110, 0xe10, 14, 13, 12),
17726466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(111, 0xe10, 10, 9, 8),
17826466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(112, 0xe10, 6, 5, 4),
17926466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(113, 0xe10, 2, 1, 0),
18026466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(114, 0xe20, 10, 9, 8),
18126466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(115, 0xe20, 2, 1, 0),
18226466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(116, 0xe20, 6, 5, 4),
18326466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(117, 0xe00, 14, 13, 12),
18426466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(118, 0xe00, 10, 9, 8),
18526466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(119, 0xe00, 6, 5, 4),
18626466711SFabien Parent 	MTK_PIN_PUPD_SPEC_SR(120, 0xe00, 2, 1, 0),
18726466711SFabien Parent };
18826466711SFabien Parent 
18926466711SFabien Parent static const struct mtk_pin_ies_smt_set mt8516_ies_set[] = {
19026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(0, 6, 0x900, 2),
19126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(7, 10, 0x900, 3),
19226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(11, 13, 0x900, 12),
19326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(14, 17, 0x900, 13),
19426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(18, 20, 0x910, 10),
19526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(21, 23, 0x900, 13),
19626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(24, 25, 0x900, 12),
19726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(26, 30, 0x900, 0),
19826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(31, 33, 0x900, 1),
19926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(34, 39, 0x900, 2),
20026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(40, 40, 0x910, 11),
20126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(41, 43, 0x900, 10),
20226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(44, 47, 0x900, 11),
20326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(48, 51, 0x900, 14),
20426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(52, 53, 0x910, 0),
20526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(54, 54, 0x910, 2),
20626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(55, 57, 0x910, 4),
20726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(58, 59, 0x900, 15),
20826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(60, 61, 0x910, 1),
20926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(62, 65, 0x910, 5),
21026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(66, 67, 0x910, 6),
21126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(68, 68, 0x930, 2),
21226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(69, 69, 0x930, 1),
21326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(70, 70, 0x930, 6),
21426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(71, 71, 0x930, 5),
21526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(72, 72, 0x930, 4),
21626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(73, 73, 0x930, 3),
21726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(100, 103, 0x910, 7),
21826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(104, 104, 0x920, 12),
21926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(105, 105, 0x920, 11),
22026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(106, 106, 0x930, 0),
22126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(107, 107, 0x920, 15),
22226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(108, 108, 0x920, 14),
22326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(109, 109, 0x920, 13),
22426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(110, 110, 0x920, 9),
22526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(111, 111, 0x920, 8),
22626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(112, 112, 0x920, 7),
22726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(113, 113, 0x920, 6),
22826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(114, 114, 0x920, 10),
22926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(115, 115, 0x920, 1),
23026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(116, 116, 0x920, 0),
23126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(117, 117, 0x920, 5),
23226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(118, 118, 0x920, 4),
23326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(119, 119, 0x920, 3),
23426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(120, 120, 0x920, 2),
23526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(121, 124, 0x910, 9),
23626466711SFabien Parent };
23726466711SFabien Parent 
23826466711SFabien Parent static const struct mtk_pin_ies_smt_set mt8516_smt_set[] = {
23926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(0, 6, 0xA00, 2),
24026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(7, 10, 0xA00, 3),
24126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(11, 13, 0xA00, 12),
24226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(14, 17, 0xA00, 13),
24326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(18, 20, 0xA10, 10),
24426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(21, 23, 0xA00, 13),
24526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(24, 25, 0xA00, 12),
24626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(26, 30, 0xA00, 0),
24726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(31, 33, 0xA00, 1),
24826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(34, 39, 0xA900, 2),
24926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(40, 40, 0xA10, 11),
25026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(41, 43, 0xA00, 10),
25126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(44, 47, 0xA00, 11),
25226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(48, 51, 0xA00, 14),
25326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(52, 53, 0xA10, 0),
25426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(54, 54, 0xA10, 2),
25526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(55, 57, 0xA10, 4),
25626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(58, 59, 0xA00, 15),
25726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(60, 61, 0xA10, 1),
25826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(62, 65, 0xA10, 5),
25926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(66, 67, 0xA10, 6),
26026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(68, 68, 0xA30, 2),
26126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(69, 69, 0xA30, 1),
26226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(70, 70, 0xA30, 3),
26326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(71, 71, 0xA30, 4),
26426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(72, 72, 0xA30, 5),
26526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(73, 73, 0xA30, 6),
26626466711SFabien Parent 
26726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(100, 103, 0xA10, 7),
26826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(104, 104, 0xA20, 12),
26926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(105, 105, 0xA20, 11),
27026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(106, 106, 0xA30, 13),
27126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(107, 107, 0xA20, 14),
27226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(108, 108, 0xA20, 15),
27326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(109, 109, 0xA30, 0),
27426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(110, 110, 0xA20, 9),
27526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(111, 111, 0xA20, 8),
27626466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(112, 112, 0xA20, 7),
27726466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(113, 113, 0xA20, 6),
27826466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(114, 114, 0xA20, 10),
27926466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(115, 115, 0xA20, 1),
28026466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(116, 116, 0xA20, 0),
28126466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(117, 117, 0xA20, 5),
28226466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(118, 118, 0xA20, 4),
28326466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(119, 119, 0xA20, 3),
28426466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(120, 120, 0xA20, 2),
28526466711SFabien Parent 	MTK_PIN_IES_SMT_SPEC(121, 124, 0xA10, 9),
28626466711SFabien Parent };
28726466711SFabien Parent 
28826466711SFabien Parent static const struct mtk_pinctrl_devdata mt8516_pinctrl_data = {
28926466711SFabien Parent 	.pins = mtk_pins_mt8516,
29026466711SFabien Parent 	.npins = ARRAY_SIZE(mtk_pins_mt8516),
29126466711SFabien Parent 	.grp_desc = mt8516_drv_grp,
29226466711SFabien Parent 	.n_grp_cls = ARRAY_SIZE(mt8516_drv_grp),
29326466711SFabien Parent 	.pin_drv_grp = mt8516_pin_drv,
29426466711SFabien Parent 	.n_pin_drv_grps = ARRAY_SIZE(mt8516_pin_drv),
295156f7217SAngeloGioacchino Del Regno 	.spec_ies = mt8516_ies_set,
296156f7217SAngeloGioacchino Del Regno 	.n_spec_ies = ARRAY_SIZE(mt8516_ies_set),
297c19763c3SAngeloGioacchino Del Regno 	.spec_pupd = mt8516_spec_pupd,
298c19763c3SAngeloGioacchino Del Regno 	.n_spec_pupd = ARRAY_SIZE(mt8516_spec_pupd),
299156f7217SAngeloGioacchino Del Regno 	.spec_smt = mt8516_smt_set,
300156f7217SAngeloGioacchino Del Regno 	.n_spec_smt = ARRAY_SIZE(mt8516_smt_set),
301c19763c3SAngeloGioacchino Del Regno 	.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
302156f7217SAngeloGioacchino Del Regno 	.spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
30326466711SFabien Parent 	.dir_offset = 0x0000,
30426466711SFabien Parent 	.pullen_offset = 0x0500,
30526466711SFabien Parent 	.pullsel_offset = 0x0600,
30626466711SFabien Parent 	.dout_offset = 0x0100,
30726466711SFabien Parent 	.din_offset = 0x0200,
30826466711SFabien Parent 	.pinmux_offset = 0x0300,
30926466711SFabien Parent 	.type1_start = 125,
31026466711SFabien Parent 	.type1_end = 125,
31126466711SFabien Parent 	.port_shf = 4,
31226466711SFabien Parent 	.port_mask = 0xf,
31326466711SFabien Parent 	.port_align = 4,
3149f940d8eSFabien Parent 	.mode_mask = 0xf,
3159f940d8eSFabien Parent 	.mode_per_reg = 5,
3169f940d8eSFabien Parent 	.mode_shf = 4,
31726466711SFabien Parent 	.eint_hw = {
31826466711SFabien Parent 		.port_mask = 7,
31926466711SFabien Parent 		.ports     = 6,
32026466711SFabien Parent 		.ap_num    = 169,
32126466711SFabien Parent 		.db_cnt    = 64,
32226466711SFabien Parent 	},
32326466711SFabien Parent };
32426466711SFabien Parent 
32526466711SFabien Parent static const struct of_device_id mt8516_pctrl_match[] = {
326c8c206cdSAngeloGioacchino Del Regno 	{ .compatible = "mediatek,mt8516-pinctrl", .data = &mt8516_pinctrl_data },
32726466711SFabien Parent 	{}
32826466711SFabien Parent };
32926466711SFabien Parent 
33026466711SFabien Parent MODULE_DEVICE_TABLE(of, mt8516_pctrl_match);
33126466711SFabien Parent 
33226466711SFabien Parent static struct platform_driver mtk_pinctrl_driver = {
333c8c206cdSAngeloGioacchino Del Regno 	.probe = mtk_pctrl_common_probe,
33426466711SFabien Parent 	.driver = {
33526466711SFabien Parent 		.name = "mediatek-mt8516-pinctrl",
33626466711SFabien Parent 		.of_match_table = mt8516_pctrl_match,
33726466711SFabien Parent 		.pm = &mtk_eint_pm_ops,
33826466711SFabien Parent 	},
33926466711SFabien Parent };
34026466711SFabien Parent 
34126466711SFabien Parent static int __init mtk_pinctrl_init(void)
34226466711SFabien Parent {
34326466711SFabien Parent 	return platform_driver_register(&mtk_pinctrl_driver);
34426466711SFabien Parent }
34526466711SFabien Parent arch_initcall(mtk_pinctrl_init);
346