1
0
This repository has been archived on 2025-07-31. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
orange_kernel/drivers/pinctrl/ky/pinctrl-x1pro.c
2025-03-18 10:29:27 +08:00

144 lines
3.3 KiB
C

// SPDX-License-Identifier: GPL-2.0+
//
// Ky x1-pro pinctrl driver
//
// Copyright (c) 2023, ky Corporation.
#include <linux/init.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/of_device.h>
#include "pinctrl-ky.h"
#include <dt-bindings/pinctrl/x1-pro-pinctrl.h>
static const struct pinctrl_pin_desc x1pro_pins[] = {
KY_PINCTRL_PIN(GPIOA0),
KY_PINCTRL_PIN(GPIOA1),
KY_PINCTRL_PIN(GPIOA2),
KY_PINCTRL_PIN(GPIOA3),
KY_PINCTRL_PIN(GPIOA4),
KY_PINCTRL_PIN(GPIOA5),
KY_PINCTRL_PIN(GPIOA6),
KY_PINCTRL_PIN(GPIOA7),
KY_PINCTRL_PIN(GPIOA8),
KY_PINCTRL_PIN(GPIOA9),
KY_PINCTRL_PIN(GPIOA10),
KY_PINCTRL_PIN(GPIOA11),
KY_PINCTRL_PIN(GPIOA12),
KY_PINCTRL_PIN(GPIOA13),
KY_PINCTRL_PIN(GPIOA14),
KY_PINCTRL_PIN(GPIOA15),
KY_PINCTRL_PIN(GPIOA16),
KY_PINCTRL_PIN(GPIOA17),
KY_PINCTRL_PIN(GPIOA18),
KY_PINCTRL_PIN(GPIOA19),
KY_PINCTRL_PIN(GPIOA20),
KY_PINCTRL_PIN(GPIOA21),
KY_PINCTRL_PIN(GPIOA22),
KY_PINCTRL_PIN(GPIOA23),
KY_PINCTRL_PIN(GPIOA24),
KY_PINCTRL_PIN(GPIOA25),
KY_PINCTRL_PIN(GPIOA26),
KY_PINCTRL_PIN(GPIOA27),
KY_PINCTRL_PIN(GPIOA28),
KY_PINCTRL_PIN(GPIOA29),
KY_PINCTRL_PIN(GPIOB0),
KY_PINCTRL_PIN(GPIOB1),
KY_PINCTRL_PIN(GPIOB2),
KY_PINCTRL_PIN(GPIOB3),
KY_PINCTRL_PIN(GPIOB4),
KY_PINCTRL_PIN(GPIOB5),
KY_PINCTRL_PIN(GPIOB6),
KY_PINCTRL_PIN(GPIOB7),
KY_PINCTRL_PIN(GPIOB8),
KY_PINCTRL_PIN(GPIOB9),
KY_PINCTRL_PIN(GPIOB10),
KY_PINCTRL_PIN(GPIOB11),
KY_PINCTRL_PIN(GPIOB12),
KY_PINCTRL_PIN(GPIOB13),
KY_PINCTRL_PIN(GPIOB14),
KY_PINCTRL_PIN(GPIOB15),
KY_PINCTRL_PIN(GPIOB16),
KY_PINCTRL_PIN(GPIOB17),
KY_PINCTRL_PIN(GPIOB18),
KY_PINCTRL_PIN(GPIOB19),
KY_PINCTRL_PIN(GPIOB20),
KY_PINCTRL_PIN(GPIOB21),
KY_PINCTRL_PIN(GPIOB22),
KY_PINCTRL_PIN(GPIOB23),
KY_PINCTRL_PIN(GPIOB24),
KY_PINCTRL_PIN(GPIOC0),
KY_PINCTRL_PIN(GPIOC1),
KY_PINCTRL_PIN(GPIOC2),
KY_PINCTRL_PIN(GPIOC3),
KY_PINCTRL_PIN(GPIOC4),
KY_PINCTRL_PIN(GPIOC5),
KY_PINCTRL_PIN(GPIOC6),
KY_PINCTRL_PIN(GPIOC7),
KY_PINCTRL_PIN(GPIOC8),
KY_PINCTRL_PIN(GPIOC9),
KY_PINCTRL_PIN(GPIOC10),
KY_PINCTRL_PIN(GPIOC11),
KY_PINCTRL_PIN(GPIOC12),
KY_PINCTRL_PIN(GPIOC13),
KY_PINCTRL_PIN(GPIOC14),
KY_PINCTRL_PIN(GPIOC15),
KY_PINCTRL_PIN(GPIOC16),
KY_PINCTRL_PIN(GPIOC17),
KY_PINCTRL_PIN(GPIOC18),
KY_PINCTRL_PIN(GPIOC19),
KY_PINCTRL_PIN(GPIOC20),
KY_PINCTRL_PIN(GPIOC21),
KY_PINCTRL_PIN(GPIOC22),
KY_PINCTRL_PIN(GPIOC23),
KY_PINCTRL_PIN(GPIOC24),
};
static const struct ky_regs x1pro_regs = {
.cfg = 0x000,
.reg_len = 0x80,
};
static const struct ky_pin_conf x1pro_pin_conf = {
.fs_shift = 0,
.fs_width = 2,
.od_shift = 4,
.pe_shift = 8,
.pull_shift = 9,
.ds_shift = 12,
.st_shift = 16,
.rte_shift = 20,
};
static struct ky_pinctrl_soc_data x1pro_pinctrl_data = {
.regs = &x1pro_regs,
.pinconf = &x1pro_pin_conf,
.pins = x1pro_pins,
.npins = ARRAY_SIZE(x1pro_pins),
};
static int x1pro_pinctrl_probe(struct platform_device *pdev)
{
return ky_pinctrl_probe(pdev, &x1pro_pinctrl_data);
}
static const struct of_device_id x1pro_pinctrl_of_match[] = {
{ .compatible = "ky,x1pro-pinctrl", },
{ /* sentinel */ }
};
static struct platform_driver x1pro_pinctrl_driver = {
.driver = {
.name = "x1pro-pinctrl",
.suppress_bind_attrs = true,
.of_match_table = x1pro_pinctrl_of_match,
},
.probe = x1pro_pinctrl_probe,
};
static int __init x1pro_pinctrl_init(void)
{
return platform_driver_register(&x1pro_pinctrl_driver);
}
postcore_initcall(x1pro_pinctrl_init);