• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
pinmux_check_ops(struct pinctrl_dev * pctldev)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 
pinmux_validate_map(const struct pinctrl_map * map,int i)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  */
pinmux_can_be_used_for_gpio(struct pinctrl_dev * pctldev,unsigned pin)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  */
pin_request(struct pinctrl_dev * pctldev,int pin,const char * owner,struct pinctrl_gpio_range * gpio_range)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  */
pin_free(struct pinctrl_dev * pctldev,int pin,struct pinctrl_gpio_range * gpio_range)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  */
pinmux_request_gpio(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned pin,unsigned gpio)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  */
pinmux_free_gpio(struct pinctrl_dev * pctldev,unsigned pin,struct pinctrl_gpio_range * range)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  */
pinmux_gpio_direction(struct pinctrl_dev * pctldev,struct pinctrl_gpio_range * range,unsigned pin,bool input)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 
pinmux_func_name_to_selector(struct pinctrl_dev * pctldev,const char * function)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 
pinmux_map_to_setting(const struct pinctrl_map * map,struct pinctrl_setting * setting)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 
pinmux_free_setting(const struct pinctrl_setting * setting)399 void pinmux_free_setting(const struct pinctrl_setting *setting)
400 {
401 	/* This function is currently unused */
402 }
403 
pinmux_enable_setting(const struct pinctrl_setting * setting)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 
pinmux_disable_setting(const struct pinctrl_setting * setting)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 */
pinmux_functions_show(struct seq_file * s,void * what)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 
pinmux_pins_show(struct seq_file * s,void * what)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 
pinmux_show_map(struct seq_file * s,const struct pinctrl_map * map)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 
pinmux_show_setting(struct seq_file * s,const struct pinctrl_setting * setting)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 
pinmux_init_device_debugfs(struct dentry * devroot,struct pinctrl_dev * pctldev)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  */
pinmux_generic_get_function_count(struct pinctrl_dev * pctldev)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 *
pinmux_generic_get_function_name(struct pinctrl_dev * pctldev,unsigned int selector)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  */
pinmux_generic_get_function_groups(struct pinctrl_dev * pctldev,unsigned int selector,const char * const ** groups,unsigned * const num_groups)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  */
pinmux_generic_get_function(struct pinctrl_dev * pctldev,unsigned int selector)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  */
pinmux_generic_add_function(struct pinctrl_dev * pctldev,const char * name,const char ** groups,const unsigned int num_groups,void * data)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  */
pinmux_generic_remove_function(struct pinctrl_dev * pctldev,unsigned int selector)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  */
pinmux_generic_free_functions(struct pinctrl_dev * pctldev)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 */
855