From 7ecdb16fe63e5b356335ebdc236adfb48cef31e1 Mon Sep 17 00:00:00 2001 From: Stephen Warren Date: Fri, 2 Mar 2012 13:05:45 -0700 Subject: pinctrl: refactor struct pinctrl handling in core.c vs pinmux.c This change separates two aspects of struct pinctrl: a) The data representation of the parsed mapping table, into: 1) The top-level struct pinctrl object, a single entity returned by pinctrl_get(). 2) The parsed version of each mapping table entry, struct pinctrl_setting, of which there is one per mapping table entry. b) The code that handles this; the code for (1) above is in core.c, and the code to parse/execute each entry in (2) above is in pinmux.c, while the iteration over multiple settings is lifted to core.c. This will allow the following future changes: 1) pinctrl_get() API rework, so that struct pinctrl represents all states for the device, and the device can select between them without calling put()/get() again. 2) To support that, a struct pinctrl_state object will be inserted into the data model between the struct pinctrl and struct pinctrl_setting. 3) The mapping table will be extended to allow specification of pin config settings too. To support this, struct pinctrl_setting will be enhanced to store either mux settings or config settings, and functions will be added to pinconf.c to parse/execute pin configuration settings. Signed-off-by: Stephen Warren Acked-by: Linus Walleij Acked-by: Dong Aisheng Signed-off-by: Linus Walleij --- drivers/pinctrl/pinmux.h | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) (limited to 'drivers/pinctrl/pinmux.h') diff --git a/drivers/pinctrl/pinmux.h b/drivers/pinctrl/pinmux.h index 822febb2d968..1500ae88f87c 100644 --- a/drivers/pinctrl/pinmux.h +++ b/drivers/pinctrl/pinmux.h @@ -13,6 +13,7 @@ #ifdef CONFIG_PINMUX int pinmux_check_ops(struct pinctrl_dev *pctldev); + int pinmux_request_gpio(struct pinctrl_dev *pctldev, struct pinctrl_gpio_range *range, unsigned pin, unsigned gpio); @@ -21,21 +22,16 @@ void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin, int pinmux_gpio_direction(struct pinctrl_dev *pctldev, struct pinctrl_gpio_range *range, unsigned pin, bool input); -static inline void pinmux_init_pinctrl_handle(struct pinctrl *p) -{ - INIT_LIST_HEAD(&p->groups); -} -int pinmux_apply_muxmap(struct pinctrl_dev *pctldev, - struct pinctrl *p, - struct device *dev, - const char *devname, - struct pinctrl_map const *map); -void pinmux_put(struct pinctrl *p); -int pinmux_enable(struct pinctrl *p); -void pinmux_disable(struct pinctrl *p); + +int pinmux_map_to_setting(struct pinctrl_map const *map, + struct pinctrl_setting *setting); +void pinmux_free_setting(struct pinctrl_setting const *setting); +int pinmux_enable_setting(struct pinctrl_setting const *setting); +void pinmux_disable_setting(struct pinctrl_setting const *setting); + +void pinmux_dbg_show(struct seq_file *s, struct pinctrl_setting const *setting); void pinmux_init_device_debugfs(struct dentry *devroot, struct pinctrl_dev *pctldev); -void pinmux_dbg_show(struct seq_file *s, struct pinctrl *p); #else @@ -64,28 +60,23 @@ static inline int pinmux_gpio_direction(struct pinctrl_dev *pctldev, return 0; } -static inline void pinmux_init_pinctrl_handle(struct pinctrl *p) -{ -} - -static inline int pinmux_apply_muxmap(struct pinctrl_dev *pctldev, - struct pinctrl *p, - struct device *dev, - const char *devname, - struct pinctrl_map const *map) +static inline int pinmux_map_to_setting(struct pinctrl_map const *map, + struct pinctrl_setting *setting) { return 0; } -static inline void pinmux_put(struct pinctrl *p) +static inline void pinmux_free_setting(struct pinctrl_setting const *setting) { } -static inline int pinmux_enable(struct pinctrl *p) +static inline int pinmux_enable_setting(struct pinctrl_setting const *setting) { + return 0; } -static inline void pinmux_disable(struct pinctrl *p) +static inline void pinmux_disable_setting( + struct pinctrl_setting const *setting) { } -- cgit v1.2.3