diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-23 07:25:50 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-23 07:25:50 +0400 |
commit | 7fc86a7908a4e9eb2da4b6498f86193d113842d3 (patch) | |
tree | c1b2faab48d2a6003c8e8efae5f356a4e792ce0a /include/linux/pinctrl/consumer.h | |
parent | 90597b6cfc1fc9926a4d54f09bbf5b3254b1b028 (diff) | |
parent | 51dddfe839a0ebcb5ff61a779e3f2768714f9957 (diff) | |
download | linux-7fc86a7908a4e9eb2da4b6498f86193d113842d3.tar.xz |
Merge tag 'pinctrl-for-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl
Pull pinctrl updates for v3.4 from Linus Walleij (*):
- Switches the PXA 168, 910 and MMP over to use pinctrl
- Locking revamped
- Massive refactorings...
- Reform the driver API to use multiple states
- Support pin config in the mapping tables
- Pinctrl drivers for the nVidia Tegra series
- Generic pin config support lib for simple pin controllers
- Implement pin config for the U300
* tag 'pinctrl-for-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl: (48 commits)
ARM: u300: configure some pins as an example
pinctrl: support pinconfig on the U300
pinctrl/coh901: use generic pinconf enums and parameters
pinctrl: introduce generic pin config
pinctrl: fix error path in pinconf_map_to_setting()
pinctrl: allow concurrent gpio and mux function ownership of pins
pinctrl: forward-declare struct device
pinctrl: split pincontrol states into its own header
pinctrl: include machine header to core.h
ARM: tegra: Select PINCTRL Kconfig variables
pinctrl: add a driver for NVIDIA Tegra
pinctrl: Show selected function and group in pinmux-pins debugfs
pinctrl: enhance mapping table to support pin config operations
pinctrl: API changes to support multiple states per device
pinctrl: add usecount to pins for muxing
pinctrl: refactor struct pinctrl handling in core.c vs pinmux.c
pinctrl: fix and simplify locking
pinctrl: fix the pin descriptor kerneldoc
pinctrl: assume map table entries can't have a NULL name field
pinctrl: introduce PINCTRL_STATE_DEFAULT, define hogs as that state
...
(*) What is it with all these Linuses these days? There's a Linus at
google too. Some day I will get myself my own broadsword, and run
around screaming "There can be only one".
I used to be _special_ dammit. Snif.
Diffstat (limited to 'include/linux/pinctrl/consumer.h')
-rw-r--r-- | include/linux/pinctrl/consumer.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/include/linux/pinctrl/consumer.h b/include/linux/pinctrl/consumer.h new file mode 100644 index 000000000000..191e72688481 --- /dev/null +++ b/include/linux/pinctrl/consumer.h @@ -0,0 +1,159 @@ +/* + * Consumer interface the pin control subsystem + * + * Copyright (C) 2012 ST-Ericsson SA + * Written on behalf of Linaro for ST-Ericsson + * Based on bits of regulator core, gpio core and clk core + * + * Author: Linus Walleij <linus.walleij@linaro.org> + * + * License terms: GNU General Public License (GPL) version 2 + */ +#ifndef __LINUX_PINCTRL_CONSUMER_H +#define __LINUX_PINCTRL_CONSUMER_H + +#include <linux/err.h> +#include <linux/list.h> +#include <linux/seq_file.h> +#include "pinctrl-state.h" + +/* This struct is private to the core and should be regarded as a cookie */ +struct pinctrl; +struct pinctrl_state; + +#ifdef CONFIG_PINCTRL + +/* External interface to pin control */ +extern int pinctrl_request_gpio(unsigned gpio); +extern void pinctrl_free_gpio(unsigned gpio); +extern int pinctrl_gpio_direction_input(unsigned gpio); +extern int pinctrl_gpio_direction_output(unsigned gpio); + +extern struct pinctrl * __must_check pinctrl_get(struct device *dev); +extern void pinctrl_put(struct pinctrl *p); +extern struct pinctrl_state * __must_check pinctrl_lookup_state( + struct pinctrl *p, + const char *name); +extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s); + +#else /* !CONFIG_PINCTRL */ + +static inline int pinctrl_request_gpio(unsigned gpio) +{ + return 0; +} + +static inline void pinctrl_free_gpio(unsigned gpio) +{ +} + +static inline int pinctrl_gpio_direction_input(unsigned gpio) +{ + return 0; +} + +static inline int pinctrl_gpio_direction_output(unsigned gpio) +{ + return 0; +} + +static inline struct pinctrl * __must_check pinctrl_get(struct device *dev) +{ + return NULL; +} + +static inline void pinctrl_put(struct pinctrl *p) +{ +} + +static inline struct pinctrl_state * __must_check pinctrl_lookup_state( + struct pinctrl *p, + const char *name) +{ + return NULL; +} + +static inline int pinctrl_select_state(struct pinctrl *p, + struct pinctrl_state *s) +{ + return 0; +} + +#endif /* CONFIG_PINCTRL */ + +static inline struct pinctrl * __must_check pinctrl_get_select( + struct device *dev, const char *name) +{ + struct pinctrl *p; + struct pinctrl_state *s; + int ret; + + p = pinctrl_get(dev); + if (IS_ERR(p)) + return p; + + s = pinctrl_lookup_state(p, name); + if (IS_ERR(s)) { + pinctrl_put(p); + return ERR_PTR(PTR_ERR(s)); + } + + ret = pinctrl_select_state(p, s); + if (ret < 0) { + pinctrl_put(p); + return ERR_PTR(ret); + } + + return p; +} + +static inline struct pinctrl * __must_check pinctrl_get_select_default( + struct device *dev) +{ + return pinctrl_get_select(dev, PINCTRL_STATE_DEFAULT); +} + +#ifdef CONFIG_PINCONF + +extern int pin_config_get(const char *dev_name, const char *name, + unsigned long *config); +extern int pin_config_set(const char *dev_name, const char *name, + unsigned long config); +extern int pin_config_group_get(const char *dev_name, + const char *pin_group, + unsigned long *config); +extern int pin_config_group_set(const char *dev_name, + const char *pin_group, + unsigned long config); + +#else + +static inline int pin_config_get(const char *dev_name, const char *name, + unsigned long *config) +{ + return 0; +} + +static inline int pin_config_set(const char *dev_name, const char *name, + unsigned long config) +{ + return 0; +} + +static inline int pin_config_group_get(const char *dev_name, + const char *pin_group, + unsigned long *config) +{ + return 0; +} + +static inline int pin_config_group_set(const char *dev_name, + const char *pin_group, + unsigned long config) +{ + return 0; +} + +#endif + +#endif /* __LINUX_PINCTRL_CONSUMER_H */ |