Commit | Line | Data |
---|---|---|
af873fce | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2744e8af LW |
2 | /* |
3 | * Internal interface between the core pin control system and the | |
4 | * pinmux portions | |
5 | * | |
6 | * Copyright (C) 2011 ST-Ericsson SA | |
7 | * Written on behalf of Linaro for ST-Ericsson | |
8 | * Based on bits of regulator core, gpio core and clk core | |
9 | * | |
10 | * Author: Linus Walleij <linus.walleij@linaro.org> | |
2744e8af | 11 | */ |
e5530adc AS |
12 | |
13 | #include <linux/types.h> | |
14 | ||
15 | struct dentry; | |
16 | struct seq_file; | |
17 | ||
18 | struct pinctrl_dev; | |
19 | struct pinctrl_gpio_range; | |
20 | struct pinctrl_map; | |
21 | struct pinctrl_setting; | |
22 | ||
2744e8af LW |
23 | #ifdef CONFIG_PINMUX |
24 | ||
b9130b77 | 25 | int pinmux_check_ops(struct pinctrl_dev *pctldev); |
7ecdb16f | 26 | |
3f713b7c | 27 | int pinmux_validate_map(const struct pinctrl_map *map, int i); |
1e2082b5 | 28 | |
472a61e7 SW |
29 | bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin); |
30 | ||
befe5bdf LW |
31 | int pinmux_request_gpio(struct pinctrl_dev *pctldev, |
32 | struct pinctrl_gpio_range *range, | |
33 | unsigned pin, unsigned gpio); | |
34 | void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin, | |
35 | struct pinctrl_gpio_range *range); | |
36 | int pinmux_gpio_direction(struct pinctrl_dev *pctldev, | |
37 | struct pinctrl_gpio_range *range, | |
38 | unsigned pin, bool input); | |
7ecdb16f | 39 | |
3f713b7c | 40 | int pinmux_map_to_setting(const struct pinctrl_map *map, |
7ecdb16f | 41 | struct pinctrl_setting *setting); |
3f713b7c MY |
42 | void pinmux_free_setting(const struct pinctrl_setting *setting); |
43 | int pinmux_enable_setting(const struct pinctrl_setting *setting); | |
44 | void pinmux_disable_setting(const struct pinctrl_setting *setting); | |
7ecdb16f | 45 | |
2744e8af LW |
46 | #else |
47 | ||
b9130b77 | 48 | static inline int pinmux_check_ops(struct pinctrl_dev *pctldev) |
2744e8af LW |
49 | { |
50 | return 0; | |
51 | } | |
52 | ||
3f713b7c | 53 | static inline int pinmux_validate_map(const struct pinctrl_map *map, int i) |
1e2082b5 SW |
54 | { |
55 | return 0; | |
56 | } | |
57 | ||
472a61e7 SW |
58 | static inline bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, |
59 | unsigned pin) | |
60 | { | |
61 | return true; | |
62 | } | |
63 | ||
befe5bdf LW |
64 | static inline int pinmux_request_gpio(struct pinctrl_dev *pctldev, |
65 | struct pinctrl_gpio_range *range, | |
66 | unsigned pin, unsigned gpio) | |
67 | { | |
68 | return 0; | |
69 | } | |
70 | ||
71 | static inline void pinmux_free_gpio(struct pinctrl_dev *pctldev, | |
72 | unsigned pin, | |
73 | struct pinctrl_gpio_range *range) | |
74 | { | |
75 | } | |
76 | ||
77 | static inline int pinmux_gpio_direction(struct pinctrl_dev *pctldev, | |
78 | struct pinctrl_gpio_range *range, | |
79 | unsigned pin, bool input) | |
80 | { | |
81 | return 0; | |
82 | } | |
83 | ||
3f713b7c | 84 | static inline int pinmux_map_to_setting(const struct pinctrl_map *map, |
7ecdb16f | 85 | struct pinctrl_setting *setting) |
2744e8af LW |
86 | { |
87 | return 0; | |
88 | } | |
89 | ||
3f713b7c | 90 | static inline void pinmux_free_setting(const struct pinctrl_setting *setting) |
befe5bdf LW |
91 | { |
92 | } | |
93 | ||
3f713b7c | 94 | static inline int pinmux_enable_setting(const struct pinctrl_setting *setting) |
befe5bdf | 95 | { |
7ecdb16f | 96 | return 0; |
befe5bdf LW |
97 | } |
98 | ||
3f713b7c | 99 | static inline void pinmux_disable_setting(const struct pinctrl_setting *setting) |
befe5bdf LW |
100 | { |
101 | } | |
102 | ||
c736d73c SW |
103 | #endif |
104 | ||
105 | #if defined(CONFIG_PINMUX) && defined(CONFIG_DEBUG_FS) | |
106 | ||
3f713b7c | 107 | void pinmux_show_map(struct seq_file *s, const struct pinctrl_map *map); |
c736d73c | 108 | void pinmux_show_setting(struct seq_file *s, |
3f713b7c | 109 | const struct pinctrl_setting *setting); |
c736d73c SW |
110 | void pinmux_init_device_debugfs(struct dentry *devroot, |
111 | struct pinctrl_dev *pctldev); | |
112 | ||
113 | #else | |
114 | ||
1e2082b5 | 115 | static inline void pinmux_show_map(struct seq_file *s, |
3f713b7c | 116 | const struct pinctrl_map *map) |
1e2082b5 SW |
117 | { |
118 | } | |
119 | ||
120 | static inline void pinmux_show_setting(struct seq_file *s, | |
3f713b7c | 121 | const struct pinctrl_setting *setting) |
03665e0f SW |
122 | { |
123 | } | |
124 | ||
1e2082b5 SW |
125 | static inline void pinmux_init_device_debugfs(struct dentry *devroot, |
126 | struct pinctrl_dev *pctldev) | |
2744e8af LW |
127 | { |
128 | } | |
129 | ||
130 | #endif | |
a76edc89 TL |
131 | |
132 | #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS | |
133 | ||
134 | /** | |
135 | * struct function_desc - generic function descriptor | |
136 | * @name: name of the function | |
137 | * @group_names: array of pin group names | |
138 | * @num_group_names: number of pin group names | |
139 | * @data: pin controller driver specific data | |
140 | */ | |
141 | struct function_desc { | |
142 | const char *name; | |
bd0aae66 | 143 | const char * const *group_names; |
a76edc89 TL |
144 | int num_group_names; |
145 | void *data; | |
146 | }; | |
147 | ||
148 | int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev); | |
149 | ||
150 | const char * | |
151 | pinmux_generic_get_function_name(struct pinctrl_dev *pctldev, | |
152 | unsigned int selector); | |
153 | ||
154 | int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev, | |
155 | unsigned int selector, | |
156 | const char * const **groups, | |
157 | unsigned * const num_groups); | |
158 | ||
159 | struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev, | |
160 | unsigned int selector); | |
161 | ||
162 | int pinmux_generic_add_function(struct pinctrl_dev *pctldev, | |
163 | const char *name, | |
bd0aae66 | 164 | const char * const *groups, |
a76edc89 TL |
165 | unsigned const num_groups, |
166 | void *data); | |
167 | ||
168 | int pinmux_generic_remove_function(struct pinctrl_dev *pctldev, | |
169 | unsigned int selector); | |
170 | ||
a76edc89 TL |
171 | void pinmux_generic_free_functions(struct pinctrl_dev *pctldev); |
172 | ||
173 | #else | |
174 | ||
175 | static inline void pinmux_generic_free_functions(struct pinctrl_dev *pctldev) | |
176 | { | |
177 | } | |
178 | ||
179 | #endif /* CONFIG_GENERIC_PINMUX_FUNCTIONS */ |