pinctrl: enhance mapping table to support pin config operations
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / pinctrl / pinmux.c
1 /*
2 * Core driver for the pin muxing portions of the pin control subsystem
3 *
4 * Copyright (C) 2011-2012 ST-Ericsson SA
5 * Written on behalf of Linaro for ST-Ericsson
6 * Based on bits of regulator core, gpio core and clk core
7 *
8 * Author: Linus Walleij <linus.walleij@linaro.org>
9 *
10 * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
11 *
12 * License terms: GNU General Public License (GPL) version 2
13 */
14 #define pr_fmt(fmt) "pinmux core: " fmt
15
16 #include <linux/kernel.h>
17 #include <linux/module.h>
18 #include <linux/init.h>
19 #include <linux/device.h>
20 #include <linux/slab.h>
21 #include <linux/radix-tree.h>
22 #include <linux/err.h>
23 #include <linux/list.h>
24 #include <linux/string.h>
25 #include <linux/sysfs.h>
26 #include <linux/debugfs.h>
27 #include <linux/seq_file.h>
28 #include <linux/pinctrl/machine.h>
29 #include <linux/pinctrl/pinmux.h>
30 #include "core.h"
31 #include "pinmux.h"
32
33 int pinmux_check_ops(struct pinctrl_dev *pctldev)
34 {
35 const struct pinmux_ops *ops = pctldev->desc->pmxops;
36 unsigned selector = 0;
37
38 /* Check that we implement required operations */
39 if (!ops->list_functions ||
40 !ops->get_function_name ||
41 !ops->get_function_groups ||
42 !ops->enable ||
43 !ops->disable)
44 return -EINVAL;
45
46 /* Check that all functions registered have names */
47 while (ops->list_functions(pctldev, selector) >= 0) {
48 const char *fname = ops->get_function_name(pctldev,
49 selector);
50 if (!fname) {
51 pr_err("pinmux ops has no name for function%u\n",
52 selector);
53 return -EINVAL;
54 }
55 selector++;
56 }
57
58 return 0;
59 }
60
61 int pinmux_validate_map(struct pinctrl_map const *map, int i)
62 {
63 if (!map->data.mux.function) {
64 pr_err("failed to register map %s (%d): no function given\n",
65 map->name, i);
66 return -EINVAL;
67 }
68
69 return 0;
70 }
71
72 /**
73 * pin_request() - request a single pin to be muxed in, typically for GPIO
74 * @pin: the pin number in the global pin space
75 * @owner: a representation of the owner of this pin; typically the device
76 * name that controls its mux function, or the requested GPIO name
77 * @gpio_range: the range matching the GPIO pin if this is a request for a
78 * single GPIO pin
79 */
80 static int pin_request(struct pinctrl_dev *pctldev,
81 int pin, const char *owner,
82 struct pinctrl_gpio_range *gpio_range)
83 {
84 struct pin_desc *desc;
85 const struct pinmux_ops *ops = pctldev->desc->pmxops;
86 int status = -EINVAL;
87
88 dev_dbg(pctldev->dev, "request pin %d for %s\n", pin, owner);
89
90 desc = pin_desc_get(pctldev, pin);
91 if (desc == NULL) {
92 dev_err(pctldev->dev,
93 "pin is not registered so it cannot be requested\n");
94 goto out;
95 }
96
97 if (desc->usecount && strcmp(desc->owner, owner)) {
98 dev_err(pctldev->dev,
99 "pin already requested\n");
100 goto out;
101 }
102
103 desc->usecount++;
104 if (desc->usecount > 1)
105 return 0;
106
107 desc->owner = owner;
108
109 /* Let each pin increase references to this module */
110 if (!try_module_get(pctldev->owner)) {
111 dev_err(pctldev->dev,
112 "could not increase module refcount for pin %d\n",
113 pin);
114 status = -EINVAL;
115 goto out_free_pin;
116 }
117
118 /*
119 * If there is no kind of request function for the pin we just assume
120 * we got it by default and proceed.
121 */
122 if (gpio_range && ops->gpio_request_enable)
123 /* This requests and enables a single GPIO pin */
124 status = ops->gpio_request_enable(pctldev, gpio_range, pin);
125 else if (ops->request)
126 status = ops->request(pctldev, pin);
127 else
128 status = 0;
129
130 if (status) {
131 dev_err(pctldev->dev, "->request on device %s failed for pin %d\n",
132 pctldev->desc->name, pin);
133 module_put(pctldev->owner);
134 }
135
136 out_free_pin:
137 if (status) {
138 desc->usecount--;
139 if (!desc->usecount)
140 desc->owner = NULL;
141 }
142 out:
143 if (status)
144 dev_err(pctldev->dev, "pin-%d (%s) status %d\n",
145 pin, owner, status);
146
147 return status;
148 }
149
150 /**
151 * pin_free() - release a single muxed in pin so something else can be muxed
152 * @pctldev: pin controller device handling this pin
153 * @pin: the pin to free
154 * @gpio_range: the range matching the GPIO pin if this is a request for a
155 * single GPIO pin
156 *
157 * This function returns a pointer to the previous owner. This is used
158 * for callers that dynamically allocate an owner name so it can be freed
159 * once the pin is free. This is done for GPIO request functions.
160 */
161 static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
162 struct pinctrl_gpio_range *gpio_range)
163 {
164 const struct pinmux_ops *ops = pctldev->desc->pmxops;
165 struct pin_desc *desc;
166 const char *owner;
167
168 desc = pin_desc_get(pctldev, pin);
169 if (desc == NULL) {
170 dev_err(pctldev->dev,
171 "pin is not registered so it cannot be freed\n");
172 return NULL;
173 }
174
175 desc->usecount--;
176 if (desc->usecount)
177 return NULL;
178
179 /*
180 * If there is no kind of request function for the pin we just assume
181 * we got it by default and proceed.
182 */
183 if (gpio_range && ops->gpio_disable_free)
184 ops->gpio_disable_free(pctldev, gpio_range, pin);
185 else if (ops->free)
186 ops->free(pctldev, pin);
187
188 owner = desc->owner;
189 desc->owner = NULL;
190 module_put(pctldev->owner);
191
192 return owner;
193 }
194
195 /**
196 * pinmux_request_gpio() - request pinmuxing for a GPIO pin
197 * @pctldev: pin controller device affected
198 * @pin: the pin to mux in for GPIO
199 * @range: the applicable GPIO range
200 */
201 int pinmux_request_gpio(struct pinctrl_dev *pctldev,
202 struct pinctrl_gpio_range *range,
203 unsigned pin, unsigned gpio)
204 {
205 char gpiostr[16];
206 const char *owner;
207 int ret;
208
209 /* Conjure some name stating what chip and pin this is taken by */
210 snprintf(gpiostr, 15, "%s:%d", range->name, gpio);
211
212 owner = kstrdup(gpiostr, GFP_KERNEL);
213 if (!owner)
214 return -EINVAL;
215
216 ret = pin_request(pctldev, pin, owner, range);
217 if (ret < 0)
218 kfree(owner);
219
220 return ret;
221 }
222
223 /**
224 * pinmux_free_gpio() - release a pin from GPIO muxing
225 * @pctldev: the pin controller device for the pin
226 * @pin: the affected currently GPIO-muxed in pin
227 * @range: applicable GPIO range
228 */
229 void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
230 struct pinctrl_gpio_range *range)
231 {
232 const char *owner;
233
234 owner = pin_free(pctldev, pin, range);
235 kfree(owner);
236 }
237
238 /**
239 * pinmux_gpio_direction() - set the direction of a single muxed-in GPIO pin
240 * @pctldev: the pin controller handling this pin
241 * @range: applicable GPIO range
242 * @pin: the affected GPIO pin in this controller
243 * @input: true if we set the pin as input, false for output
244 */
245 int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
246 struct pinctrl_gpio_range *range,
247 unsigned pin, bool input)
248 {
249 const struct pinmux_ops *ops;
250 int ret;
251
252 ops = pctldev->desc->pmxops;
253
254 if (ops->gpio_set_direction)
255 ret = ops->gpio_set_direction(pctldev, range, pin, input);
256 else
257 ret = 0;
258
259 return ret;
260 }
261
262 static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
263 const char *function)
264 {
265 const struct pinmux_ops *ops = pctldev->desc->pmxops;
266 unsigned selector = 0;
267
268 /* See if this pctldev has this function */
269 while (ops->list_functions(pctldev, selector) >= 0) {
270 const char *fname = ops->get_function_name(pctldev,
271 selector);
272
273 if (!strcmp(function, fname))
274 return selector;
275
276 selector++;
277 }
278
279 pr_err("%s does not support function %s\n",
280 pinctrl_dev_get_name(pctldev), function);
281 return -EINVAL;
282 }
283
284 int pinmux_map_to_setting(struct pinctrl_map const *map,
285 struct pinctrl_setting *setting)
286 {
287 struct pinctrl_dev *pctldev = setting->pctldev;
288 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
289 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
290 char const * const *groups;
291 unsigned num_groups;
292 int ret;
293 const char *group;
294 int i;
295 const unsigned *pins;
296 unsigned num_pins;
297
298 setting->data.mux.func =
299 pinmux_func_name_to_selector(pctldev, map->data.mux.function);
300 if (setting->data.mux.func < 0)
301 return setting->data.mux.func;
302
303 ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
304 &groups, &num_groups);
305 if (ret < 0)
306 return ret;
307 if (!num_groups)
308 return -EINVAL;
309
310 if (map->data.mux.group) {
311 bool found = false;
312 group = map->data.mux.group;
313 for (i = 0; i < num_groups; i++) {
314 if (!strcmp(group, groups[i])) {
315 found = true;
316 break;
317 }
318 }
319 if (!found)
320 return -EINVAL;
321 } else {
322 group = groups[0];
323 }
324
325 setting->data.mux.group = pinctrl_get_group_selector(pctldev, group);
326 if (setting->data.mux.group < 0)
327 return setting->data.mux.group;
328
329 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group, &pins,
330 &num_pins);
331 if (ret) {
332 dev_err(pctldev->dev,
333 "could not get pins for device %s group selector %d\n",
334 pinctrl_dev_get_name(pctldev), setting->data.mux.group);
335 return -ENODEV;
336 }
337
338 /* Try to allocate all pins in this group, one by one */
339 for (i = 0; i < num_pins; i++) {
340 ret = pin_request(pctldev, pins[i], map->dev_name, NULL);
341 if (ret) {
342 dev_err(pctldev->dev,
343 "could not get request pin %d on device %s\n",
344 pins[i], pinctrl_dev_get_name(pctldev));
345 /* On error release all taken pins */
346 i--; /* this pin just failed */
347 for (; i >= 0; i--)
348 pin_free(pctldev, pins[i], NULL);
349 return -ENODEV;
350 }
351 }
352
353 return 0;
354 }
355
356 void pinmux_free_setting(struct pinctrl_setting const *setting)
357 {
358 struct pinctrl_dev *pctldev = setting->pctldev;
359 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
360 const unsigned *pins;
361 unsigned num_pins;
362 int ret;
363 int i;
364
365 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
366 &pins, &num_pins);
367 if (ret) {
368 dev_err(pctldev->dev,
369 "could not get pins for device %s group selector %d\n",
370 pinctrl_dev_get_name(pctldev), setting->data.mux.group);
371 return;
372 }
373
374 for (i = 0; i < num_pins; i++)
375 pin_free(pctldev, pins[i], NULL);
376 }
377
378 int pinmux_enable_setting(struct pinctrl_setting const *setting)
379 {
380 struct pinctrl_dev *pctldev = setting->pctldev;
381 const struct pinmux_ops *ops = pctldev->desc->pmxops;
382
383 return ops->enable(pctldev, setting->data.mux.func,
384 setting->data.mux.group);
385 }
386
387 void pinmux_disable_setting(struct pinctrl_setting const *setting)
388 {
389 struct pinctrl_dev *pctldev = setting->pctldev;
390 const struct pinmux_ops *ops = pctldev->desc->pmxops;
391
392 ops->disable(pctldev, setting->data.mux.func, setting->data.mux.group);
393 }
394
395 #ifdef CONFIG_DEBUG_FS
396
397 /* Called from pincontrol core */
398 static int pinmux_functions_show(struct seq_file *s, void *what)
399 {
400 struct pinctrl_dev *pctldev = s->private;
401 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
402 unsigned func_selector = 0;
403
404 mutex_lock(&pinctrl_mutex);
405
406 while (pmxops->list_functions(pctldev, func_selector) >= 0) {
407 const char *func = pmxops->get_function_name(pctldev,
408 func_selector);
409 const char * const *groups;
410 unsigned num_groups;
411 int ret;
412 int i;
413
414 ret = pmxops->get_function_groups(pctldev, func_selector,
415 &groups, &num_groups);
416 if (ret)
417 seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
418 func);
419
420 seq_printf(s, "function: %s, groups = [ ", func);
421 for (i = 0; i < num_groups; i++)
422 seq_printf(s, "%s ", groups[i]);
423 seq_puts(s, "]\n");
424
425 func_selector++;
426 }
427
428 mutex_unlock(&pinctrl_mutex);
429
430 return 0;
431 }
432
433 static int pinmux_pins_show(struct seq_file *s, void *what)
434 {
435 struct pinctrl_dev *pctldev = s->private;
436 unsigned i, pin;
437
438 seq_puts(s, "Pinmux settings per pin\n");
439 seq_puts(s, "Format: pin (name): owner\n");
440
441 mutex_lock(&pinctrl_mutex);
442
443 /* The pin number can be retrived from the pin controller descriptor */
444 for (i = 0; i < pctldev->desc->npins; i++) {
445 struct pin_desc *desc;
446 bool is_hog = false;
447
448 pin = pctldev->desc->pins[i].number;
449 desc = pin_desc_get(pctldev, pin);
450 /* Skip if we cannot search the pin */
451 if (desc == NULL)
452 continue;
453
454 if (desc->owner &&
455 !strcmp(desc->owner, pinctrl_dev_get_name(pctldev)))
456 is_hog = true;
457
458 seq_printf(s, "pin %d (%s): %s%s\n", pin,
459 desc->name ? desc->name : "unnamed",
460 desc->owner ? desc->owner : "UNCLAIMED",
461 is_hog ? " (HOG)" : "");
462 }
463
464 mutex_unlock(&pinctrl_mutex);
465
466 return 0;
467 }
468
469 void pinmux_show_map(struct seq_file *s, struct pinctrl_map const *map)
470 {
471 seq_printf(s, "group %s\nfunction %s\n",
472 map->data.mux.group ? map->data.mux.group : "(default)",
473 map->data.mux.function);
474 }
475
476 void pinmux_show_setting(struct seq_file *s,
477 struct pinctrl_setting const *setting)
478 {
479 struct pinctrl_dev *pctldev = setting->pctldev;
480 const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
481 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
482
483 seq_printf(s, "group: %s (%u) function: %s (%u)\n",
484 pctlops->get_group_name(pctldev, setting->data.mux.group),
485 setting->data.mux.group,
486 pmxops->get_function_name(pctldev, setting->data.mux.func),
487 setting->data.mux.func);
488 }
489
490 static int pinmux_functions_open(struct inode *inode, struct file *file)
491 {
492 return single_open(file, pinmux_functions_show, inode->i_private);
493 }
494
495 static int pinmux_pins_open(struct inode *inode, struct file *file)
496 {
497 return single_open(file, pinmux_pins_show, inode->i_private);
498 }
499
500 static const struct file_operations pinmux_functions_ops = {
501 .open = pinmux_functions_open,
502 .read = seq_read,
503 .llseek = seq_lseek,
504 .release = single_release,
505 };
506
507 static const struct file_operations pinmux_pins_ops = {
508 .open = pinmux_pins_open,
509 .read = seq_read,
510 .llseek = seq_lseek,
511 .release = single_release,
512 };
513
514 void pinmux_init_device_debugfs(struct dentry *devroot,
515 struct pinctrl_dev *pctldev)
516 {
517 debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
518 devroot, pctldev, &pinmux_functions_ops);
519 debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
520 devroot, pctldev, &pinmux_pins_ops);
521 }
522
523 #endif /* CONFIG_DEBUG_FS */