meson_pinctrl.h revision 1.2 1 /* $NetBSD: meson_pinctrl.h,v 1.2 2019/02/25 19:30:17 jmcneill Exp $ */
2
3 /*-
4 * Copyright (c) 2019 Jared McNeill <jmcneill (at) invisible.ca>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 */
28
29 #ifndef _MESON_PINCTRL_H
30 #define _MESON_PINCTRL_H
31
32 #include "opt_soc.h"
33
34 #include <sys/bus.h>
35
36 #define MESON_PINCTRL_MAXBANK 8
37
38 enum meson_pinctrl_regtype {
39 MESON_PINCTRL_REGTYPE_PULL,
40 MESON_PINCTRL_REGTYPE_PULL_ENABLE,
41 MESON_PINCTRL_REGTYPE_GPIO,
42 };
43
44 struct meson_pinctrl_gpioreg {
45 enum meson_pinctrl_regtype type;
46 bus_size_t reg;
47 uint32_t mask;
48 };
49
50 struct meson_pinctrl_gpio {
51 u_int id;
52 const char *name;
53 struct meson_pinctrl_gpioreg oen;
54 struct meson_pinctrl_gpioreg out;
55 struct meson_pinctrl_gpioreg in;
56 struct meson_pinctrl_gpioreg pupden;
57 struct meson_pinctrl_gpioreg pupd;
58 };
59
60 struct meson_pinctrl_group {
61 const char *name;
62 bus_size_t reg;
63 u_int bit;
64 u_int bank[MESON_PINCTRL_MAXBANK];
65 u_int nbank;
66 };
67
68 struct meson_pinctrl_config {
69 const char *name;
70 const struct meson_pinctrl_group *groups;
71 u_int ngroups;
72 const struct meson_pinctrl_gpio *gpios;
73 u_int ngpios;
74 };
75
76 #ifdef SOC_MESON8B
77 extern const struct meson_pinctrl_config meson8b_aobus_pinctrl_config;
78 extern const struct meson_pinctrl_config meson8b_cbus_pinctrl_config;
79 #endif
80
81 #ifdef SOC_MESONGXBB
82 extern const struct meson_pinctrl_config mesongxbb_aobus_pinctrl_config;
83 extern const struct meson_pinctrl_config mesongxbb_periphs_pinctrl_config;
84 #endif
85
86 #endif /* !_MESON_PINCTRL_H */
87