| /* | |
| * Pinctrl Driver for ADI GPIO2 controller | |
| * | |
| * Copyright 2007-2013 Analog Devices Inc. | |
| * | |
| * Licensed under the GPLv2 or later | |
| */ | |
| #ifndef PINCTRL_PINCTRL_ADI2_H | |
| #define PINCTRL_PINCTRL_ADI2_H | |
| #include <linux/pinctrl/pinctrl.h> | |
| /** | |
| * struct adi_pin_group - describes a pin group | |
| * @name: the name of this pin group | |
| * @pins: an array of pins | |
| * @num: the number of pins in this array | |
| */ | |
| struct adi_pin_group { | |
| const char *name; | |
| const unsigned *pins; | |
| const unsigned num; | |
| const unsigned short *mux; | |
| }; | |
| #define ADI_PIN_GROUP(n, p, m) \ | |
| { \ | |
| .name = n, \ | |
| .pins = p, \ | |
| .num = ARRAY_SIZE(p), \ | |
| .mux = m, \ | |
| } | |
| /** | |
| * struct adi_pmx_func - describes function mux setting of pin groups | |
| * @name: the name of this function mux setting | |
| * @groups: an array of pin groups | |
| * @num_groups: the number of pin groups in this array | |
| * @mux: the function mux setting array, end by zero | |
| */ | |
| struct adi_pmx_func { | |
| const char *name; | |
| const char * const *groups; | |
| const unsigned num_groups; | |
| }; | |
| #define ADI_PMX_FUNCTION(n, g) \ | |
| { \ | |
| .name = n, \ | |
| .groups = g, \ | |
| .num_groups = ARRAY_SIZE(g), \ | |
| } | |
| /** | |
| * struct adi_pinctrl_soc_data - ADI pin controller per-SoC configuration | |
| * @functions: The functions supported on this SoC. | |
| * @nfunction: The number of entries in @functions. | |
| * @groups: An array describing all pin groups the pin SoC supports. | |
| * @ngroups: The number of entries in @groups. | |
| * @pins: An array describing all pins the pin controller affects. | |
| * @npins: The number of entries in @pins. | |
| */ | |
| struct adi_pinctrl_soc_data { | |
| const struct adi_pmx_func *functions; | |
| int nfunctions; | |
| const struct adi_pin_group *groups; | |
| int ngroups; | |
| const struct pinctrl_pin_desc *pins; | |
| int npins; | |
| }; | |
| void adi_pinctrl_soc_init(const struct adi_pinctrl_soc_data **soc); | |
| #endif /* PINCTRL_PINCTRL_ADI2_H */ |