blob: 72b9b39884725b8ef1e9c72450ba5a55ad6c6efe [file] [log] [blame]
Masahiro Yamada7cd89062015-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 Yamada8721b512016-04-21 14:43:10 +090012static const struct uniphier_pinctrl_pin uniphier_pro5_pins[] = {
Masahiro Yamada7cd89062015-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};
26static const unsigned emmc_muxvals[] = {0, 0, 0, 0, 0, 0, 0};
27static const unsigned emmc_dat8_pins[] = {43, 44, 45, 46};
28static const unsigned emmc_dat8_muxvals[] = {0, 0, 0, 0};
29static const unsigned i2c0_pins[] = {112, 113};
30static const unsigned i2c0_muxvals[] = {0, 0};
31static const unsigned i2c1_pins[] = {114, 115};
32static const unsigned i2c1_muxvals[] = {0, 0};
33static const unsigned i2c2_pins[] = {116, 117};
34static const unsigned i2c2_muxvals[] = {0, 0};
35static const unsigned i2c3_pins[] = {118, 119};
36static const unsigned i2c3_muxvals[] = {0, 0};
37static const unsigned i2c5_pins[] = {87, 88};
38static const unsigned i2c5_muxvals[] = {2, 2};
39static const unsigned i2c5b_pins[] = {196, 197};
40static const unsigned i2c5b_muxvals[] = {2, 2};
41static const unsigned i2c5c_pins[] = {215, 216};
42static const unsigned i2c5c_muxvals[] = {2, 2};
43static const unsigned i2c6_pins[] = {101, 102};
44static const unsigned i2c6_muxvals[] = {2, 2};
45static const unsigned nand_pins[] = {19, 20, 21, 22, 23, 24, 25, 28, 29, 30,
46 31, 32, 33, 34, 35};
47static const unsigned nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
48 0, 0};
49static const unsigned nand_cs1_pins[] = {26, 27};
50static const unsigned nand_cs1_muxvals[] = {0, 0};
51static const unsigned sd_pins[] = {250, 251, 252, 253, 254, 255, 256, 257, 258};
52static const unsigned sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
53static const unsigned uart0_pins[] = {47, 48};
54static const unsigned uart0_muxvals[] = {0, 0};
55static const unsigned uart0b_pins[] = {227, 228};
56static const unsigned uart0b_muxvals[] = {3, 3};
57static const unsigned uart1_pins[] = {49, 50};
58static const unsigned uart1_muxvals[] = {0, 0};
59static const unsigned uart2_pins[] = {51, 52};
60static const unsigned uart2_muxvals[] = {0, 0};
61static const unsigned uart3_pins[] = {53, 54};
62static const unsigned uart3_muxvals[] = {0, 0};
63static const unsigned usb0_pins[] = {124, 125};
64static const unsigned usb0_muxvals[] = {0, 0};
65static const unsigned usb1_pins[] = {126, 127};
66static const unsigned usb1_muxvals[] = {0, 0};
67static const unsigned usb2_pins[] = {128, 129};
68static const unsigned usb2_muxvals[] = {0, 0};
69
Masahiro Yamada8721b512016-04-21 14:43:10 +090070static const struct uniphier_pinctrl_group uniphier_pro5_groups[] = {
Masahiro Yamada7cd89062015-09-11 20:17:36 +090071 UNIPHIER_PINCTRL_GROUP(emmc),
72 UNIPHIER_PINCTRL_GROUP(emmc_dat8),
73 UNIPHIER_PINCTRL_GROUP(i2c0),
74 UNIPHIER_PINCTRL_GROUP(i2c1),
75 UNIPHIER_PINCTRL_GROUP(i2c2),
76 UNIPHIER_PINCTRL_GROUP(i2c3),
77 UNIPHIER_PINCTRL_GROUP(i2c5),
78 UNIPHIER_PINCTRL_GROUP(i2c5b),
79 UNIPHIER_PINCTRL_GROUP(i2c5c),
80 UNIPHIER_PINCTRL_GROUP(i2c6),
81 UNIPHIER_PINCTRL_GROUP(nand),
82 UNIPHIER_PINCTRL_GROUP(nand_cs1),
83 UNIPHIER_PINCTRL_GROUP(sd),
84 UNIPHIER_PINCTRL_GROUP(uart0),
85 UNIPHIER_PINCTRL_GROUP(uart0b),
86 UNIPHIER_PINCTRL_GROUP(uart1),
87 UNIPHIER_PINCTRL_GROUP(uart2),
88 UNIPHIER_PINCTRL_GROUP(uart3),
89 UNIPHIER_PINCTRL_GROUP(usb0),
90 UNIPHIER_PINCTRL_GROUP(usb1),
91 UNIPHIER_PINCTRL_GROUP(usb2),
92};
93
Masahiro Yamada8721b512016-04-21 14:43:10 +090094static const char * const uniphier_pro5_functions[] = {
Masahiro Yamada7cd89062015-09-11 20:17:36 +090095 "emmc",
96 "i2c0",
97 "i2c1",
98 "i2c2",
99 "i2c3",
100 "i2c5",
101 "i2c6",
102 "nand",
103 "sd",
104 "uart0",
105 "uart1",
106 "uart2",
107 "uart3",
108 "usb0",
109 "usb1",
110 "usb2",
111};
112
Masahiro Yamada8721b512016-04-21 14:43:10 +0900113static struct uniphier_pinctrl_socdata uniphier_pro5_pinctrl_socdata = {
114 .pins = uniphier_pro5_pins,
115 .pins_count = ARRAY_SIZE(uniphier_pro5_pins),
116 .groups = uniphier_pro5_groups,
117 .groups_count = ARRAY_SIZE(uniphier_pro5_groups),
118 .functions = uniphier_pro5_functions,
119 .functions_count = ARRAY_SIZE(uniphier_pro5_functions),
Masahiro Yamada7a629ef2016-03-24 22:32:44 +0900120 .caps = UNIPHIER_PINCTRL_CAPS_DBGMUX_SEPARATE,
Masahiro Yamada7cd89062015-09-11 20:17:36 +0900121};
122
Masahiro Yamada8721b512016-04-21 14:43:10 +0900123static int uniphier_pro5_pinctrl_probe(struct udevice *dev)
Masahiro Yamada7cd89062015-09-11 20:17:36 +0900124{
Masahiro Yamada8721b512016-04-21 14:43:10 +0900125 return uniphier_pinctrl_probe(dev, &uniphier_pro5_pinctrl_socdata);
Masahiro Yamada7cd89062015-09-11 20:17:36 +0900126}
127
Masahiro Yamada8721b512016-04-21 14:43:10 +0900128static const struct udevice_id uniphier_pro5_pinctrl_match[] = {
Masahiro Yamada13d8ac32016-06-29 19:38:57 +0900129 { .compatible = "socionext,uniphier-pro5-pinctrl" },
Masahiro Yamada7cd89062015-09-11 20:17:36 +0900130 { /* sentinel */ }
131};
132
Masahiro Yamada8721b512016-04-21 14:43:10 +0900133U_BOOT_DRIVER(uniphier_pro5_pinctrl) = {
134 .name = "uniphier-pro5-pinctrl",
Masahiro Yamada7cd89062015-09-11 20:17:36 +0900135 .id = UCLASS_PINCTRL,
Masahiro Yamada8721b512016-04-21 14:43:10 +0900136 .of_match = of_match_ptr(uniphier_pro5_pinctrl_match),
137 .probe = uniphier_pro5_pinctrl_probe,
Masahiro Yamada7cd89062015-09-11 20:17:36 +0900138 .remove = uniphier_pinctrl_remove,
139 .priv_auto_alloc_size = sizeof(struct uniphier_pinctrl_priv),
140 .ops = &uniphier_pinctrl_ops,
141 .flags = DM_FLAG_PRE_RELOC,
142};