blob: 9ed7c74293690cf3f0e871344b5cae6c1816f044 [file] [log] [blame]
Masahiro Yamadaa3438122015-09-11 20:17:34 +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_pro4_pins[] = {
Masahiro Yamadaa3438122015-09-11 20:17:34 +090013};
14
15static const unsigned emmc_pins[] = {40, 41, 42, 43, 51, 52, 53};
16static const unsigned emmc_muxvals[] = {1, 1, 1, 1, 1, 1, 1};
17static const unsigned emmc_dat8_pins[] = {44, 45, 46, 47};
18static const unsigned emmc_dat8_muxvals[] = {1, 1, 1, 1};
19static const unsigned i2c0_pins[] = {142, 143};
20static const unsigned i2c0_muxvals[] = {0, 0};
21static const unsigned i2c1_pins[] = {144, 145};
22static const unsigned i2c1_muxvals[] = {0, 0};
23static const unsigned i2c2_pins[] = {146, 147};
24static const unsigned i2c2_muxvals[] = {0, 0};
25static const unsigned i2c3_pins[] = {148, 149};
26static const unsigned i2c3_muxvals[] = {0, 0};
27static const unsigned i2c6_pins[] = {308, 309};
28static const unsigned i2c6_muxvals[] = {6, 6};
29static const unsigned nand_pins[] = {40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
30 50, 51, 52, 53, 54};
31static const unsigned nand_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32 0, 0};
33static const unsigned nand_cs1_pins[] = {131, 132};
34static const unsigned nand_cs1_muxvals[] = {1, 1};
35static const unsigned sd_pins[] = {150, 151, 152, 153, 154, 155, 156, 157, 158};
36static const unsigned sd_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
37static const unsigned sd1_pins[] = {319, 320, 321, 322, 323, 324, 325, 326,
38 327};
39static const unsigned sd1_muxvals[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
40static const unsigned uart0_pins[] = {127, 128};
41static const unsigned uart0_muxvals[] = {0, 0};
42static const unsigned uart1_pins[] = {129, 130};
43static const unsigned uart1_muxvals[] = {0, 0};
44static const unsigned uart2_pins[] = {131, 132};
45static const unsigned uart2_muxvals[] = {0, 0};
46static const unsigned uart3_pins[] = {88, 89};
47static const unsigned uart3_muxvals[] = {2, 2};
48static const unsigned usb0_pins[] = {180, 181};
49static const unsigned usb0_muxvals[] = {0, 0};
50static const unsigned usb1_pins[] = {182, 183};
51static const unsigned usb1_muxvals[] = {0, 0};
52static const unsigned usb2_pins[] = {184, 185};
53static const unsigned usb2_muxvals[] = {0, 0};
54static const unsigned usb3_pins[] = {186, 187};
55static const unsigned usb3_muxvals[] = {0, 0};
56
Masahiro Yamadaac13ce42016-04-21 14:43:10 +090057static const struct uniphier_pinctrl_group uniphier_pro4_groups[] = {
Masahiro Yamadaa3438122015-09-11 20:17:34 +090058 UNIPHIER_PINCTRL_GROUP(emmc),
59 UNIPHIER_PINCTRL_GROUP(emmc_dat8),
60 UNIPHIER_PINCTRL_GROUP(i2c0),
61 UNIPHIER_PINCTRL_GROUP(i2c1),
62 UNIPHIER_PINCTRL_GROUP(i2c2),
63 UNIPHIER_PINCTRL_GROUP(i2c3),
64 UNIPHIER_PINCTRL_GROUP(i2c6),
65 UNIPHIER_PINCTRL_GROUP(nand),
66 UNIPHIER_PINCTRL_GROUP(nand_cs1),
67 UNIPHIER_PINCTRL_GROUP(sd),
68 UNIPHIER_PINCTRL_GROUP(sd1),
69 UNIPHIER_PINCTRL_GROUP(uart0),
70 UNIPHIER_PINCTRL_GROUP(uart1),
71 UNIPHIER_PINCTRL_GROUP(uart2),
72 UNIPHIER_PINCTRL_GROUP(uart3),
73 UNIPHIER_PINCTRL_GROUP(usb0),
74 UNIPHIER_PINCTRL_GROUP(usb1),
75 UNIPHIER_PINCTRL_GROUP(usb2),
76 UNIPHIER_PINCTRL_GROUP(usb3),
77};
78
Masahiro Yamadaac13ce42016-04-21 14:43:10 +090079static const char * const uniphier_pro4_functions[] = {
Masahiro Yamadaa3438122015-09-11 20:17:34 +090080 "emmc",
81 "i2c0",
82 "i2c1",
83 "i2c2",
84 "i2c3",
85 "i2c6",
86 "nand",
87 "sd",
88 "sd1",
89 "uart0",
90 "uart1",
91 "uart2",
92 "uart3",
93 "usb0",
94 "usb1",
95 "usb2",
96 "usb3",
97};
98
Masahiro Yamadaac13ce42016-04-21 14:43:10 +090099static struct uniphier_pinctrl_socdata uniphier_pro4_pinctrl_socdata = {
100 .pins = uniphier_pro4_pins,
101 .pins_count = ARRAY_SIZE(uniphier_pro4_pins),
102 .groups = uniphier_pro4_groups,
103 .groups_count = ARRAY_SIZE(uniphier_pro4_groups),
104 .functions = uniphier_pro4_functions,
105 .functions_count = ARRAY_SIZE(uniphier_pro4_functions),
Masahiro Yamada8cc92b92016-03-24 22:32:44 +0900106 .caps = UNIPHIER_PINCTRL_CAPS_DBGMUX_SEPARATE,
Masahiro Yamadaa3438122015-09-11 20:17:34 +0900107};
108
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900109static int uniphier_pro4_pinctrl_probe(struct udevice *dev)
Masahiro Yamadaa3438122015-09-11 20:17:34 +0900110{
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900111 return uniphier_pinctrl_probe(dev, &uniphier_pro4_pinctrl_socdata);
Masahiro Yamadaa3438122015-09-11 20:17:34 +0900112}
113
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900114static const struct udevice_id uniphier_pro4_pinctrl_match[] = {
Masahiro Yamadaa3438122015-09-11 20:17:34 +0900115 { .compatible = "socionext,ph1-pro4-pinctrl" },
116 { /* sentinel */ }
117};
118
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900119U_BOOT_DRIVER(uniphier_pro4_pinctrl) = {
120 .name = "uniphier-pro4-pinctrl",
Masahiro Yamadaa3438122015-09-11 20:17:34 +0900121 .id = UCLASS_PINCTRL,
Masahiro Yamadaac13ce42016-04-21 14:43:10 +0900122 .of_match = of_match_ptr(uniphier_pro4_pinctrl_match),
123 .probe = uniphier_pro4_pinctrl_probe,
Masahiro Yamadaa3438122015-09-11 20:17:34 +0900124 .remove = uniphier_pinctrl_remove,
125 .priv_auto_alloc_size = sizeof(struct uniphier_pinctrl_priv),
126 .ops = &uniphier_pinctrl_ops,
127 .flags = DM_FLAG_PRE_RELOC,
128};