pinctrl: factor pin control handles over to the core

This moves the per-devices struct pinctrl handles and device map
over from the pinmux part of the subsystem to the core pinctrl part.
This makes the device handles core infrastructure with the goal of
using these handles also for pin configuration, so that device
drivers (or boards etc) will need one and only one handle to the
pin control core.

Acked-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
diff --git a/drivers/pinctrl/pinmux.h b/drivers/pinctrl/pinmux.h
index dfe8172..7680a17 100644
--- a/drivers/pinctrl/pinmux.h
+++ b/drivers/pinctrl/pinmux.h
@@ -15,9 +15,28 @@
 int pinmux_check_ops(struct pinctrl_dev *pctldev);
 void pinmux_init_device_debugfs(struct dentry *devroot,
 				struct pinctrl_dev *pctldev);
-void pinmux_init_debugfs(struct dentry *subsys_root);
-int pinctrl_hog_maps(struct pinctrl_dev *pctldev);
-void pinctrl_unhog_maps(struct pinctrl_dev *pctldev);
+int pinmux_request_gpio(struct pinctrl_dev *pctldev,
+			struct pinctrl_gpio_range *range,
+			unsigned pin, unsigned gpio);
+void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
+		      struct pinctrl_gpio_range *range);
+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)
+{
+	p->func_selector = UINT_MAX;
+	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);
+void pinmux_dbg_show(struct seq_file *s, struct pinctrl *p);
 
 #else
 
@@ -31,16 +50,52 @@
 {
 }
 
-static inline void pinmux_init_debugfs(struct dentry *subsys_root)
-{
-}
-
-static inline int pinctrl_hog_maps(struct pinctrl_dev *pctldev)
+static inline int pinmux_request_gpio(struct pinctrl_dev *pctldev,
+			struct pinctrl_gpio_range *range,
+			unsigned pin, unsigned gpio)
 {
 	return 0;
 }
 
-static inline void pinctrl_unhog_maps(struct pinctrl_dev *pctldev)
+static inline void pinmux_free_gpio(struct pinctrl_dev *pctldev,
+				    unsigned pin,
+				    struct pinctrl_gpio_range *range)
+{
+}
+
+static inline int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
+					struct pinctrl_gpio_range *range,
+					unsigned pin, bool input)
+{
+	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)
+{
+	return 0;
+}
+
+static inline void pinmux_put(struct pinctrl *p)
+{
+}
+
+static inline int pinmux_enable(struct pinctrl *p)
+{
+}
+
+static inline void pinmux_disable(struct pinctrl *p)
+{
+}
+
+void pinmux_dbg_show(struct seq_file *s, struct pinctrl *p)
 {
 }