// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2015 MediaTek Inc.
* Author: Biao Huang <biao.huang@mediatek.com>
*/
#include <dt-bindings/pinctrl/mt65xx.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pinctrl/pinctrl.h>
#include <linux/regmap.h>
#include "pinctrl-mtk-common.h"
#include "pinctrl-mtk-mt2701.h"
/**
* struct mtk_spec_pinmux_set
* - For special pins' mode setting
* @pin: The pin number.
* @offset: The offset of extra setting register.
* @bit: The bit of extra setting register.
*/
struct mtk_spec_pinmux_set {
unsigned short pin;
unsigned short offset;
unsigned char bit;
};
#define MTK_PINMUX_SPEC(_pin, _offset, _bit) \
{ \
.pin = _pin, \
.offset = _offset, \
.bit = _bit, \
}
static const struct mtk_drv_group_desc mt2701_drv_grp[] = {
/* 0E4E8SR 4/8/12/16 */
MTK_DRV_GRP(4 , 16 , 1 , 2 , 4 ),
/* 0E2E4SR 2/4/6/8 */
MTK_DRV_GRP(2 , 8 , 1 , 2 , 2 ),
/* E8E4E2 2/4/6/8/10/12/14/16 */
MTK_DRV_GRP(2 , 16 , 0 , 2 , 2 )
};
static const struct mtk_pin_drv_grp mt2701_pin_drv[] = {
MTK_PIN_DRV_GRP(0 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(1 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(2 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(3 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(4 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(5 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(6 , 0 xf50, 0 , 1 ),
MTK_PIN_DRV_GRP(7 , 0 xf50, 4 , 1 ),
MTK_PIN_DRV_GRP(8 , 0 xf50, 4 , 1 ),
MTK_PIN_DRV_GRP(9 , 0 xf50, 4 , 1 ),
MTK_PIN_DRV_GRP(10 , 0 xf50, 8 , 1 ),
MTK_PIN_DRV_GRP(11 , 0 xf50, 8 , 1 ),
MTK_PIN_DRV_GRP(12 , 0 xf50, 8 , 1 ),
MTK_PIN_DRV_GRP(13 , 0 xf50, 8 , 1 ),
MTK_PIN_DRV_GRP(14 , 0 xf50, 12 , 0 ),
MTK_PIN_DRV_GRP(15 , 0 xf50, 12 , 0 ),
MTK_PIN_DRV_GRP(16 , 0 xf60, 0 , 0 ),
MTK_PIN_DRV_GRP(17 , 0 xf60, 0 , 0 ),
MTK_PIN_DRV_GRP(18 , 0 xf60, 4 , 0 ),
MTK_PIN_DRV_GRP(19 , 0 xf60, 4 , 0 ),
MTK_PIN_DRV_GRP(20 , 0 xf60, 4 , 0 ),
MTK_PIN_DRV_GRP(21 , 0 xf60, 4 , 0 ),
MTK_PIN_DRV_GRP(22 , 0 xf60, 8 , 0 ),
MTK_PIN_DRV_GRP(23 , 0 xf60, 8 , 0 ),
MTK_PIN_DRV_GRP(24 , 0 xf60, 8 , 0 ),
MTK_PIN_DRV_GRP(25 , 0 xf60, 8 , 0 ),
MTK_PIN_DRV_GRP(26 , 0 xf60, 8 , 0 ),
MTK_PIN_DRV_GRP(27 , 0 xf60, 12 , 0 ),
MTK_PIN_DRV_GRP(28 , 0 xf60, 12 , 0 ),
MTK_PIN_DRV_GRP(29 , 0 xf60, 12 , 0 ),
MTK_PIN_DRV_GRP(30 , 0 xf60, 0 , 0 ),
MTK_PIN_DRV_GRP(31 , 0 xf60, 0 , 0 ),
MTK_PIN_DRV_GRP(32 , 0 xf60, 0 , 0 ),
MTK_PIN_DRV_GRP(33 , 0 xf70, 0 , 0 ),
MTK_PIN_DRV_GRP(34 , 0 xf70, 0 , 0 ),
MTK_PIN_DRV_GRP(35 , 0 xf70, 0 , 0 ),
MTK_PIN_DRV_GRP(36 , 0 xf70, 0 , 0 ),
MTK_PIN_DRV_GRP(37 , 0 xf70, 0 , 0 ),
MTK_PIN_DRV_GRP(38 , 0 xf70, 4 , 0 ),
MTK_PIN_DRV_GRP(39 , 0 xf70, 8 , 1 ),
MTK_PIN_DRV_GRP(40 , 0 xf70, 8 , 1 ),
MTK_PIN_DRV_GRP(41 , 0 xf70, 8 , 1 ),
MTK_PIN_DRV_GRP(42 , 0 xf70, 8 , 1 ),
MTK_PIN_DRV_GRP(43 , 0 xf70, 12 , 0 ),
MTK_PIN_DRV_GRP(44 , 0 xf70, 12 , 0 ),
MTK_PIN_DRV_GRP(45 , 0 xf70, 12 , 0 ),
MTK_PIN_DRV_GRP(47 , 0 xf80, 0 , 0 ),
MTK_PIN_DRV_GRP(48 , 0 xf80, 0 , 0 ),
MTK_PIN_DRV_GRP(49 , 0 xf80, 4 , 0 ),
MTK_PIN_DRV_GRP(50 , 0 xf70, 4 , 0 ),
MTK_PIN_DRV_GRP(51 , 0 xf70, 4 , 0 ),
MTK_PIN_DRV_GRP(52 , 0 xf70, 4 , 0 ),
MTK_PIN_DRV_GRP(53 , 0 xf80, 12 , 0 ),
MTK_PIN_DRV_GRP(54 , 0 xf80, 12 , 0 ),
MTK_PIN_DRV_GRP(55 , 0 xf80, 12 , 0 ),
MTK_PIN_DRV_GRP(56 , 0 xf80, 12 , 0 ),
MTK_PIN_DRV_GRP(60 , 0 xf90, 8 , 1 ),
MTK_PIN_DRV_GRP(61 , 0 xf90, 8 , 1 ),
MTK_PIN_DRV_GRP(62 , 0 xf90, 8 , 1 ),
MTK_PIN_DRV_GRP(63 , 0 xf90, 12 , 1 ),
MTK_PIN_DRV_GRP(64 , 0 xf90, 12 , 1 ),
MTK_PIN_DRV_GRP(65 , 0 xf90, 12 , 1 ),
MTK_PIN_DRV_GRP(66 , 0 xfa0, 0 , 1 ),
MTK_PIN_DRV_GRP(67 , 0 xfa0, 0 , 1 ),
MTK_PIN_DRV_GRP(68 , 0 xfa0, 0 , 1 ),
MTK_PIN_DRV_GRP(69 , 0 xfa0, 0 , 1 ),
MTK_PIN_DRV_GRP(70 , 0 xfa0, 0 , 1 ),
MTK_PIN_DRV_GRP(71 , 0 xfa0, 0 , 1 ),
MTK_PIN_DRV_GRP(72 , 0 xf80, 4 , 0 ),
MTK_PIN_DRV_GRP(73 , 0 xf80, 4 , 0 ),
MTK_PIN_DRV_GRP(74 , 0 xf80, 4 , 0 ),
MTK_PIN_DRV_GRP(85 , 0 xda0, 0 , 2 ),
MTK_PIN_DRV_GRP(86 , 0 xd90, 0 , 2 ),
MTK_PIN_DRV_GRP(87 , 0 xdb0, 0 , 2 ),
MTK_PIN_DRV_GRP(88 , 0 xdb0, 0 , 2 ),
MTK_PIN_DRV_GRP(89 , 0 xdb0, 0 , 2 ),
MTK_PIN_DRV_GRP(90 , 0 xdb0, 0 , 2 ),
MTK_PIN_DRV_GRP(105 , 0 xd40, 0 , 2 ),
MTK_PIN_DRV_GRP(106 , 0 xd30, 0 , 2 ),
MTK_PIN_DRV_GRP(107 , 0 xd50, 0 , 2 ),
MTK_PIN_DRV_GRP(108 , 0 xd50, 0 , 2 ),
MTK_PIN_DRV_GRP(109 , 0 xd50, 0 , 2 ),
MTK_PIN_DRV_GRP(110 , 0 xd50, 0 , 2 ),
MTK_PIN_DRV_GRP(111 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(112 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(113 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(114 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(115 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(116 , 0 xcd0, 0 , 2 ),
MTK_PIN_DRV_GRP(117 , 0 xcc0, 0 , 2 ),
MTK_PIN_DRV_GRP(118 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(119 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(120 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(121 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(126 , 0 xf80, 4 , 0 ),
MTK_PIN_DRV_GRP(188 , 0 xf70, 4 , 0 ),
MTK_PIN_DRV_GRP(189 , 0 xfe0, 8 , 0 ),
MTK_PIN_DRV_GRP(190 , 0 xfe0, 8 , 0 ),
MTK_PIN_DRV_GRP(191 , 0 xfe0, 8 , 0 ),
MTK_PIN_DRV_GRP(192 , 0 xfe0, 8 , 0 ),
MTK_PIN_DRV_GRP(193 , 0 xfe0, 8 , 0 ),
MTK_PIN_DRV_GRP(194 , 0 xfe0, 12 , 0 ),
MTK_PIN_DRV_GRP(195 , 0 xfe0, 12 , 0 ),
MTK_PIN_DRV_GRP(196 , 0 xfe0, 12 , 0 ),
MTK_PIN_DRV_GRP(197 , 0 xfe0, 12 , 0 ),
MTK_PIN_DRV_GRP(198 , 0 xfe0, 12 , 0 ),
MTK_PIN_DRV_GRP(199 , 0 xf50, 4 , 1 ),
MTK_PIN_DRV_GRP(200 , 0 xfd0, 0 , 0 ),
MTK_PIN_DRV_GRP(201 , 0 xfd0, 0 , 0 ),
MTK_PIN_DRV_GRP(202 , 0 xfd0, 0 , 0 ),
MTK_PIN_DRV_GRP(203 , 0 xfd0, 4 , 0 ),
MTK_PIN_DRV_GRP(204 , 0 xfd0, 4 , 0 ),
MTK_PIN_DRV_GRP(205 , 0 xfd0, 4 , 0 ),
MTK_PIN_DRV_GRP(206 , 0 xfd0, 4 , 0 ),
MTK_PIN_DRV_GRP(207 , 0 xfd0, 4 , 0 ),
MTK_PIN_DRV_GRP(208 , 0 xfd0, 8 , 0 ),
MTK_PIN_DRV_GRP(209 , 0 xfd0, 8 , 0 ),
MTK_PIN_DRV_GRP(210 , 0 xfd0, 12 , 1 ),
MTK_PIN_DRV_GRP(211 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(212 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(213 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(214 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(215 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(216 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(217 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(218 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(219 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(220 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(221 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(222 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(223 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(224 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(225 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(226 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(227 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(228 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(229 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(230 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(231 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(232 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(233 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(234 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(235 , 0 xff0, 0 , 1 ),
MTK_PIN_DRV_GRP(236 , 0 xff0, 4 , 0 ),
MTK_PIN_DRV_GRP(237 , 0 xff0, 4 , 0 ),
MTK_PIN_DRV_GRP(238 , 0 xff0, 4 , 0 ),
MTK_PIN_DRV_GRP(239 , 0 xff0, 4 , 0 ),
MTK_PIN_DRV_GRP(240 , 0 xff0, 4 , 0 ),
MTK_PIN_DRV_GRP(241 , 0 xff0, 4 , 0 ),
MTK_PIN_DRV_GRP(242 , 0 xff0, 8 , 0 ),
MTK_PIN_DRV_GRP(243 , 0 xff0, 8 , 0 ),
MTK_PIN_DRV_GRP(248 , 0 xf00, 0 , 0 ),
MTK_PIN_DRV_GRP(249 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(250 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(251 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(252 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(253 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(254 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(255 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(256 , 0 xfc0, 0 , 2 ),
MTK_PIN_DRV_GRP(257 , 0 xce0, 0 , 2 ),
MTK_PIN_DRV_GRP(258 , 0 xcb0, 0 , 2 ),
MTK_PIN_DRV_GRP(259 , 0 xc90, 0 , 2 ),
MTK_PIN_DRV_GRP(260 , 0 x3a0, 0 , 2 ),
MTK_PIN_DRV_GRP(261 , 0 xd50, 0 , 2 ),
MTK_PIN_DRV_GRP(262 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(263 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(264 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(265 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(266 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(267 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(268 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(269 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(270 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(271 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(272 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(273 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(274 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(275 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(276 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(277 , 0 xf00, 8 , 0 ),
MTK_PIN_DRV_GRP(278 , 0 xf70, 8 , 1 ),
};
static const struct mtk_pin_spec_pupd_set_samereg mt2701_spec_pupd[] = {
MTK_PIN_PUPD_SPEC_SR(111 , 0 xd00, 12 , 13 , 14 ), /* ms0 data7 */
MTK_PIN_PUPD_SPEC_SR(112 , 0 xd00, 8 , 9 , 10 ), /* ms0 data6 */
MTK_PIN_PUPD_SPEC_SR(113 , 0 xd00, 4 , 5 , 6 ), /* ms0 data5 */
MTK_PIN_PUPD_SPEC_SR(114 , 0 xd00, 0 , 1 , 2 ), /* ms0 data4 */
MTK_PIN_PUPD_SPEC_SR(115 , 0 xd10, 0 , 1 , 2 ), /* ms0 rstb */
MTK_PIN_PUPD_SPEC_SR(116 , 0 xcd0, 8 , 9 , 10 ), /* ms0 cmd */
MTK_PIN_PUPD_SPEC_SR(117 , 0 xcc0, 8 , 9 , 10 ), /* ms0 clk */
MTK_PIN_PUPD_SPEC_SR(118 , 0 xcf0, 12 , 13 , 14 ), /* ms0 data3 */
MTK_PIN_PUPD_SPEC_SR(119 , 0 xcf0, 8 , 9 , 10 ), /* ms0 data2 */
MTK_PIN_PUPD_SPEC_SR(120 , 0 xcf0, 4 , 5 , 6 ), /* ms0 data1 */
MTK_PIN_PUPD_SPEC_SR(121 , 0 xcf0, 0 , 1 , 2 ), /* ms0 data0 */
MTK_PIN_PUPD_SPEC_SR(105 , 0 xd40, 8 , 9 , 10 ), /* ms1 cmd */
MTK_PIN_PUPD_SPEC_SR(106 , 0 xd30, 8 , 9 , 10 ), /* ms1 clk */
MTK_PIN_PUPD_SPEC_SR(107 , 0 xd60, 0 , 1 , 2 ), /* ms1 dat0 */
MTK_PIN_PUPD_SPEC_SR(108 , 0 xd60, 10 , 9 , 8 ), /* ms1 dat1 */
MTK_PIN_PUPD_SPEC_SR(109 , 0 xd60, 4 , 5 , 6 ), /* ms1 dat2 */
MTK_PIN_PUPD_SPEC_SR(110 , 0 xc60, 12 , 13 , 14 ), /* ms1 dat3 */
MTK_PIN_PUPD_SPEC_SR(85 , 0 xda0, 8 , 9 , 10 ), /* ms2 cmd */
MTK_PIN_PUPD_SPEC_SR(86 , 0 xd90, 8 , 9 , 10 ), /* ms2 clk */
MTK_PIN_PUPD_SPEC_SR(87 , 0 xdc0, 0 , 1 , 2 ), /* ms2 dat0 */
MTK_PIN_PUPD_SPEC_SR(88 , 0 xdc0, 10 , 9 , 8 ), /* ms2 dat1 */
MTK_PIN_PUPD_SPEC_SR(89 , 0 xdc0, 4 , 5 , 6 ), /* ms2 dat2 */
MTK_PIN_PUPD_SPEC_SR(90 , 0 xdc0, 12 , 13 , 14 ), /* ms2 dat3 */
MTK_PIN_PUPD_SPEC_SR(249 , 0 x140, 0 , 1 , 2 ), /* ms0e rstb */
MTK_PIN_PUPD_SPEC_SR(250 , 0 x130, 12 , 13 , 14 ), /* ms0e dat7 */
MTK_PIN_PUPD_SPEC_SR(251 , 0 x130, 8 , 9 , 10 ), /* ms0e dat6 */
MTK_PIN_PUPD_SPEC_SR(252 , 0 x130, 4 , 5 , 6 ), /* ms0e dat5 */
MTK_PIN_PUPD_SPEC_SR(253 , 0 x130, 0 , 1 , 2 ), /* ms0e dat4 */
MTK_PIN_PUPD_SPEC_SR(254 , 0 xf40, 12 , 13 , 14 ), /* ms0e dat3 */
MTK_PIN_PUPD_SPEC_SR(255 , 0 xf40, 8 , 9 , 10 ), /* ms0e dat2 */
MTK_PIN_PUPD_SPEC_SR(256 , 0 xf40, 4 , 5 , 6 ), /* ms0e dat1 */
MTK_PIN_PUPD_SPEC_SR(257 , 0 xf40, 0 , 1 , 2 ), /* ms0e dat0 */
MTK_PIN_PUPD_SPEC_SR(258 , 0 xcb0, 8 , 9 , 10 ), /* ms0e cmd */
MTK_PIN_PUPD_SPEC_SR(259 , 0 xc90, 8 , 9 , 10 ), /* ms0e clk */
MTK_PIN_PUPD_SPEC_SR(261 , 0 x140, 8 , 9 , 10 ), /* ms1 ins */
};
static const struct mtk_pin_ies_smt_set mt2701_ies_set[] = {
MTK_PIN_IES_SMT_SPEC(0 , 6 , 0 xb20, 0 ),
MTK_PIN_IES_SMT_SPEC(7 , 9 , 0 xb20, 1 ),
MTK_PIN_IES_SMT_SPEC(10 , 13 , 0 xb30, 3 ),
MTK_PIN_IES_SMT_SPEC(14 , 15 , 0 xb30, 13 ),
MTK_PIN_IES_SMT_SPEC(16 , 17 , 0 xb40, 7 ),
MTK_PIN_IES_SMT_SPEC(18 , 21 , 0 xb40, 13 ),
MTK_PIN_IES_SMT_SPEC(22 , 26 , 0 xb40, 13 ),
MTK_PIN_IES_SMT_SPEC(27 , 29 , 0 xb40, 13 ),
MTK_PIN_IES_SMT_SPEC(30 , 32 , 0 xb40, 7 ),
MTK_PIN_IES_SMT_SPEC(33 , 37 , 0 xb40, 13 ),
MTK_PIN_IES_SMT_SPEC(38 , 38 , 0 xb20, 13 ),
MTK_PIN_IES_SMT_SPEC(39 , 42 , 0 xb40, 13 ),
MTK_PIN_IES_SMT_SPEC(43 , 45 , 0 xb20, 10 ),
MTK_PIN_IES_SMT_SPEC(47 , 48 , 0 xb20, 11 ),
MTK_PIN_IES_SMT_SPEC(49 , 49 , 0 xb20, 12 ),
MTK_PIN_IES_SMT_SPEC(50 , 52 , 0 xb20, 13 ),
MTK_PIN_IES_SMT_SPEC(53 , 56 , 0 xb20, 14 ),
MTK_PIN_IES_SMT_SPEC(57 , 58 , 0 xb20, 15 ),
MTK_PIN_IES_SMT_SPEC(59 , 59 , 0 xb30, 10 ),
MTK_PIN_IES_SMT_SPEC(60 , 62 , 0 xb30, 0 ),
MTK_PIN_IES_SMT_SPEC(63 , 65 , 0 xb30, 1 ),
MTK_PIN_IES_SMT_SPEC(66 , 71 , 0 xb30, 2 ),
MTK_PIN_IES_SMT_SPEC(72 , 74 , 0 xb20, 12 ),
MTK_PIN_IES_SMT_SPEC(75 , 76 , 0 xb30, 3 ),
MTK_PIN_IES_SMT_SPEC(77 , 78 , 0 xb30, 4 ),
MTK_PIN_IES_SMT_SPEC(79 , 82 , 0 xb30, 5 ),
MTK_PIN_IES_SMT_SPEC(83 , 84 , 0 xb30, 2 ),
MTK_PIN_IES_SMT_SPEC(85 , 85 , 0 xda0, 4 ),
MTK_PIN_IES_SMT_SPEC(86 , 86 , 0 xd90, 4 ),
MTK_PIN_IES_SMT_SPEC(87 , 90 , 0 xdb0, 4 ),
MTK_PIN_IES_SMT_SPEC(101 , 104 , 0 xb30, 6 ),
MTK_PIN_IES_SMT_SPEC(105 , 105 , 0 xd40, 4 ),
MTK_PIN_IES_SMT_SPEC(106 , 106 , 0 xd30, 4 ),
MTK_PIN_IES_SMT_SPEC(107 , 110 , 0 xd50, 4 ),
MTK_PIN_IES_SMT_SPEC(111 , 115 , 0 xce0, 4 ),
MTK_PIN_IES_SMT_SPEC(116 , 116 , 0 xcd0, 4 ),
MTK_PIN_IES_SMT_SPEC(117 , 117 , 0 xcc0, 4 ),
MTK_PIN_IES_SMT_SPEC(118 , 121 , 0 xce0, 4 ),
MTK_PIN_IES_SMT_SPEC(122 , 125 , 0 xb30, 7 ),
MTK_PIN_IES_SMT_SPEC(126 , 126 , 0 xb20, 12 ),
MTK_PIN_IES_SMT_SPEC(127 , 142 , 0 xb30, 9 ),
MTK_PIN_IES_SMT_SPEC(143 , 160 , 0 xb30, 10 ),
MTK_PIN_IES_SMT_SPEC(161 , 168 , 0 xb30, 12 ),
MTK_PIN_IES_SMT_SPEC(169 , 183 , 0 xb30, 10 ),
MTK_PIN_IES_SMT_SPEC(184 , 186 , 0 xb30, 9 ),
MTK_PIN_IES_SMT_SPEC(187 , 187 , 0 xb30, 14 ),
MTK_PIN_IES_SMT_SPEC(188 , 188 , 0 xb20, 13 ),
MTK_PIN_IES_SMT_SPEC(189 , 193 , 0 xb30, 15 ),
MTK_PIN_IES_SMT_SPEC(194 , 198 , 0 xb40, 0 ),
MTK_PIN_IES_SMT_SPEC(199 , 199 , 0 xb20, 1 ),
MTK_PIN_IES_SMT_SPEC(200 , 202 , 0 xb40, 1 ),
MTK_PIN_IES_SMT_SPEC(203 , 207 , 0 xb40, 2 ),
MTK_PIN_IES_SMT_SPEC(208 , 209 , 0 xb40, 3 ),
MTK_PIN_IES_SMT_SPEC(210 , 210 , 0 xb40, 4 ),
MTK_PIN_IES_SMT_SPEC(211 , 235 , 0 xb40, 5 ),
MTK_PIN_IES_SMT_SPEC(236 , 241 , 0 xb40, 6 ),
MTK_PIN_IES_SMT_SPEC(242 , 243 , 0 xb40, 7 ),
MTK_PIN_IES_SMT_SPEC(244 , 247 , 0 xb40, 8 ),
MTK_PIN_IES_SMT_SPEC(248 , 248 , 0 xb40, 9 ),
MTK_PIN_IES_SMT_SPEC(249 , 257 , 0 xfc0, 4 ),
MTK_PIN_IES_SMT_SPEC(258 , 258 , 0 xcb0, 4 ),
MTK_PIN_IES_SMT_SPEC(259 , 259 , 0 xc90, 4 ),
MTK_PIN_IES_SMT_SPEC(260 , 260 , 0 x3a0, 4 ),
MTK_PIN_IES_SMT_SPEC(261 , 261 , 0 xd50, 4 ),
MTK_PIN_IES_SMT_SPEC(262 , 277 , 0 xb40, 12 ),
MTK_PIN_IES_SMT_SPEC(278 , 278 , 0 xb40, 13 ),
};
static const struct mtk_pin_ies_smt_set mt2701_smt_set[] = {
MTK_PIN_IES_SMT_SPEC(0 , 6 , 0 xb50, 0 ),
MTK_PIN_IES_SMT_SPEC(7 , 9 , 0 xb50, 1 ),
MTK_PIN_IES_SMT_SPEC(10 , 13 , 0 xb60, 3 ),
MTK_PIN_IES_SMT_SPEC(14 , 15 , 0 xb60, 13 ),
MTK_PIN_IES_SMT_SPEC(16 , 17 , 0 xb70, 7 ),
MTK_PIN_IES_SMT_SPEC(18 , 21 , 0 xb70, 13 ),
MTK_PIN_IES_SMT_SPEC(22 , 26 , 0 xb70, 13 ),
MTK_PIN_IES_SMT_SPEC(27 , 29 , 0 xb70, 13 ),
MTK_PIN_IES_SMT_SPEC(30 , 32 , 0 xb70, 7 ),
MTK_PIN_IES_SMT_SPEC(33 , 37 , 0 xb70, 13 ),
MTK_PIN_IES_SMT_SPEC(38 , 38 , 0 xb50, 13 ),
MTK_PIN_IES_SMT_SPEC(39 , 42 , 0 xb70, 13 ),
MTK_PIN_IES_SMT_SPEC(43 , 45 , 0 xb50, 10 ),
MTK_PIN_IES_SMT_SPEC(47 , 48 , 0 xb50, 11 ),
MTK_PIN_IES_SMT_SPEC(49 , 49 , 0 xb50, 12 ),
MTK_PIN_IES_SMT_SPEC(50 , 52 , 0 xb50, 13 ),
MTK_PIN_IES_SMT_SPEC(53 , 56 , 0 xb50, 14 ),
MTK_PIN_IES_SMT_SPEC(57 , 58 , 0 xb50, 15 ),
MTK_PIN_IES_SMT_SPEC(59 , 59 , 0 xb60, 10 ),
MTK_PIN_IES_SMT_SPEC(60 , 62 , 0 xb60, 0 ),
MTK_PIN_IES_SMT_SPEC(63 , 65 , 0 xb60, 1 ),
MTK_PIN_IES_SMT_SPEC(66 , 71 , 0 xb60, 2 ),
MTK_PIN_IES_SMT_SPEC(72 , 74 , 0 xb50, 12 ),
MTK_PIN_IES_SMT_SPEC(75 , 76 , 0 xb60, 3 ),
MTK_PIN_IES_SMT_SPEC(77 , 78 , 0 xb60, 4 ),
MTK_PIN_IES_SMT_SPEC(79 , 82 , 0 xb60, 5 ),
MTK_PIN_IES_SMT_SPEC(83 , 84 , 0 xb60, 2 ),
MTK_PIN_IES_SMT_SPEC(85 , 85 , 0 xda0, 11 ),
MTK_PIN_IES_SMT_SPEC(86 , 86 , 0 xd90, 11 ),
MTK_PIN_IES_SMT_SPEC(87 , 87 , 0 xdc0, 3 ),
MTK_PIN_IES_SMT_SPEC(88 , 88 , 0 xdc0, 7 ),
MTK_PIN_IES_SMT_SPEC(89 , 89 , 0 xdc0, 11 ),
MTK_PIN_IES_SMT_SPEC(90 , 90 , 0 xdc0, 15 ),
MTK_PIN_IES_SMT_SPEC(101 , 104 , 0 xb60, 6 ),
MTK_PIN_IES_SMT_SPEC(105 , 105 , 0 xd40, 11 ),
MTK_PIN_IES_SMT_SPEC(106 , 106 , 0 xd30, 11 ),
MTK_PIN_IES_SMT_SPEC(107 , 107 , 0 xd60, 3 ),
MTK_PIN_IES_SMT_SPEC(108 , 108 , 0 xd60, 7 ),
MTK_PIN_IES_SMT_SPEC(109 , 109 , 0 xd60, 11 ),
MTK_PIN_IES_SMT_SPEC(110 , 110 , 0 xd60, 15 ),
MTK_PIN_IES_SMT_SPEC(111 , 111 , 0 xd00, 15 ),
MTK_PIN_IES_SMT_SPEC(112 , 112 , 0 xd00, 11 ),
MTK_PIN_IES_SMT_SPEC(113 , 113 , 0 xd00, 7 ),
MTK_PIN_IES_SMT_SPEC(114 , 114 , 0 xd00, 3 ),
MTK_PIN_IES_SMT_SPEC(115 , 115 , 0 xd10, 3 ),
MTK_PIN_IES_SMT_SPEC(116 , 116 , 0 xcd0, 11 ),
MTK_PIN_IES_SMT_SPEC(117 , 117 , 0 xcc0, 11 ),
MTK_PIN_IES_SMT_SPEC(118 , 118 , 0 xcf0, 15 ),
MTK_PIN_IES_SMT_SPEC(119 , 119 , 0 xcf0, 11 ),
MTK_PIN_IES_SMT_SPEC(120 , 120 , 0 xcf0, 7 ),
MTK_PIN_IES_SMT_SPEC(121 , 121 , 0 xcf0, 3 ),
MTK_PIN_IES_SMT_SPEC(122 , 125 , 0 xb60, 7 ),
MTK_PIN_IES_SMT_SPEC(126 , 126 , 0 xb50, 12 ),
MTK_PIN_IES_SMT_SPEC(127 , 142 , 0 xb60, 9 ),
MTK_PIN_IES_SMT_SPEC(143 , 160 , 0 xb60, 10 ),
MTK_PIN_IES_SMT_SPEC(161 , 168 , 0 xb60, 12 ),
MTK_PIN_IES_SMT_SPEC(169 , 183 , 0 xb60, 10 ),
MTK_PIN_IES_SMT_SPEC(184 , 186 , 0 xb60, 9 ),
MTK_PIN_IES_SMT_SPEC(187 , 187 , 0 xb60, 14 ),
MTK_PIN_IES_SMT_SPEC(188 , 188 , 0 xb50, 13 ),
MTK_PIN_IES_SMT_SPEC(189 , 193 , 0 xb60, 15 ),
MTK_PIN_IES_SMT_SPEC(194 , 198 , 0 xb70, 0 ),
MTK_PIN_IES_SMT_SPEC(199 , 199 , 0 xb50, 1 ),
MTK_PIN_IES_SMT_SPEC(200 , 202 , 0 xb70, 1 ),
MTK_PIN_IES_SMT_SPEC(203 , 207 , 0 xb70, 2 ),
MTK_PIN_IES_SMT_SPEC(208 , 209 , 0 xb70, 3 ),
MTK_PIN_IES_SMT_SPEC(210 , 210 , 0 xb70, 4 ),
MTK_PIN_IES_SMT_SPEC(211 , 235 , 0 xb70, 5 ),
MTK_PIN_IES_SMT_SPEC(236 , 241 , 0 xb70, 6 ),
MTK_PIN_IES_SMT_SPEC(242 , 243 , 0 xb70, 7 ),
MTK_PIN_IES_SMT_SPEC(244 , 247 , 0 xb70, 8 ),
MTK_PIN_IES_SMT_SPEC(248 , 248 , 0 xb70, 9 ),
MTK_PIN_IES_SMT_SPEC(249 , 249 , 0 x140, 3 ),
MTK_PIN_IES_SMT_SPEC(250 , 250 , 0 x130, 15 ),
MTK_PIN_IES_SMT_SPEC(251 , 251 , 0 x130, 11 ),
MTK_PIN_IES_SMT_SPEC(252 , 252 , 0 x130, 7 ),
MTK_PIN_IES_SMT_SPEC(253 , 253 , 0 x130, 3 ),
MTK_PIN_IES_SMT_SPEC(254 , 254 , 0 xf40, 15 ),
MTK_PIN_IES_SMT_SPEC(255 , 255 , 0 xf40, 11 ),
MTK_PIN_IES_SMT_SPEC(256 , 256 , 0 xf40, 7 ),
MTK_PIN_IES_SMT_SPEC(257 , 257 , 0 xf40, 3 ),
MTK_PIN_IES_SMT_SPEC(258 , 258 , 0 xcb0, 11 ),
MTK_PIN_IES_SMT_SPEC(259 , 259 , 0 xc90, 11 ),
MTK_PIN_IES_SMT_SPEC(260 , 260 , 0 x3a0, 11 ),
MTK_PIN_IES_SMT_SPEC(261 , 261 , 0 x0b0, 3 ),
MTK_PIN_IES_SMT_SPEC(262 , 277 , 0 xb70, 12 ),
MTK_PIN_IES_SMT_SPEC(278 , 278 , 0 xb70, 13 ),
};
static const struct mtk_spec_pinmux_set mt2701_spec_pinmux[] = {
MTK_PINMUX_SPEC(22 , 0 xb10, 3 ),
MTK_PINMUX_SPEC(23 , 0 xb10, 4 ),
MTK_PINMUX_SPEC(24 , 0 xb10, 5 ),
MTK_PINMUX_SPEC(29 , 0 xb10, 9 ),
MTK_PINMUX_SPEC(208 , 0 xb10, 7 ),
MTK_PINMUX_SPEC(209 , 0 xb10, 8 ),
MTK_PINMUX_SPEC(203 , 0 xf20, 0 ),
MTK_PINMUX_SPEC(204 , 0 xf20, 1 ),
MTK_PINMUX_SPEC(249 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(250 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(251 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(252 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(253 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(254 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(255 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(256 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(257 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(258 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(259 , 0 xef0, 0 ),
MTK_PINMUX_SPEC(260 , 0 xef0, 0 ),
};
static void mt2701_spec_pinmux_set(struct regmap *reg, unsigned int pin,
unsigned int mode)
{
unsigned int i, value, mask;
unsigned int info_num = ARRAY_SIZE(mt2701_spec_pinmux);
unsigned int spec_flag;
for (i = 0 ; i < info_num; i++) {
if (pin == mt2701_spec_pinmux[i].pin)
break ;
}
if (i == info_num)
return ;
spec_flag = (mode >> 3 );
mask = BIT(mt2701_spec_pinmux[i].bit);
if (!spec_flag)
value = mask;
else
value = 0 ;
regmap_update_bits(reg, mt2701_spec_pinmux[i].offset, mask, value);
}
static void mt2701_spec_dir_set(unsigned int *reg_addr, unsigned int pin)
{
if (pin > 175 )
*reg_addr += 0 x10;
}
static const struct mtk_pinctrl_devdata mt2701_pinctrl_data = {
.pins = mtk_pins_mt2701,
.npins = ARRAY_SIZE(mtk_pins_mt2701),
.grp_desc = mt2701_drv_grp,
.n_grp_cls = ARRAY_SIZE(mt2701_drv_grp),
.pin_drv_grp = mt2701_pin_drv,
.n_pin_drv_grps = ARRAY_SIZE(mt2701_pin_drv),
.spec_ies = mt2701_ies_set,
.n_spec_ies = ARRAY_SIZE(mt2701_ies_set),
.spec_pupd = mt2701_spec_pupd,
.n_spec_pupd = ARRAY_SIZE(mt2701_spec_pupd),
.spec_smt = mt2701_smt_set,
.n_spec_smt = ARRAY_SIZE(mt2701_smt_set),
.spec_pull_set = mtk_pctrl_spec_pull_set_samereg,
.spec_ies_smt_set = mtk_pconf_spec_set_ies_smt_range,
.spec_pinmux_set = mt2701_spec_pinmux_set,
.spec_dir_set = mt2701_spec_dir_set,
.dir_offset = 0 x0000,
.pullen_offset = 0 x0150,
.pullsel_offset = 0 x0280,
.dout_offset = 0 x0500,
.din_offset = 0 x0630,
.pinmux_offset = 0 x0760,
.type1_start = 280 ,
.type1_end = 280 ,
.port_shf = 4 ,
.port_mask = 0 x1f,
.port_align = 4 ,
.mode_mask = 0 xf,
.mode_per_reg = 5 ,
.mode_shf = 4 ,
.eint_hw = {
.port_mask = 6 ,
.ports = 6 ,
.ap_num = 169 ,
.db_cnt = 16 ,
.db_time = debounce_time_mt2701,
},
};
static const struct of_device_id mt2701_pctrl_match[] = {
{ .compatible = "mediatek,mt2701-pinctrl" , .data = &mt2701_pinctrl_data },
{ .compatible = "mediatek,mt7623-pinctrl" , .data = &mt2701_pinctrl_data },
{}
};
MODULE_DEVICE_TABLE(of, mt2701_pctrl_match);
static struct platform_driver mtk_pinctrl_driver = {
.probe = mtk_pctrl_common_probe,
.driver = {
.name = "mediatek-mt2701-pinctrl" ,
.of_match_table = mt2701_pctrl_match,
.pm = pm_sleep_ptr(&mtk_eint_pm_ops),
},
};
static int __init mtk_pinctrl_init(void )
{
return platform_driver_register(&mtk_pinctrl_driver);
}
arch_initcall(mtk_pinctrl_init);
Messung V0.5 in Prozent C=96 H=100 G=97