Merge tag 'pm-5.11-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
[linux-2.6-microblaze.git] / drivers / pinctrl / pinmux.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Core driver for the pin muxing portions of the pin control subsystem
4  *
5  * Copyright (C) 2011-2012 ST-Ericsson SA
6  * Written on behalf of Linaro for ST-Ericsson
7  * Based on bits of regulator core, gpio core and clk core
8  *
9  * Author: Linus Walleij <linus.walleij@linaro.org>
10  *
11  * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved.
12  */
13 #define pr_fmt(fmt) "pinmux core: " fmt
14
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/init.h>
18 #include <linux/device.h>
19 #include <linux/slab.h>
20 #include <linux/radix-tree.h>
21 #include <linux/err.h>
22 #include <linux/list.h>
23 #include <linux/string.h>
24 #include <linux/debugfs.h>
25 #include <linux/seq_file.h>
26 #include <linux/pinctrl/machine.h>
27 #include <linux/pinctrl/pinmux.h>
28 #include "core.h"
29 #include "pinmux.h"
30
31 int pinmux_check_ops(struct pinctrl_dev *pctldev)
32 {
33         const struct pinmux_ops *ops = pctldev->desc->pmxops;
34         unsigned nfuncs;
35         unsigned selector = 0;
36
37         /* Check that we implement required operations */
38         if (!ops ||
39             !ops->get_functions_count ||
40             !ops->get_function_name ||
41             !ops->get_function_groups ||
42             !ops->set_mux) {
43                 dev_err(pctldev->dev, "pinmux ops lacks necessary functions\n");
44                 return -EINVAL;
45         }
46         /* Check that all functions registered have names */
47         nfuncs = ops->get_functions_count(pctldev);
48         while (selector < nfuncs) {
49                 const char *fname = ops->get_function_name(pctldev,
50                                                            selector);
51                 if (!fname) {
52                         dev_err(pctldev->dev, "pinmux ops has no name for function%u\n",
53                                 selector);
54                         return -EINVAL;
55                 }
56                 selector++;
57         }
58
59         return 0;
60 }
61
62 int pinmux_validate_map(const struct pinctrl_map *map, int i)
63 {
64         if (!map->data.mux.function) {
65                 pr_err("failed to register map %s (%d): no function given\n",
66                        map->name, i);
67                 return -EINVAL;
68         }
69
70         return 0;
71 }
72
73 /**
74  * pinmux_can_be_used_for_gpio() - check if a specific pin
75  *      is either muxed to a different function or used as gpio.
76  *
77  * @pctldev: the associated pin controller device
78  * @pin: the pin number in the global pin space
79  *
80  * Controllers not defined as strict will always return true,
81  * menaning that the gpio can be used.
82  */
83 bool pinmux_can_be_used_for_gpio(struct pinctrl_dev *pctldev, unsigned pin)
84 {
85         struct pin_desc *desc = pin_desc_get(pctldev, pin);
86         const struct pinmux_ops *ops = pctldev->desc->pmxops;
87
88         /* Can't inspect pin, assume it can be used */
89         if (!desc || !ops)
90                 return true;
91
92         if (ops->strict && desc->mux_usecount)
93                 return false;
94
95         return !(ops->strict && !!desc->gpio_owner);
96 }
97
98 /**
99  * pin_request() - request a single pin to be muxed in, typically for GPIO
100  * @pctldev: the associated pin controller device
101  * @pin: the pin number in the global pin space
102  * @owner: a representation of the owner of this pin; typically the device
103  *      name that controls its mux function, or the requested GPIO name
104  * @gpio_range: the range matching the GPIO pin if this is a request for a
105  *      single GPIO pin
106  */
107 static int pin_request(struct pinctrl_dev *pctldev,
108                        int pin, const char *owner,
109                        struct pinctrl_gpio_range *gpio_range)
110 {
111         struct pin_desc *desc;
112         const struct pinmux_ops *ops = pctldev->desc->pmxops;
113         int status = -EINVAL;
114
115         desc = pin_desc_get(pctldev, pin);
116         if (desc == NULL) {
117                 dev_err(pctldev->dev,
118                         "pin %d is not registered so it cannot be requested\n",
119                         pin);
120                 goto out;
121         }
122
123         dev_dbg(pctldev->dev, "request pin %d (%s) for %s\n",
124                 pin, desc->name, owner);
125
126         if ((!gpio_range || ops->strict) &&
127             desc->mux_usecount && strcmp(desc->mux_owner, owner)) {
128                 dev_err(pctldev->dev,
129                         "pin %s already requested by %s; cannot claim for %s\n",
130                         desc->name, desc->mux_owner, owner);
131                 goto out;
132         }
133
134         if ((gpio_range || ops->strict) && desc->gpio_owner) {
135                 dev_err(pctldev->dev,
136                         "pin %s already requested by %s; cannot claim for %s\n",
137                         desc->name, desc->gpio_owner, owner);
138                 goto out;
139         }
140
141         if (gpio_range) {
142                 desc->gpio_owner = owner;
143         } else {
144                 desc->mux_usecount++;
145                 if (desc->mux_usecount > 1)
146                         return 0;
147
148                 desc->mux_owner = owner;
149         }
150
151         /* Let each pin increase references to this module */
152         if (!try_module_get(pctldev->owner)) {
153                 dev_err(pctldev->dev,
154                         "could not increase module refcount for pin %d\n",
155                         pin);
156                 status = -EINVAL;
157                 goto out_free_pin;
158         }
159
160         /*
161          * If there is no kind of request function for the pin we just assume
162          * we got it by default and proceed.
163          */
164         if (gpio_range && ops->gpio_request_enable)
165                 /* This requests and enables a single GPIO pin */
166                 status = ops->gpio_request_enable(pctldev, gpio_range, pin);
167         else if (ops->request)
168                 status = ops->request(pctldev, pin);
169         else
170                 status = 0;
171
172         if (status) {
173                 dev_err(pctldev->dev, "request() failed for pin %d\n", pin);
174                 module_put(pctldev->owner);
175         }
176
177 out_free_pin:
178         if (status) {
179                 if (gpio_range) {
180                         desc->gpio_owner = NULL;
181                 } else {
182                         desc->mux_usecount--;
183                         if (!desc->mux_usecount)
184                                 desc->mux_owner = NULL;
185                 }
186         }
187 out:
188         if (status)
189                 dev_err(pctldev->dev, "pin-%d (%s) status %d\n",
190                         pin, owner, status);
191
192         return status;
193 }
194
195 /**
196  * pin_free() - release a single muxed in pin so something else can be muxed
197  * @pctldev: pin controller device handling this pin
198  * @pin: the pin to free
199  * @gpio_range: the range matching the GPIO pin if this is a request for a
200  *      single GPIO pin
201  *
202  * This function returns a pointer to the previous owner. This is used
203  * for callers that dynamically allocate an owner name so it can be freed
204  * once the pin is free. This is done for GPIO request functions.
205  */
206 static const char *pin_free(struct pinctrl_dev *pctldev, int pin,
207                             struct pinctrl_gpio_range *gpio_range)
208 {
209         const struct pinmux_ops *ops = pctldev->desc->pmxops;
210         struct pin_desc *desc;
211         const char *owner;
212
213         desc = pin_desc_get(pctldev, pin);
214         if (desc == NULL) {
215                 dev_err(pctldev->dev,
216                         "pin is not registered so it cannot be freed\n");
217                 return NULL;
218         }
219
220         if (!gpio_range) {
221                 /*
222                  * A pin should not be freed more times than allocated.
223                  */
224                 if (WARN_ON(!desc->mux_usecount))
225                         return NULL;
226                 desc->mux_usecount--;
227                 if (desc->mux_usecount)
228                         return NULL;
229         }
230
231         /*
232          * If there is no kind of request function for the pin we just assume
233          * we got it by default and proceed.
234          */
235         if (gpio_range && ops->gpio_disable_free)
236                 ops->gpio_disable_free(pctldev, gpio_range, pin);
237         else if (ops->free)
238                 ops->free(pctldev, pin);
239
240         if (gpio_range) {
241                 owner = desc->gpio_owner;
242                 desc->gpio_owner = NULL;
243         } else {
244                 owner = desc->mux_owner;
245                 desc->mux_owner = NULL;
246                 desc->mux_setting = NULL;
247         }
248
249         module_put(pctldev->owner);
250
251         return owner;
252 }
253
254 /**
255  * pinmux_request_gpio() - request pinmuxing for a GPIO pin
256  * @pctldev: pin controller device affected
257  * @pin: the pin to mux in for GPIO
258  * @range: the applicable GPIO range
259  * @gpio: number of requested GPIO
260  */
261 int pinmux_request_gpio(struct pinctrl_dev *pctldev,
262                         struct pinctrl_gpio_range *range,
263                         unsigned pin, unsigned gpio)
264 {
265         const char *owner;
266         int ret;
267
268         /* Conjure some name stating what chip and pin this is taken by */
269         owner = kasprintf(GFP_KERNEL, "%s:%d", range->name, gpio);
270         if (!owner)
271                 return -ENOMEM;
272
273         ret = pin_request(pctldev, pin, owner, range);
274         if (ret < 0)
275                 kfree(owner);
276
277         return ret;
278 }
279
280 /**
281  * pinmux_free_gpio() - release a pin from GPIO muxing
282  * @pctldev: the pin controller device for the pin
283  * @pin: the affected currently GPIO-muxed in pin
284  * @range: applicable GPIO range
285  */
286 void pinmux_free_gpio(struct pinctrl_dev *pctldev, unsigned pin,
287                       struct pinctrl_gpio_range *range)
288 {
289         const char *owner;
290
291         owner = pin_free(pctldev, pin, range);
292         kfree(owner);
293 }
294
295 /**
296  * pinmux_gpio_direction() - set the direction of a single muxed-in GPIO pin
297  * @pctldev: the pin controller handling this pin
298  * @range: applicable GPIO range
299  * @pin: the affected GPIO pin in this controller
300  * @input: true if we set the pin as input, false for output
301  */
302 int pinmux_gpio_direction(struct pinctrl_dev *pctldev,
303                           struct pinctrl_gpio_range *range,
304                           unsigned pin, bool input)
305 {
306         const struct pinmux_ops *ops;
307         int ret;
308
309         ops = pctldev->desc->pmxops;
310
311         if (ops->gpio_set_direction)
312                 ret = ops->gpio_set_direction(pctldev, range, pin, input);
313         else
314                 ret = 0;
315
316         return ret;
317 }
318
319 static int pinmux_func_name_to_selector(struct pinctrl_dev *pctldev,
320                                         const char *function)
321 {
322         const struct pinmux_ops *ops = pctldev->desc->pmxops;
323         unsigned nfuncs = ops->get_functions_count(pctldev);
324         unsigned selector = 0;
325
326         /* See if this pctldev has this function */
327         while (selector < nfuncs) {
328                 const char *fname = ops->get_function_name(pctldev, selector);
329
330                 if (!strcmp(function, fname))
331                         return selector;
332
333                 selector++;
334         }
335
336         return -EINVAL;
337 }
338
339 int pinmux_map_to_setting(const struct pinctrl_map *map,
340                           struct pinctrl_setting *setting)
341 {
342         struct pinctrl_dev *pctldev = setting->pctldev;
343         const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
344         char const * const *groups;
345         unsigned num_groups;
346         int ret;
347         const char *group;
348
349         if (!pmxops) {
350                 dev_err(pctldev->dev, "does not support mux function\n");
351                 return -EINVAL;
352         }
353
354         ret = pinmux_func_name_to_selector(pctldev, map->data.mux.function);
355         if (ret < 0) {
356                 dev_err(pctldev->dev, "invalid function %s in map table\n",
357                         map->data.mux.function);
358                 return ret;
359         }
360         setting->data.mux.func = ret;
361
362         ret = pmxops->get_function_groups(pctldev, setting->data.mux.func,
363                                           &groups, &num_groups);
364         if (ret < 0) {
365                 dev_err(pctldev->dev, "can't query groups for function %s\n",
366                         map->data.mux.function);
367                 return ret;
368         }
369         if (!num_groups) {
370                 dev_err(pctldev->dev,
371                         "function %s can't be selected on any group\n",
372                         map->data.mux.function);
373                 return -EINVAL;
374         }
375         if (map->data.mux.group) {
376                 group = map->data.mux.group;
377                 ret = match_string(groups, num_groups, group);
378                 if (ret < 0) {
379                         dev_err(pctldev->dev,
380                                 "invalid group \"%s\" for function \"%s\"\n",
381                                 group, map->data.mux.function);
382                         return ret;
383                 }
384         } else {
385                 group = groups[0];
386         }
387
388         ret = pinctrl_get_group_selector(pctldev, group);
389         if (ret < 0) {
390                 dev_err(pctldev->dev, "invalid group %s in map table\n",
391                         map->data.mux.group);
392                 return ret;
393         }
394         setting->data.mux.group = ret;
395
396         return 0;
397 }
398
399 void pinmux_free_setting(const struct pinctrl_setting *setting)
400 {
401         /* This function is currently unused */
402 }
403
404 int pinmux_enable_setting(const struct pinctrl_setting *setting)
405 {
406         struct pinctrl_dev *pctldev = setting->pctldev;
407         const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
408         const struct pinmux_ops *ops = pctldev->desc->pmxops;
409         int ret = 0;
410         const unsigned *pins = NULL;
411         unsigned num_pins = 0;
412         int i;
413         struct pin_desc *desc;
414
415         if (pctlops->get_group_pins)
416                 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
417                                               &pins, &num_pins);
418
419         if (ret) {
420                 const char *gname;
421
422                 /* errors only affect debug data, so just warn */
423                 gname = pctlops->get_group_name(pctldev,
424                                                 setting->data.mux.group);
425                 dev_warn(pctldev->dev,
426                          "could not get pins for group %s\n",
427                          gname);
428                 num_pins = 0;
429         }
430
431         /* Try to allocate all pins in this group, one by one */
432         for (i = 0; i < num_pins; i++) {
433                 ret = pin_request(pctldev, pins[i], setting->dev_name, NULL);
434                 if (ret) {
435                         const char *gname;
436                         const char *pname;
437
438                         desc = pin_desc_get(pctldev, pins[i]);
439                         pname = desc ? desc->name : "non-existing";
440                         gname = pctlops->get_group_name(pctldev,
441                                                 setting->data.mux.group);
442                         dev_err(pctldev->dev,
443                                 "could not request pin %d (%s) from group %s "
444                                 " on device %s\n",
445                                 pins[i], pname, gname,
446                                 pinctrl_dev_get_name(pctldev));
447                         goto err_pin_request;
448                 }
449         }
450
451         /* Now that we have acquired the pins, encode the mux setting */
452         for (i = 0; i < num_pins; i++) {
453                 desc = pin_desc_get(pctldev, pins[i]);
454                 if (desc == NULL) {
455                         dev_warn(pctldev->dev,
456                                  "could not get pin desc for pin %d\n",
457                                  pins[i]);
458                         continue;
459                 }
460                 desc->mux_setting = &(setting->data.mux);
461         }
462
463         ret = ops->set_mux(pctldev, setting->data.mux.func,
464                            setting->data.mux.group);
465
466         if (ret)
467                 goto err_set_mux;
468
469         return 0;
470
471 err_set_mux:
472         for (i = 0; i < num_pins; i++) {
473                 desc = pin_desc_get(pctldev, pins[i]);
474                 if (desc)
475                         desc->mux_setting = NULL;
476         }
477 err_pin_request:
478         /* On error release all taken pins */
479         while (--i >= 0)
480                 pin_free(pctldev, pins[i], NULL);
481
482         return ret;
483 }
484
485 void pinmux_disable_setting(const struct pinctrl_setting *setting)
486 {
487         struct pinctrl_dev *pctldev = setting->pctldev;
488         const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
489         int ret = 0;
490         const unsigned *pins = NULL;
491         unsigned num_pins = 0;
492         int i;
493         struct pin_desc *desc;
494
495         if (pctlops->get_group_pins)
496                 ret = pctlops->get_group_pins(pctldev, setting->data.mux.group,
497                                               &pins, &num_pins);
498         if (ret) {
499                 const char *gname;
500
501                 /* errors only affect debug data, so just warn */
502                 gname = pctlops->get_group_name(pctldev,
503                                                 setting->data.mux.group);
504                 dev_warn(pctldev->dev,
505                          "could not get pins for group %s\n",
506                          gname);
507                 num_pins = 0;
508         }
509
510         /* Flag the descs that no setting is active */
511         for (i = 0; i < num_pins; i++) {
512                 desc = pin_desc_get(pctldev, pins[i]);
513                 if (desc == NULL) {
514                         dev_warn(pctldev->dev,
515                                  "could not get pin desc for pin %d\n",
516                                  pins[i]);
517                         continue;
518                 }
519                 if (desc->mux_setting == &(setting->data.mux)) {
520                         pin_free(pctldev, pins[i], NULL);
521                 } else {
522                         const char *gname;
523
524                         gname = pctlops->get_group_name(pctldev,
525                                                 setting->data.mux.group);
526                         dev_warn(pctldev->dev,
527                                  "not freeing pin %d (%s) as part of "
528                                  "deactivating group %s - it is already "
529                                  "used for some other setting",
530                                  pins[i], desc->name, gname);
531                 }
532         }
533 }
534
535 #ifdef CONFIG_DEBUG_FS
536
537 /* Called from pincontrol core */
538 static int pinmux_functions_show(struct seq_file *s, void *what)
539 {
540         struct pinctrl_dev *pctldev = s->private;
541         const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
542         unsigned nfuncs;
543         unsigned func_selector = 0;
544
545         if (!pmxops)
546                 return 0;
547
548         mutex_lock(&pctldev->mutex);
549         nfuncs = pmxops->get_functions_count(pctldev);
550         while (func_selector < nfuncs) {
551                 const char *func = pmxops->get_function_name(pctldev,
552                                                           func_selector);
553                 const char * const *groups;
554                 unsigned num_groups;
555                 int ret;
556                 int i;
557
558                 ret = pmxops->get_function_groups(pctldev, func_selector,
559                                                   &groups, &num_groups);
560                 if (ret) {
561                         seq_printf(s, "function %s: COULD NOT GET GROUPS\n",
562                                    func);
563                         func_selector++;
564                         continue;
565                 }
566
567                 seq_printf(s, "function: %s, groups = [ ", func);
568                 for (i = 0; i < num_groups; i++)
569                         seq_printf(s, "%s ", groups[i]);
570                 seq_puts(s, "]\n");
571
572                 func_selector++;
573         }
574
575         mutex_unlock(&pctldev->mutex);
576
577         return 0;
578 }
579
580 static int pinmux_pins_show(struct seq_file *s, void *what)
581 {
582         struct pinctrl_dev *pctldev = s->private;
583         const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
584         const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
585         unsigned i, pin;
586
587         if (!pmxops)
588                 return 0;
589
590         seq_puts(s, "Pinmux settings per pin\n");
591         if (pmxops->strict)
592                 seq_puts(s,
593                  "Format: pin (name): mux_owner|gpio_owner (strict) hog?\n");
594         else
595                 seq_puts(s,
596                 "Format: pin (name): mux_owner gpio_owner hog?\n");
597
598         mutex_lock(&pctldev->mutex);
599
600         /* The pin number can be retrived from the pin controller descriptor */
601         for (i = 0; i < pctldev->desc->npins; i++) {
602                 struct pin_desc *desc;
603                 bool is_hog = false;
604
605                 pin = pctldev->desc->pins[i].number;
606                 desc = pin_desc_get(pctldev, pin);
607                 /* Skip if we cannot search the pin */
608                 if (desc == NULL)
609                         continue;
610
611                 if (desc->mux_owner &&
612                     !strcmp(desc->mux_owner, pinctrl_dev_get_name(pctldev)))
613                         is_hog = true;
614
615                 if (pmxops->strict) {
616                         if (desc->mux_owner)
617                                 seq_printf(s, "pin %d (%s): device %s%s",
618                                            pin, desc->name, desc->mux_owner,
619                                            is_hog ? " (HOG)" : "");
620                         else if (desc->gpio_owner)
621                                 seq_printf(s, "pin %d (%s): GPIO %s",
622                                            pin, desc->name, desc->gpio_owner);
623                         else
624                                 seq_printf(s, "pin %d (%s): UNCLAIMED",
625                                            pin, desc->name);
626                 } else {
627                         /* For non-strict controllers */
628                         seq_printf(s, "pin %d (%s): %s %s%s", pin, desc->name,
629                                    desc->mux_owner ? desc->mux_owner
630                                    : "(MUX UNCLAIMED)",
631                                    desc->gpio_owner ? desc->gpio_owner
632                                    : "(GPIO UNCLAIMED)",
633                                    is_hog ? " (HOG)" : "");
634                 }
635
636                 /* If mux: print function+group claiming the pin */
637                 if (desc->mux_setting)
638                         seq_printf(s, " function %s group %s\n",
639                                    pmxops->get_function_name(pctldev,
640                                         desc->mux_setting->func),
641                                    pctlops->get_group_name(pctldev,
642                                         desc->mux_setting->group));
643                 else
644                         seq_putc(s, '\n');
645         }
646
647         mutex_unlock(&pctldev->mutex);
648
649         return 0;
650 }
651
652 void pinmux_show_map(struct seq_file *s, const struct pinctrl_map *map)
653 {
654         seq_printf(s, "group %s\nfunction %s\n",
655                 map->data.mux.group ? map->data.mux.group : "(default)",
656                 map->data.mux.function);
657 }
658
659 void pinmux_show_setting(struct seq_file *s,
660                          const struct pinctrl_setting *setting)
661 {
662         struct pinctrl_dev *pctldev = setting->pctldev;
663         const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
664         const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
665
666         seq_printf(s, "group: %s (%u) function: %s (%u)\n",
667                    pctlops->get_group_name(pctldev, setting->data.mux.group),
668                    setting->data.mux.group,
669                    pmxops->get_function_name(pctldev, setting->data.mux.func),
670                    setting->data.mux.func);
671 }
672
673 DEFINE_SHOW_ATTRIBUTE(pinmux_functions);
674 DEFINE_SHOW_ATTRIBUTE(pinmux_pins);
675
676 void pinmux_init_device_debugfs(struct dentry *devroot,
677                          struct pinctrl_dev *pctldev)
678 {
679         debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
680                             devroot, pctldev, &pinmux_functions_fops);
681         debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
682                             devroot, pctldev, &pinmux_pins_fops);
683 }
684
685 #endif /* CONFIG_DEBUG_FS */
686
687 #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
688
689 /**
690  * pinmux_generic_get_function_count() - returns number of functions
691  * @pctldev: pin controller device
692  */
693 int pinmux_generic_get_function_count(struct pinctrl_dev *pctldev)
694 {
695         return pctldev->num_functions;
696 }
697 EXPORT_SYMBOL_GPL(pinmux_generic_get_function_count);
698
699 /**
700  * pinmux_generic_get_function_name() - returns the function name
701  * @pctldev: pin controller device
702  * @selector: function number
703  */
704 const char *
705 pinmux_generic_get_function_name(struct pinctrl_dev *pctldev,
706                                  unsigned int selector)
707 {
708         struct function_desc *function;
709
710         function = radix_tree_lookup(&pctldev->pin_function_tree,
711                                      selector);
712         if (!function)
713                 return NULL;
714
715         return function->name;
716 }
717 EXPORT_SYMBOL_GPL(pinmux_generic_get_function_name);
718
719 /**
720  * pinmux_generic_get_function_groups() - gets the function groups
721  * @pctldev: pin controller device
722  * @selector: function number
723  * @groups: array of pin groups
724  * @num_groups: number of pin groups
725  */
726 int pinmux_generic_get_function_groups(struct pinctrl_dev *pctldev,
727                                        unsigned int selector,
728                                        const char * const **groups,
729                                        unsigned * const num_groups)
730 {
731         struct function_desc *function;
732
733         function = radix_tree_lookup(&pctldev->pin_function_tree,
734                                      selector);
735         if (!function) {
736                 dev_err(pctldev->dev, "%s could not find function%i\n",
737                         __func__, selector);
738                 return -EINVAL;
739         }
740         *groups = function->group_names;
741         *num_groups = function->num_group_names;
742
743         return 0;
744 }
745 EXPORT_SYMBOL_GPL(pinmux_generic_get_function_groups);
746
747 /**
748  * pinmux_generic_get_function() - returns a function based on the number
749  * @pctldev: pin controller device
750  * @selector: function number
751  */
752 struct function_desc *pinmux_generic_get_function(struct pinctrl_dev *pctldev,
753                                                   unsigned int selector)
754 {
755         struct function_desc *function;
756
757         function = radix_tree_lookup(&pctldev->pin_function_tree,
758                                      selector);
759         if (!function)
760                 return NULL;
761
762         return function;
763 }
764 EXPORT_SYMBOL_GPL(pinmux_generic_get_function);
765
766 /**
767  * pinmux_generic_add_function() - adds a function group
768  * @pctldev: pin controller device
769  * @name: name of the function
770  * @groups: array of pin groups
771  * @num_groups: number of pin groups
772  * @data: pin controller driver specific data
773  */
774 int pinmux_generic_add_function(struct pinctrl_dev *pctldev,
775                                 const char *name,
776                                 const char **groups,
777                                 const unsigned int num_groups,
778                                 void *data)
779 {
780         struct function_desc *function;
781         int selector;
782
783         if (!name)
784                 return -EINVAL;
785
786         selector = pinmux_func_name_to_selector(pctldev, name);
787         if (selector >= 0)
788                 return selector;
789
790         selector = pctldev->num_functions;
791
792         function = devm_kzalloc(pctldev->dev, sizeof(*function), GFP_KERNEL);
793         if (!function)
794                 return -ENOMEM;
795
796         function->name = name;
797         function->group_names = groups;
798         function->num_group_names = num_groups;
799         function->data = data;
800
801         radix_tree_insert(&pctldev->pin_function_tree, selector, function);
802
803         pctldev->num_functions++;
804
805         return selector;
806 }
807 EXPORT_SYMBOL_GPL(pinmux_generic_add_function);
808
809 /**
810  * pinmux_generic_remove_function() - removes a numbered function
811  * @pctldev: pin controller device
812  * @selector: function number
813  *
814  * Note that the caller must take care of locking.
815  */
816 int pinmux_generic_remove_function(struct pinctrl_dev *pctldev,
817                                    unsigned int selector)
818 {
819         struct function_desc *function;
820
821         function = radix_tree_lookup(&pctldev->pin_function_tree,
822                                      selector);
823         if (!function)
824                 return -ENOENT;
825
826         radix_tree_delete(&pctldev->pin_function_tree, selector);
827         devm_kfree(pctldev->dev, function);
828
829         pctldev->num_functions--;
830
831         return 0;
832 }
833 EXPORT_SYMBOL_GPL(pinmux_generic_remove_function);
834
835 /**
836  * pinmux_generic_free_functions() - removes all functions
837  * @pctldev: pin controller device
838  *
839  * Note that the caller must take care of locking. The pinctrl
840  * functions are allocated with devm_kzalloc() so no need to free
841  * them here.
842  */
843 void pinmux_generic_free_functions(struct pinctrl_dev *pctldev)
844 {
845         struct radix_tree_iter iter;
846         void __rcu **slot;
847
848         radix_tree_for_each_slot(slot, &pctldev->pin_function_tree, &iter, 0)
849                 radix_tree_delete(&pctldev->pin_function_tree, iter.index);
850
851         pctldev->num_functions = 0;
852 }
853
854 #endif /* CONFIG_GENERIC_PINMUX_FUNCTIONS */