blob: 2c6b4f9d126e81befb98a7d6c2e9ec3daf31e5e4 [file] [log] [blame]
Masahiro Yamadab82ca822015-09-11 20:17:36 +09001/*
2 * Copyright (C) 2015 Masahiro Yamada <yamada.masahiro@socionext.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
7#include <dm/device.h>
8#include <dm/pinctrl.h>
9
10#include "pinctrl-uniphier.h"
11
Masahiro Yamadaac13ce42016-04-21 14:43:10 +090012static const struct uniphier_pinctrl_pin uniphier_pro5_pins[] = {
Masahiro Yamadab82ca822015-09-11 20:17:36 +090013 UNIPHIER_PINCTRL_PIN(47, 0),
14 UNIPHIER_PINCTRL_PIN(48, 0),
15 UNIPHIER_PINCTRL_PIN(49, 0),
16 UNIPHIER_PINCTRL_PIN(50, 0),
17 UNIPHIER_PINCTRL_PIN(53, 0),
18 UNIPHIER_PINCTRL_PIN(54, 0),
19 UNIPHIER_PINCTRL_PIN(87, 0),
20 UNIPHIER_PINCTRL_PIN(88, 0),
21 UNIPHIER_PINCTRL_PIN(101, 0),
22 UNIPHIER_PINCTRL_PIN(102, 0),
23};
24
25static const unsigned emmc_pins[] = {36, 37, 38, 39, 40, 41, 42};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090026static const int emmc_muxvals[] = {0, 0, 0, 0, 0, 0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090027static const unsigned emmc_dat8_pins[] = {43, 44, 45, 46};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090028static const int emmc_dat8_muxvals[] = {0, 0, 0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090029static const unsigned i2c0_pins[] = {112, 113};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090030static const int i2c0_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090031static const unsigned i2c1_pins[] = {114, 115};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090032static const int i2c1_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090033static const unsigned i2c2_pins[] = {116, 117};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090034static const int i2c2_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090035static const unsigned i2c3_pins[] = {118, 119};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090036static const int i2c3_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090037static const unsigned i2c5_pins[] = {87, 88};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090038static const int i2c5_muxvals[] = {2, 2};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090039static const unsigned i2c5b_pins[] = {196, 197};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090040static const int i2c5b_muxvals[] = {2, 2};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090041static const unsigned i2c5c_pins[] = {215, 216};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090042static const int i2c5c_muxvals[] = {2, 2};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090043static const unsigned i2c6_pins[] = {101, 102};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090044static const int i2c6_muxvals[] = {2, 2};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090045static const unsigned nand_pins[] = {19, 20, 21, 22, 23, 24, 25, 28, 29, 30,
46 31, 32, 33, 34, 35};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090047static const int nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090048static const unsigned nand_cs1_pins[] = {26, 27};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090049static const int nand_cs1_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090050static const unsigned sd_pins[] = {250, 251, 252, 253, 254, 255, 256, 257, 258};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090051static const int sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090052static const unsigned uart0_pins[] = {47, 48};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090053static const int uart0_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090054static const unsigned uart0b_pins[] = {227, 228};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090055static const int uart0b_muxvals[] = {3, 3};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090056static const unsigned uart1_pins[] = {49, 50};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090057static const int uart1_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090058static const unsigned uart2_pins[] = {51, 52};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090059static const int uart2_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090060static const unsigned uart3_pins[] = {53, 54};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090061static const int uart3_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090062static const unsigned usb0_pins[] = {124, 125};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090063static const int usb0_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090064static const unsigned usb1_pins[] = {126, 127};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090065static const int usb1_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090066static const unsigned usb2_pins[] = {128, 129};
Masahiro Yamada5e25b9d2016-06-29 19:38:59 +090067static const int usb2_muxvals[] = {0, 0};
Masahiro Yamadab82ca822015-09-11 20:17:36 +090068
Masahiro Yamadaac13ce42016-04-21 14:43:10 +090069static const struct uniphier_pinctrl_group uniphier_pro5_groups[] = {
Masahiro Yamadab82ca822015-09-11 20:17:36 +090070 UNIPHIER_PINCTRL_GROUP(emmc),
71 UNIPHIER_PINCTRL_GROUP(emmc_dat8),
72 UNIPHIER_PINCTRL_GROUP(i2c0),
73 UNIPHIER_PINCTRL_GROUP(i2c1),
74 UNIPHIER_PINCTRL_GROUP(i2c2),
75 UNIPHIER_PINCTRL_GROUP(i2c3),
76 UNIPHIER_PINCTRL_GROUP(i2c5),
77 UNIPHIER_PINCTRL_GROUP(i2c5b),
78 UNIPHIER_PINCTRL_GROUP(i2c5c),
79 UNIPHIER_PINCTRL_GROUP(i2c6),
80 UNIPHIER_PINCTRL_GROUP(nand),
81 UNIPHIER_PINCTRL_GROUP(nand_cs1),
82 UNIPHIER_PINCTRL_GROUP(sd),
83 UNIPHIER_PINCTRL_GROUP(uart0),
84 UNIPHIER_PINCTRL_GROUP(uart0b),
85 UNIPHIER_PINCTRL_GROUP(uart1),
86 UNIPHIER_PINCTRL_GROUP(uart2),
87 UNIPHIER_PINCTRL_GROUP(uart3),
88 UNIPHIER_PINCTRL_GROUP(usb0),
89 UNIPHIER_PINCTRL_GROUP(usb1),
90 UNIPHIER_PINCTRL_GROUP(usb2),
91};
92
Masahiro Yamadaac13ce42016-04-21 14:43:10 +090093static const char * const uniphier_pro5_functions[] = {
Masahiro Yamadab82ca822015-09-11 20:17:36 +090094 "emmc",
95 "i2c0",
96 "i2c1",
97 "i2c2",
98 "i2c3",
99 "i2c5",
100 "i2c6",
101 "nand",
102 "sd",
103 "uart0",
104 "uart1",
105 "uart2",
106 "uart3",
107 "usb0",
108 "usb1",
109 "usb2",
110};
111
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900112static struct uniphier_pinctrl_socdata uniphier_pro5_pinctrl_socdata = {
113 .pins = uniphier_pro5_pins,
114 .pins_count = ARRAY_SIZE(uniphier_pro5_pins),
115 .groups = uniphier_pro5_groups,
116 .groups_count = ARRAY_SIZE(uniphier_pro5_groups),
117 .functions = uniphier_pro5_functions,
118 .functions_count = ARRAY_SIZE(uniphier_pro5_functions),
Masahiro Yamada8cc92b92016-03-24 22:32:44 +0900119 .caps = UNIPHIER_PINCTRL_CAPS_DBGMUX_SEPARATE,
Masahiro Yamadab82ca822015-09-11 20:17:36 +0900120};
121
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900122static int uniphier_pro5_pinctrl_probe(struct udevice *dev)
Masahiro Yamadab82ca822015-09-11 20:17:36 +0900123{
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900124 return uniphier_pinctrl_probe(dev, &uniphier_pro5_pinctrl_socdata);
Masahiro Yamadab82ca822015-09-11 20:17:36 +0900125}
126
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900127static const struct udevice_id uniphier_pro5_pinctrl_match[] = {
Masahiro Yamada186c1332016-06-29 19:38:57 +0900128 { .compatible = "socionext,uniphier-pro5-pinctrl" },
Masahiro Yamadab82ca822015-09-11 20:17:36 +0900129 { /* sentinel */ }
130};
131
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900132U_BOOT_DRIVER(uniphier_pro5_pinctrl) = {
133 .name = "uniphier-pro5-pinctrl",
Masahiro Yamadab82ca822015-09-11 20:17:36 +0900134 .id = UCLASS_PINCTRL,
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900135 .of_match = of_match_ptr(uniphier_pro5_pinctrl_match),
136 .probe = uniphier_pro5_pinctrl_probe,
Masahiro Yamadab82ca822015-09-11 20:17:36 +0900137 .remove = uniphier_pinctrl_remove,
138 .priv_auto_alloc_size = sizeof(struct uniphier_pinctrl_priv),
139 .ops = &uniphier_pinctrl_ops,
140 .flags = DM_FLAG_PRE_RELOC,
141};