aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/pinctrl
diff options
context:
space:
mode:
authorSoren Brinkmann <soren.brinkmann@xilinx.com>2015-01-09 10:43:46 -0500
committerLinus Walleij <linus.walleij@linaro.org>2015-01-11 16:32:19 -0500
commitdd4d01f7bad886c22687224bc7070b87de8deb51 (patch)
treef1e2e99a8cc4859a48372212213ceb59aa183e38 /include/linux/pinctrl
parent31c89c959667194350f496947b576c149503ce98 (diff)
pinctrl: pinconf-generic: Allow driver to specify DT params
Additionally to the generic DT parameters, allow drivers to provide driver-specific DT parameters to be used with the generic parser infrastructure. To achieve this 'struct pinctrl_desc' is extended to pass custom pinconf option to the core. In order to pass this kind of information, the related data structures - 'struct pinconf_generic_dt_params', 'pin_config_item' - are moved from pinconf internals to the pinconf-generic header. Additionally pinconfg-generic is refactored to not only iterate over the generic pinconf parameters but also take the parameters into account that are provided through the driver's 'struct pinctrl_desc'. In particular 'pinconf_generic_parse_dt_config()' and 'pinconf_generic_dump' helpers are split into two parts each. In order to have a more generic helper that can be used to process the generic parameters as well as the driver-specific ones. v2: - fix typo - add missing documentation for @conf_items member in struct - rebase to pinctrl/devel: conflict in abx500 - rename _pinconf_generic_dump() to pinconf_generic_dump_one() - removed '_' from _parse_dt_cfg() - removed BUG_ONs, error condition is handled in if statements - removed pinconf_generic_dump_group() & pinconf_generic_dump_pin helpers - fixed up corresponding call sites - renamed pinconf_generic_dump() to pinconf_generic_dump_pins() - added kernel-doc to pinconf_generic_dump_pins() - add kernel-doc - more verbose commit message Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com> Tested-by: Andreas Färber <afaerber@suse.de> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'include/linux/pinctrl')
-rw-r--r--include/linux/pinctrl/pinconf-generic.h18
-rw-r--r--include/linux/pinctrl/pinctrl.h9
2 files changed, 27 insertions, 0 deletions
diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h
index 83c89f5ab705..342409f7f3ec 100644
--- a/include/linux/pinctrl/pinconf-generic.h
+++ b/include/linux/pinctrl/pinconf-generic.h
@@ -115,6 +115,18 @@ enum pin_config_param {
115 PIN_CONFIG_END = 0x7FFF, 115 PIN_CONFIG_END = 0x7FFF,
116}; 116};
117 117
118#ifdef CONFIG_DEBUG_FS
119#define PCONFDUMP(a, b, c, d) { .param = a, .display = b, .format = c, \
120 .has_arg = d }
121
122struct pin_config_item {
123 const enum pin_config_param param;
124 const char * const display;
125 const char * const format;
126 bool has_arg;
127};
128#endif /* CONFIG_DEBUG_FS */
129
118/* 130/*
119 * Helpful configuration macro to be used in tables etc. 131 * Helpful configuration macro to be used in tables etc.
120 */ 132 */
@@ -150,6 +162,12 @@ static inline unsigned long pinconf_to_config_packed(enum pin_config_param param
150struct pinctrl_dev; 162struct pinctrl_dev;
151struct pinctrl_map; 163struct pinctrl_map;
152 164
165struct pinconf_generic_dt_params {
166 const char * const property;
167 enum pin_config_param param;
168 u32 default_value;
169};
170
153int pinconf_generic_dt_subnode_to_map(struct pinctrl_dev *pctldev, 171int pinconf_generic_dt_subnode_to_map(struct pinctrl_dev *pctldev,
154 struct device_node *np, struct pinctrl_map **map, 172 struct device_node *np, struct pinctrl_map **map,
155 unsigned *reserved_maps, unsigned *num_maps, 173 unsigned *reserved_maps, unsigned *num_maps,
diff --git a/include/linux/pinctrl/pinctrl.h b/include/linux/pinctrl/pinctrl.h
index cc8e1aff0e28..c58b3e11ba8e 100644
--- a/include/linux/pinctrl/pinctrl.h
+++ b/include/linux/pinctrl/pinctrl.h
@@ -24,6 +24,7 @@ struct pinctrl_dev;
24struct pinctrl_map; 24struct pinctrl_map;
25struct pinmux_ops; 25struct pinmux_ops;
26struct pinconf_ops; 26struct pinconf_ops;
27struct pin_config_item;
27struct gpio_chip; 28struct gpio_chip;
28struct device_node; 29struct device_node;
29 30
@@ -117,6 +118,9 @@ struct pinctrl_ops {
117 * @confops: pin config operations vtable, if you support pin configuration in 118 * @confops: pin config operations vtable, if you support pin configuration in
118 * your driver 119 * your driver
119 * @owner: module providing the pin controller, used for refcounting 120 * @owner: module providing the pin controller, used for refcounting
121 * @num_dt_params: Number of driver-specific DT parameters
122 * @params: List of DT parameters
123 * @conf_items: Information how to print @params in debugfs
120 */ 124 */
121struct pinctrl_desc { 125struct pinctrl_desc {
122 const char *name; 126 const char *name;
@@ -126,6 +130,11 @@ struct pinctrl_desc {
126 const struct pinmux_ops *pmxops; 130 const struct pinmux_ops *pmxops;
127 const struct pinconf_ops *confops; 131 const struct pinconf_ops *confops;
128 struct module *owner; 132 struct module *owner;
133#if defined(CONFIG_GENERIC_PINCONF) && defined(CONFIG_OF)
134 unsigned int num_dt_params;
135 const struct pinconf_generic_dt_params *params;
136 const struct pin_config_item *conf_items;
137#endif
129}; 138};
130 139
131/* External interface to pin controller */ 140/* External interface to pin controller */