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 */ 20 struct 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 */ 42 struct 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 */ 64 struct 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 73 void adi_pinctrl_soc_init(const struct adi_pinctrl_soc_data **soc); 74 75 #endif /* PINCTRL_PINCTRL_ADI2_H */ 76