brintos

brintos / linux-shallow public Read only

0
0
Text · 5.1 KiB · 77bd4d1 Raw
141 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2 3#include <asm/mach-ralink/ralink_regs.h>4#include <asm/mach-ralink/rt305x.h>5#include <linux/module.h>6#include <linux/platform_device.h>7#include <linux/of.h>8#include "pinctrl-mtmips.h"9 10#define RT305X_GPIO_MODE_UART0_SHIFT	211#define RT305X_GPIO_MODE_UART0_MASK	0x712#define RT305X_GPIO_MODE_UART0(x)	((x) << RT305X_GPIO_MODE_UART0_SHIFT)13#define RT305X_GPIO_MODE_UARTF		014#define RT305X_GPIO_MODE_PCM_UARTF	115#define RT305X_GPIO_MODE_PCM_I2S	216#define RT305X_GPIO_MODE_I2S_UARTF	317#define RT305X_GPIO_MODE_PCM_GPIO	418#define RT305X_GPIO_MODE_GPIO_UARTF	519#define RT305X_GPIO_MODE_GPIO_I2S	620#define RT305X_GPIO_MODE_GPIO		721 22#define RT305X_GPIO_MODE_I2C		023#define RT305X_GPIO_MODE_SPI		124#define RT305X_GPIO_MODE_UART1		525#define RT305X_GPIO_MODE_JTAG		626#define RT305X_GPIO_MODE_MDIO		727#define RT305X_GPIO_MODE_SDRAM		828#define RT305X_GPIO_MODE_RGMII		929#define RT5350_GPIO_MODE_PHY_LED	1430#define RT5350_GPIO_MODE_SPI_CS1	2131#define RT3352_GPIO_MODE_LNA		1832#define RT3352_GPIO_MODE_PA		2033 34static struct mtmips_pmx_func i2c_grp[] =  { FUNC("i2c", 0, 1, 2) };35static struct mtmips_pmx_func spi_grp[] = { FUNC("spi", 0, 3, 4) };36static struct mtmips_pmx_func uartf_grp[] = {37	FUNC("uartf", RT305X_GPIO_MODE_UARTF, 7, 8),38	FUNC("pcm uartf", RT305X_GPIO_MODE_PCM_UARTF, 7, 8),39	FUNC("pcm i2s", RT305X_GPIO_MODE_PCM_I2S, 7, 8),40	FUNC("i2s uartf", RT305X_GPIO_MODE_I2S_UARTF, 7, 8),41	FUNC("pcm gpio", RT305X_GPIO_MODE_PCM_GPIO, 11, 4),42	FUNC("gpio uartf", RT305X_GPIO_MODE_GPIO_UARTF, 7, 4),43	FUNC("gpio i2s", RT305X_GPIO_MODE_GPIO_I2S, 7, 4),44};45static struct mtmips_pmx_func uartlite_grp[] = { FUNC("uartlite", 0, 15, 2) };46static struct mtmips_pmx_func jtag_grp[] = { FUNC("jtag", 0, 17, 5) };47static struct mtmips_pmx_func mdio_grp[] = { FUNC("mdio", 0, 22, 2) };48static struct mtmips_pmx_func rt5350_led_grp[] = { FUNC("led", 0, 22, 5) };49static struct mtmips_pmx_func rt5350_cs1_grp[] = {50	FUNC("spi_cs1", 0, 27, 1),51	FUNC("wdg_cs1", 1, 27, 1),52};53static struct mtmips_pmx_func sdram_grp[] = { FUNC("sdram", 0, 24, 16) };54static struct mtmips_pmx_func rt3352_rgmii_grp[] = {55	FUNC("rgmii", 0, 24, 12)56};57static struct mtmips_pmx_func rgmii_grp[] = { FUNC("rgmii", 0, 40, 12) };58static struct mtmips_pmx_func rt3352_lna_grp[] = { FUNC("lna", 0, 36, 2) };59static struct mtmips_pmx_func rt3352_pa_grp[] = { FUNC("pa", 0, 38, 2) };60static struct mtmips_pmx_func rt3352_led_grp[] = { FUNC("led", 0, 40, 5) };61static struct mtmips_pmx_func rt3352_cs1_grp[] = {62	FUNC("spi_cs1", 0, 45, 1),63	FUNC("wdg_cs1", 1, 45, 1),64};65 66static struct mtmips_pmx_group rt3050_pinmux_data[] = {67	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),68	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),69	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,70		RT305X_GPIO_MODE_UART0_SHIFT),71	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),72	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),73	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),74	GRP("rgmii", rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),75	GRP("sdram", sdram_grp, 1, RT305X_GPIO_MODE_SDRAM),76	{ 0 }77};78 79static struct mtmips_pmx_group rt3352_pinmux_data[] = {80	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),81	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),82	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,83		RT305X_GPIO_MODE_UART0_SHIFT),84	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),85	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),86	GRP("mdio", mdio_grp, 1, RT305X_GPIO_MODE_MDIO),87	GRP("rgmii", rt3352_rgmii_grp, 1, RT305X_GPIO_MODE_RGMII),88	GRP("lna", rt3352_lna_grp, 1, RT3352_GPIO_MODE_LNA),89	GRP("pa", rt3352_pa_grp, 1, RT3352_GPIO_MODE_PA),90	GRP("led", rt3352_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),91	GRP("spi_cs1", rt3352_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),92	{ 0 }93};94 95static struct mtmips_pmx_group rt5350_pinmux_data[] = {96	GRP("i2c", i2c_grp, 1, RT305X_GPIO_MODE_I2C),97	GRP("spi", spi_grp, 1, RT305X_GPIO_MODE_SPI),98	GRP("uartf", uartf_grp, RT305X_GPIO_MODE_UART0_MASK,99		RT305X_GPIO_MODE_UART0_SHIFT),100	GRP("uartlite", uartlite_grp, 1, RT305X_GPIO_MODE_UART1),101	GRP("jtag", jtag_grp, 1, RT305X_GPIO_MODE_JTAG),102	GRP("led", rt5350_led_grp, 1, RT5350_GPIO_MODE_PHY_LED),103	GRP("spi_cs1", rt5350_cs1_grp, 2, RT5350_GPIO_MODE_SPI_CS1),104	{ 0 }105};106 107static int rt305x_pinctrl_probe(struct platform_device *pdev)108{109	if (soc_is_rt5350())110		return mtmips_pinctrl_init(pdev, rt5350_pinmux_data);111	else if (soc_is_rt305x() || soc_is_rt3350())112		return mtmips_pinctrl_init(pdev, rt3050_pinmux_data);113	else if (soc_is_rt3352())114		return mtmips_pinctrl_init(pdev, rt3352_pinmux_data);115	else116		return -EINVAL;117}118 119static const struct of_device_id rt305x_pinctrl_match[] = {120	{ .compatible = "ralink,rt305x-pinctrl" },121	{ .compatible = "ralink,rt3352-pinctrl" },122	{ .compatible = "ralink,rt5350-pinctrl" },123	{ .compatible = "ralink,rt2880-pinmux" },124	{}125};126MODULE_DEVICE_TABLE(of, rt305x_pinctrl_match);127 128static struct platform_driver rt305x_pinctrl_driver = {129	.probe = rt305x_pinctrl_probe,130	.driver = {131		.name = "rt305x-pinctrl",132		.of_match_table = rt305x_pinctrl_match,133	},134};135 136static int __init rt305x_pinctrl_init(void)137{138	return platform_driver_register(&rt305x_pinctrl_driver);139}140core_initcall_sync(rt305x_pinctrl_init);141