/* * 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 */