[go: nahoru, domu]

1/*
2 * Pinctrl Driver for ADI GPIO2 controller
3 *
4 * Copyright 2007-2013 Analog Devices Inc.
5 *
6 * Licensed under the GPLv2 or later
7 */
8
9#ifndef PINCTRL_PINCTRL_ADI2_H
10#define PINCTRL_PINCTRL_ADI2_H
11
12#include <linux/pinctrl/pinctrl.h>
13
14 /**
15 * struct adi_pin_group - describes a pin group
16 * @name: the name of this pin group
17 * @pins: an array of pins
18 * @num: the number of pins in this array
19 */
20struct adi_pin_group {
21	const char *name;
22	const unsigned *pins;
23	const unsigned num;
24	const unsigned short *mux;
25};
26
27#define ADI_PIN_GROUP(n, p, m)  \
28	{			\
29		.name = n,	\
30		.pins = p,	\
31		.num = ARRAY_SIZE(p),	\
32		.mux = m,			\
33	}
34
35 /**
36 * struct adi_pmx_func - describes function mux setting of pin groups
37 * @name: the name of this function mux setting
38 * @groups: an array of pin groups
39 * @num_groups: the number of pin groups in this array
40 * @mux: the function mux setting array, end by zero
41 */
42struct adi_pmx_func {
43	const char *name;
44	const char * const *groups;
45	const unsigned num_groups;
46};
47
48#define ADI_PMX_FUNCTION(n, g)		\
49	{					\
50		.name = n,			\
51		.groups = g,			\
52		.num_groups = ARRAY_SIZE(g),	\
53	}
54
55/**
56 * struct adi_pinctrl_soc_data - ADI pin controller per-SoC configuration
57 * @functions:  The functions supported on this SoC.
58 * @nfunction:  The number of entries in @functions.
59 * @groups:     An array describing all pin groups the pin SoC supports.
60 * @ngroups:    The number of entries in @groups.
61 * @pins:       An array describing all pins the pin controller affects.
62 * @npins:      The number of entries in @pins.
63 */
64struct adi_pinctrl_soc_data {
65	const struct adi_pmx_func *functions;
66	int nfunctions;
67	const struct adi_pin_group *groups;
68	int ngroups;
69	const struct pinctrl_pin_desc *pins;
70	int npins;
71};
72
73void adi_pinctrl_soc_init(const struct adi_pinctrl_soc_data **soc);
74
75#endif /* PINCTRL_PINCTRL_ADI2_H */
76