xref: /rk3399_rockchip-uboot/drivers/gpio/gpio-uclass.c (revision a4719b90cc2f09e5348b830d61f32ab6d991069a)
1 /*
2  * Copyright (c) 2013 Google, Inc
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 #include <common.h>
8 #include <dm.h>
9 #include <dm/device-internal.h>
10 #include <dm/lists.h>
11 #include <dm/uclass-internal.h>
12 #include <dt-bindings/gpio/gpio.h>
13 #include <errno.h>
14 #include <fdtdec.h>
15 #include <malloc.h>
16 #include <asm/gpio.h>
17 #include <linux/bug.h>
18 #include <linux/ctype.h>
19 
20 DECLARE_GLOBAL_DATA_PTR;
21 
22 /**
23  * gpio_to_device() - Convert global GPIO number to device, number
24  *
25  * Convert the GPIO number to an entry in the list of GPIOs
26  * or GPIO blocks registered with the GPIO controller. Returns
27  * entry on success, NULL on error.
28  *
29  * @gpio:	The numeric representation of the GPIO
30  * @desc:	Returns description (desc->flags will always be 0)
31  * @return 0 if found, -ENOENT if not found
32  */
33 static int gpio_to_device(unsigned int gpio, struct gpio_desc *desc)
34 {
35 	struct gpio_dev_priv *uc_priv;
36 	struct udevice *dev;
37 
38 	for (uclass_first_device(UCLASS_GPIO, &dev);
39 	     dev;
40 	     uclass_next_device(&dev)) {
41 		uc_priv = dev_get_uclass_priv(dev);
42 		if (gpio >= uc_priv->gpio_base &&
43 		    gpio < uc_priv->gpio_base + uc_priv->gpio_count) {
44 			desc->dev = dev;
45 			desc->offset = gpio - uc_priv->gpio_base;
46 			desc->flags = 0;
47 			return 0;
48 		}
49 	}
50 
51 	/* No such GPIO */
52 	return -ENOENT;
53 }
54 
55 int dm_gpio_lookup_name(const char *name, struct gpio_desc *desc)
56 {
57 	struct gpio_dev_priv *uc_priv = NULL;
58 	struct udevice *dev;
59 	ulong offset;
60 	int numeric;
61 
62 	numeric = isdigit(*name) ? simple_strtoul(name, NULL, 10) : -1;
63 	for (uclass_first_device(UCLASS_GPIO, &dev);
64 	     dev;
65 	     uclass_next_device(&dev)) {
66 		int len;
67 
68 		uc_priv = dev_get_uclass_priv(dev);
69 		if (numeric != -1) {
70 			offset = numeric - uc_priv->gpio_base;
71 			/* Allow GPIOs to be numbered from 0 */
72 			if (offset < uc_priv->gpio_count)
73 				break;
74 		}
75 
76 		len = uc_priv->bank_name ? strlen(uc_priv->bank_name) : 0;
77 
78 		if (!strncasecmp(name, uc_priv->bank_name, len)) {
79 			if (!strict_strtoul(name + len, 10, &offset))
80 				break;
81 		}
82 	}
83 
84 	if (!dev)
85 		return -EINVAL;
86 
87 	desc->dev = dev;
88 	desc->offset = offset;
89 
90 	return 0;
91 }
92 
93 int gpio_lookup_name(const char *name, struct udevice **devp,
94 		     unsigned int *offsetp, unsigned int *gpiop)
95 {
96 	struct gpio_desc desc;
97 	int ret;
98 
99 	if (devp)
100 		*devp = NULL;
101 	ret = dm_gpio_lookup_name(name, &desc);
102 	if (ret)
103 		return ret;
104 
105 	if (devp)
106 		*devp = desc.dev;
107 	if (offsetp)
108 		*offsetp = desc.offset;
109 	if (gpiop) {
110 		struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(desc.dev);
111 
112 		*gpiop = uc_priv->gpio_base + desc.offset;
113 	}
114 
115 	return 0;
116 }
117 
118 int gpio_xlate_offs_flags(struct udevice *dev, struct gpio_desc *desc,
119 			  struct ofnode_phandle_args *args)
120 {
121 	if (args->args_count < 1)
122 		return -EINVAL;
123 
124 	desc->offset = args->args[0];
125 
126 	if (args->args_count < 2)
127 		return 0;
128 
129 	if (args->args[1] & GPIO_ACTIVE_LOW)
130 		desc->flags = GPIOD_ACTIVE_LOW;
131 
132 	return 0;
133 }
134 
135 static int gpio_find_and_xlate(struct gpio_desc *desc,
136 			       struct ofnode_phandle_args *args)
137 {
138 	struct dm_gpio_ops *ops = gpio_get_ops(desc->dev);
139 
140 	if (ops->xlate)
141 		return ops->xlate(desc->dev, desc, args);
142 	else
143 		return gpio_xlate_offs_flags(desc->dev, desc, args);
144 }
145 
146 #if defined(CONFIG_GPIO_HOG)
147 
148 struct gpio_hog_priv {
149 	struct gpio_desc gpiod;
150 };
151 
152 struct gpio_hog_data {
153 	int gpiod_flags;
154 	int value;
155 	u32 val[2];
156 };
157 
158 static int gpio_hog_ofdata_to_platdata(struct udevice *dev)
159 {
160 	struct gpio_hog_data *plat = dev_get_platdata(dev);
161 	const char *nodename;
162 	int ret;
163 
164 	plat->value = 0;
165 	if (dev_read_bool(dev, "input")) {
166 		plat->gpiod_flags = GPIOD_IS_IN;
167 	} else if (dev_read_bool(dev, "output-high")) {
168 		plat->value = 1;
169 		plat->gpiod_flags = GPIOD_IS_OUT;
170 	} else if (dev_read_bool(dev, "output-low")) {
171 		plat->gpiod_flags = GPIOD_IS_OUT;
172 	} else {
173 		printf("%s: missing gpio-hog state.\n", __func__);
174 		return -EINVAL;
175 	}
176 	ret = dev_read_u32_array(dev, "gpios", plat->val, 2);
177 	if (ret) {
178 		printf("%s: wrong gpios property, 2 values needed %d\n",
179 		       __func__, ret);
180 		return ret;
181 	}
182 	nodename = dev_read_string(dev, "line-name");
183 	if (nodename)
184 		device_set_name(dev, nodename);
185 
186 	return 0;
187 }
188 
189 static int gpio_hog_probe(struct udevice *dev)
190 {
191 	struct gpio_hog_data *plat = dev_get_platdata(dev);
192 	struct gpio_hog_priv *priv = dev_get_priv(dev);
193 	int ret;
194 
195 	ret = gpio_dev_request_index(dev->parent, dev->name, "gpio-hog",
196 				     plat->val[0], plat->gpiod_flags,
197 				     plat->val[1], &priv->gpiod);
198 	if (ret < 0) {
199 		debug("%s: node %s could not get gpio.\n", __func__,
200 		      dev->name);
201 		return ret;
202 	}
203 
204 	if (plat->gpiod_flags == GPIOD_IS_OUT) {
205 		ret = dm_gpio_set_value(&priv->gpiod, plat->value);
206 		if (ret < 0) {
207 			debug("%s: node %s could not set gpio.\n", __func__,
208 			      dev->name);
209 			return ret;
210 		}
211 	}
212 
213 	return 0;
214 }
215 
216 int gpio_hog_probe_all(void)
217 {
218 	struct udevice *dev;
219 	int ret;
220 	int retval = 0;
221 
222 	for (uclass_find_first_device(UCLASS_NOP, &dev);
223 	     dev;
224 	     uclass_find_next_device(&dev)) {
225 		if (dev->driver == DM_GET_DRIVER(gpio_hog)) {
226 			ret = device_probe(dev);
227 			if (ret) {
228 				printf("Failed to probe device %s err: %d\n",
229 				       dev->name, ret);
230 				retval = ret;
231 			}
232 		}
233 	}
234 
235 	return retval;
236 }
237 
238 int gpio_hog_lookup_name(const char *name, struct gpio_desc **desc)
239 {
240 	struct udevice *dev;
241 
242 	*desc = NULL;
243 	gpio_hog_probe_all();
244 	if (!uclass_get_device_by_name(UCLASS_NOP, name, &dev)) {
245 		struct gpio_hog_priv *priv = dev_get_priv(dev);
246 
247 		*desc = &priv->gpiod;
248 		return 0;
249 	}
250 
251 	return -ENODEV;
252 }
253 
254 U_BOOT_DRIVER(gpio_hog) = {
255 	.name	= "gpio_hog",
256 	.id	= UCLASS_NOP,
257 	.ofdata_to_platdata = gpio_hog_ofdata_to_platdata,
258 	.probe = gpio_hog_probe,
259 	.priv_auto_alloc_size = sizeof(struct gpio_hog_priv),
260 	.platdata_auto_alloc_size = sizeof(struct gpio_hog_data),
261 };
262 #else
263 int gpio_hog_lookup_name(const char *name, struct gpio_desc **desc)
264 {
265 	return 0;
266 }
267 #endif
268 
269 int dm_gpio_request(struct gpio_desc *desc, const char *label)
270 {
271 	struct udevice *dev = desc->dev;
272 	struct gpio_dev_priv *uc_priv;
273 	char *str;
274 	int ret;
275 
276 	uc_priv = dev_get_uclass_priv(dev);
277 	if (uc_priv->name[desc->offset])
278 		return -EBUSY;
279 	str = strdup(label);
280 	if (!str)
281 		return -ENOMEM;
282 	if (gpio_get_ops(dev)->request) {
283 		ret = gpio_get_ops(dev)->request(dev, desc->offset, label);
284 		if (ret) {
285 			free(str);
286 			return ret;
287 		}
288 	}
289 	uc_priv->name[desc->offset] = str;
290 
291 	return 0;
292 }
293 
294 static int dm_gpio_requestf(struct gpio_desc *desc, const char *fmt, ...)
295 {
296 #if !defined(CONFIG_SPL_BUILD) || !defined(CONFIG_USE_TINY_PRINTF)
297 	va_list args;
298 	char buf[40];
299 
300 	va_start(args, fmt);
301 	vscnprintf(buf, sizeof(buf), fmt, args);
302 	va_end(args);
303 	return dm_gpio_request(desc, buf);
304 #else
305 	return dm_gpio_request(desc, fmt);
306 #endif
307 }
308 
309 /**
310  * gpio_request() - [COMPAT] Request GPIO
311  * gpio:	GPIO number
312  * label:	Name for the requested GPIO
313  *
314  * The label is copied and allocated so the caller does not need to keep
315  * the pointer around.
316  *
317  * This function implements the API that's compatible with current
318  * GPIO API used in U-Boot. The request is forwarded to particular
319  * GPIO driver. Returns 0 on success, negative value on error.
320  */
321 int gpio_request(unsigned gpio, const char *label)
322 {
323 	struct gpio_desc desc;
324 	int ret;
325 
326 	ret = gpio_to_device(gpio, &desc);
327 	if (ret)
328 		return ret;
329 
330 	return dm_gpio_request(&desc, label);
331 }
332 
333 /**
334  * gpio_requestf() - [COMPAT] Request GPIO
335  * @gpio:	GPIO number
336  * @fmt:	Format string for the requested GPIO
337  * @...:	Arguments for the printf() format string
338  *
339  * This function implements the API that's compatible with current
340  * GPIO API used in U-Boot. The request is forwarded to particular
341  * GPIO driver. Returns 0 on success, negative value on error.
342  */
343 int gpio_requestf(unsigned gpio, const char *fmt, ...)
344 {
345 #if !defined(CONFIG_SPL_BUILD) || !defined(CONFIG_USE_TINY_PRINTF)
346 	va_list args;
347 	char buf[40];
348 
349 	va_start(args, fmt);
350 	vscnprintf(buf, sizeof(buf), fmt, args);
351 	va_end(args);
352 	return gpio_request(gpio, buf);
353 #else
354 	return gpio_request(gpio, fmt);
355 #endif
356 }
357 
358 int _dm_gpio_free(struct udevice *dev, uint offset)
359 {
360 	struct gpio_dev_priv *uc_priv;
361 	int ret;
362 
363 	uc_priv = dev_get_uclass_priv(dev);
364 	if (!uc_priv->name[offset])
365 		return -ENXIO;
366 	if (gpio_get_ops(dev)->free) {
367 		ret = gpio_get_ops(dev)->free(dev, offset);
368 		if (ret)
369 			return ret;
370 	}
371 
372 	free(uc_priv->name[offset]);
373 	uc_priv->name[offset] = NULL;
374 
375 	return 0;
376 }
377 
378 /**
379  * gpio_free() - [COMPAT] Relinquish GPIO
380  * gpio:	GPIO number
381  *
382  * This function implements the API that's compatible with current
383  * GPIO API used in U-Boot. The request is forwarded to particular
384  * GPIO driver. Returns 0 on success, negative value on error.
385  */
386 int gpio_free(unsigned gpio)
387 {
388 	struct gpio_desc desc;
389 	int ret;
390 
391 	ret = gpio_to_device(gpio, &desc);
392 	if (ret)
393 		return ret;
394 
395 	return _dm_gpio_free(desc.dev, desc.offset);
396 }
397 
398 static int check_reserved(const struct gpio_desc *desc, const char *func)
399 {
400 	struct gpio_dev_priv *uc_priv;
401 
402 	if (!dm_gpio_is_valid(desc))
403 		return -ENOENT;
404 
405 	uc_priv = dev_get_uclass_priv(desc->dev);
406 	if (!uc_priv->name[desc->offset]) {
407 		printf("%s: %s: error: gpio %s%d not reserved\n",
408 		       desc->dev->name, func,
409 		       uc_priv->bank_name ? uc_priv->bank_name : "",
410 		       desc->offset);
411 		return -EBUSY;
412 	}
413 
414 	return 0;
415 }
416 
417 /**
418  * gpio_direction_input() - [COMPAT] Set GPIO direction to input
419  * gpio:	GPIO number
420  *
421  * This function implements the API that's compatible with current
422  * GPIO API used in U-Boot. The request is forwarded to particular
423  * GPIO driver. Returns 0 on success, negative value on error.
424  */
425 int gpio_direction_input(unsigned gpio)
426 {
427 	struct gpio_desc desc;
428 	int ret;
429 
430 	ret = gpio_to_device(gpio, &desc);
431 	if (ret)
432 		return ret;
433 	ret = check_reserved(&desc, "dir_input");
434 	if (ret)
435 		return ret;
436 
437 	return gpio_get_ops(desc.dev)->direction_input(desc.dev, desc.offset);
438 }
439 
440 /**
441  * gpio_direction_output() - [COMPAT] Set GPIO direction to output and set value
442  * gpio:	GPIO number
443  * value:	Logical value to be set on the GPIO pin
444  *
445  * This function implements the API that's compatible with current
446  * GPIO API used in U-Boot. The request is forwarded to particular
447  * GPIO driver. Returns 0 on success, negative value on error.
448  */
449 int gpio_direction_output(unsigned gpio, int value)
450 {
451 	struct gpio_desc desc;
452 	int ret;
453 
454 	ret = gpio_to_device(gpio, &desc);
455 	if (ret)
456 		return ret;
457 	ret = check_reserved(&desc, "dir_output");
458 	if (ret)
459 		return ret;
460 
461 	return gpio_get_ops(desc.dev)->direction_output(desc.dev,
462 							desc.offset, value);
463 }
464 
465 int dm_gpio_get_value(const struct gpio_desc *desc)
466 {
467 	int value;
468 	int ret;
469 
470 	ret = check_reserved(desc, "get_value");
471 	if (ret)
472 		return ret;
473 
474 	value = gpio_get_ops(desc->dev)->get_value(desc->dev, desc->offset);
475 
476 	return desc->flags & GPIOD_ACTIVE_LOW ? !value : value;
477 }
478 
479 int dm_gpio_set_value(const struct gpio_desc *desc, int value)
480 {
481 	int ret;
482 
483 	ret = check_reserved(desc, "set_value");
484 	if (ret)
485 		return ret;
486 
487 	if (desc->flags & GPIOD_ACTIVE_LOW)
488 		value = !value;
489 	gpio_get_ops(desc->dev)->set_value(desc->dev, desc->offset, value);
490 	return 0;
491 }
492 
493 int dm_gpio_get_open_drain(struct gpio_desc *desc)
494 {
495 	struct dm_gpio_ops *ops = gpio_get_ops(desc->dev);
496 	int ret;
497 
498 	ret = check_reserved(desc, "get_open_drain");
499 	if (ret)
500 		return ret;
501 
502 	if (ops->set_open_drain)
503 		return ops->get_open_drain(desc->dev, desc->offset);
504 	else
505 		return -ENOSYS;
506 }
507 
508 int dm_gpio_set_open_drain(struct gpio_desc *desc, int value)
509 {
510 	struct dm_gpio_ops *ops = gpio_get_ops(desc->dev);
511 	int ret;
512 
513 	ret = check_reserved(desc, "set_open_drain");
514 	if (ret)
515 		return ret;
516 
517 	if (ops->set_open_drain)
518 		ret = ops->set_open_drain(desc->dev, desc->offset, value);
519 	else
520 		return 0; /* feature not supported -> ignore setting */
521 
522 	return ret;
523 }
524 
525 int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags)
526 {
527 	struct udevice *dev = desc->dev;
528 	struct dm_gpio_ops *ops = gpio_get_ops(dev);
529 	int ret;
530 
531 	ret = check_reserved(desc, "set_dir");
532 	if (ret)
533 		return ret;
534 
535 	if (flags & GPIOD_IS_OUT) {
536 		int value = flags & GPIOD_IS_OUT_ACTIVE ? 1 : 0;
537 
538 		if (flags & GPIOD_ACTIVE_LOW)
539 			value = !value;
540 		ret = ops->direction_output(dev, desc->offset, value);
541 	} else  if (flags & GPIOD_IS_IN) {
542 		ret = ops->direction_input(dev, desc->offset);
543 	}
544 	if (ret)
545 		return ret;
546 	/*
547 	 * Update desc->flags here, so that GPIO_ACTIVE_LOW is honoured in
548 	 * futures
549 	 */
550 	desc->flags = flags;
551 
552 	return 0;
553 }
554 
555 int dm_gpio_set_dir(struct gpio_desc *desc)
556 {
557 	return dm_gpio_set_dir_flags(desc, desc->flags);
558 }
559 
560 /**
561  * gpio_get_value() - [COMPAT] Sample GPIO pin and return it's value
562  * gpio:	GPIO number
563  *
564  * This function implements the API that's compatible with current
565  * GPIO API used in U-Boot. The request is forwarded to particular
566  * GPIO driver. Returns the value of the GPIO pin, or negative value
567  * on error.
568  */
569 int gpio_get_value(unsigned gpio)
570 {
571 	int ret;
572 
573 	struct gpio_desc desc;
574 
575 	ret = gpio_to_device(gpio, &desc);
576 	if (ret)
577 		return ret;
578 	return dm_gpio_get_value(&desc);
579 }
580 
581 /**
582  * gpio_set_value() - [COMPAT] Configure logical value on GPIO pin
583  * gpio:	GPIO number
584  * value:	Logical value to be set on the GPIO pin.
585  *
586  * This function implements the API that's compatible with current
587  * GPIO API used in U-Boot. The request is forwarded to particular
588  * GPIO driver. Returns 0 on success, negative value on error.
589  */
590 int gpio_set_value(unsigned gpio, int value)
591 {
592 	struct gpio_desc desc;
593 	int ret;
594 
595 	ret = gpio_to_device(gpio, &desc);
596 	if (ret)
597 		return ret;
598 	return dm_gpio_set_value(&desc, value);
599 }
600 
601 const char *gpio_get_bank_info(struct udevice *dev, int *bit_count)
602 {
603 	struct gpio_dev_priv *priv;
604 
605 	/* Must be called on an active device */
606 	priv = dev_get_uclass_priv(dev);
607 	assert(priv);
608 
609 	*bit_count = priv->gpio_count;
610 	return priv->bank_name;
611 }
612 
613 static const char * const gpio_function[GPIOF_COUNT] = {
614 	"input",
615 	"output",
616 	"unused",
617 	"unknown",
618 	"func",
619 };
620 
621 static int get_function(struct udevice *dev, int offset, bool skip_unused,
622 			const char **namep)
623 {
624 	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
625 	struct dm_gpio_ops *ops = gpio_get_ops(dev);
626 
627 	BUILD_BUG_ON(GPIOF_COUNT != ARRAY_SIZE(gpio_function));
628 	if (!device_active(dev))
629 		return -ENODEV;
630 	if (offset < 0 || offset >= uc_priv->gpio_count)
631 		return -EINVAL;
632 	if (namep)
633 		*namep = uc_priv->name[offset];
634 	if (skip_unused && !uc_priv->name[offset])
635 		return GPIOF_UNUSED;
636 	if (ops->get_function) {
637 		int ret;
638 
639 		ret = ops->get_function(dev, offset);
640 		if (ret < 0)
641 			return ret;
642 		if (ret >= ARRAY_SIZE(gpio_function))
643 			return -ENODATA;
644 		return ret;
645 	}
646 
647 	return GPIOF_UNKNOWN;
648 }
649 
650 int gpio_get_function(struct udevice *dev, int offset, const char **namep)
651 {
652 	return get_function(dev, offset, true, namep);
653 }
654 
655 int gpio_get_raw_function(struct udevice *dev, int offset, const char **namep)
656 {
657 	return get_function(dev, offset, false, namep);
658 }
659 
660 int gpio_get_status(struct udevice *dev, int offset, char *buf, int buffsize)
661 {
662 	struct dm_gpio_ops *ops = gpio_get_ops(dev);
663 	struct gpio_dev_priv *priv;
664 	char *str = buf;
665 	int func;
666 	int ret;
667 	int len;
668 
669 	BUILD_BUG_ON(GPIOF_COUNT != ARRAY_SIZE(gpio_function));
670 
671 	*buf = 0;
672 	priv = dev_get_uclass_priv(dev);
673 	ret = gpio_get_raw_function(dev, offset, NULL);
674 	if (ret < 0)
675 		return ret;
676 	func = ret;
677 	len = snprintf(str, buffsize, "%s%d: %s",
678 		       priv->bank_name ? priv->bank_name : "",
679 		       offset, gpio_function[func]);
680 	if (func == GPIOF_INPUT || func == GPIOF_OUTPUT ||
681 	    func == GPIOF_UNUSED) {
682 		const char *label;
683 		bool used;
684 
685 		ret = ops->get_value(dev, offset);
686 		if (ret < 0)
687 			return ret;
688 		used = gpio_get_function(dev, offset, &label) != GPIOF_UNUSED;
689 		snprintf(str + len, buffsize - len, ": %d [%c]%s%s",
690 			 ret,
691 			 used ? 'x' : ' ',
692 			 used ? " " : "",
693 			 label ? label : "");
694 	}
695 
696 	return 0;
697 }
698 
699 int gpio_claim_vector(const int *gpio_num_array, const char *fmt)
700 {
701 	int i, ret;
702 	int gpio;
703 
704 	for (i = 0; i < 32; i++) {
705 		gpio = gpio_num_array[i];
706 		if (gpio == -1)
707 			break;
708 		ret = gpio_requestf(gpio, fmt, i);
709 		if (ret)
710 			goto err;
711 		ret = gpio_direction_input(gpio);
712 		if (ret) {
713 			gpio_free(gpio);
714 			goto err;
715 		}
716 	}
717 
718 	return 0;
719 err:
720 	for (i--; i >= 0; i--)
721 		gpio_free(gpio_num_array[i]);
722 
723 	return ret;
724 }
725 
726 /*
727  * get a number comprised of multiple GPIO values. gpio_num_array points to
728  * the array of gpio pin numbers to scan, terminated by -1.
729  */
730 int gpio_get_values_as_int(const int *gpio_list)
731 {
732 	int gpio;
733 	unsigned bitmask = 1;
734 	unsigned vector = 0;
735 	int ret;
736 
737 	while (bitmask &&
738 	       ((gpio = *gpio_list++) != -1)) {
739 		ret = gpio_get_value(gpio);
740 		if (ret < 0)
741 			return ret;
742 		else if (ret)
743 			vector |= bitmask;
744 		bitmask <<= 1;
745 	}
746 
747 	return vector;
748 }
749 
750 int dm_gpio_get_values_as_int(const struct gpio_desc *desc_list, int count)
751 {
752 	unsigned bitmask = 1;
753 	unsigned vector = 0;
754 	int ret, i;
755 
756 	for (i = 0; i < count; i++) {
757 		ret = dm_gpio_get_value(&desc_list[i]);
758 		if (ret < 0)
759 			return ret;
760 		else if (ret)
761 			vector |= bitmask;
762 		bitmask <<= 1;
763 	}
764 
765 	return vector;
766 }
767 
768 /**
769  * gpio_request_tail: common work for requesting a gpio.
770  *
771  * ret:		return value from previous work in function which calls
772  *		this function.
773  *		This seems bogus (why calling this function instead not
774  *		calling it and end caller function instead?).
775  *		Because on error in caller function we want to set some
776  *		default values in gpio desc and have a common error
777  *		debug message, which provides this function.
778  * nodename:	Name of node for which gpio gets requested
779  *		used for gpio label name.
780  * args:	pointer to output arguments structure
781  * list_name:	Name of GPIO list
782  *		used for gpio label name.
783  * index:	gpio index in gpio list
784  *		used for gpio label name.
785  * desc:	pointer to gpio descriptor, filled from this
786  *		function.
787  * flags:	gpio flags to use.
788  * add_index:	should index added to gpio label name
789  * gpio_dev:	pointer to gpio device from which the gpio
790  *		will be requested. If NULL try to get the
791  *		gpio device with uclass_get_device_by_ofnode()
792  *
793  * return:	In error case this function sets default values in
794  *		gpio descriptor, also emmits a debug message.
795  *		On success it returns 0 else the error code from
796  *		function calls, or the error code passed through
797  *		ret to this function.
798  *
799  */
800 static int gpio_request_tail(int ret, const char *nodename,
801 			     struct ofnode_phandle_args *args,
802 			     const char *list_name, int index,
803 			     struct gpio_desc *desc, int flags,
804 			     bool add_index, struct udevice *gpio_dev)
805 {
806 	desc->dev = gpio_dev;
807 	desc->offset = 0;
808 	desc->flags = 0;
809 	if (ret)
810 		goto err;
811 
812 	if (!desc->dev) {
813 		ret = uclass_get_device_by_ofnode(UCLASS_GPIO, args->node,
814 						  &desc->dev);
815 		if (ret) {
816 			debug("%s: uclass_get_device_by_ofnode failed\n",
817 			      __func__);
818 			goto err;
819 		}
820 	}
821 	ret = gpio_find_and_xlate(desc, args);
822 	if (ret) {
823 		debug("%s: gpio_find_and_xlate failed\n", __func__);
824 		goto err;
825 	}
826 	ret = dm_gpio_requestf(desc, add_index ? "%s.%s%d" : "%s.%s",
827 			       nodename, list_name, index);
828 	if (ret) {
829 		debug("%s: dm_gpio_requestf failed\n", __func__);
830 		goto err;
831 	}
832 	ret = dm_gpio_set_dir_flags(desc, flags | desc->flags);
833 	if (ret) {
834 		debug("%s: dm_gpio_set_dir failed\n", __func__);
835 		goto err;
836 	}
837 
838 	return 0;
839 err:
840 	debug("%s: Node '%s', property '%s', failed to request GPIO index %d: %d\n",
841 	      __func__, nodename, list_name, index, ret);
842 	return ret;
843 }
844 
845 static int _gpio_request_by_name_nodev(ofnode node, const char *list_name,
846 				       int index, struct gpio_desc *desc,
847 				       int flags, bool add_index)
848 {
849 	struct ofnode_phandle_args args;
850 	int ret;
851 
852 	ret = ofnode_parse_phandle_with_args(node, list_name, "#gpio-cells", 0,
853 					     index, &args);
854 
855 	return gpio_request_tail(ret, ofnode_get_name(node), &args, list_name,
856 				 index, desc, flags, add_index, NULL);
857 }
858 
859 int gpio_request_by_name_nodev(ofnode node, const char *list_name, int index,
860 			       struct gpio_desc *desc, int flags)
861 {
862 	return _gpio_request_by_name_nodev(node, list_name, index, desc, flags,
863 					   index > 0);
864 }
865 
866 int gpio_request_by_name(struct udevice *dev, const char *list_name, int index,
867 			 struct gpio_desc *desc, int flags)
868 {
869 	struct ofnode_phandle_args args;
870 	ofnode node;
871 	int ret;
872 
873 	ret = dev_read_phandle_with_args(dev, list_name, "#gpio-cells", 0,
874 					 index, &args);
875 	node = dev_ofnode(dev);
876 	return gpio_request_tail(ret, ofnode_get_name(node), &args, list_name,
877 				 index, desc, flags, index > 0, NULL);
878 }
879 
880 int gpio_request_list_by_name_nodev(ofnode node, const char *list_name,
881 				    struct gpio_desc *desc, int max_count,
882 				    int flags)
883 {
884 	int count;
885 	int ret;
886 
887 	for (count = 0; count < max_count; count++) {
888 		ret = _gpio_request_by_name_nodev(node, list_name, count,
889 						  &desc[count], flags, true);
890 		if (ret == -ENOENT)
891 			break;
892 		else if (ret)
893 			goto err;
894 	}
895 
896 	/* We ran out of GPIOs in the list */
897 	return count;
898 
899 err:
900 	gpio_free_list_nodev(desc, count - 1);
901 
902 	return ret;
903 }
904 
905 int gpio_request_list_by_name(struct udevice *dev, const char *list_name,
906 			      struct gpio_desc *desc, int max_count,
907 			      int flags)
908 {
909 	/*
910 	 * This isn't ideal since we don't use dev->name in the debug()
911 	 * calls in gpio_request_by_name(), but we can do this until
912 	 * gpio_request_list_by_name_nodev() can be dropped.
913 	 */
914 	return gpio_request_list_by_name_nodev(dev_ofnode(dev), list_name, desc,
915 					       max_count, flags);
916 }
917 
918 int gpio_get_list_count(struct udevice *dev, const char *list_name)
919 {
920 	int ret;
921 
922 	ret = fdtdec_parse_phandle_with_args(gd->fdt_blob, dev_of_offset(dev),
923 					     list_name, "#gpio-cells", 0, -1,
924 					     NULL);
925 	if (ret) {
926 		debug("%s: Node '%s', property '%s', GPIO count failed: %d\n",
927 		      __func__, dev->name, list_name, ret);
928 	}
929 
930 	return ret;
931 }
932 
933 int dm_gpio_free(struct udevice *dev, struct gpio_desc *desc)
934 {
935 	/* For now, we don't do any checking of dev */
936 	return _dm_gpio_free(desc->dev, desc->offset);
937 }
938 
939 int gpio_free_list(struct udevice *dev, struct gpio_desc *desc, int count)
940 {
941 	int i;
942 
943 	/* For now, we don't do any checking of dev */
944 	for (i = 0; i < count; i++)
945 		dm_gpio_free(dev, &desc[i]);
946 
947 	return 0;
948 }
949 
950 int gpio_free_list_nodev(struct gpio_desc *desc, int count)
951 {
952 	return gpio_free_list(NULL, desc, count);
953 }
954 
955 /* We need to renumber the GPIOs when any driver is probed/removed */
956 static int gpio_renumber(struct udevice *removed_dev)
957 {
958 	struct gpio_dev_priv *uc_priv;
959 	struct udevice *dev;
960 	struct uclass *uc;
961 	unsigned base;
962 	int ret;
963 
964 	ret = uclass_get(UCLASS_GPIO, &uc);
965 	if (ret)
966 		return ret;
967 
968 	/* Ensure that we have a base for each bank */
969 	base = 0;
970 	uclass_foreach_dev(dev, uc) {
971 		if (device_active(dev) && dev != removed_dev) {
972 			uc_priv = dev_get_uclass_priv(dev);
973 			uc_priv->gpio_base = base;
974 			base += uc_priv->gpio_count;
975 		}
976 	}
977 
978 	return 0;
979 }
980 
981 int gpio_get_number(const struct gpio_desc *desc)
982 {
983 	struct udevice *dev = desc->dev;
984 	struct gpio_dev_priv *uc_priv;
985 
986 	if (!dev)
987 		return -1;
988 	uc_priv = dev->uclass_priv;
989 
990 	return uc_priv->gpio_base + desc->offset;
991 }
992 
993 static int gpio_post_probe(struct udevice *dev)
994 {
995 	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
996 
997 	uc_priv->name = calloc(uc_priv->gpio_count, sizeof(char *));
998 	if (!uc_priv->name)
999 		return -ENOMEM;
1000 
1001 	return gpio_renumber(NULL);
1002 }
1003 
1004 static int gpio_pre_remove(struct udevice *dev)
1005 {
1006 	struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
1007 	int i;
1008 
1009 	for (i = 0; i < uc_priv->gpio_count; i++) {
1010 		if (uc_priv->name[i])
1011 			free(uc_priv->name[i]);
1012 	}
1013 	free(uc_priv->name);
1014 
1015 	return gpio_renumber(dev);
1016 }
1017 
1018 int gpio_dev_request_index(struct udevice *dev, const char *nodename,
1019 			   char *list_name, int index, int flags,
1020 			   int dtflags, struct gpio_desc *desc)
1021 {
1022 	struct ofnode_phandle_args args;
1023 
1024 	args.node =  ofnode_null();
1025 	args.args_count = 2;
1026 	args.args[0] = index;
1027 	args.args[1] = dtflags;
1028 
1029 	return gpio_request_tail(0, nodename, &args, list_name, index, desc,
1030 				 flags, 0, dev);
1031 }
1032 
1033 static int gpio_post_bind(struct udevice *dev)
1034 {
1035 	struct udevice *child;
1036 	ofnode node;
1037 
1038 	if (IS_ENABLED(CONFIG_GPIO_HOG)) {
1039 		dev_for_each_subnode(node, dev) {
1040 			if (ofnode_read_bool(node, "gpio-hog")) {
1041 				const char *name = ofnode_get_name(node);
1042 				int ret;
1043 
1044 				ret = device_bind_driver_to_node(dev,
1045 								 "gpio_hog",
1046 								 name, node,
1047 								 &child);
1048 				if (ret)
1049 					return ret;
1050 			}
1051 		}
1052 	}
1053 	return 0;
1054 }
1055 
1056 UCLASS_DRIVER(gpio) = {
1057 	.id		= UCLASS_GPIO,
1058 	.name		= "gpio",
1059 #ifndef CONFIG_GPIO_NO_UC_FLAG_SEQ_ALIAS
1060 	.flags		= DM_UC_FLAG_SEQ_ALIAS,
1061 #endif
1062 	.post_probe	= gpio_post_probe,
1063 	.post_bind	= gpio_post_bind,
1064 	.pre_remove	= gpio_pre_remove,
1065 	.per_device_auto_alloc_size = sizeof(struct gpio_dev_priv),
1066 };
1067