]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/pinctrl/core.c
arm/u300: don't use PINMUX_MAP_PRIMARY*
[mirror_ubuntu-bionic-kernel.git] / drivers / pinctrl / core.c
CommitLineData
2744e8af
LW
1/*
2 * Core driver for the pin control subsystem
3 *
4 * Copyright (C) 2011 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 * License terms: GNU General Public License (GPL) version 2
11 */
12#define pr_fmt(fmt) "pinctrl core: " fmt
13
14#include <linux/kernel.h>
a5a697cd 15#include <linux/export.h>
2744e8af
LW
16#include <linux/init.h>
17#include <linux/device.h>
18#include <linux/slab.h>
19#include <linux/radix-tree.h>
20#include <linux/err.h>
21#include <linux/list.h>
22#include <linux/mutex.h>
23#include <linux/spinlock.h>
24#include <linux/sysfs.h>
25#include <linux/debugfs.h>
26#include <linux/seq_file.h>
27#include <linux/pinctrl/pinctrl.h>
28#include <linux/pinctrl/machine.h>
29#include "core.h"
30#include "pinmux.h"
ae6b4d85 31#include "pinconf.h"
2744e8af
LW
32
33/* Global list of pin control devices */
34static DEFINE_MUTEX(pinctrldev_list_mutex);
35static LIST_HEAD(pinctrldev_list);
36
37static void pinctrl_dev_release(struct device *dev)
38{
39 struct pinctrl_dev *pctldev = dev_get_drvdata(dev);
40 kfree(pctldev);
41}
42
43const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev)
44{
45 /* We're not allowed to register devices without name */
46 return pctldev->desc->name;
47}
48EXPORT_SYMBOL_GPL(pinctrl_dev_get_name);
49
50void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev)
51{
52 return pctldev->driver_data;
53}
54EXPORT_SYMBOL_GPL(pinctrl_dev_get_drvdata);
55
56/**
57 * get_pinctrl_dev_from_dev() - look up pin controller device
58 * @dev: a device pointer, this may be NULL but then devname needs to be
59 * defined instead
60 * @devname: the name of a device instance, as returned by dev_name(), this
61 * may be NULL but then dev needs to be defined instead
62 *
63 * Looks up a pin control device matching a certain device name or pure device
64 * pointer, the pure device pointer will take precedence.
65 */
66struct pinctrl_dev *get_pinctrl_dev_from_dev(struct device *dev,
67 const char *devname)
68{
69 struct pinctrl_dev *pctldev = NULL;
70 bool found = false;
71
72 mutex_lock(&pinctrldev_list_mutex);
73 list_for_each_entry(pctldev, &pinctrldev_list, node) {
74 if (dev && &pctldev->dev == dev) {
75 /* Matched on device pointer */
76 found = true;
77 break;
78 }
79
80 if (devname &&
81 !strcmp(dev_name(&pctldev->dev), devname)) {
82 /* Matched on device name */
83 found = true;
84 break;
85 }
86 }
87 mutex_unlock(&pinctrldev_list_mutex);
88
89 return found ? pctldev : NULL;
90}
91
33d58949 92struct pin_desc *pin_desc_get(struct pinctrl_dev *pctldev, unsigned int pin)
2744e8af
LW
93{
94 struct pin_desc *pindesc;
95 unsigned long flags;
96
97 spin_lock_irqsave(&pctldev->pin_desc_tree_lock, flags);
98 pindesc = radix_tree_lookup(&pctldev->pin_desc_tree, pin);
99 spin_unlock_irqrestore(&pctldev->pin_desc_tree_lock, flags);
100
101 return pindesc;
102}
103
ae6b4d85
LW
104/**
105 * pin_get_from_name() - look up a pin number from a name
106 * @pctldev: the pin control device to lookup the pin on
107 * @name: the name of the pin to look up
108 */
109int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name)
110{
111 unsigned pin;
112
113 /* The highest pin number need to be included in the loop, thus <= */
114 for (pin = 0; pin <= pctldev->desc->maxpin; pin++) {
115 struct pin_desc *desc;
116
117 desc = pin_desc_get(pctldev, pin);
118 /* Pin space may be sparse */
119 if (desc == NULL)
120 continue;
121 if (desc->name && !strcmp(name, desc->name))
122 return pin;
123 }
124
125 return -EINVAL;
126}
127
2744e8af
LW
128/**
129 * pin_is_valid() - check if pin exists on controller
130 * @pctldev: the pin control device to check the pin on
131 * @pin: pin to check, use the local pin controller index number
132 *
133 * This tells us whether a certain pin exist on a certain pin controller or
134 * not. Pin lists may be sparse, so some pins may not exist.
135 */
136bool pin_is_valid(struct pinctrl_dev *pctldev, int pin)
137{
138 struct pin_desc *pindesc;
139
140 if (pin < 0)
141 return false;
142
143 pindesc = pin_desc_get(pctldev, pin);
144 if (pindesc == NULL)
145 return false;
146
147 return true;
148}
149EXPORT_SYMBOL_GPL(pin_is_valid);
150
151/* Deletes a range of pin descriptors */
152static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev,
153 const struct pinctrl_pin_desc *pins,
154 unsigned num_pins)
155{
156 int i;
157
158 spin_lock(&pctldev->pin_desc_tree_lock);
159 for (i = 0; i < num_pins; i++) {
160 struct pin_desc *pindesc;
161
162 pindesc = radix_tree_lookup(&pctldev->pin_desc_tree,
163 pins[i].number);
164 if (pindesc != NULL) {
165 radix_tree_delete(&pctldev->pin_desc_tree,
166 pins[i].number);
167 }
168 kfree(pindesc);
169 }
170 spin_unlock(&pctldev->pin_desc_tree_lock);
171}
172
173static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev,
174 unsigned number, const char *name)
175{
176 struct pin_desc *pindesc;
177
178 pindesc = pin_desc_get(pctldev, number);
179 if (pindesc != NULL) {
180 pr_err("pin %d already registered on %s\n", number,
181 pctldev->desc->name);
182 return -EINVAL;
183 }
184
185 pindesc = kzalloc(sizeof(*pindesc), GFP_KERNEL);
186 if (pindesc == NULL)
187 return -ENOMEM;
ae6b4d85 188
2744e8af
LW
189 spin_lock_init(&pindesc->lock);
190
191 /* Set owner */
192 pindesc->pctldev = pctldev;
193
9af1e44f
SW
194 /* Copy basic pin info */
195 pindesc->name = name;
2744e8af
LW
196
197 spin_lock(&pctldev->pin_desc_tree_lock);
198 radix_tree_insert(&pctldev->pin_desc_tree, number, pindesc);
199 spin_unlock(&pctldev->pin_desc_tree_lock);
200 pr_debug("registered pin %d (%s) on %s\n",
201 number, name ? name : "(unnamed)", pctldev->desc->name);
202 return 0;
203}
204
205static int pinctrl_register_pins(struct pinctrl_dev *pctldev,
206 struct pinctrl_pin_desc const *pins,
207 unsigned num_descs)
208{
209 unsigned i;
210 int ret = 0;
211
212 for (i = 0; i < num_descs; i++) {
213 ret = pinctrl_register_one_pin(pctldev,
214 pins[i].number, pins[i].name);
215 if (ret)
216 return ret;
217 }
218
219 return 0;
220}
221
222/**
223 * pinctrl_match_gpio_range() - check if a certain GPIO pin is in range
224 * @pctldev: pin controller device to check
225 * @gpio: gpio pin to check taken from the global GPIO pin space
226 *
227 * Tries to match a GPIO pin number to the ranges handled by a certain pin
228 * controller, return the range or NULL
229 */
230static struct pinctrl_gpio_range *
231pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio)
232{
233 struct pinctrl_gpio_range *range = NULL;
234
235 /* Loop over the ranges */
236 mutex_lock(&pctldev->gpio_ranges_lock);
237 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
238 /* Check if we're in the valid range */
239 if (gpio >= range->base &&
240 gpio < range->base + range->npins) {
241 mutex_unlock(&pctldev->gpio_ranges_lock);
242 return range;
243 }
244 }
245 mutex_unlock(&pctldev->gpio_ranges_lock);
246
247 return NULL;
248}
249
250/**
251 * pinctrl_get_device_gpio_range() - find device for GPIO range
252 * @gpio: the pin to locate the pin controller for
253 * @outdev: the pin control device if found
254 * @outrange: the GPIO range if found
255 *
256 * Find the pin controller handling a certain GPIO pin from the pinspace of
257 * the GPIO subsystem, return the device and the matching GPIO range. Returns
258 * negative if the GPIO range could not be found in any device.
259 */
260int pinctrl_get_device_gpio_range(unsigned gpio,
261 struct pinctrl_dev **outdev,
262 struct pinctrl_gpio_range **outrange)
263{
264 struct pinctrl_dev *pctldev = NULL;
265
266 /* Loop over the pin controllers */
267 mutex_lock(&pinctrldev_list_mutex);
268 list_for_each_entry(pctldev, &pinctrldev_list, node) {
269 struct pinctrl_gpio_range *range;
270
271 range = pinctrl_match_gpio_range(pctldev, gpio);
272 if (range != NULL) {
273 *outdev = pctldev;
274 *outrange = range;
275 mutex_unlock(&pinctrldev_list_mutex);
276 return 0;
277 }
278 }
279 mutex_unlock(&pinctrldev_list_mutex);
280
281 return -EINVAL;
282}
283
284/**
285 * pinctrl_add_gpio_range() - register a GPIO range for a controller
286 * @pctldev: pin controller device to add the range to
287 * @range: the GPIO range to add
288 *
289 * This adds a range of GPIOs to be handled by a certain pin controller. Call
290 * this to register handled ranges after registering your pin controller.
291 */
292void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev,
293 struct pinctrl_gpio_range *range)
294{
295 mutex_lock(&pctldev->gpio_ranges_lock);
296 list_add(&range->node, &pctldev->gpio_ranges);
297 mutex_unlock(&pctldev->gpio_ranges_lock);
298}
299
300/**
301 * pinctrl_remove_gpio_range() - remove a range of GPIOs fro a pin controller
302 * @pctldev: pin controller device to remove the range from
303 * @range: the GPIO range to remove
304 */
305void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev,
306 struct pinctrl_gpio_range *range)
307{
308 mutex_lock(&pctldev->gpio_ranges_lock);
309 list_del(&range->node);
310 mutex_unlock(&pctldev->gpio_ranges_lock);
311}
312
7afde8ba
LW
313/**
314 * pinctrl_get_group_selector() - returns the group selector for a group
315 * @pctldev: the pin controller handling the group
316 * @pin_group: the pin group to look up
317 */
318int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
319 const char *pin_group)
320{
321 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
322 unsigned group_selector = 0;
323
324 while (pctlops->list_groups(pctldev, group_selector) >= 0) {
325 const char *gname = pctlops->get_group_name(pctldev,
326 group_selector);
327 if (!strcmp(gname, pin_group)) {
328 dev_dbg(&pctldev->dev,
329 "found group selector %u for %s\n",
330 group_selector,
331 pin_group);
332 return group_selector;
333 }
334
335 group_selector++;
336 }
337
338 dev_err(&pctldev->dev, "does not have pin group %s\n",
339 pin_group);
340
341 return -EINVAL;
342}
343
2744e8af
LW
344#ifdef CONFIG_DEBUG_FS
345
346static int pinctrl_pins_show(struct seq_file *s, void *what)
347{
348 struct pinctrl_dev *pctldev = s->private;
349 const struct pinctrl_ops *ops = pctldev->desc->pctlops;
350 unsigned pin;
351
352 seq_printf(s, "registered pins: %d\n", pctldev->desc->npins);
353 seq_printf(s, "max pin number: %d\n", pctldev->desc->maxpin);
354
355 /* The highest pin number need to be included in the loop, thus <= */
356 for (pin = 0; pin <= pctldev->desc->maxpin; pin++) {
357 struct pin_desc *desc;
358
359 desc = pin_desc_get(pctldev, pin);
360 /* Pin space may be sparse */
361 if (desc == NULL)
362 continue;
363
364 seq_printf(s, "pin %d (%s) ", pin,
365 desc->name ? desc->name : "unnamed");
366
367 /* Driver-specific info per pin */
368 if (ops->pin_dbg_show)
369 ops->pin_dbg_show(pctldev, s, pin);
370
371 seq_puts(s, "\n");
372 }
373
374 return 0;
375}
376
377static int pinctrl_groups_show(struct seq_file *s, void *what)
378{
379 struct pinctrl_dev *pctldev = s->private;
380 const struct pinctrl_ops *ops = pctldev->desc->pctlops;
381 unsigned selector = 0;
382
383 /* No grouping */
384 if (!ops)
385 return 0;
386
387 seq_puts(s, "registered pin groups:\n");
388 while (ops->list_groups(pctldev, selector) >= 0) {
a5818a8b 389 const unsigned *pins;
2744e8af
LW
390 unsigned num_pins;
391 const char *gname = ops->get_group_name(pctldev, selector);
392 int ret;
393 int i;
394
395 ret = ops->get_group_pins(pctldev, selector,
396 &pins, &num_pins);
397 if (ret)
398 seq_printf(s, "%s [ERROR GETTING PINS]\n",
399 gname);
400 else {
401 seq_printf(s, "group: %s, pins = [ ", gname);
402 for (i = 0; i < num_pins; i++)
403 seq_printf(s, "%d ", pins[i]);
404 seq_puts(s, "]\n");
405 }
406 selector++;
407 }
408
409
410 return 0;
411}
412
413static int pinctrl_gpioranges_show(struct seq_file *s, void *what)
414{
415 struct pinctrl_dev *pctldev = s->private;
416 struct pinctrl_gpio_range *range = NULL;
417
418 seq_puts(s, "GPIO ranges handled:\n");
419
420 /* Loop over the ranges */
421 mutex_lock(&pctldev->gpio_ranges_lock);
422 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
75d6642a
LW
423 seq_printf(s, "%u: %s GPIOS [%u - %u] PINS [%u - %u]\n",
424 range->id, range->name,
425 range->base, (range->base + range->npins - 1),
426 range->pin_base,
427 (range->pin_base + range->npins - 1));
2744e8af
LW
428 }
429 mutex_unlock(&pctldev->gpio_ranges_lock);
430
431 return 0;
432}
433
434static int pinctrl_devices_show(struct seq_file *s, void *what)
435{
436 struct pinctrl_dev *pctldev;
437
ae6b4d85 438 seq_puts(s, "name [pinmux] [pinconf]\n");
2744e8af
LW
439 mutex_lock(&pinctrldev_list_mutex);
440 list_for_each_entry(pctldev, &pinctrldev_list, node) {
441 seq_printf(s, "%s ", pctldev->desc->name);
442 if (pctldev->desc->pmxops)
ae6b4d85
LW
443 seq_puts(s, "yes ");
444 else
445 seq_puts(s, "no ");
446 if (pctldev->desc->confops)
2744e8af
LW
447 seq_puts(s, "yes");
448 else
449 seq_puts(s, "no");
450 seq_puts(s, "\n");
451 }
452 mutex_unlock(&pinctrldev_list_mutex);
453
454 return 0;
455}
456
457static int pinctrl_pins_open(struct inode *inode, struct file *file)
458{
459 return single_open(file, pinctrl_pins_show, inode->i_private);
460}
461
462static int pinctrl_groups_open(struct inode *inode, struct file *file)
463{
464 return single_open(file, pinctrl_groups_show, inode->i_private);
465}
466
467static int pinctrl_gpioranges_open(struct inode *inode, struct file *file)
468{
469 return single_open(file, pinctrl_gpioranges_show, inode->i_private);
470}
471
472static int pinctrl_devices_open(struct inode *inode, struct file *file)
473{
474 return single_open(file, pinctrl_devices_show, NULL);
475}
476
477static const struct file_operations pinctrl_pins_ops = {
478 .open = pinctrl_pins_open,
479 .read = seq_read,
480 .llseek = seq_lseek,
481 .release = single_release,
482};
483
484static const struct file_operations pinctrl_groups_ops = {
485 .open = pinctrl_groups_open,
486 .read = seq_read,
487 .llseek = seq_lseek,
488 .release = single_release,
489};
490
491static const struct file_operations pinctrl_gpioranges_ops = {
492 .open = pinctrl_gpioranges_open,
493 .read = seq_read,
494 .llseek = seq_lseek,
495 .release = single_release,
496};
497
498static const struct file_operations pinctrl_devices_ops = {
499 .open = pinctrl_devices_open,
500 .read = seq_read,
501 .llseek = seq_lseek,
502 .release = single_release,
503};
504
505static struct dentry *debugfs_root;
506
507static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
508{
509 static struct dentry *device_root;
510
511 device_root = debugfs_create_dir(dev_name(&pctldev->dev),
512 debugfs_root);
513 if (IS_ERR(device_root) || !device_root) {
514 pr_warn("failed to create debugfs directory for %s\n",
515 dev_name(&pctldev->dev));
516 return;
517 }
518 debugfs_create_file("pins", S_IFREG | S_IRUGO,
519 device_root, pctldev, &pinctrl_pins_ops);
520 debugfs_create_file("pingroups", S_IFREG | S_IRUGO,
521 device_root, pctldev, &pinctrl_groups_ops);
522 debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO,
523 device_root, pctldev, &pinctrl_gpioranges_ops);
524 pinmux_init_device_debugfs(device_root, pctldev);
ae6b4d85 525 pinconf_init_device_debugfs(device_root, pctldev);
2744e8af
LW
526}
527
528static void pinctrl_init_debugfs(void)
529{
530 debugfs_root = debugfs_create_dir("pinctrl", NULL);
531 if (IS_ERR(debugfs_root) || !debugfs_root) {
532 pr_warn("failed to create debugfs directory\n");
533 debugfs_root = NULL;
534 return;
535 }
536
537 debugfs_create_file("pinctrl-devices", S_IFREG | S_IRUGO,
538 debugfs_root, NULL, &pinctrl_devices_ops);
539 pinmux_init_debugfs(debugfs_root);
540}
541
542#else /* CONFIG_DEBUG_FS */
543
544static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
545{
546}
547
548static void pinctrl_init_debugfs(void)
549{
550}
551
552#endif
553
554/**
555 * pinctrl_register() - register a pin controller device
556 * @pctldesc: descriptor for this pin controller
557 * @dev: parent device for this pin controller
558 * @driver_data: private pin controller data for this pin controller
559 */
560struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
561 struct device *dev, void *driver_data)
562{
563 static atomic_t pinmux_no = ATOMIC_INIT(0);
564 struct pinctrl_dev *pctldev;
565 int ret;
566
567 if (pctldesc == NULL)
568 return NULL;
569 if (pctldesc->name == NULL)
570 return NULL;
571
572 /* If we're implementing pinmuxing, check the ops for sanity */
573 if (pctldesc->pmxops) {
574 ret = pinmux_check_ops(pctldesc->pmxops);
575 if (ret) {
576 pr_err("%s pinmux ops lacks necessary functions\n",
577 pctldesc->name);
578 return NULL;
579 }
580 }
581
ae6b4d85
LW
582 /* If we're implementing pinconfig, check the ops for sanity */
583 if (pctldesc->confops) {
584 ret = pinconf_check_ops(pctldesc->confops);
585 if (ret) {
586 pr_err("%s pin config ops lacks necessary functions\n",
587 pctldesc->name);
588 return NULL;
589 }
590 }
591
2744e8af
LW
592 pctldev = kzalloc(sizeof(struct pinctrl_dev), GFP_KERNEL);
593 if (pctldev == NULL)
594 return NULL;
595
596 /* Initialize pin control device struct */
597 pctldev->owner = pctldesc->owner;
598 pctldev->desc = pctldesc;
599 pctldev->driver_data = driver_data;
600 INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
601 spin_lock_init(&pctldev->pin_desc_tree_lock);
602 INIT_LIST_HEAD(&pctldev->gpio_ranges);
603 mutex_init(&pctldev->gpio_ranges_lock);
604
605 /* Register device */
606 pctldev->dev.parent = dev;
607 dev_set_name(&pctldev->dev, "pinctrl.%d",
608 atomic_inc_return(&pinmux_no) - 1);
609 pctldev->dev.release = pinctrl_dev_release;
610 ret = device_register(&pctldev->dev);
611 if (ret != 0) {
612 pr_err("error in device registration\n");
613 goto out_reg_dev_err;
614 }
615 dev_set_drvdata(&pctldev->dev, pctldev);
616
617 /* Register all the pins */
618 pr_debug("try to register %d pins on %s...\n",
619 pctldesc->npins, pctldesc->name);
620 ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);
621 if (ret) {
622 pr_err("error during pin registration\n");
623 pinctrl_free_pindescs(pctldev, pctldesc->pins,
624 pctldesc->npins);
625 goto out_reg_pins_err;
626 }
627
628 pinctrl_init_device_debugfs(pctldev);
629 mutex_lock(&pinctrldev_list_mutex);
630 list_add(&pctldev->node, &pinctrldev_list);
631 mutex_unlock(&pinctrldev_list_mutex);
632 pinmux_hog_maps(pctldev);
633 return pctldev;
634
635out_reg_pins_err:
636 device_del(&pctldev->dev);
637out_reg_dev_err:
638 put_device(&pctldev->dev);
639 return NULL;
640}
641EXPORT_SYMBOL_GPL(pinctrl_register);
642
643/**
644 * pinctrl_unregister() - unregister pinmux
645 * @pctldev: pin controller to unregister
646 *
647 * Called by pinmux drivers to unregister a pinmux.
648 */
649void pinctrl_unregister(struct pinctrl_dev *pctldev)
650{
651 if (pctldev == NULL)
652 return;
653
654 pinmux_unhog_maps(pctldev);
655 /* TODO: check that no pinmuxes are still active? */
656 mutex_lock(&pinctrldev_list_mutex);
657 list_del(&pctldev->node);
658 mutex_unlock(&pinctrldev_list_mutex);
659 /* Destroy descriptor tree */
660 pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
661 pctldev->desc->npins);
662 device_unregister(&pctldev->dev);
663}
664EXPORT_SYMBOL_GPL(pinctrl_unregister);
665
666static int __init pinctrl_init(void)
667{
668 pr_info("initialized pinctrl subsystem\n");
669 pinctrl_init_debugfs();
670 return 0;
671}
672
673/* init early since many drivers really need to initialized pinmux early */
674core_initcall(pinctrl_init);