1#include <linux/kernel.h>
2#include <linux/module.h>
3#include <linux/interrupt.h>
4#include <linux/irq.h>
5#include <linux/spinlock.h>
6#include <linux/list.h>
7#include <linux/device.h>
8#include <linux/err.h>
9#include <linux/debugfs.h>
10#include <linux/seq_file.h>
11#include <linux/gpio.h>
12#include <linux/of_gpio.h>
13#include <linux/idr.h>
14#include <linux/slab.h>
15#include <linux/acpi.h>
16#include <linux/gpio/driver.h>
17#include <linux/gpio/machine.h>
18#include <linux/pinctrl/consumer.h>
19#include <linux/idr.h>
20#include <linux/cdev.h>
21#include <linux/fs.h>
22#include <linux/uaccess.h>
23#include <linux/compat.h>
24#include <uapi/linux/gpio.h>
25
26#include "gpiolib.h"
27
28#define CREATE_TRACE_POINTS
29#include <trace/events/gpio.h>
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#ifdef DEBUG
46#define extra_checks 1
47#else
48#define extra_checks 0
49#endif
50
51
52static DEFINE_IDA(gpio_ida);
53static dev_t gpio_devt;
54#define GPIO_DEV_MAX 256
55static struct bus_type gpio_bus_type = {
56 .name = "gpio",
57};
58
59
60
61
62
63DEFINE_SPINLOCK(gpio_lock);
64
65static DEFINE_MUTEX(gpio_lookup_lock);
66static LIST_HEAD(gpio_lookup_list);
67LIST_HEAD(gpio_devices);
68
69static void gpiochip_free_hogs(struct gpio_chip *chip);
70static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip);
71
72static bool gpiolib_initialized;
73
74static inline void desc_set_label(struct gpio_desc *d, const char *label)
75{
76 d->label = label;
77}
78
79
80
81
82struct gpio_desc *gpio_to_desc(unsigned gpio)
83{
84 struct gpio_device *gdev;
85 unsigned long flags;
86
87 spin_lock_irqsave(&gpio_lock, flags);
88
89 list_for_each_entry(gdev, &gpio_devices, list) {
90 if (gdev->base <= gpio &&
91 gdev->base + gdev->ngpio > gpio) {
92 spin_unlock_irqrestore(&gpio_lock, flags);
93 return &gdev->descs[gpio - gdev->base];
94 }
95 }
96
97 spin_unlock_irqrestore(&gpio_lock, flags);
98
99 if (!gpio_is_valid(gpio))
100 WARN(1, "invalid GPIO %d\n", gpio);
101
102 return NULL;
103}
104EXPORT_SYMBOL_GPL(gpio_to_desc);
105
106
107
108
109struct gpio_desc *gpiochip_get_desc(struct gpio_chip *chip,
110 u16 hwnum)
111{
112 struct gpio_device *gdev = chip->gpiodev;
113
114 if (hwnum >= gdev->ngpio)
115 return ERR_PTR(-EINVAL);
116
117 return &gdev->descs[hwnum];
118}
119
120
121
122
123
124
125int desc_to_gpio(const struct gpio_desc *desc)
126{
127 return desc->gdev->base + (desc - &desc->gdev->descs[0]);
128}
129EXPORT_SYMBOL_GPL(desc_to_gpio);
130
131
132
133
134
135
136struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)
137{
138 if (!desc || !desc->gdev || !desc->gdev->chip)
139 return NULL;
140 return desc->gdev->chip;
141}
142EXPORT_SYMBOL_GPL(gpiod_to_chip);
143
144
145static int gpiochip_find_base(int ngpio)
146{
147 struct gpio_device *gdev;
148 int base = ARCH_NR_GPIOS - ngpio;
149
150 list_for_each_entry_reverse(gdev, &gpio_devices, list) {
151
152 if (gdev->base + gdev->ngpio <= base)
153 break;
154 else
155
156 base = gdev->base - ngpio;
157 }
158
159 if (gpio_is_valid(base)) {
160 pr_debug("%s: found new base at %d\n", __func__, base);
161 return base;
162 } else {
163 pr_err("%s: cannot find free range\n", __func__);
164 return -ENOSPC;
165 }
166}
167
168
169
170
171
172
173
174
175
176int gpiod_get_direction(struct gpio_desc *desc)
177{
178 struct gpio_chip *chip;
179 unsigned offset;
180 int status = -EINVAL;
181
182 chip = gpiod_to_chip(desc);
183 offset = gpio_chip_hwgpio(desc);
184
185 if (!chip->get_direction)
186 return status;
187
188 status = chip->get_direction(chip, offset);
189 if (status > 0) {
190
191 status = 1;
192 clear_bit(FLAG_IS_OUT, &desc->flags);
193 }
194 if (status == 0) {
195
196 set_bit(FLAG_IS_OUT, &desc->flags);
197 }
198 return status;
199}
200EXPORT_SYMBOL_GPL(gpiod_get_direction);
201
202
203
204
205
206
207
208
209static int gpiodev_add_to_list(struct gpio_device *gdev)
210{
211 struct gpio_device *prev, *next;
212
213 if (list_empty(&gpio_devices)) {
214
215 list_add_tail(&gdev->list, &gpio_devices);
216 return 0;
217 }
218
219 next = list_entry(gpio_devices.next, struct gpio_device, list);
220 if (gdev->base + gdev->ngpio <= next->base) {
221
222 list_add(&gdev->list, &gpio_devices);
223 return 0;
224 }
225
226 prev = list_entry(gpio_devices.prev, struct gpio_device, list);
227 if (prev->base + prev->ngpio <= gdev->base) {
228
229 list_add_tail(&gdev->list, &gpio_devices);
230 return 0;
231 }
232
233 list_for_each_entry_safe(prev, next, &gpio_devices, list) {
234
235 if (&next->list == &gpio_devices)
236 break;
237
238
239 if (prev->base + prev->ngpio <= gdev->base
240 && gdev->base + gdev->ngpio <= next->base) {
241 list_add(&gdev->list, &prev->list);
242 return 0;
243 }
244 }
245
246 dev_err(&gdev->dev, "GPIO integer space overlap, cannot add chip\n");
247 return -EBUSY;
248}
249
250
251
252
253static struct gpio_desc *gpio_name_to_desc(const char * const name)
254{
255 struct gpio_device *gdev;
256 unsigned long flags;
257
258 spin_lock_irqsave(&gpio_lock, flags);
259
260 list_for_each_entry(gdev, &gpio_devices, list) {
261 int i;
262
263 for (i = 0; i != gdev->ngpio; ++i) {
264 struct gpio_desc *desc = &gdev->descs[i];
265
266 if (!desc->name || !name)
267 continue;
268
269 if (!strcmp(desc->name, name)) {
270 spin_unlock_irqrestore(&gpio_lock, flags);
271 return desc;
272 }
273 }
274 }
275
276 spin_unlock_irqrestore(&gpio_lock, flags);
277
278 return NULL;
279}
280
281
282
283
284
285
286
287static int gpiochip_set_desc_names(struct gpio_chip *gc)
288{
289 struct gpio_device *gdev = gc->gpiodev;
290 int i;
291
292 if (!gc->names)
293 return 0;
294
295
296 for (i = 0; i != gc->ngpio; ++i) {
297 struct gpio_desc *gpio;
298
299 gpio = gpio_name_to_desc(gc->names[i]);
300 if (gpio)
301 dev_warn(&gdev->dev,
302 "Detected name collision for GPIO name '%s'\n",
303 gc->names[i]);
304 }
305
306
307 for (i = 0; i != gc->ngpio; ++i)
308 gdev->descs[i].name = gc->names[i];
309
310 return 0;
311}
312
313
314
315
316static long gpio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
317{
318 struct gpio_device *gdev = filp->private_data;
319 struct gpio_chip *chip = gdev->chip;
320 void __user *ip = (void __user *)arg;
321
322
323 if (!chip)
324 return -ENODEV;
325
326
327 if (cmd == GPIO_GET_CHIPINFO_IOCTL) {
328 struct gpiochip_info chipinfo;
329
330 strncpy(chipinfo.name, dev_name(&gdev->dev),
331 sizeof(chipinfo.name));
332 chipinfo.name[sizeof(chipinfo.name)-1] = '\0';
333 strncpy(chipinfo.label, gdev->label,
334 sizeof(chipinfo.label));
335 chipinfo.label[sizeof(chipinfo.label)-1] = '\0';
336 chipinfo.lines = gdev->ngpio;
337 if (copy_to_user(ip, &chipinfo, sizeof(chipinfo)))
338 return -EFAULT;
339 return 0;
340 } else if (cmd == GPIO_GET_LINEINFO_IOCTL) {
341 struct gpioline_info lineinfo;
342 struct gpio_desc *desc;
343
344 if (copy_from_user(&lineinfo, ip, sizeof(lineinfo)))
345 return -EFAULT;
346 if (lineinfo.line_offset > gdev->ngpio)
347 return -EINVAL;
348
349 desc = &gdev->descs[lineinfo.line_offset];
350 if (desc->name) {
351 strncpy(lineinfo.name, desc->name,
352 sizeof(lineinfo.name));
353 lineinfo.name[sizeof(lineinfo.name)-1] = '\0';
354 } else {
355 lineinfo.name[0] = '\0';
356 }
357 if (desc->label) {
358 strncpy(lineinfo.consumer, desc->label,
359 sizeof(lineinfo.consumer));
360 lineinfo.consumer[sizeof(lineinfo.consumer)-1] = '\0';
361 } else {
362 lineinfo.consumer[0] = '\0';
363 }
364
365
366
367
368
369 lineinfo.flags = 0;
370 if (test_bit(FLAG_REQUESTED, &desc->flags) ||
371 test_bit(FLAG_IS_HOGGED, &desc->flags) ||
372 test_bit(FLAG_USED_AS_IRQ, &desc->flags) ||
373 test_bit(FLAG_EXPORT, &desc->flags) ||
374 test_bit(FLAG_SYSFS, &desc->flags))
375 lineinfo.flags |= GPIOLINE_FLAG_KERNEL;
376 if (test_bit(FLAG_IS_OUT, &desc->flags))
377 lineinfo.flags |= GPIOLINE_FLAG_IS_OUT;
378 if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
379 lineinfo.flags |= GPIOLINE_FLAG_ACTIVE_LOW;
380 if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
381 lineinfo.flags |= GPIOLINE_FLAG_OPEN_DRAIN;
382 if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
383 lineinfo.flags |= GPIOLINE_FLAG_OPEN_SOURCE;
384
385 if (copy_to_user(ip, &lineinfo, sizeof(lineinfo)))
386 return -EFAULT;
387 return 0;
388 }
389 return -EINVAL;
390}
391
392#ifdef CONFIG_COMPAT
393static long gpio_ioctl_compat(struct file *filp, unsigned int cmd,
394 unsigned long arg)
395{
396 return gpio_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
397}
398#endif
399
400
401
402
403
404
405
406static int gpio_chrdev_open(struct inode *inode, struct file *filp)
407{
408 struct gpio_device *gdev = container_of(inode->i_cdev,
409 struct gpio_device, chrdev);
410
411
412 if (!gdev || !gdev->chip)
413 return -ENODEV;
414 get_device(&gdev->dev);
415 filp->private_data = gdev;
416 return 0;
417}
418
419
420
421
422
423
424
425static int gpio_chrdev_release(struct inode *inode, struct file *filp)
426{
427 struct gpio_device *gdev = container_of(inode->i_cdev,
428 struct gpio_device, chrdev);
429
430 if (!gdev)
431 return -ENODEV;
432 put_device(&gdev->dev);
433 return 0;
434}
435
436
437static const struct file_operations gpio_fileops = {
438 .release = gpio_chrdev_release,
439 .open = gpio_chrdev_open,
440 .owner = THIS_MODULE,
441 .llseek = noop_llseek,
442 .unlocked_ioctl = gpio_ioctl,
443#ifdef CONFIG_COMPAT
444 .compat_ioctl = gpio_ioctl_compat,
445#endif
446};
447
448static void gpiodevice_release(struct device *dev)
449{
450 struct gpio_device *gdev = dev_get_drvdata(dev);
451
452 list_del(&gdev->list);
453 ida_simple_remove(&gpio_ida, gdev->id);
454 kfree(gdev->label);
455 kfree(gdev->descs);
456 kfree(gdev);
457}
458
459static int gpiochip_setup_dev(struct gpio_device *gdev)
460{
461 int status;
462
463 cdev_init(&gdev->chrdev, &gpio_fileops);
464 gdev->chrdev.owner = THIS_MODULE;
465 gdev->chrdev.kobj.parent = &gdev->dev.kobj;
466 gdev->dev.devt = MKDEV(MAJOR(gpio_devt), gdev->id);
467 status = cdev_add(&gdev->chrdev, gdev->dev.devt, 1);
468 if (status < 0)
469 chip_warn(gdev->chip, "failed to add char device %d:%d\n",
470 MAJOR(gpio_devt), gdev->id);
471 else
472 chip_dbg(gdev->chip, "added GPIO chardev (%d:%d)\n",
473 MAJOR(gpio_devt), gdev->id);
474 status = device_add(&gdev->dev);
475 if (status)
476 goto err_remove_chardev;
477
478 status = gpiochip_sysfs_register(gdev);
479 if (status)
480 goto err_remove_device;
481
482
483 gdev->dev.release = gpiodevice_release;
484 pr_debug("%s: registered GPIOs %d to %d on device: %s (%s)\n",
485 __func__, gdev->base, gdev->base + gdev->ngpio - 1,
486 dev_name(&gdev->dev), gdev->chip->label ? : "generic");
487
488 return 0;
489
490err_remove_device:
491 device_del(&gdev->dev);
492err_remove_chardev:
493 cdev_del(&gdev->chrdev);
494 return status;
495}
496
497static void gpiochip_setup_devs(void)
498{
499 struct gpio_device *gdev;
500 int err;
501
502 list_for_each_entry(gdev, &gpio_devices, list) {
503 err = gpiochip_setup_dev(gdev);
504 if (err)
505 pr_err("%s: Failed to initialize gpio device (%d)\n",
506 dev_name(&gdev->dev), err);
507 }
508}
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530int gpiochip_add_data(struct gpio_chip *chip, void *data)
531{
532 unsigned long flags;
533 int status = 0;
534 unsigned i;
535 int base = chip->base;
536 struct gpio_device *gdev;
537
538
539
540
541
542 gdev = kzalloc(sizeof(*gdev), GFP_KERNEL);
543 if (!gdev)
544 return -ENOMEM;
545 gdev->dev.bus = &gpio_bus_type;
546 gdev->chip = chip;
547 chip->gpiodev = gdev;
548 if (chip->parent) {
549 gdev->dev.parent = chip->parent;
550 gdev->dev.of_node = chip->parent->of_node;
551 } else {
552#ifdef CONFIG_OF_GPIO
553
554 if (chip->of_node)
555 gdev->dev.of_node = chip->of_node;
556#endif
557 }
558 gdev->id = ida_simple_get(&gpio_ida, 0, 0, GFP_KERNEL);
559 if (gdev->id < 0) {
560 status = gdev->id;
561 goto err_free_gdev;
562 }
563 dev_set_name(&gdev->dev, "gpiochip%d", gdev->id);
564 device_initialize(&gdev->dev);
565 dev_set_drvdata(&gdev->dev, gdev);
566 if (chip->parent && chip->parent->driver)
567 gdev->owner = chip->parent->driver->owner;
568 else if (chip->owner)
569
570 gdev->owner = chip->owner;
571 else
572 gdev->owner = THIS_MODULE;
573
574 gdev->descs = kcalloc(chip->ngpio, sizeof(gdev->descs[0]), GFP_KERNEL);
575 if (!gdev->descs) {
576 status = -ENOMEM;
577 goto err_free_gdev;
578 }
579
580 if (chip->ngpio == 0) {
581 chip_err(chip, "tried to insert a GPIO chip with zero lines\n");
582 status = -EINVAL;
583 goto err_free_descs;
584 }
585
586 if (chip->label)
587 gdev->label = kstrdup(chip->label, GFP_KERNEL);
588 else
589 gdev->label = kstrdup("unknown", GFP_KERNEL);
590 if (!gdev->label) {
591 status = -ENOMEM;
592 goto err_free_descs;
593 }
594
595 gdev->ngpio = chip->ngpio;
596 gdev->data = data;
597
598 spin_lock_irqsave(&gpio_lock, flags);
599
600
601
602
603
604
605
606
607 if (base < 0) {
608 base = gpiochip_find_base(chip->ngpio);
609 if (base < 0) {
610 status = base;
611 spin_unlock_irqrestore(&gpio_lock, flags);
612 goto err_free_label;
613 }
614
615
616
617
618
619
620 chip->base = base;
621 }
622 gdev->base = base;
623
624 status = gpiodev_add_to_list(gdev);
625 if (status) {
626 spin_unlock_irqrestore(&gpio_lock, flags);
627 goto err_free_label;
628 }
629
630 spin_unlock_irqrestore(&gpio_lock, flags);
631
632 for (i = 0; i < chip->ngpio; i++) {
633 struct gpio_desc *desc = &gdev->descs[i];
634
635 desc->gdev = gdev;
636
637
638
639
640
641
642
643
644
645 if (chip->get_direction) {
646
647
648
649
650 int dir = chip->get_direction(chip, i);
651
652 if (!dir)
653 set_bit(FLAG_IS_OUT, &desc->flags);
654 } else if (!chip->direction_input) {
655
656
657
658
659 set_bit(FLAG_IS_OUT, &desc->flags);
660 }
661 }
662
663#ifdef CONFIG_PINCTRL
664 INIT_LIST_HEAD(&gdev->pin_ranges);
665#endif
666
667 status = gpiochip_set_desc_names(chip);
668 if (status)
669 goto err_remove_from_list;
670
671 status = of_gpiochip_add(chip);
672 if (status)
673 goto err_remove_chip;
674
675 acpi_gpiochip_add(chip);
676
677
678
679
680
681
682
683
684
685 if (gpiolib_initialized) {
686 status = gpiochip_setup_dev(gdev);
687 if (status)
688 goto err_remove_chip;
689 }
690 return 0;
691
692err_remove_chip:
693 acpi_gpiochip_remove(chip);
694 gpiochip_free_hogs(chip);
695 of_gpiochip_remove(chip);
696err_remove_from_list:
697 spin_lock_irqsave(&gpio_lock, flags);
698 list_del(&gdev->list);
699 spin_unlock_irqrestore(&gpio_lock, flags);
700err_free_label:
701 kfree(gdev->label);
702err_free_descs:
703 kfree(gdev->descs);
704err_free_gdev:
705 ida_simple_remove(&gpio_ida, gdev->id);
706
707 pr_err("%s: GPIOs %d..%d (%s) failed to register\n", __func__,
708 gdev->base, gdev->base + gdev->ngpio - 1,
709 chip->label ? : "generic");
710 kfree(gdev);
711 return status;
712}
713EXPORT_SYMBOL_GPL(gpiochip_add_data);
714
715
716
717
718void *gpiochip_get_data(struct gpio_chip *chip)
719{
720 return chip->gpiodev->data;
721}
722EXPORT_SYMBOL_GPL(gpiochip_get_data);
723
724
725
726
727
728
729
730void gpiochip_remove(struct gpio_chip *chip)
731{
732 struct gpio_device *gdev = chip->gpiodev;
733 struct gpio_desc *desc;
734 unsigned long flags;
735 unsigned i;
736 bool requested = false;
737
738
739 gpiochip_sysfs_unregister(gdev);
740
741 gdev->chip = NULL;
742 gpiochip_irqchip_remove(chip);
743 acpi_gpiochip_remove(chip);
744 gpiochip_remove_pin_ranges(chip);
745 gpiochip_free_hogs(chip);
746 of_gpiochip_remove(chip);
747
748
749
750
751 gdev->data = NULL;
752
753 spin_lock_irqsave(&gpio_lock, flags);
754 for (i = 0; i < gdev->ngpio; i++) {
755 desc = &gdev->descs[i];
756 if (test_bit(FLAG_REQUESTED, &desc->flags))
757 requested = true;
758 }
759 spin_unlock_irqrestore(&gpio_lock, flags);
760
761 if (requested)
762 dev_crit(&gdev->dev,
763 "REMOVING GPIOCHIP WITH GPIOS STILL REQUESTED\n");
764
765
766
767
768
769
770
771 cdev_del(&gdev->chrdev);
772 device_del(&gdev->dev);
773 put_device(&gdev->dev);
774}
775EXPORT_SYMBOL_GPL(gpiochip_remove);
776
777static void devm_gpio_chip_release(struct device *dev, void *res)
778{
779 struct gpio_chip *chip = *(struct gpio_chip **)res;
780
781 gpiochip_remove(chip);
782}
783
784static int devm_gpio_chip_match(struct device *dev, void *res, void *data)
785
786{
787 struct gpio_chip **r = res;
788
789 if (!r || !*r) {
790 WARN_ON(!r || !*r);
791 return 0;
792 }
793
794 return *r == data;
795}
796
797
798
799
800
801
802
803
804
805
806
807
808
809int devm_gpiochip_add_data(struct device *dev, struct gpio_chip *chip,
810 void *data)
811{
812 struct gpio_chip **ptr;
813 int ret;
814
815 ptr = devres_alloc(devm_gpio_chip_release, sizeof(*ptr),
816 GFP_KERNEL);
817 if (!ptr)
818 return -ENOMEM;
819
820 ret = gpiochip_add_data(chip, data);
821 if (ret < 0) {
822 devres_free(ptr);
823 return ret;
824 }
825
826 *ptr = chip;
827 devres_add(dev, ptr);
828
829 return 0;
830}
831EXPORT_SYMBOL_GPL(devm_gpiochip_add_data);
832
833
834
835
836
837
838
839
840void devm_gpiochip_remove(struct device *dev, struct gpio_chip *chip)
841{
842 int ret;
843
844 ret = devres_release(dev, devm_gpio_chip_release,
845 devm_gpio_chip_match, chip);
846 if (!ret)
847 WARN_ON(ret);
848}
849EXPORT_SYMBOL_GPL(devm_gpiochip_remove);
850
851
852
853
854
855
856
857
858
859
860
861
862struct gpio_chip *gpiochip_find(void *data,
863 int (*match)(struct gpio_chip *chip,
864 void *data))
865{
866 struct gpio_device *gdev;
867 struct gpio_chip *chip;
868 unsigned long flags;
869
870 spin_lock_irqsave(&gpio_lock, flags);
871 list_for_each_entry(gdev, &gpio_devices, list)
872 if (gdev->chip && match(gdev->chip, data))
873 break;
874
875
876 if (&gdev->list == &gpio_devices)
877 chip = NULL;
878 else
879 chip = gdev->chip;
880
881 spin_unlock_irqrestore(&gpio_lock, flags);
882
883 return chip;
884}
885EXPORT_SYMBOL_GPL(gpiochip_find);
886
887static int gpiochip_match_name(struct gpio_chip *chip, void *data)
888{
889 const char *name = data;
890
891 return !strcmp(chip->label, name);
892}
893
894static struct gpio_chip *find_chip_by_name(const char *name)
895{
896 return gpiochip_find((void *)name, gpiochip_match_name);
897}
898
899#ifdef CONFIG_GPIOLIB_IRQCHIP
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915void gpiochip_set_chained_irqchip(struct gpio_chip *gpiochip,
916 struct irq_chip *irqchip,
917 int parent_irq,
918 irq_flow_handler_t parent_handler)
919{
920 unsigned int offset;
921
922 if (!gpiochip->irqdomain) {
923 chip_err(gpiochip, "called %s before setting up irqchip\n",
924 __func__);
925 return;
926 }
927
928 if (parent_handler) {
929 if (gpiochip->can_sleep) {
930 chip_err(gpiochip,
931 "you cannot have chained interrupts on a "
932 "chip that may sleep\n");
933 return;
934 }
935
936
937
938
939 irq_set_chained_handler_and_data(parent_irq, parent_handler,
940 gpiochip);
941
942 gpiochip->irq_parent = parent_irq;
943 }
944
945
946 for (offset = 0; offset < gpiochip->ngpio; offset++)
947 irq_set_parent(irq_find_mapping(gpiochip->irqdomain, offset),
948 parent_irq);
949}
950EXPORT_SYMBOL_GPL(gpiochip_set_chained_irqchip);
951
952
953
954
955
956
957
958
959
960
961
962static int gpiochip_irq_map(struct irq_domain *d, unsigned int irq,
963 irq_hw_number_t hwirq)
964{
965 struct gpio_chip *chip = d->host_data;
966
967 irq_set_chip_data(irq, chip);
968
969
970
971
972 irq_set_lockdep_class(irq, chip->lock_key);
973 irq_set_chip_and_handler(irq, chip->irqchip, chip->irq_handler);
974
975 if (chip->can_sleep && !chip->irq_not_threaded)
976 irq_set_nested_thread(irq, 1);
977 irq_set_noprobe(irq);
978
979
980
981
982
983 if (chip->irq_default_type != IRQ_TYPE_NONE)
984 irq_set_irq_type(irq, chip->irq_default_type);
985
986 return 0;
987}
988
989static void gpiochip_irq_unmap(struct irq_domain *d, unsigned int irq)
990{
991 struct gpio_chip *chip = d->host_data;
992
993 if (chip->can_sleep)
994 irq_set_nested_thread(irq, 0);
995 irq_set_chip_and_handler(irq, NULL, NULL);
996 irq_set_chip_data(irq, NULL);
997}
998
999static const struct irq_domain_ops gpiochip_domain_ops = {
1000 .map = gpiochip_irq_map,
1001 .unmap = gpiochip_irq_unmap,
1002
1003 .xlate = irq_domain_xlate_twocell,
1004};
1005
1006static int gpiochip_irq_reqres(struct irq_data *d)
1007{
1008 struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
1009
1010 if (!try_module_get(chip->gpiodev->owner))
1011 return -ENODEV;
1012
1013 if (gpiochip_lock_as_irq(chip, d->hwirq)) {
1014 chip_err(chip,
1015 "unable to lock HW IRQ %lu for IRQ\n",
1016 d->hwirq);
1017 module_put(chip->gpiodev->owner);
1018 return -EINVAL;
1019 }
1020 return 0;
1021}
1022
1023static void gpiochip_irq_relres(struct irq_data *d)
1024{
1025 struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
1026
1027 gpiochip_unlock_as_irq(chip, d->hwirq);
1028 module_put(chip->gpiodev->owner);
1029}
1030
1031static int gpiochip_to_irq(struct gpio_chip *chip, unsigned offset)
1032{
1033 return irq_find_mapping(chip->irqdomain, offset);
1034}
1035
1036
1037
1038
1039
1040
1041
1042static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
1043{
1044 unsigned int offset;
1045
1046 acpi_gpiochip_free_interrupts(gpiochip);
1047
1048 if (gpiochip->irq_parent) {
1049 irq_set_chained_handler(gpiochip->irq_parent, NULL);
1050 irq_set_handler_data(gpiochip->irq_parent, NULL);
1051 }
1052
1053
1054 if (gpiochip->irqdomain) {
1055 for (offset = 0; offset < gpiochip->ngpio; offset++)
1056 irq_dispose_mapping(
1057 irq_find_mapping(gpiochip->irqdomain, offset));
1058 irq_domain_remove(gpiochip->irqdomain);
1059 }
1060
1061 if (gpiochip->irqchip) {
1062 gpiochip->irqchip->irq_request_resources = NULL;
1063 gpiochip->irqchip->irq_release_resources = NULL;
1064 gpiochip->irqchip = NULL;
1065 }
1066}
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093int _gpiochip_irqchip_add(struct gpio_chip *gpiochip,
1094 struct irq_chip *irqchip,
1095 unsigned int first_irq,
1096 irq_flow_handler_t handler,
1097 unsigned int type,
1098 struct lock_class_key *lock_key)
1099{
1100 struct device_node *of_node;
1101 unsigned int offset;
1102 unsigned irq_base = 0;
1103
1104 if (!gpiochip || !irqchip)
1105 return -EINVAL;
1106
1107 if (!gpiochip->parent) {
1108 pr_err("missing gpiochip .dev parent pointer\n");
1109 return -EINVAL;
1110 }
1111 of_node = gpiochip->parent->of_node;
1112#ifdef CONFIG_OF_GPIO
1113
1114
1115
1116
1117
1118 if (gpiochip->of_node)
1119 of_node = gpiochip->of_node;
1120#endif
1121 gpiochip->irqchip = irqchip;
1122 gpiochip->irq_handler = handler;
1123 gpiochip->irq_default_type = type;
1124 gpiochip->to_irq = gpiochip_to_irq;
1125 gpiochip->lock_key = lock_key;
1126 gpiochip->irqdomain = irq_domain_add_simple(of_node,
1127 gpiochip->ngpio, first_irq,
1128 &gpiochip_domain_ops, gpiochip);
1129 if (!gpiochip->irqdomain) {
1130 gpiochip->irqchip = NULL;
1131 return -EINVAL;
1132 }
1133
1134
1135
1136
1137
1138 if (!irqchip->irq_request_resources &&
1139 !irqchip->irq_release_resources) {
1140 irqchip->irq_request_resources = gpiochip_irq_reqres;
1141 irqchip->irq_release_resources = gpiochip_irq_relres;
1142 }
1143
1144
1145
1146
1147
1148
1149 for (offset = 0; offset < gpiochip->ngpio; offset++) {
1150 irq_base = irq_create_mapping(gpiochip->irqdomain, offset);
1151 if (offset == 0)
1152
1153
1154
1155
1156 gpiochip->irq_base = irq_base;
1157 }
1158
1159 acpi_gpiochip_request_interrupts(gpiochip);
1160
1161 return 0;
1162}
1163EXPORT_SYMBOL_GPL(_gpiochip_irqchip_add);
1164
1165#else
1166
1167static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip) {}
1168
1169#endif
1170
1171
1172
1173
1174
1175
1176int gpiochip_generic_request(struct gpio_chip *chip, unsigned offset)
1177{
1178 return pinctrl_request_gpio(chip->gpiodev->base + offset);
1179}
1180EXPORT_SYMBOL_GPL(gpiochip_generic_request);
1181
1182
1183
1184
1185
1186
1187void gpiochip_generic_free(struct gpio_chip *chip, unsigned offset)
1188{
1189 pinctrl_free_gpio(chip->gpiodev->base + offset);
1190}
1191EXPORT_SYMBOL_GPL(gpiochip_generic_free);
1192
1193#ifdef CONFIG_PINCTRL
1194
1195
1196
1197
1198
1199
1200
1201
1202int gpiochip_add_pingroup_range(struct gpio_chip *chip,
1203 struct pinctrl_dev *pctldev,
1204 unsigned int gpio_offset, const char *pin_group)
1205{
1206 struct gpio_pin_range *pin_range;
1207 struct gpio_device *gdev = chip->gpiodev;
1208 int ret;
1209
1210 pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
1211 if (!pin_range) {
1212 chip_err(chip, "failed to allocate pin ranges\n");
1213 return -ENOMEM;
1214 }
1215
1216
1217 pin_range->range.id = gpio_offset;
1218 pin_range->range.gc = chip;
1219 pin_range->range.name = chip->label;
1220 pin_range->range.base = gdev->base + gpio_offset;
1221 pin_range->pctldev = pctldev;
1222
1223 ret = pinctrl_get_group_pins(pctldev, pin_group,
1224 &pin_range->range.pins,
1225 &pin_range->range.npins);
1226 if (ret < 0) {
1227 kfree(pin_range);
1228 return ret;
1229 }
1230
1231 pinctrl_add_gpio_range(pctldev, &pin_range->range);
1232
1233 chip_dbg(chip, "created GPIO range %d->%d ==> %s PINGRP %s\n",
1234 gpio_offset, gpio_offset + pin_range->range.npins - 1,
1235 pinctrl_dev_get_devname(pctldev), pin_group);
1236
1237 list_add_tail(&pin_range->node, &gdev->pin_ranges);
1238
1239 return 0;
1240}
1241EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252int gpiochip_add_pin_range(struct gpio_chip *chip, const char *pinctl_name,
1253 unsigned int gpio_offset, unsigned int pin_offset,
1254 unsigned int npins)
1255{
1256 struct gpio_pin_range *pin_range;
1257 struct gpio_device *gdev = chip->gpiodev;
1258 int ret;
1259
1260 pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
1261 if (!pin_range) {
1262 chip_err(chip, "failed to allocate pin ranges\n");
1263 return -ENOMEM;
1264 }
1265
1266
1267 pin_range->range.id = gpio_offset;
1268 pin_range->range.gc = chip;
1269 pin_range->range.name = chip->label;
1270 pin_range->range.base = gdev->base + gpio_offset;
1271 pin_range->range.pin_base = pin_offset;
1272 pin_range->range.npins = npins;
1273 pin_range->pctldev = pinctrl_find_and_add_gpio_range(pinctl_name,
1274 &pin_range->range);
1275 if (IS_ERR(pin_range->pctldev)) {
1276 ret = PTR_ERR(pin_range->pctldev);
1277 chip_err(chip, "could not create pin range\n");
1278 kfree(pin_range);
1279 return ret;
1280 }
1281 chip_dbg(chip, "created GPIO range %d->%d ==> %s PIN %d->%d\n",
1282 gpio_offset, gpio_offset + npins - 1,
1283 pinctl_name,
1284 pin_offset, pin_offset + npins - 1);
1285
1286 list_add_tail(&pin_range->node, &gdev->pin_ranges);
1287
1288 return 0;
1289}
1290EXPORT_SYMBOL_GPL(gpiochip_add_pin_range);
1291
1292
1293
1294
1295
1296void gpiochip_remove_pin_ranges(struct gpio_chip *chip)
1297{
1298 struct gpio_pin_range *pin_range, *tmp;
1299 struct gpio_device *gdev = chip->gpiodev;
1300
1301 list_for_each_entry_safe(pin_range, tmp, &gdev->pin_ranges, node) {
1302 list_del(&pin_range->node);
1303 pinctrl_remove_gpio_range(pin_range->pctldev,
1304 &pin_range->range);
1305 kfree(pin_range);
1306 }
1307}
1308EXPORT_SYMBOL_GPL(gpiochip_remove_pin_ranges);
1309
1310#endif
1311
1312
1313
1314
1315
1316static int __gpiod_request(struct gpio_desc *desc, const char *label)
1317{
1318 struct gpio_chip *chip = desc->gdev->chip;
1319 int status;
1320 unsigned long flags;
1321
1322 spin_lock_irqsave(&gpio_lock, flags);
1323
1324
1325
1326
1327
1328 if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
1329 desc_set_label(desc, label ? : "?");
1330 status = 0;
1331 } else {
1332 status = -EBUSY;
1333 goto done;
1334 }
1335
1336 if (chip->request) {
1337
1338 spin_unlock_irqrestore(&gpio_lock, flags);
1339 status = chip->request(chip, gpio_chip_hwgpio(desc));
1340 spin_lock_irqsave(&gpio_lock, flags);
1341
1342 if (status < 0) {
1343 desc_set_label(desc, NULL);
1344 clear_bit(FLAG_REQUESTED, &desc->flags);
1345 goto done;
1346 }
1347 }
1348 if (chip->get_direction) {
1349
1350 spin_unlock_irqrestore(&gpio_lock, flags);
1351 gpiod_get_direction(desc);
1352 spin_lock_irqsave(&gpio_lock, flags);
1353 }
1354done:
1355 spin_unlock_irqrestore(&gpio_lock, flags);
1356 return status;
1357}
1358
1359
1360
1361
1362
1363
1364
1365#define VALIDATE_DESC(desc) do { \
1366 if (!desc) \
1367 return 0; \
1368 if (IS_ERR(desc)) { \
1369 pr_warn("%s: invalid GPIO (errorpointer)\n", __func__); \
1370 return PTR_ERR(desc); \
1371 } \
1372 if (!desc->gdev) { \
1373 pr_warn("%s: invalid GPIO (no device)\n", __func__); \
1374 return -EINVAL; \
1375 } \
1376 if ( !desc->gdev->chip ) { \
1377 dev_warn(&desc->gdev->dev, \
1378 "%s: backing chip is gone\n", __func__); \
1379 return 0; \
1380 } } while (0)
1381
1382#define VALIDATE_DESC_VOID(desc) do { \
1383 if (!desc) \
1384 return; \
1385 if (IS_ERR(desc)) { \
1386 pr_warn("%s: invalid GPIO (errorpointer)\n", __func__); \
1387 return; \
1388 } \
1389 if (!desc->gdev) { \
1390 pr_warn("%s: invalid GPIO (no device)\n", __func__); \
1391 return; \
1392 } \
1393 if (!desc->gdev->chip) { \
1394 dev_warn(&desc->gdev->dev, \
1395 "%s: backing chip is gone\n", __func__); \
1396 return; \
1397 } } while (0)
1398
1399
1400int gpiod_request(struct gpio_desc *desc, const char *label)
1401{
1402 int status = -EPROBE_DEFER;
1403 struct gpio_device *gdev;
1404
1405 VALIDATE_DESC(desc);
1406 gdev = desc->gdev;
1407
1408 if (try_module_get(gdev->owner)) {
1409 status = __gpiod_request(desc, label);
1410 if (status < 0)
1411 module_put(gdev->owner);
1412 else
1413 get_device(&gdev->dev);
1414 }
1415
1416 if (status)
1417 gpiod_dbg(desc, "%s: status %d\n", __func__, status);
1418
1419 return status;
1420}
1421
1422static bool __gpiod_free(struct gpio_desc *desc)
1423{
1424 bool ret = false;
1425 unsigned long flags;
1426 struct gpio_chip *chip;
1427
1428 might_sleep();
1429
1430 gpiod_unexport(desc);
1431
1432 spin_lock_irqsave(&gpio_lock, flags);
1433
1434 chip = desc->gdev->chip;
1435 if (chip && test_bit(FLAG_REQUESTED, &desc->flags)) {
1436 if (chip->free) {
1437 spin_unlock_irqrestore(&gpio_lock, flags);
1438 might_sleep_if(chip->can_sleep);
1439 chip->free(chip, gpio_chip_hwgpio(desc));
1440 spin_lock_irqsave(&gpio_lock, flags);
1441 }
1442 desc_set_label(desc, NULL);
1443 clear_bit(FLAG_ACTIVE_LOW, &desc->flags);
1444 clear_bit(FLAG_REQUESTED, &desc->flags);
1445 clear_bit(FLAG_OPEN_DRAIN, &desc->flags);
1446 clear_bit(FLAG_OPEN_SOURCE, &desc->flags);
1447 clear_bit(FLAG_IS_HOGGED, &desc->flags);
1448 ret = true;
1449 }
1450
1451 spin_unlock_irqrestore(&gpio_lock, flags);
1452 return ret;
1453}
1454
1455void gpiod_free(struct gpio_desc *desc)
1456{
1457 if (desc && desc->gdev && __gpiod_free(desc)) {
1458 module_put(desc->gdev->owner);
1459 put_device(&desc->gdev->dev);
1460 } else {
1461 WARN_ON(extra_checks);
1462 }
1463}
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478const char *gpiochip_is_requested(struct gpio_chip *chip, unsigned offset)
1479{
1480 struct gpio_desc *desc;
1481
1482 if (offset >= chip->ngpio)
1483 return NULL;
1484
1485 desc = &chip->gpiodev->descs[offset];
1486
1487 if (test_bit(FLAG_REQUESTED, &desc->flags) == 0)
1488 return NULL;
1489 return desc->label;
1490}
1491EXPORT_SYMBOL_GPL(gpiochip_is_requested);
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *chip, u16 hwnum,
1505 const char *label)
1506{
1507 struct gpio_desc *desc = gpiochip_get_desc(chip, hwnum);
1508 int err;
1509
1510 if (IS_ERR(desc)) {
1511 chip_err(chip, "failed to get GPIO descriptor\n");
1512 return desc;
1513 }
1514
1515 err = __gpiod_request(desc, label);
1516 if (err < 0)
1517 return ERR_PTR(err);
1518
1519 return desc;
1520}
1521EXPORT_SYMBOL_GPL(gpiochip_request_own_desc);
1522
1523
1524
1525
1526
1527
1528
1529
1530void gpiochip_free_own_desc(struct gpio_desc *desc)
1531{
1532 if (desc)
1533 __gpiod_free(desc);
1534}
1535EXPORT_SYMBOL_GPL(gpiochip_free_own_desc);
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556int gpiod_direction_input(struct gpio_desc *desc)
1557{
1558 struct gpio_chip *chip;
1559 int status = -EINVAL;
1560
1561 VALIDATE_DESC(desc);
1562 chip = desc->gdev->chip;
1563
1564 if (!chip->get || !chip->direction_input) {
1565 gpiod_warn(desc,
1566 "%s: missing get() or direction_input() operations\n",
1567 __func__);
1568 return -EIO;
1569 }
1570
1571 status = chip->direction_input(chip, gpio_chip_hwgpio(desc));
1572 if (status == 0)
1573 clear_bit(FLAG_IS_OUT, &desc->flags);
1574
1575 trace_gpio_direction(desc_to_gpio(desc), 1, status);
1576
1577 return status;
1578}
1579EXPORT_SYMBOL_GPL(gpiod_direction_input);
1580
1581static int _gpiod_direction_output_raw(struct gpio_desc *desc, int value)
1582{
1583 struct gpio_chip *gc = desc->gdev->chip;
1584 int ret;
1585
1586
1587 if (test_bit(FLAG_USED_AS_IRQ, &desc->flags)) {
1588 gpiod_err(desc,
1589 "%s: tried to set a GPIO tied to an IRQ as output\n",
1590 __func__);
1591 return -EIO;
1592 }
1593
1594 if (test_bit(FLAG_OPEN_DRAIN, &desc->flags)) {
1595
1596 if (gc->set_single_ended) {
1597 ret = gc->set_single_ended(gc, gpio_chip_hwgpio(desc),
1598 LINE_MODE_OPEN_DRAIN);
1599 if (!ret)
1600 goto set_output_value;
1601 }
1602
1603 if (value)
1604 return gpiod_direction_input(desc);
1605 }
1606 else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags)) {
1607 if (gc->set_single_ended) {
1608 ret = gc->set_single_ended(gc, gpio_chip_hwgpio(desc),
1609 LINE_MODE_OPEN_SOURCE);
1610 if (!ret)
1611 goto set_output_value;
1612 }
1613
1614 if (!value)
1615 return gpiod_direction_input(desc);
1616 } else {
1617
1618 if (gc->set_single_ended)
1619 gc->set_single_ended(gc,
1620 gpio_chip_hwgpio(desc),
1621 LINE_MODE_PUSH_PULL);
1622 }
1623
1624set_output_value:
1625 if (!gc->set || !gc->direction_output) {
1626 gpiod_warn(desc,
1627 "%s: missing set() or direction_output() operations\n",
1628 __func__);
1629 return -EIO;
1630 }
1631
1632 ret = gc->direction_output(gc, gpio_chip_hwgpio(desc), value);
1633 if (!ret)
1634 set_bit(FLAG_IS_OUT, &desc->flags);
1635 trace_gpio_value(desc_to_gpio(desc), 0, value);
1636 trace_gpio_direction(desc_to_gpio(desc), 0, ret);
1637 return ret;
1638}
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651int gpiod_direction_output_raw(struct gpio_desc *desc, int value)
1652{
1653 VALIDATE_DESC(desc);
1654 return _gpiod_direction_output_raw(desc, value);
1655}
1656EXPORT_SYMBOL_GPL(gpiod_direction_output_raw);
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670int gpiod_direction_output(struct gpio_desc *desc, int value)
1671{
1672 VALIDATE_DESC(desc);
1673 if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
1674 value = !value;
1675 return _gpiod_direction_output_raw(desc, value);
1676}
1677EXPORT_SYMBOL_GPL(gpiod_direction_output);
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687int gpiod_set_debounce(struct gpio_desc *desc, unsigned debounce)
1688{
1689 struct gpio_chip *chip;
1690
1691 VALIDATE_DESC(desc);
1692 chip = desc->gdev->chip;
1693 if (!chip->set || !chip->set_debounce) {
1694 gpiod_dbg(desc,
1695 "%s: missing set() or set_debounce() operations\n",
1696 __func__);
1697 return -ENOTSUPP;
1698 }
1699
1700 return chip->set_debounce(chip, gpio_chip_hwgpio(desc), debounce);
1701}
1702EXPORT_SYMBOL_GPL(gpiod_set_debounce);
1703
1704
1705
1706
1707
1708
1709
1710int gpiod_is_active_low(const struct gpio_desc *desc)
1711{
1712 VALIDATE_DESC(desc);
1713 return test_bit(FLAG_ACTIVE_LOW, &desc->flags);
1714}
1715EXPORT_SYMBOL_GPL(gpiod_is_active_low);
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739static int _gpiod_get_raw_value(const struct gpio_desc *desc)
1740{
1741 struct gpio_chip *chip;
1742 int offset;
1743 int value;
1744
1745 chip = desc->gdev->chip;
1746 offset = gpio_chip_hwgpio(desc);
1747 value = chip->get ? chip->get(chip, offset) : -EIO;
1748 value = value < 0 ? value : !!value;
1749 trace_gpio_value(desc_to_gpio(desc), 1, value);
1750 return value;
1751}
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763int gpiod_get_raw_value(const struct gpio_desc *desc)
1764{
1765 VALIDATE_DESC(desc);
1766
1767 WARN_ON(desc->gdev->chip->can_sleep);
1768 return _gpiod_get_raw_value(desc);
1769}
1770EXPORT_SYMBOL_GPL(gpiod_get_raw_value);
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782int gpiod_get_value(const struct gpio_desc *desc)
1783{
1784 int value;
1785
1786 VALIDATE_DESC(desc);
1787
1788 WARN_ON(desc->gdev->chip->can_sleep);
1789
1790 value = _gpiod_get_raw_value(desc);
1791 if (value < 0)
1792 return value;
1793
1794 if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
1795 value = !value;
1796
1797 return value;
1798}
1799EXPORT_SYMBOL_GPL(gpiod_get_value);
1800
1801
1802
1803
1804
1805
1806static void _gpio_set_open_drain_value(struct gpio_desc *desc, bool value)
1807{
1808 int err = 0;
1809 struct gpio_chip *chip = desc->gdev->chip;
1810 int offset = gpio_chip_hwgpio(desc);
1811
1812 if (value) {
1813 err = chip->direction_input(chip, offset);
1814 if (!err)
1815 clear_bit(FLAG_IS_OUT, &desc->flags);
1816 } else {
1817 err = chip->direction_output(chip, offset, 0);
1818 if (!err)
1819 set_bit(FLAG_IS_OUT, &desc->flags);
1820 }
1821 trace_gpio_direction(desc_to_gpio(desc), value, err);
1822 if (err < 0)
1823 gpiod_err(desc,
1824 "%s: Error in set_value for open drain err %d\n",
1825 __func__, err);
1826}
1827
1828
1829
1830
1831
1832
1833static void _gpio_set_open_source_value(struct gpio_desc *desc, bool value)
1834{
1835 int err = 0;
1836 struct gpio_chip *chip = desc->gdev->chip;
1837 int offset = gpio_chip_hwgpio(desc);
1838
1839 if (value) {
1840 err = chip->direction_output(chip, offset, 1);
1841 if (!err)
1842 set_bit(FLAG_IS_OUT, &desc->flags);
1843 } else {
1844 err = chip->direction_input(chip, offset);
1845 if (!err)
1846 clear_bit(FLAG_IS_OUT, &desc->flags);
1847 }
1848 trace_gpio_direction(desc_to_gpio(desc), !value, err);
1849 if (err < 0)
1850 gpiod_err(desc,
1851 "%s: Error in set_value for open source err %d\n",
1852 __func__, err);
1853}
1854
1855static void _gpiod_set_raw_value(struct gpio_desc *desc, bool value)
1856{
1857 struct gpio_chip *chip;
1858
1859 chip = desc->gdev->chip;
1860 trace_gpio_value(desc_to_gpio(desc), 0, value);
1861 if (test_bit(FLAG_OPEN_DRAIN, &desc->flags))
1862 _gpio_set_open_drain_value(desc, value);
1863 else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags))
1864 _gpio_set_open_source_value(desc, value);
1865 else
1866 chip->set(chip, gpio_chip_hwgpio(desc), value);
1867}
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878static void gpio_chip_set_multiple(struct gpio_chip *chip,
1879 unsigned long *mask, unsigned long *bits)
1880{
1881 if (chip->set_multiple) {
1882 chip->set_multiple(chip, mask, bits);
1883 } else {
1884 int i;
1885 for (i = 0; i < chip->ngpio; i++) {
1886 if (mask[BIT_WORD(i)] == 0) {
1887
1888
1889 i = (BIT_WORD(i) + 1) * BITS_PER_LONG - 1;
1890 continue;
1891 }
1892
1893 if (__test_and_clear_bit(i, mask))
1894 chip->set(chip, i, test_bit(i, bits));
1895 }
1896 }
1897}
1898
1899void gpiod_set_array_value_complex(bool raw, bool can_sleep,
1900 unsigned int array_size,
1901 struct gpio_desc **desc_array,
1902 int *value_array)
1903{
1904 int i = 0;
1905
1906 while (i < array_size) {
1907 struct gpio_chip *chip = desc_array[i]->gdev->chip;
1908 unsigned long mask[BITS_TO_LONGS(chip->ngpio)];
1909 unsigned long bits[BITS_TO_LONGS(chip->ngpio)];
1910 int count = 0;
1911
1912 if (!can_sleep)
1913 WARN_ON(chip->can_sleep);
1914
1915 memset(mask, 0, sizeof(mask));
1916 do {
1917 struct gpio_desc *desc = desc_array[i];
1918 int hwgpio = gpio_chip_hwgpio(desc);
1919 int value = value_array[i];
1920
1921 if (!raw && test_bit(FLAG_ACTIVE_LOW, &desc->flags))
1922 value = !value;
1923 trace_gpio_value(desc_to_gpio(desc), 0, value);
1924
1925
1926
1927
1928 if (test_bit(FLAG_OPEN_DRAIN, &desc->flags)) {
1929 _gpio_set_open_drain_value(desc, value);
1930 } else if (test_bit(FLAG_OPEN_SOURCE, &desc->flags)) {
1931 _gpio_set_open_source_value(desc, value);
1932 } else {
1933 __set_bit(hwgpio, mask);
1934 if (value)
1935 __set_bit(hwgpio, bits);
1936 else
1937 __clear_bit(hwgpio, bits);
1938 count++;
1939 }
1940 i++;
1941 } while ((i < array_size) &&
1942 (desc_array[i]->gdev->chip == chip));
1943
1944 if (count != 0)
1945 gpio_chip_set_multiple(chip, mask, bits);
1946 }
1947}
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960void gpiod_set_raw_value(struct gpio_desc *desc, int value)
1961{
1962 VALIDATE_DESC_VOID(desc);
1963
1964 WARN_ON(desc->gdev->chip->can_sleep);
1965 _gpiod_set_raw_value(desc, value);
1966}
1967EXPORT_SYMBOL_GPL(gpiod_set_raw_value);
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980void gpiod_set_value(struct gpio_desc *desc, int value)
1981{
1982 VALIDATE_DESC_VOID(desc);
1983
1984 WARN_ON(desc->gdev->chip->can_sleep);
1985 if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
1986 value = !value;
1987 _gpiod_set_raw_value(desc, value);
1988}
1989EXPORT_SYMBOL_GPL(gpiod_set_value);
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003void gpiod_set_raw_array_value(unsigned int array_size,
2004 struct gpio_desc **desc_array, int *value_array)
2005{
2006 if (!desc_array)
2007 return;
2008 gpiod_set_array_value_complex(true, false, array_size, desc_array,
2009 value_array);
2010}
2011EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value);
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025void gpiod_set_array_value(unsigned int array_size,
2026 struct gpio_desc **desc_array, int *value_array)
2027{
2028 if (!desc_array)
2029 return;
2030 gpiod_set_array_value_complex(false, false, array_size, desc_array,
2031 value_array);
2032}
2033EXPORT_SYMBOL_GPL(gpiod_set_array_value);
2034
2035
2036
2037
2038
2039
2040int gpiod_cansleep(const struct gpio_desc *desc)
2041{
2042 VALIDATE_DESC(desc);
2043 return desc->gdev->chip->can_sleep;
2044}
2045EXPORT_SYMBOL_GPL(gpiod_cansleep);
2046
2047
2048
2049
2050
2051
2052
2053
2054int gpiod_to_irq(const struct gpio_desc *desc)
2055{
2056 struct gpio_chip *chip;
2057 int offset;
2058
2059
2060
2061
2062
2063
2064 if (!desc || IS_ERR(desc) || !desc->gdev || !desc->gdev->chip)
2065 return -EINVAL;
2066
2067 chip = desc->gdev->chip;
2068 offset = gpio_chip_hwgpio(desc);
2069 if (chip->to_irq) {
2070 int retirq = chip->to_irq(chip, offset);
2071
2072
2073 if (!retirq)
2074 return -ENXIO;
2075
2076 return retirq;
2077 }
2078 return -ENXIO;
2079}
2080EXPORT_SYMBOL_GPL(gpiod_to_irq);
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090int gpiochip_lock_as_irq(struct gpio_chip *chip, unsigned int offset)
2091{
2092 struct gpio_desc *desc;
2093
2094 desc = gpiochip_get_desc(chip, offset);
2095 if (IS_ERR(desc))
2096 return PTR_ERR(desc);
2097
2098
2099 if (chip->get_direction) {
2100 int dir = chip->get_direction(chip, offset);
2101
2102 if (dir)
2103 clear_bit(FLAG_IS_OUT, &desc->flags);
2104 else
2105 set_bit(FLAG_IS_OUT, &desc->flags);
2106 }
2107
2108 if (test_bit(FLAG_IS_OUT, &desc->flags)) {
2109 chip_err(chip,
2110 "%s: tried to flag a GPIO set as output for IRQ\n",
2111 __func__);
2112 return -EIO;
2113 }
2114
2115 set_bit(FLAG_USED_AS_IRQ, &desc->flags);
2116 return 0;
2117}
2118EXPORT_SYMBOL_GPL(gpiochip_lock_as_irq);
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128void gpiochip_unlock_as_irq(struct gpio_chip *chip, unsigned int offset)
2129{
2130 if (offset >= chip->ngpio)
2131 return;
2132
2133 clear_bit(FLAG_USED_AS_IRQ, &chip->gpiodev->descs[offset].flags);
2134}
2135EXPORT_SYMBOL_GPL(gpiochip_unlock_as_irq);
2136
2137bool gpiochip_line_is_irq(struct gpio_chip *chip, unsigned int offset)
2138{
2139 if (offset >= chip->ngpio)
2140 return false;
2141
2142 return test_bit(FLAG_USED_AS_IRQ, &chip->gpiodev->descs[offset].flags);
2143}
2144EXPORT_SYMBOL_GPL(gpiochip_line_is_irq);
2145
2146bool gpiochip_line_is_open_drain(struct gpio_chip *chip, unsigned int offset)
2147{
2148 if (offset >= chip->ngpio)
2149 return false;
2150
2151 return test_bit(FLAG_OPEN_DRAIN, &chip->gpiodev->descs[offset].flags);
2152}
2153EXPORT_SYMBOL_GPL(gpiochip_line_is_open_drain);
2154
2155bool gpiochip_line_is_open_source(struct gpio_chip *chip, unsigned int offset)
2156{
2157 if (offset >= chip->ngpio)
2158 return false;
2159
2160 return test_bit(FLAG_OPEN_SOURCE, &chip->gpiodev->descs[offset].flags);
2161}
2162EXPORT_SYMBOL_GPL(gpiochip_line_is_open_source);
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)
2174{
2175 might_sleep_if(extra_checks);
2176 VALIDATE_DESC(desc);
2177 return _gpiod_get_raw_value(desc);
2178}
2179EXPORT_SYMBOL_GPL(gpiod_get_raw_value_cansleep);
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190int gpiod_get_value_cansleep(const struct gpio_desc *desc)
2191{
2192 int value;
2193
2194 might_sleep_if(extra_checks);
2195 VALIDATE_DESC(desc);
2196 value = _gpiod_get_raw_value(desc);
2197 if (value < 0)
2198 return value;
2199
2200 if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
2201 value = !value;
2202
2203 return value;
2204}
2205EXPORT_SYMBOL_GPL(gpiod_get_value_cansleep);
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217void gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)
2218{
2219 might_sleep_if(extra_checks);
2220 VALIDATE_DESC_VOID(desc);
2221 _gpiod_set_raw_value(desc, value);
2222}
2223EXPORT_SYMBOL_GPL(gpiod_set_raw_value_cansleep);
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235void gpiod_set_value_cansleep(struct gpio_desc *desc, int value)
2236{
2237 might_sleep_if(extra_checks);
2238 VALIDATE_DESC_VOID(desc);
2239 if (test_bit(FLAG_ACTIVE_LOW, &desc->flags))
2240 value = !value;
2241 _gpiod_set_raw_value(desc, value);
2242}
2243EXPORT_SYMBOL_GPL(gpiod_set_value_cansleep);
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256void gpiod_set_raw_array_value_cansleep(unsigned int array_size,
2257 struct gpio_desc **desc_array,
2258 int *value_array)
2259{
2260 might_sleep_if(extra_checks);
2261 if (!desc_array)
2262 return;
2263 gpiod_set_array_value_complex(true, true, array_size, desc_array,
2264 value_array);
2265}
2266EXPORT_SYMBOL_GPL(gpiod_set_raw_array_value_cansleep);
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279void gpiod_set_array_value_cansleep(unsigned int array_size,
2280 struct gpio_desc **desc_array,
2281 int *value_array)
2282{
2283 might_sleep_if(extra_checks);
2284 if (!desc_array)
2285 return;
2286 gpiod_set_array_value_complex(false, true, array_size, desc_array,
2287 value_array);
2288}
2289EXPORT_SYMBOL_GPL(gpiod_set_array_value_cansleep);
2290
2291
2292
2293
2294
2295void gpiod_add_lookup_table(struct gpiod_lookup_table *table)
2296{
2297 mutex_lock(&gpio_lookup_lock);
2298
2299 list_add_tail(&table->list, &gpio_lookup_list);
2300
2301 mutex_unlock(&gpio_lookup_lock);
2302}
2303
2304
2305
2306
2307
2308void gpiod_remove_lookup_table(struct gpiod_lookup_table *table)
2309{
2310 mutex_lock(&gpio_lookup_lock);
2311
2312 list_del(&table->list);
2313
2314 mutex_unlock(&gpio_lookup_lock);
2315}
2316
2317static struct gpio_desc *of_find_gpio(struct device *dev, const char *con_id,
2318 unsigned int idx,
2319 enum gpio_lookup_flags *flags)
2320{
2321 char prop_name[32];
2322 enum of_gpio_flags of_flags;
2323 struct gpio_desc *desc;
2324 unsigned int i;
2325
2326 for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
2327 if (con_id)
2328 snprintf(prop_name, sizeof(prop_name), "%s-%s", con_id,
2329 gpio_suffixes[i]);
2330 else
2331 snprintf(prop_name, sizeof(prop_name), "%s",
2332 gpio_suffixes[i]);
2333
2334 desc = of_get_named_gpiod_flags(dev->of_node, prop_name, idx,
2335 &of_flags);
2336 if (!IS_ERR(desc) || (PTR_ERR(desc) == -EPROBE_DEFER))
2337 break;
2338 }
2339
2340 if (IS_ERR(desc))
2341 return desc;
2342
2343 if (of_flags & OF_GPIO_ACTIVE_LOW)
2344 *flags |= GPIO_ACTIVE_LOW;
2345
2346 if (of_flags & OF_GPIO_SINGLE_ENDED) {
2347 if (of_flags & OF_GPIO_ACTIVE_LOW)
2348 *flags |= GPIO_OPEN_DRAIN;
2349 else
2350 *flags |= GPIO_OPEN_SOURCE;
2351 }
2352
2353 return desc;
2354}
2355
2356static struct gpio_desc *acpi_find_gpio(struct device *dev,
2357 const char *con_id,
2358 unsigned int idx,
2359 enum gpiod_flags flags,
2360 enum gpio_lookup_flags *lookupflags)
2361{
2362 struct acpi_device *adev = ACPI_COMPANION(dev);
2363 struct acpi_gpio_info info;
2364 struct gpio_desc *desc;
2365 char propname[32];
2366 int i;
2367
2368
2369 for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
2370 if (con_id && strcmp(con_id, "gpios")) {
2371 snprintf(propname, sizeof(propname), "%s-%s",
2372 con_id, gpio_suffixes[i]);
2373 } else {
2374 snprintf(propname, sizeof(propname), "%s",
2375 gpio_suffixes[i]);
2376 }
2377
2378 desc = acpi_get_gpiod_by_index(adev, propname, idx, &info);
2379 if (!IS_ERR(desc) || (PTR_ERR(desc) == -EPROBE_DEFER))
2380 break;
2381 }
2382
2383
2384 if (IS_ERR(desc)) {
2385 if (!acpi_can_fallback_to_crs(adev, con_id))
2386 return ERR_PTR(-ENOENT);
2387
2388 desc = acpi_get_gpiod_by_index(adev, NULL, idx, &info);
2389 if (IS_ERR(desc))
2390 return desc;
2391
2392 if ((flags == GPIOD_OUT_LOW || flags == GPIOD_OUT_HIGH) &&
2393 info.gpioint) {
2394 dev_dbg(dev, "refusing GpioInt() entry when doing GPIOD_OUT_* lookup\n");
2395 return ERR_PTR(-ENOENT);
2396 }
2397 }
2398
2399 if (info.polarity == GPIO_ACTIVE_LOW)
2400 *lookupflags |= GPIO_ACTIVE_LOW;
2401
2402 return desc;
2403}
2404
2405static struct gpiod_lookup_table *gpiod_find_lookup_table(struct device *dev)
2406{
2407 const char *dev_id = dev ? dev_name(dev) : NULL;
2408 struct gpiod_lookup_table *table;
2409
2410 mutex_lock(&gpio_lookup_lock);
2411
2412 list_for_each_entry(table, &gpio_lookup_list, list) {
2413 if (table->dev_id && dev_id) {
2414
2415
2416
2417
2418 if (!strcmp(table->dev_id, dev_id))
2419 goto found;
2420 } else {
2421
2422
2423
2424
2425 if (dev_id == table->dev_id)
2426 goto found;
2427 }
2428 }
2429 table = NULL;
2430
2431found:
2432 mutex_unlock(&gpio_lookup_lock);
2433 return table;
2434}
2435
2436static struct gpio_desc *gpiod_find(struct device *dev, const char *con_id,
2437 unsigned int idx,
2438 enum gpio_lookup_flags *flags)
2439{
2440 struct gpio_desc *desc = ERR_PTR(-ENOENT);
2441 struct gpiod_lookup_table *table;
2442 struct gpiod_lookup *p;
2443
2444 table = gpiod_find_lookup_table(dev);
2445 if (!table)
2446 return desc;
2447
2448 for (p = &table->table[0]; p->chip_label; p++) {
2449 struct gpio_chip *chip;
2450
2451
2452 if (p->idx != idx)
2453 continue;
2454
2455
2456 if (p->con_id && (!con_id || strcmp(p->con_id, con_id)))
2457 continue;
2458
2459 chip = find_chip_by_name(p->chip_label);
2460
2461 if (!chip) {
2462 dev_err(dev, "cannot find GPIO chip %s\n",
2463 p->chip_label);
2464 return ERR_PTR(-ENODEV);
2465 }
2466
2467 if (chip->ngpio <= p->chip_hwnum) {
2468 dev_err(dev,
2469 "requested GPIO %d is out of range [0..%d] for chip %s\n",
2470 idx, chip->ngpio, chip->label);
2471 return ERR_PTR(-EINVAL);
2472 }
2473
2474 desc = gpiochip_get_desc(chip, p->chip_hwnum);
2475 *flags = p->flags;
2476
2477 return desc;
2478 }
2479
2480 return desc;
2481}
2482
2483static int dt_gpio_count(struct device *dev, const char *con_id)
2484{
2485 int ret;
2486 char propname[32];
2487 unsigned int i;
2488
2489 for (i = 0; i < ARRAY_SIZE(gpio_suffixes); i++) {
2490 if (con_id)
2491 snprintf(propname, sizeof(propname), "%s-%s",
2492 con_id, gpio_suffixes[i]);
2493 else
2494 snprintf(propname, sizeof(propname), "%s",
2495 gpio_suffixes[i]);
2496
2497 ret = of_gpio_named_count(dev->of_node, propname);
2498 if (ret >= 0)
2499 break;
2500 }
2501 return ret;
2502}
2503
2504static int platform_gpio_count(struct device *dev, const char *con_id)
2505{
2506 struct gpiod_lookup_table *table;
2507 struct gpiod_lookup *p;
2508 unsigned int count = 0;
2509
2510 table = gpiod_find_lookup_table(dev);
2511 if (!table)
2512 return -ENOENT;
2513
2514 for (p = &table->table[0]; p->chip_label; p++) {
2515 if ((con_id && p->con_id && !strcmp(con_id, p->con_id)) ||
2516 (!con_id && !p->con_id))
2517 count++;
2518 }
2519 if (!count)
2520 return -ENOENT;
2521
2522 return count;
2523}
2524
2525
2526
2527
2528
2529
2530
2531int gpiod_count(struct device *dev, const char *con_id)
2532{
2533 int count = -ENOENT;
2534
2535 if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node)
2536 count = dt_gpio_count(dev, con_id);
2537 else if (IS_ENABLED(CONFIG_ACPI) && dev && ACPI_HANDLE(dev))
2538 count = acpi_gpio_count(dev, con_id);
2539
2540 if (count < 0)
2541 count = platform_gpio_count(dev, con_id);
2542
2543 return count;
2544}
2545EXPORT_SYMBOL_GPL(gpiod_count);
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557struct gpio_desc *__must_check gpiod_get(struct device *dev, const char *con_id,
2558 enum gpiod_flags flags)
2559{
2560 return gpiod_get_index(dev, con_id, 0, flags);
2561}
2562EXPORT_SYMBOL_GPL(gpiod_get);
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574struct gpio_desc *__must_check gpiod_get_optional(struct device *dev,
2575 const char *con_id,
2576 enum gpiod_flags flags)
2577{
2578 return gpiod_get_index_optional(dev, con_id, 0, flags);
2579}
2580EXPORT_SYMBOL_GPL(gpiod_get_optional);
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595static int gpiod_configure_flags(struct gpio_desc *desc, const char *con_id,
2596 unsigned long lflags, enum gpiod_flags dflags)
2597{
2598 int status;
2599
2600 if (lflags & GPIO_ACTIVE_LOW)
2601 set_bit(FLAG_ACTIVE_LOW, &desc->flags);
2602 if (lflags & GPIO_OPEN_DRAIN)
2603 set_bit(FLAG_OPEN_DRAIN, &desc->flags);
2604 if (lflags & GPIO_OPEN_SOURCE)
2605 set_bit(FLAG_OPEN_SOURCE, &desc->flags);
2606
2607
2608 if (!(dflags & GPIOD_FLAGS_BIT_DIR_SET)) {
2609 pr_debug("no flags found for %s\n", con_id);
2610 return 0;
2611 }
2612
2613
2614 if (dflags & GPIOD_FLAGS_BIT_DIR_OUT)
2615 status = gpiod_direction_output(desc,
2616 dflags & GPIOD_FLAGS_BIT_DIR_VAL);
2617 else
2618 status = gpiod_direction_input(desc);
2619
2620 return status;
2621}
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637struct gpio_desc *__must_check gpiod_get_index(struct device *dev,
2638 const char *con_id,
2639 unsigned int idx,
2640 enum gpiod_flags flags)
2641{
2642 struct gpio_desc *desc = NULL;
2643 int status;
2644 enum gpio_lookup_flags lookupflags = 0;
2645
2646 dev_dbg(dev, "GPIO lookup for consumer %s\n", con_id);
2647
2648 if (dev) {
2649
2650 if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
2651 dev_dbg(dev, "using device tree for GPIO lookup\n");
2652 desc = of_find_gpio(dev, con_id, idx, &lookupflags);
2653 } else if (ACPI_COMPANION(dev)) {
2654 dev_dbg(dev, "using ACPI for GPIO lookup\n");
2655 desc = acpi_find_gpio(dev, con_id, idx, flags, &lookupflags);
2656 }
2657 }
2658
2659
2660
2661
2662
2663 if (!desc || desc == ERR_PTR(-ENOENT)) {
2664 dev_dbg(dev, "using lookup tables for GPIO lookup\n");
2665 desc = gpiod_find(dev, con_id, idx, &lookupflags);
2666 }
2667
2668 if (IS_ERR(desc)) {
2669 dev_dbg(dev, "lookup for GPIO %s failed\n", con_id);
2670 return desc;
2671 }
2672
2673 status = gpiod_request(desc, con_id);
2674 if (status < 0)
2675 return ERR_PTR(status);
2676
2677 status = gpiod_configure_flags(desc, con_id, lookupflags, flags);
2678 if (status < 0) {
2679 dev_dbg(dev, "setup of GPIO %s failed\n", con_id);
2680 gpiod_put(desc);
2681 return ERR_PTR(status);
2682 }
2683
2684 return desc;
2685}
2686EXPORT_SYMBOL_GPL(gpiod_get_index);
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702struct gpio_desc *fwnode_get_named_gpiod(struct fwnode_handle *fwnode,
2703 const char *propname)
2704{
2705 struct gpio_desc *desc = ERR_PTR(-ENODEV);
2706 bool active_low = false;
2707 bool single_ended = false;
2708 int ret;
2709
2710 if (!fwnode)
2711 return ERR_PTR(-EINVAL);
2712
2713 if (is_of_node(fwnode)) {
2714 enum of_gpio_flags flags;
2715
2716 desc = of_get_named_gpiod_flags(to_of_node(fwnode), propname, 0,
2717 &flags);
2718 if (!IS_ERR(desc)) {
2719 active_low = flags & OF_GPIO_ACTIVE_LOW;
2720 single_ended = flags & OF_GPIO_SINGLE_ENDED;
2721 }
2722 } else if (is_acpi_node(fwnode)) {
2723 struct acpi_gpio_info info;
2724
2725 desc = acpi_node_get_gpiod(fwnode, propname, 0, &info);
2726 if (!IS_ERR(desc))
2727 active_low = info.polarity == GPIO_ACTIVE_LOW;
2728 }
2729
2730 if (IS_ERR(desc))
2731 return desc;
2732
2733 ret = gpiod_request(desc, NULL);
2734 if (ret)
2735 return ERR_PTR(ret);
2736
2737 if (active_low)
2738 set_bit(FLAG_ACTIVE_LOW, &desc->flags);
2739
2740 if (single_ended) {
2741 if (active_low)
2742 set_bit(FLAG_OPEN_DRAIN, &desc->flags);
2743 else
2744 set_bit(FLAG_OPEN_SOURCE, &desc->flags);
2745 }
2746
2747 return desc;
2748}
2749EXPORT_SYMBOL_GPL(fwnode_get_named_gpiod);
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev,
2764 const char *con_id,
2765 unsigned int index,
2766 enum gpiod_flags flags)
2767{
2768 struct gpio_desc *desc;
2769
2770 desc = gpiod_get_index(dev, con_id, index, flags);
2771 if (IS_ERR(desc)) {
2772 if (PTR_ERR(desc) == -ENOENT)
2773 return NULL;
2774 }
2775
2776 return desc;
2777}
2778EXPORT_SYMBOL_GPL(gpiod_get_index_optional);
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788int gpiod_hog(struct gpio_desc *desc, const char *name,
2789 unsigned long lflags, enum gpiod_flags dflags)
2790{
2791 struct gpio_chip *chip;
2792 struct gpio_desc *local_desc;
2793 int hwnum;
2794 int status;
2795
2796 chip = gpiod_to_chip(desc);
2797 hwnum = gpio_chip_hwgpio(desc);
2798
2799 local_desc = gpiochip_request_own_desc(chip, hwnum, name);
2800 if (IS_ERR(local_desc)) {
2801 status = PTR_ERR(local_desc);
2802 pr_err("requesting hog GPIO %s (chip %s, offset %d) failed, %d\n",
2803 name, chip->label, hwnum, status);
2804 return status;
2805 }
2806
2807 status = gpiod_configure_flags(desc, name, lflags, dflags);
2808 if (status < 0) {
2809 pr_err("setup of hog GPIO %s (chip %s, offset %d) failed, %d\n",
2810 name, chip->label, hwnum, status);
2811 gpiochip_free_own_desc(desc);
2812 return status;
2813 }
2814
2815
2816 set_bit(FLAG_IS_HOGGED, &desc->flags);
2817
2818 pr_info("GPIO line %d (%s) hogged as %s%s\n",
2819 desc_to_gpio(desc), name,
2820 (dflags&GPIOD_FLAGS_BIT_DIR_OUT) ? "output" : "input",
2821 (dflags&GPIOD_FLAGS_BIT_DIR_OUT) ?
2822 (dflags&GPIOD_FLAGS_BIT_DIR_VAL) ? "/high" : "/low":"");
2823
2824 return 0;
2825}
2826
2827
2828
2829
2830
2831
2832
2833static void gpiochip_free_hogs(struct gpio_chip *chip)
2834{
2835 int id;
2836
2837 for (id = 0; id < chip->ngpio; id++) {
2838 if (test_bit(FLAG_IS_HOGGED, &chip->gpiodev->descs[id].flags))
2839 gpiochip_free_own_desc(&chip->gpiodev->descs[id]);
2840 }
2841}
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855struct gpio_descs *__must_check gpiod_get_array(struct device *dev,
2856 const char *con_id,
2857 enum gpiod_flags flags)
2858{
2859 struct gpio_desc *desc;
2860 struct gpio_descs *descs;
2861 int count;
2862
2863 count = gpiod_count(dev, con_id);
2864 if (count < 0)
2865 return ERR_PTR(count);
2866
2867 descs = kzalloc(sizeof(*descs) + sizeof(descs->desc[0]) * count,
2868 GFP_KERNEL);
2869 if (!descs)
2870 return ERR_PTR(-ENOMEM);
2871
2872 for (descs->ndescs = 0; descs->ndescs < count; ) {
2873 desc = gpiod_get_index(dev, con_id, descs->ndescs, flags);
2874 if (IS_ERR(desc)) {
2875 gpiod_put_array(descs);
2876 return ERR_CAST(desc);
2877 }
2878 descs->desc[descs->ndescs] = desc;
2879 descs->ndescs++;
2880 }
2881 return descs;
2882}
2883EXPORT_SYMBOL_GPL(gpiod_get_array);
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895struct gpio_descs *__must_check gpiod_get_array_optional(struct device *dev,
2896 const char *con_id,
2897 enum gpiod_flags flags)
2898{
2899 struct gpio_descs *descs;
2900
2901 descs = gpiod_get_array(dev, con_id, flags);
2902 if (IS_ERR(descs) && (PTR_ERR(descs) == -ENOENT))
2903 return NULL;
2904
2905 return descs;
2906}
2907EXPORT_SYMBOL_GPL(gpiod_get_array_optional);
2908
2909
2910
2911
2912
2913
2914
2915void gpiod_put(struct gpio_desc *desc)
2916{
2917 gpiod_free(desc);
2918}
2919EXPORT_SYMBOL_GPL(gpiod_put);
2920
2921
2922
2923
2924
2925void gpiod_put_array(struct gpio_descs *descs)
2926{
2927 unsigned int i;
2928
2929 for (i = 0; i < descs->ndescs; i++)
2930 gpiod_put(descs->desc[i]);
2931
2932 kfree(descs);
2933}
2934EXPORT_SYMBOL_GPL(gpiod_put_array);
2935
2936static int __init gpiolib_dev_init(void)
2937{
2938 int ret;
2939
2940
2941 ret = bus_register(&gpio_bus_type);
2942 if (ret < 0) {
2943 pr_err("gpiolib: could not register GPIO bus type\n");
2944 return ret;
2945 }
2946
2947 ret = alloc_chrdev_region(&gpio_devt, 0, GPIO_DEV_MAX, "gpiochip");
2948 if (ret < 0) {
2949 pr_err("gpiolib: failed to allocate char dev region\n");
2950 bus_unregister(&gpio_bus_type);
2951 } else {
2952 gpiolib_initialized = true;
2953 gpiochip_setup_devs();
2954 }
2955 return ret;
2956}
2957core_initcall(gpiolib_dev_init);
2958
2959#ifdef CONFIG_DEBUG_FS
2960
2961static void gpiolib_dbg_show(struct seq_file *s, struct gpio_device *gdev)
2962{
2963 unsigned i;
2964 struct gpio_chip *chip = gdev->chip;
2965 unsigned gpio = gdev->base;
2966 struct gpio_desc *gdesc = &gdev->descs[0];
2967 int is_out;
2968 int is_irq;
2969
2970 for (i = 0; i < gdev->ngpio; i++, gpio++, gdesc++) {
2971 if (!test_bit(FLAG_REQUESTED, &gdesc->flags)) {
2972 if (gdesc->name) {
2973 seq_printf(s, " gpio-%-3d (%-20.20s)\n",
2974 gpio, gdesc->name);
2975 }
2976 continue;
2977 }
2978
2979 gpiod_get_direction(gdesc);
2980 is_out = test_bit(FLAG_IS_OUT, &gdesc->flags);
2981 is_irq = test_bit(FLAG_USED_AS_IRQ, &gdesc->flags);
2982 seq_printf(s, " gpio-%-3d (%-20.20s|%-20.20s) %s %s %s",
2983 gpio, gdesc->name ? gdesc->name : "", gdesc->label,
2984 is_out ? "out" : "in ",
2985 chip->get
2986 ? (chip->get(chip, i) ? "hi" : "lo")
2987 : "? ",
2988 is_irq ? "IRQ" : " ");
2989 seq_printf(s, "\n");
2990 }
2991}
2992
2993static void *gpiolib_seq_start(struct seq_file *s, loff_t *pos)
2994{
2995 unsigned long flags;
2996 struct gpio_device *gdev = NULL;
2997 loff_t index = *pos;
2998
2999 s->private = "";
3000
3001 spin_lock_irqsave(&gpio_lock, flags);
3002 list_for_each_entry(gdev, &gpio_devices, list)
3003 if (index-- == 0) {
3004 spin_unlock_irqrestore(&gpio_lock, flags);
3005 return gdev;
3006 }
3007 spin_unlock_irqrestore(&gpio_lock, flags);
3008
3009 return NULL;
3010}
3011
3012static void *gpiolib_seq_next(struct seq_file *s, void *v, loff_t *pos)
3013{
3014 unsigned long flags;
3015 struct gpio_device *gdev = v;
3016 void *ret = NULL;
3017
3018 spin_lock_irqsave(&gpio_lock, flags);
3019 if (list_is_last(&gdev->list, &gpio_devices))
3020 ret = NULL;
3021 else
3022 ret = list_entry(gdev->list.next, struct gpio_device, list);
3023 spin_unlock_irqrestore(&gpio_lock, flags);
3024
3025 s->private = "\n";
3026 ++*pos;
3027
3028 return ret;
3029}
3030
3031static void gpiolib_seq_stop(struct seq_file *s, void *v)
3032{
3033}
3034
3035static int gpiolib_seq_show(struct seq_file *s, void *v)
3036{
3037 struct gpio_device *gdev = v;
3038 struct gpio_chip *chip = gdev->chip;
3039 struct device *parent;
3040
3041 if (!chip) {
3042 seq_printf(s, "%s%s: (dangling chip)", (char *)s->private,
3043 dev_name(&gdev->dev));
3044 return 0;
3045 }
3046
3047 seq_printf(s, "%s%s: GPIOs %d-%d", (char *)s->private,
3048 dev_name(&gdev->dev),
3049 gdev->base, gdev->base + gdev->ngpio - 1);
3050 parent = chip->parent;
3051 if (parent)
3052 seq_printf(s, ", parent: %s/%s",
3053 parent->bus ? parent->bus->name : "no-bus",
3054 dev_name(parent));
3055 if (chip->label)
3056 seq_printf(s, ", %s", chip->label);
3057 if (chip->can_sleep)
3058 seq_printf(s, ", can sleep");
3059 seq_printf(s, ":\n");
3060
3061 if (chip->dbg_show)
3062 chip->dbg_show(s, chip);
3063 else
3064 gpiolib_dbg_show(s, gdev);
3065
3066 return 0;
3067}
3068
3069static const struct seq_operations gpiolib_seq_ops = {
3070 .start = gpiolib_seq_start,
3071 .next = gpiolib_seq_next,
3072 .stop = gpiolib_seq_stop,
3073 .show = gpiolib_seq_show,
3074};
3075
3076static int gpiolib_open(struct inode *inode, struct file *file)
3077{
3078 return seq_open(file, &gpiolib_seq_ops);
3079}
3080
3081static const struct file_operations gpiolib_operations = {
3082 .owner = THIS_MODULE,
3083 .open = gpiolib_open,
3084 .read = seq_read,
3085 .llseek = seq_lseek,
3086 .release = seq_release,
3087};
3088
3089static int __init gpiolib_debugfs_init(void)
3090{
3091
3092 (void) debugfs_create_file("gpio", S_IFREG | S_IRUGO,
3093 NULL, NULL, &gpiolib_operations);
3094 return 0;
3095}
3096subsys_initcall(gpiolib_debugfs_init);
3097
3098#endif
3099