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