162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2015 MediaTek Inc. 462306a36Sopenharmony_ci * Author: Hongzhou.Yang <hongzhou.yang@mediatek.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/init.h> 862306a36Sopenharmony_ci#include <linux/platform_device.h> 962306a36Sopenharmony_ci#include <linux/of.h> 1062306a36Sopenharmony_ci#include <linux/pinctrl/pinctrl.h> 1162306a36Sopenharmony_ci#include <linux/pinctrl/pinconf-generic.h> 1262306a36Sopenharmony_ci#include <linux/mfd/mt6397/core.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include "pinctrl-mtk-common.h" 1562306a36Sopenharmony_ci#include "pinctrl-mtk-mt6397.h" 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define MT6397_PIN_REG_BASE 0xc000 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic const struct mtk_pinctrl_devdata mt6397_pinctrl_data = { 2062306a36Sopenharmony_ci .pins = mtk_pins_mt6397, 2162306a36Sopenharmony_ci .npins = ARRAY_SIZE(mtk_pins_mt6397), 2262306a36Sopenharmony_ci .dir_offset = (MT6397_PIN_REG_BASE + 0x000), 2362306a36Sopenharmony_ci .ies_offset = MTK_PINCTRL_NOT_SUPPORT, 2462306a36Sopenharmony_ci .smt_offset = MTK_PINCTRL_NOT_SUPPORT, 2562306a36Sopenharmony_ci .pullen_offset = (MT6397_PIN_REG_BASE + 0x020), 2662306a36Sopenharmony_ci .pullsel_offset = (MT6397_PIN_REG_BASE + 0x040), 2762306a36Sopenharmony_ci .dout_offset = (MT6397_PIN_REG_BASE + 0x080), 2862306a36Sopenharmony_ci .din_offset = (MT6397_PIN_REG_BASE + 0x0a0), 2962306a36Sopenharmony_ci .pinmux_offset = (MT6397_PIN_REG_BASE + 0x0c0), 3062306a36Sopenharmony_ci .type1_start = 41, 3162306a36Sopenharmony_ci .type1_end = 41, 3262306a36Sopenharmony_ci .port_shf = 3, 3362306a36Sopenharmony_ci .port_mask = 0x3, 3462306a36Sopenharmony_ci .port_align = 2, 3562306a36Sopenharmony_ci .mode_mask = 0xf, 3662306a36Sopenharmony_ci .mode_per_reg = 5, 3762306a36Sopenharmony_ci .mode_shf = 4, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic int mt6397_pinctrl_probe(struct platform_device *pdev) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci struct mt6397_chip *mt6397; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci mt6397 = dev_get_drvdata(pdev->dev.parent); 4562306a36Sopenharmony_ci return mtk_pctrl_init(pdev, &mt6397_pinctrl_data, mt6397->regmap); 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistatic const struct of_device_id mt6397_pctrl_match[] = { 4962306a36Sopenharmony_ci { .compatible = "mediatek,mt6397-pinctrl", }, 5062306a36Sopenharmony_ci { } 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistatic struct platform_driver mtk_pinctrl_driver = { 5462306a36Sopenharmony_ci .probe = mt6397_pinctrl_probe, 5562306a36Sopenharmony_ci .driver = { 5662306a36Sopenharmony_ci .name = "mediatek-mt6397-pinctrl", 5762306a36Sopenharmony_ci .of_match_table = mt6397_pctrl_match, 5862306a36Sopenharmony_ci }, 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cibuiltin_platform_driver(mtk_pinctrl_driver); 62