0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #define pr_fmt(fmt) "pinctrl core: " fmt
0014
0015 #include <linux/kernel.h>
0016 #include <linux/kref.h>
0017 #include <linux/export.h>
0018 #include <linux/init.h>
0019 #include <linux/device.h>
0020 #include <linux/slab.h>
0021 #include <linux/err.h>
0022 #include <linux/list.h>
0023 #include <linux/debugfs.h>
0024 #include <linux/seq_file.h>
0025 #include <linux/pinctrl/consumer.h>
0026 #include <linux/pinctrl/pinctrl.h>
0027 #include <linux/pinctrl/machine.h>
0028
0029 #ifdef CONFIG_GPIOLIB
0030 #include "../gpio/gpiolib.h"
0031 #include <asm-generic/gpio.h>
0032 #endif
0033
0034 #include "core.h"
0035 #include "devicetree.h"
0036 #include "pinmux.h"
0037 #include "pinconf.h"
0038
0039
0040 static bool pinctrl_dummy_state;
0041
0042
0043 static DEFINE_MUTEX(pinctrl_list_mutex);
0044
0045
0046 DEFINE_MUTEX(pinctrl_maps_mutex);
0047
0048
0049 static DEFINE_MUTEX(pinctrldev_list_mutex);
0050
0051
0052 static LIST_HEAD(pinctrldev_list);
0053
0054
0055 static LIST_HEAD(pinctrl_list);
0056
0057
0058 LIST_HEAD(pinctrl_maps);
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069 void pinctrl_provide_dummies(void)
0070 {
0071 pinctrl_dummy_state = true;
0072 }
0073
0074 const char *pinctrl_dev_get_name(struct pinctrl_dev *pctldev)
0075 {
0076
0077 return pctldev->desc->name;
0078 }
0079 EXPORT_SYMBOL_GPL(pinctrl_dev_get_name);
0080
0081 const char *pinctrl_dev_get_devname(struct pinctrl_dev *pctldev)
0082 {
0083 return dev_name(pctldev->dev);
0084 }
0085 EXPORT_SYMBOL_GPL(pinctrl_dev_get_devname);
0086
0087 void *pinctrl_dev_get_drvdata(struct pinctrl_dev *pctldev)
0088 {
0089 return pctldev->driver_data;
0090 }
0091 EXPORT_SYMBOL_GPL(pinctrl_dev_get_drvdata);
0092
0093
0094
0095
0096
0097
0098
0099
0100 struct pinctrl_dev *get_pinctrl_dev_from_devname(const char *devname)
0101 {
0102 struct pinctrl_dev *pctldev;
0103
0104 if (!devname)
0105 return NULL;
0106
0107 mutex_lock(&pinctrldev_list_mutex);
0108
0109 list_for_each_entry(pctldev, &pinctrldev_list, node) {
0110 if (!strcmp(dev_name(pctldev->dev), devname)) {
0111
0112 mutex_unlock(&pinctrldev_list_mutex);
0113 return pctldev;
0114 }
0115 }
0116
0117 mutex_unlock(&pinctrldev_list_mutex);
0118
0119 return NULL;
0120 }
0121
0122 struct pinctrl_dev *get_pinctrl_dev_from_of_node(struct device_node *np)
0123 {
0124 struct pinctrl_dev *pctldev;
0125
0126 mutex_lock(&pinctrldev_list_mutex);
0127
0128 list_for_each_entry(pctldev, &pinctrldev_list, node)
0129 if (device_match_of_node(pctldev->dev, np)) {
0130 mutex_unlock(&pinctrldev_list_mutex);
0131 return pctldev;
0132 }
0133
0134 mutex_unlock(&pinctrldev_list_mutex);
0135
0136 return NULL;
0137 }
0138
0139
0140
0141
0142
0143
0144 int pin_get_from_name(struct pinctrl_dev *pctldev, const char *name)
0145 {
0146 unsigned i, pin;
0147
0148
0149 for (i = 0; i < pctldev->desc->npins; i++) {
0150 struct pin_desc *desc;
0151
0152 pin = pctldev->desc->pins[i].number;
0153 desc = pin_desc_get(pctldev, pin);
0154
0155 if (desc && !strcmp(name, desc->name))
0156 return pin;
0157 }
0158
0159 return -EINVAL;
0160 }
0161
0162
0163
0164
0165
0166
0167 const char *pin_get_name(struct pinctrl_dev *pctldev, const unsigned pin)
0168 {
0169 const struct pin_desc *desc;
0170
0171 desc = pin_desc_get(pctldev, pin);
0172 if (!desc) {
0173 dev_err(pctldev->dev, "failed to get pin(%d) name\n",
0174 pin);
0175 return NULL;
0176 }
0177
0178 return desc->name;
0179 }
0180 EXPORT_SYMBOL_GPL(pin_get_name);
0181
0182
0183 static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev,
0184 const struct pinctrl_pin_desc *pins,
0185 unsigned num_pins)
0186 {
0187 int i;
0188
0189 for (i = 0; i < num_pins; i++) {
0190 struct pin_desc *pindesc;
0191
0192 pindesc = radix_tree_lookup(&pctldev->pin_desc_tree,
0193 pins[i].number);
0194 if (pindesc) {
0195 radix_tree_delete(&pctldev->pin_desc_tree,
0196 pins[i].number);
0197 if (pindesc->dynamic_name)
0198 kfree(pindesc->name);
0199 }
0200 kfree(pindesc);
0201 }
0202 }
0203
0204 static int pinctrl_register_one_pin(struct pinctrl_dev *pctldev,
0205 const struct pinctrl_pin_desc *pin)
0206 {
0207 struct pin_desc *pindesc;
0208
0209 pindesc = pin_desc_get(pctldev, pin->number);
0210 if (pindesc) {
0211 dev_err(pctldev->dev, "pin %d already registered\n",
0212 pin->number);
0213 return -EINVAL;
0214 }
0215
0216 pindesc = kzalloc(sizeof(*pindesc), GFP_KERNEL);
0217 if (!pindesc)
0218 return -ENOMEM;
0219
0220
0221 pindesc->pctldev = pctldev;
0222
0223
0224 if (pin->name) {
0225 pindesc->name = pin->name;
0226 } else {
0227 pindesc->name = kasprintf(GFP_KERNEL, "PIN%u", pin->number);
0228 if (!pindesc->name) {
0229 kfree(pindesc);
0230 return -ENOMEM;
0231 }
0232 pindesc->dynamic_name = true;
0233 }
0234
0235 pindesc->drv_data = pin->drv_data;
0236
0237 radix_tree_insert(&pctldev->pin_desc_tree, pin->number, pindesc);
0238 pr_debug("registered pin %d (%s) on %s\n",
0239 pin->number, pindesc->name, pctldev->desc->name);
0240 return 0;
0241 }
0242
0243 static int pinctrl_register_pins(struct pinctrl_dev *pctldev,
0244 const struct pinctrl_pin_desc *pins,
0245 unsigned num_descs)
0246 {
0247 unsigned i;
0248 int ret = 0;
0249
0250 for (i = 0; i < num_descs; i++) {
0251 ret = pinctrl_register_one_pin(pctldev, &pins[i]);
0252 if (ret)
0253 return ret;
0254 }
0255
0256 return 0;
0257 }
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272 static inline int gpio_to_pin(struct pinctrl_gpio_range *range,
0273 unsigned int gpio)
0274 {
0275 unsigned int offset = gpio - range->base;
0276 if (range->pins)
0277 return range->pins[offset];
0278 else
0279 return range->pin_base + offset;
0280 }
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290 static struct pinctrl_gpio_range *
0291 pinctrl_match_gpio_range(struct pinctrl_dev *pctldev, unsigned gpio)
0292 {
0293 struct pinctrl_gpio_range *range;
0294
0295 mutex_lock(&pctldev->mutex);
0296
0297 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
0298
0299 if (gpio >= range->base &&
0300 gpio < range->base + range->npins) {
0301 mutex_unlock(&pctldev->mutex);
0302 return range;
0303 }
0304 }
0305 mutex_unlock(&pctldev->mutex);
0306 return NULL;
0307 }
0308
0309
0310
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322 #ifdef CONFIG_GPIOLIB
0323 static bool pinctrl_ready_for_gpio_range(unsigned gpio)
0324 {
0325 struct pinctrl_dev *pctldev;
0326 struct pinctrl_gpio_range *range = NULL;
0327 struct gpio_chip *chip = gpio_to_chip(gpio);
0328
0329 if (WARN(!chip, "no gpio_chip for gpio%i?", gpio))
0330 return false;
0331
0332 mutex_lock(&pinctrldev_list_mutex);
0333
0334
0335 list_for_each_entry(pctldev, &pinctrldev_list, node) {
0336
0337 mutex_lock(&pctldev->mutex);
0338 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
0339
0340 if (range->base + range->npins - 1 < chip->base ||
0341 range->base > chip->base + chip->ngpio - 1)
0342 continue;
0343 mutex_unlock(&pctldev->mutex);
0344 mutex_unlock(&pinctrldev_list_mutex);
0345 return true;
0346 }
0347 mutex_unlock(&pctldev->mutex);
0348 }
0349
0350 mutex_unlock(&pinctrldev_list_mutex);
0351
0352 return false;
0353 }
0354 #else
0355 static bool pinctrl_ready_for_gpio_range(unsigned gpio) { return true; }
0356 #endif
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367
0368
0369 static int pinctrl_get_device_gpio_range(unsigned gpio,
0370 struct pinctrl_dev **outdev,
0371 struct pinctrl_gpio_range **outrange)
0372 {
0373 struct pinctrl_dev *pctldev;
0374
0375 mutex_lock(&pinctrldev_list_mutex);
0376
0377
0378 list_for_each_entry(pctldev, &pinctrldev_list, node) {
0379 struct pinctrl_gpio_range *range;
0380
0381 range = pinctrl_match_gpio_range(pctldev, gpio);
0382 if (range) {
0383 *outdev = pctldev;
0384 *outrange = range;
0385 mutex_unlock(&pinctrldev_list_mutex);
0386 return 0;
0387 }
0388 }
0389
0390 mutex_unlock(&pinctrldev_list_mutex);
0391
0392 return -EPROBE_DEFER;
0393 }
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403 void pinctrl_add_gpio_range(struct pinctrl_dev *pctldev,
0404 struct pinctrl_gpio_range *range)
0405 {
0406 mutex_lock(&pctldev->mutex);
0407 list_add_tail(&range->node, &pctldev->gpio_ranges);
0408 mutex_unlock(&pctldev->mutex);
0409 }
0410 EXPORT_SYMBOL_GPL(pinctrl_add_gpio_range);
0411
0412 void pinctrl_add_gpio_ranges(struct pinctrl_dev *pctldev,
0413 struct pinctrl_gpio_range *ranges,
0414 unsigned nranges)
0415 {
0416 int i;
0417
0418 for (i = 0; i < nranges; i++)
0419 pinctrl_add_gpio_range(pctldev, &ranges[i]);
0420 }
0421 EXPORT_SYMBOL_GPL(pinctrl_add_gpio_ranges);
0422
0423 struct pinctrl_dev *pinctrl_find_and_add_gpio_range(const char *devname,
0424 struct pinctrl_gpio_range *range)
0425 {
0426 struct pinctrl_dev *pctldev;
0427
0428 pctldev = get_pinctrl_dev_from_devname(devname);
0429
0430
0431
0432
0433
0434
0435 if (!pctldev) {
0436 return ERR_PTR(-EPROBE_DEFER);
0437 }
0438 pinctrl_add_gpio_range(pctldev, range);
0439
0440 return pctldev;
0441 }
0442 EXPORT_SYMBOL_GPL(pinctrl_find_and_add_gpio_range);
0443
0444 int pinctrl_get_group_pins(struct pinctrl_dev *pctldev, const char *pin_group,
0445 const unsigned **pins, unsigned *num_pins)
0446 {
0447 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
0448 int gs;
0449
0450 if (!pctlops->get_group_pins)
0451 return -EINVAL;
0452
0453 gs = pinctrl_get_group_selector(pctldev, pin_group);
0454 if (gs < 0)
0455 return gs;
0456
0457 return pctlops->get_group_pins(pctldev, gs, pins, num_pins);
0458 }
0459 EXPORT_SYMBOL_GPL(pinctrl_get_group_pins);
0460
0461 struct pinctrl_gpio_range *
0462 pinctrl_find_gpio_range_from_pin_nolock(struct pinctrl_dev *pctldev,
0463 unsigned int pin)
0464 {
0465 struct pinctrl_gpio_range *range;
0466
0467
0468 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
0469
0470 if (range->pins) {
0471 int a;
0472 for (a = 0; a < range->npins; a++) {
0473 if (range->pins[a] == pin)
0474 return range;
0475 }
0476 } else if (pin >= range->pin_base &&
0477 pin < range->pin_base + range->npins)
0478 return range;
0479 }
0480
0481 return NULL;
0482 }
0483 EXPORT_SYMBOL_GPL(pinctrl_find_gpio_range_from_pin_nolock);
0484
0485
0486
0487
0488
0489
0490 struct pinctrl_gpio_range *
0491 pinctrl_find_gpio_range_from_pin(struct pinctrl_dev *pctldev,
0492 unsigned int pin)
0493 {
0494 struct pinctrl_gpio_range *range;
0495
0496 mutex_lock(&pctldev->mutex);
0497 range = pinctrl_find_gpio_range_from_pin_nolock(pctldev, pin);
0498 mutex_unlock(&pctldev->mutex);
0499
0500 return range;
0501 }
0502 EXPORT_SYMBOL_GPL(pinctrl_find_gpio_range_from_pin);
0503
0504
0505
0506
0507
0508
0509 void pinctrl_remove_gpio_range(struct pinctrl_dev *pctldev,
0510 struct pinctrl_gpio_range *range)
0511 {
0512 mutex_lock(&pctldev->mutex);
0513 list_del(&range->node);
0514 mutex_unlock(&pctldev->mutex);
0515 }
0516 EXPORT_SYMBOL_GPL(pinctrl_remove_gpio_range);
0517
0518 #ifdef CONFIG_GENERIC_PINCTRL_GROUPS
0519
0520
0521
0522
0523
0524 int pinctrl_generic_get_group_count(struct pinctrl_dev *pctldev)
0525 {
0526 return pctldev->num_groups;
0527 }
0528 EXPORT_SYMBOL_GPL(pinctrl_generic_get_group_count);
0529
0530
0531
0532
0533
0534
0535 const char *pinctrl_generic_get_group_name(struct pinctrl_dev *pctldev,
0536 unsigned int selector)
0537 {
0538 struct group_desc *group;
0539
0540 group = radix_tree_lookup(&pctldev->pin_group_tree,
0541 selector);
0542 if (!group)
0543 return NULL;
0544
0545 return group->name;
0546 }
0547 EXPORT_SYMBOL_GPL(pinctrl_generic_get_group_name);
0548
0549
0550
0551
0552
0553
0554
0555
0556 int pinctrl_generic_get_group_pins(struct pinctrl_dev *pctldev,
0557 unsigned int selector,
0558 const unsigned int **pins,
0559 unsigned int *num_pins)
0560 {
0561 struct group_desc *group;
0562
0563 group = radix_tree_lookup(&pctldev->pin_group_tree,
0564 selector);
0565 if (!group) {
0566 dev_err(pctldev->dev, "%s could not find pingroup%i\n",
0567 __func__, selector);
0568 return -EINVAL;
0569 }
0570
0571 *pins = group->pins;
0572 *num_pins = group->num_pins;
0573
0574 return 0;
0575 }
0576 EXPORT_SYMBOL_GPL(pinctrl_generic_get_group_pins);
0577
0578
0579
0580
0581
0582
0583 struct group_desc *pinctrl_generic_get_group(struct pinctrl_dev *pctldev,
0584 unsigned int selector)
0585 {
0586 struct group_desc *group;
0587
0588 group = radix_tree_lookup(&pctldev->pin_group_tree,
0589 selector);
0590 if (!group)
0591 return NULL;
0592
0593 return group;
0594 }
0595 EXPORT_SYMBOL_GPL(pinctrl_generic_get_group);
0596
0597 static int pinctrl_generic_group_name_to_selector(struct pinctrl_dev *pctldev,
0598 const char *function)
0599 {
0600 const struct pinctrl_ops *ops = pctldev->desc->pctlops;
0601 int ngroups = ops->get_groups_count(pctldev);
0602 int selector = 0;
0603
0604
0605 while (selector < ngroups) {
0606 const char *gname = ops->get_group_name(pctldev, selector);
0607
0608 if (gname && !strcmp(function, gname))
0609 return selector;
0610
0611 selector++;
0612 }
0613
0614 return -EINVAL;
0615 }
0616
0617
0618
0619
0620
0621
0622
0623
0624
0625
0626
0627 int pinctrl_generic_add_group(struct pinctrl_dev *pctldev, const char *name,
0628 int *pins, int num_pins, void *data)
0629 {
0630 struct group_desc *group;
0631 int selector;
0632
0633 if (!name)
0634 return -EINVAL;
0635
0636 selector = pinctrl_generic_group_name_to_selector(pctldev, name);
0637 if (selector >= 0)
0638 return selector;
0639
0640 selector = pctldev->num_groups;
0641
0642 group = devm_kzalloc(pctldev->dev, sizeof(*group), GFP_KERNEL);
0643 if (!group)
0644 return -ENOMEM;
0645
0646 group->name = name;
0647 group->pins = pins;
0648 group->num_pins = num_pins;
0649 group->data = data;
0650
0651 radix_tree_insert(&pctldev->pin_group_tree, selector, group);
0652
0653 pctldev->num_groups++;
0654
0655 return selector;
0656 }
0657 EXPORT_SYMBOL_GPL(pinctrl_generic_add_group);
0658
0659
0660
0661
0662
0663
0664
0665
0666 int pinctrl_generic_remove_group(struct pinctrl_dev *pctldev,
0667 unsigned int selector)
0668 {
0669 struct group_desc *group;
0670
0671 group = radix_tree_lookup(&pctldev->pin_group_tree,
0672 selector);
0673 if (!group)
0674 return -ENOENT;
0675
0676 radix_tree_delete(&pctldev->pin_group_tree, selector);
0677 devm_kfree(pctldev->dev, group);
0678
0679 pctldev->num_groups--;
0680
0681 return 0;
0682 }
0683 EXPORT_SYMBOL_GPL(pinctrl_generic_remove_group);
0684
0685
0686
0687
0688
0689
0690
0691
0692 static void pinctrl_generic_free_groups(struct pinctrl_dev *pctldev)
0693 {
0694 struct radix_tree_iter iter;
0695 void __rcu **slot;
0696
0697 radix_tree_for_each_slot(slot, &pctldev->pin_group_tree, &iter, 0)
0698 radix_tree_delete(&pctldev->pin_group_tree, iter.index);
0699
0700 pctldev->num_groups = 0;
0701 }
0702
0703 #else
0704 static inline void pinctrl_generic_free_groups(struct pinctrl_dev *pctldev)
0705 {
0706 }
0707 #endif
0708
0709
0710
0711
0712
0713
0714 int pinctrl_get_group_selector(struct pinctrl_dev *pctldev,
0715 const char *pin_group)
0716 {
0717 const struct pinctrl_ops *pctlops = pctldev->desc->pctlops;
0718 unsigned ngroups = pctlops->get_groups_count(pctldev);
0719 unsigned group_selector = 0;
0720
0721 while (group_selector < ngroups) {
0722 const char *gname = pctlops->get_group_name(pctldev,
0723 group_selector);
0724 if (gname && !strcmp(gname, pin_group)) {
0725 dev_dbg(pctldev->dev,
0726 "found group selector %u for %s\n",
0727 group_selector,
0728 pin_group);
0729 return group_selector;
0730 }
0731
0732 group_selector++;
0733 }
0734
0735 dev_err(pctldev->dev, "does not have pin group %s\n",
0736 pin_group);
0737
0738 return -EINVAL;
0739 }
0740
0741 bool pinctrl_gpio_can_use_line(unsigned gpio)
0742 {
0743 struct pinctrl_dev *pctldev;
0744 struct pinctrl_gpio_range *range;
0745 bool result;
0746 int pin;
0747
0748
0749
0750
0751
0752
0753 if (pinctrl_get_device_gpio_range(gpio, &pctldev, &range))
0754 return true;
0755
0756 mutex_lock(&pctldev->mutex);
0757
0758
0759 pin = gpio_to_pin(range, gpio);
0760
0761 result = pinmux_can_be_used_for_gpio(pctldev, pin);
0762
0763 mutex_unlock(&pctldev->mutex);
0764
0765 return result;
0766 }
0767 EXPORT_SYMBOL_GPL(pinctrl_gpio_can_use_line);
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777 int pinctrl_gpio_request(unsigned gpio)
0778 {
0779 struct pinctrl_dev *pctldev;
0780 struct pinctrl_gpio_range *range;
0781 int ret;
0782 int pin;
0783
0784 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
0785 if (ret) {
0786 if (pinctrl_ready_for_gpio_range(gpio))
0787 ret = 0;
0788 return ret;
0789 }
0790
0791 mutex_lock(&pctldev->mutex);
0792
0793
0794 pin = gpio_to_pin(range, gpio);
0795
0796 ret = pinmux_request_gpio(pctldev, range, pin, gpio);
0797
0798 mutex_unlock(&pctldev->mutex);
0799
0800 return ret;
0801 }
0802 EXPORT_SYMBOL_GPL(pinctrl_gpio_request);
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812 void pinctrl_gpio_free(unsigned gpio)
0813 {
0814 struct pinctrl_dev *pctldev;
0815 struct pinctrl_gpio_range *range;
0816 int ret;
0817 int pin;
0818
0819 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
0820 if (ret) {
0821 return;
0822 }
0823 mutex_lock(&pctldev->mutex);
0824
0825
0826 pin = gpio_to_pin(range, gpio);
0827
0828 pinmux_free_gpio(pctldev, pin, range);
0829
0830 mutex_unlock(&pctldev->mutex);
0831 }
0832 EXPORT_SYMBOL_GPL(pinctrl_gpio_free);
0833
0834 static int pinctrl_gpio_direction(unsigned gpio, bool input)
0835 {
0836 struct pinctrl_dev *pctldev;
0837 struct pinctrl_gpio_range *range;
0838 int ret;
0839 int pin;
0840
0841 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
0842 if (ret) {
0843 return ret;
0844 }
0845
0846 mutex_lock(&pctldev->mutex);
0847
0848
0849 pin = gpio_to_pin(range, gpio);
0850 ret = pinmux_gpio_direction(pctldev, range, pin, input);
0851
0852 mutex_unlock(&pctldev->mutex);
0853
0854 return ret;
0855 }
0856
0857
0858
0859
0860
0861
0862
0863
0864
0865 int pinctrl_gpio_direction_input(unsigned gpio)
0866 {
0867 return pinctrl_gpio_direction(gpio, true);
0868 }
0869 EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_input);
0870
0871
0872
0873
0874
0875
0876
0877
0878
0879 int pinctrl_gpio_direction_output(unsigned gpio)
0880 {
0881 return pinctrl_gpio_direction(gpio, false);
0882 }
0883 EXPORT_SYMBOL_GPL(pinctrl_gpio_direction_output);
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894 int pinctrl_gpio_set_config(unsigned gpio, unsigned long config)
0895 {
0896 unsigned long configs[] = { config };
0897 struct pinctrl_gpio_range *range;
0898 struct pinctrl_dev *pctldev;
0899 int ret, pin;
0900
0901 ret = pinctrl_get_device_gpio_range(gpio, &pctldev, &range);
0902 if (ret)
0903 return ret;
0904
0905 mutex_lock(&pctldev->mutex);
0906 pin = gpio_to_pin(range, gpio);
0907 ret = pinconf_set_config(pctldev, pin, configs, ARRAY_SIZE(configs));
0908 mutex_unlock(&pctldev->mutex);
0909
0910 return ret;
0911 }
0912 EXPORT_SYMBOL_GPL(pinctrl_gpio_set_config);
0913
0914 static struct pinctrl_state *find_state(struct pinctrl *p,
0915 const char *name)
0916 {
0917 struct pinctrl_state *state;
0918
0919 list_for_each_entry(state, &p->states, node)
0920 if (!strcmp(state->name, name))
0921 return state;
0922
0923 return NULL;
0924 }
0925
0926 static struct pinctrl_state *create_state(struct pinctrl *p,
0927 const char *name)
0928 {
0929 struct pinctrl_state *state;
0930
0931 state = kzalloc(sizeof(*state), GFP_KERNEL);
0932 if (!state)
0933 return ERR_PTR(-ENOMEM);
0934
0935 state->name = name;
0936 INIT_LIST_HEAD(&state->settings);
0937
0938 list_add_tail(&state->node, &p->states);
0939
0940 return state;
0941 }
0942
0943 static int add_setting(struct pinctrl *p, struct pinctrl_dev *pctldev,
0944 const struct pinctrl_map *map)
0945 {
0946 struct pinctrl_state *state;
0947 struct pinctrl_setting *setting;
0948 int ret;
0949
0950 state = find_state(p, map->name);
0951 if (!state)
0952 state = create_state(p, map->name);
0953 if (IS_ERR(state))
0954 return PTR_ERR(state);
0955
0956 if (map->type == PIN_MAP_TYPE_DUMMY_STATE)
0957 return 0;
0958
0959 setting = kzalloc(sizeof(*setting), GFP_KERNEL);
0960 if (!setting)
0961 return -ENOMEM;
0962
0963 setting->type = map->type;
0964
0965 if (pctldev)
0966 setting->pctldev = pctldev;
0967 else
0968 setting->pctldev =
0969 get_pinctrl_dev_from_devname(map->ctrl_dev_name);
0970 if (!setting->pctldev) {
0971 kfree(setting);
0972
0973 if (!strcmp(map->ctrl_dev_name, map->dev_name))
0974 return -ENODEV;
0975
0976
0977
0978
0979 dev_info(p->dev, "unknown pinctrl device %s in map entry, deferring probe",
0980 map->ctrl_dev_name);
0981 return -EPROBE_DEFER;
0982 }
0983
0984 setting->dev_name = map->dev_name;
0985
0986 switch (map->type) {
0987 case PIN_MAP_TYPE_MUX_GROUP:
0988 ret = pinmux_map_to_setting(map, setting);
0989 break;
0990 case PIN_MAP_TYPE_CONFIGS_PIN:
0991 case PIN_MAP_TYPE_CONFIGS_GROUP:
0992 ret = pinconf_map_to_setting(map, setting);
0993 break;
0994 default:
0995 ret = -EINVAL;
0996 break;
0997 }
0998 if (ret < 0) {
0999 kfree(setting);
1000 return ret;
1001 }
1002
1003 list_add_tail(&setting->node, &state->settings);
1004
1005 return 0;
1006 }
1007
1008 static struct pinctrl *find_pinctrl(struct device *dev)
1009 {
1010 struct pinctrl *p;
1011
1012 mutex_lock(&pinctrl_list_mutex);
1013 list_for_each_entry(p, &pinctrl_list, node)
1014 if (p->dev == dev) {
1015 mutex_unlock(&pinctrl_list_mutex);
1016 return p;
1017 }
1018
1019 mutex_unlock(&pinctrl_list_mutex);
1020 return NULL;
1021 }
1022
1023 static void pinctrl_free(struct pinctrl *p, bool inlist);
1024
1025 static struct pinctrl *create_pinctrl(struct device *dev,
1026 struct pinctrl_dev *pctldev)
1027 {
1028 struct pinctrl *p;
1029 const char *devname;
1030 struct pinctrl_maps *maps_node;
1031 int i;
1032 const struct pinctrl_map *map;
1033 int ret;
1034
1035
1036
1037
1038
1039
1040 p = kzalloc(sizeof(*p), GFP_KERNEL);
1041 if (!p)
1042 return ERR_PTR(-ENOMEM);
1043 p->dev = dev;
1044 INIT_LIST_HEAD(&p->states);
1045 INIT_LIST_HEAD(&p->dt_maps);
1046
1047 ret = pinctrl_dt_to_map(p, pctldev);
1048 if (ret < 0) {
1049 kfree(p);
1050 return ERR_PTR(ret);
1051 }
1052
1053 devname = dev_name(dev);
1054
1055 mutex_lock(&pinctrl_maps_mutex);
1056
1057 for_each_maps(maps_node, i, map) {
1058
1059 if (strcmp(map->dev_name, devname))
1060 continue;
1061
1062
1063
1064
1065
1066
1067
1068 if (pctldev &&
1069 strcmp(dev_name(pctldev->dev), map->ctrl_dev_name))
1070 continue;
1071
1072 ret = add_setting(p, pctldev, map);
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086 if (ret == -EPROBE_DEFER) {
1087 pinctrl_free(p, false);
1088 mutex_unlock(&pinctrl_maps_mutex);
1089 return ERR_PTR(ret);
1090 }
1091 }
1092 mutex_unlock(&pinctrl_maps_mutex);
1093
1094 if (ret < 0) {
1095
1096 pinctrl_free(p, false);
1097 return ERR_PTR(ret);
1098 }
1099
1100 kref_init(&p->users);
1101
1102
1103 mutex_lock(&pinctrl_list_mutex);
1104 list_add_tail(&p->node, &pinctrl_list);
1105 mutex_unlock(&pinctrl_list_mutex);
1106
1107 return p;
1108 }
1109
1110
1111
1112
1113
1114 struct pinctrl *pinctrl_get(struct device *dev)
1115 {
1116 struct pinctrl *p;
1117
1118 if (WARN_ON(!dev))
1119 return ERR_PTR(-EINVAL);
1120
1121
1122
1123
1124
1125
1126 p = find_pinctrl(dev);
1127 if (p) {
1128 dev_dbg(dev, "obtain a copy of previously claimed pinctrl\n");
1129 kref_get(&p->users);
1130 return p;
1131 }
1132
1133 return create_pinctrl(dev, NULL);
1134 }
1135 EXPORT_SYMBOL_GPL(pinctrl_get);
1136
1137 static void pinctrl_free_setting(bool disable_setting,
1138 struct pinctrl_setting *setting)
1139 {
1140 switch (setting->type) {
1141 case PIN_MAP_TYPE_MUX_GROUP:
1142 if (disable_setting)
1143 pinmux_disable_setting(setting);
1144 pinmux_free_setting(setting);
1145 break;
1146 case PIN_MAP_TYPE_CONFIGS_PIN:
1147 case PIN_MAP_TYPE_CONFIGS_GROUP:
1148 pinconf_free_setting(setting);
1149 break;
1150 default:
1151 break;
1152 }
1153 }
1154
1155 static void pinctrl_free(struct pinctrl *p, bool inlist)
1156 {
1157 struct pinctrl_state *state, *n1;
1158 struct pinctrl_setting *setting, *n2;
1159
1160 mutex_lock(&pinctrl_list_mutex);
1161 list_for_each_entry_safe(state, n1, &p->states, node) {
1162 list_for_each_entry_safe(setting, n2, &state->settings, node) {
1163 pinctrl_free_setting(state == p->state, setting);
1164 list_del(&setting->node);
1165 kfree(setting);
1166 }
1167 list_del(&state->node);
1168 kfree(state);
1169 }
1170
1171 pinctrl_dt_free_maps(p);
1172
1173 if (inlist)
1174 list_del(&p->node);
1175 kfree(p);
1176 mutex_unlock(&pinctrl_list_mutex);
1177 }
1178
1179
1180
1181
1182
1183 static void pinctrl_release(struct kref *kref)
1184 {
1185 struct pinctrl *p = container_of(kref, struct pinctrl, users);
1186
1187 pinctrl_free(p, true);
1188 }
1189
1190
1191
1192
1193
1194 void pinctrl_put(struct pinctrl *p)
1195 {
1196 kref_put(&p->users, pinctrl_release);
1197 }
1198 EXPORT_SYMBOL_GPL(pinctrl_put);
1199
1200
1201
1202
1203
1204
1205 struct pinctrl_state *pinctrl_lookup_state(struct pinctrl *p,
1206 const char *name)
1207 {
1208 struct pinctrl_state *state;
1209
1210 state = find_state(p, name);
1211 if (!state) {
1212 if (pinctrl_dummy_state) {
1213
1214 dev_dbg(p->dev, "using pinctrl dummy state (%s)\n",
1215 name);
1216 state = create_state(p, name);
1217 } else
1218 state = ERR_PTR(-ENODEV);
1219 }
1220
1221 return state;
1222 }
1223 EXPORT_SYMBOL_GPL(pinctrl_lookup_state);
1224
1225 static void pinctrl_link_add(struct pinctrl_dev *pctldev,
1226 struct device *consumer)
1227 {
1228 if (pctldev->desc->link_consumers)
1229 device_link_add(consumer, pctldev->dev,
1230 DL_FLAG_PM_RUNTIME |
1231 DL_FLAG_AUTOREMOVE_CONSUMER);
1232 }
1233
1234
1235
1236
1237
1238
1239 static int pinctrl_commit_state(struct pinctrl *p, struct pinctrl_state *state)
1240 {
1241 struct pinctrl_setting *setting, *setting2;
1242 struct pinctrl_state *old_state = p->state;
1243 int ret;
1244
1245 if (p->state) {
1246
1247
1248
1249
1250
1251
1252 list_for_each_entry(setting, &p->state->settings, node) {
1253 if (setting->type != PIN_MAP_TYPE_MUX_GROUP)
1254 continue;
1255 pinmux_disable_setting(setting);
1256 }
1257 }
1258
1259 p->state = NULL;
1260
1261
1262 list_for_each_entry(setting, &state->settings, node) {
1263 switch (setting->type) {
1264 case PIN_MAP_TYPE_MUX_GROUP:
1265 ret = pinmux_enable_setting(setting);
1266 break;
1267 case PIN_MAP_TYPE_CONFIGS_PIN:
1268 case PIN_MAP_TYPE_CONFIGS_GROUP:
1269 ret = 0;
1270 break;
1271 default:
1272 ret = -EINVAL;
1273 break;
1274 }
1275
1276 if (ret < 0)
1277 goto unapply_new_state;
1278
1279
1280 if (p != setting->pctldev->p)
1281 pinctrl_link_add(setting->pctldev, p->dev);
1282 }
1283
1284
1285 list_for_each_entry(setting, &state->settings, node) {
1286 switch (setting->type) {
1287 case PIN_MAP_TYPE_MUX_GROUP:
1288 ret = 0;
1289 break;
1290 case PIN_MAP_TYPE_CONFIGS_PIN:
1291 case PIN_MAP_TYPE_CONFIGS_GROUP:
1292 ret = pinconf_apply_setting(setting);
1293 break;
1294 default:
1295 ret = -EINVAL;
1296 break;
1297 }
1298
1299 if (ret < 0) {
1300 goto unapply_new_state;
1301 }
1302
1303
1304 if (p != setting->pctldev->p)
1305 pinctrl_link_add(setting->pctldev, p->dev);
1306 }
1307
1308 p->state = state;
1309
1310 return 0;
1311
1312 unapply_new_state:
1313 dev_err(p->dev, "Error applying setting, reverse things back\n");
1314
1315 list_for_each_entry(setting2, &state->settings, node) {
1316 if (&setting2->node == &setting->node)
1317 break;
1318
1319
1320
1321
1322
1323
1324
1325 if (setting2->type == PIN_MAP_TYPE_MUX_GROUP)
1326 pinmux_disable_setting(setting2);
1327 }
1328
1329
1330 if (old_state)
1331 pinctrl_select_state(p, old_state);
1332
1333 return ret;
1334 }
1335
1336
1337
1338
1339
1340
1341 int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *state)
1342 {
1343 if (p->state == state)
1344 return 0;
1345
1346 return pinctrl_commit_state(p, state);
1347 }
1348 EXPORT_SYMBOL_GPL(pinctrl_select_state);
1349
1350 static void devm_pinctrl_release(struct device *dev, void *res)
1351 {
1352 pinctrl_put(*(struct pinctrl **)res);
1353 }
1354
1355
1356
1357
1358
1359
1360
1361
1362 struct pinctrl *devm_pinctrl_get(struct device *dev)
1363 {
1364 struct pinctrl **ptr, *p;
1365
1366 ptr = devres_alloc(devm_pinctrl_release, sizeof(*ptr), GFP_KERNEL);
1367 if (!ptr)
1368 return ERR_PTR(-ENOMEM);
1369
1370 p = pinctrl_get(dev);
1371 if (!IS_ERR(p)) {
1372 *ptr = p;
1373 devres_add(dev, ptr);
1374 } else {
1375 devres_free(ptr);
1376 }
1377
1378 return p;
1379 }
1380 EXPORT_SYMBOL_GPL(devm_pinctrl_get);
1381
1382 static int devm_pinctrl_match(struct device *dev, void *res, void *data)
1383 {
1384 struct pinctrl **p = res;
1385
1386 return *p == data;
1387 }
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397 void devm_pinctrl_put(struct pinctrl *p)
1398 {
1399 WARN_ON(devres_release(p->dev, devm_pinctrl_release,
1400 devm_pinctrl_match, p));
1401 }
1402 EXPORT_SYMBOL_GPL(devm_pinctrl_put);
1403
1404
1405
1406
1407
1408
1409
1410
1411 int pinctrl_register_mappings(const struct pinctrl_map *maps,
1412 unsigned num_maps)
1413 {
1414 int i, ret;
1415 struct pinctrl_maps *maps_node;
1416
1417 pr_debug("add %u pinctrl maps\n", num_maps);
1418
1419
1420 for (i = 0; i < num_maps; i++) {
1421 if (!maps[i].dev_name) {
1422 pr_err("failed to register map %s (%d): no device given\n",
1423 maps[i].name, i);
1424 return -EINVAL;
1425 }
1426
1427 if (!maps[i].name) {
1428 pr_err("failed to register map %d: no map name given\n",
1429 i);
1430 return -EINVAL;
1431 }
1432
1433 if (maps[i].type != PIN_MAP_TYPE_DUMMY_STATE &&
1434 !maps[i].ctrl_dev_name) {
1435 pr_err("failed to register map %s (%d): no pin control device given\n",
1436 maps[i].name, i);
1437 return -EINVAL;
1438 }
1439
1440 switch (maps[i].type) {
1441 case PIN_MAP_TYPE_DUMMY_STATE:
1442 break;
1443 case PIN_MAP_TYPE_MUX_GROUP:
1444 ret = pinmux_validate_map(&maps[i], i);
1445 if (ret < 0)
1446 return ret;
1447 break;
1448 case PIN_MAP_TYPE_CONFIGS_PIN:
1449 case PIN_MAP_TYPE_CONFIGS_GROUP:
1450 ret = pinconf_validate_map(&maps[i], i);
1451 if (ret < 0)
1452 return ret;
1453 break;
1454 default:
1455 pr_err("failed to register map %s (%d): invalid type given\n",
1456 maps[i].name, i);
1457 return -EINVAL;
1458 }
1459 }
1460
1461 maps_node = kzalloc(sizeof(*maps_node), GFP_KERNEL);
1462 if (!maps_node)
1463 return -ENOMEM;
1464
1465 maps_node->maps = maps;
1466 maps_node->num_maps = num_maps;
1467
1468 mutex_lock(&pinctrl_maps_mutex);
1469 list_add_tail(&maps_node->node, &pinctrl_maps);
1470 mutex_unlock(&pinctrl_maps_mutex);
1471
1472 return 0;
1473 }
1474 EXPORT_SYMBOL_GPL(pinctrl_register_mappings);
1475
1476
1477
1478
1479
1480
1481 void pinctrl_unregister_mappings(const struct pinctrl_map *map)
1482 {
1483 struct pinctrl_maps *maps_node;
1484
1485 mutex_lock(&pinctrl_maps_mutex);
1486 list_for_each_entry(maps_node, &pinctrl_maps, node) {
1487 if (maps_node->maps == map) {
1488 list_del(&maps_node->node);
1489 kfree(maps_node);
1490 mutex_unlock(&pinctrl_maps_mutex);
1491 return;
1492 }
1493 }
1494 mutex_unlock(&pinctrl_maps_mutex);
1495 }
1496 EXPORT_SYMBOL_GPL(pinctrl_unregister_mappings);
1497
1498
1499
1500
1501
1502 int pinctrl_force_sleep(struct pinctrl_dev *pctldev)
1503 {
1504 if (!IS_ERR(pctldev->p) && !IS_ERR(pctldev->hog_sleep))
1505 return pinctrl_commit_state(pctldev->p, pctldev->hog_sleep);
1506 return 0;
1507 }
1508 EXPORT_SYMBOL_GPL(pinctrl_force_sleep);
1509
1510
1511
1512
1513
1514 int pinctrl_force_default(struct pinctrl_dev *pctldev)
1515 {
1516 if (!IS_ERR(pctldev->p) && !IS_ERR(pctldev->hog_default))
1517 return pinctrl_commit_state(pctldev->p, pctldev->hog_default);
1518 return 0;
1519 }
1520 EXPORT_SYMBOL_GPL(pinctrl_force_default);
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530 int pinctrl_init_done(struct device *dev)
1531 {
1532 struct dev_pin_info *pins = dev->pins;
1533 int ret;
1534
1535 if (!pins)
1536 return 0;
1537
1538 if (IS_ERR(pins->init_state))
1539 return 0;
1540
1541 if (pins->p->state != pins->init_state)
1542 return 0;
1543
1544 if (IS_ERR(pins->default_state))
1545 return 0;
1546
1547 ret = pinctrl_select_state(pins->p, pins->default_state);
1548 if (ret)
1549 dev_err(dev, "failed to activate default pinctrl state\n");
1550
1551 return ret;
1552 }
1553
1554 static int pinctrl_select_bound_state(struct device *dev,
1555 struct pinctrl_state *state)
1556 {
1557 struct dev_pin_info *pins = dev->pins;
1558 int ret;
1559
1560 if (IS_ERR(state))
1561 return 0;
1562 ret = pinctrl_select_state(pins->p, state);
1563 if (ret)
1564 dev_err(dev, "failed to activate pinctrl state %s\n",
1565 state->name);
1566 return ret;
1567 }
1568
1569
1570
1571
1572
1573 int pinctrl_select_default_state(struct device *dev)
1574 {
1575 if (!dev->pins)
1576 return 0;
1577
1578 return pinctrl_select_bound_state(dev, dev->pins->default_state);
1579 }
1580 EXPORT_SYMBOL_GPL(pinctrl_select_default_state);
1581
1582 #ifdef CONFIG_PM
1583
1584
1585
1586
1587
1588 int pinctrl_pm_select_default_state(struct device *dev)
1589 {
1590 return pinctrl_select_default_state(dev);
1591 }
1592 EXPORT_SYMBOL_GPL(pinctrl_pm_select_default_state);
1593
1594
1595
1596
1597
1598 int pinctrl_pm_select_sleep_state(struct device *dev)
1599 {
1600 if (!dev->pins)
1601 return 0;
1602
1603 return pinctrl_select_bound_state(dev, dev->pins->sleep_state);
1604 }
1605 EXPORT_SYMBOL_GPL(pinctrl_pm_select_sleep_state);
1606
1607
1608
1609
1610
1611 int pinctrl_pm_select_idle_state(struct device *dev)
1612 {
1613 if (!dev->pins)
1614 return 0;
1615
1616 return pinctrl_select_bound_state(dev, dev->pins->idle_state);
1617 }
1618 EXPORT_SYMBOL_GPL(pinctrl_pm_select_idle_state);
1619 #endif
1620
1621 #ifdef CONFIG_DEBUG_FS
1622
1623 static int pinctrl_pins_show(struct seq_file *s, void *what)
1624 {
1625 struct pinctrl_dev *pctldev = s->private;
1626 const struct pinctrl_ops *ops = pctldev->desc->pctlops;
1627 unsigned i, pin;
1628 #ifdef CONFIG_GPIOLIB
1629 struct pinctrl_gpio_range *range;
1630 struct gpio_chip *chip;
1631 int gpio_num;
1632 #endif
1633
1634 seq_printf(s, "registered pins: %d\n", pctldev->desc->npins);
1635
1636 mutex_lock(&pctldev->mutex);
1637
1638
1639 for (i = 0; i < pctldev->desc->npins; i++) {
1640 struct pin_desc *desc;
1641
1642 pin = pctldev->desc->pins[i].number;
1643 desc = pin_desc_get(pctldev, pin);
1644
1645 if (!desc)
1646 continue;
1647
1648 seq_printf(s, "pin %d (%s) ", pin, desc->name);
1649
1650 #ifdef CONFIG_GPIOLIB
1651 gpio_num = -1;
1652 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
1653 if ((pin >= range->pin_base) &&
1654 (pin < (range->pin_base + range->npins))) {
1655 gpio_num = range->base + (pin - range->pin_base);
1656 break;
1657 }
1658 }
1659 if (gpio_num >= 0)
1660 chip = gpio_to_chip(gpio_num);
1661 else
1662 chip = NULL;
1663 if (chip)
1664 seq_printf(s, "%u:%s ", gpio_num - chip->gpiodev->base, chip->label);
1665 else
1666 seq_puts(s, "0:? ");
1667 #endif
1668
1669
1670 if (ops->pin_dbg_show)
1671 ops->pin_dbg_show(pctldev, s, pin);
1672
1673 seq_puts(s, "\n");
1674 }
1675
1676 mutex_unlock(&pctldev->mutex);
1677
1678 return 0;
1679 }
1680 DEFINE_SHOW_ATTRIBUTE(pinctrl_pins);
1681
1682 static int pinctrl_groups_show(struct seq_file *s, void *what)
1683 {
1684 struct pinctrl_dev *pctldev = s->private;
1685 const struct pinctrl_ops *ops = pctldev->desc->pctlops;
1686 unsigned ngroups, selector = 0;
1687
1688 mutex_lock(&pctldev->mutex);
1689
1690 ngroups = ops->get_groups_count(pctldev);
1691
1692 seq_puts(s, "registered pin groups:\n");
1693 while (selector < ngroups) {
1694 const unsigned *pins = NULL;
1695 unsigned num_pins = 0;
1696 const char *gname = ops->get_group_name(pctldev, selector);
1697 const char *pname;
1698 int ret = 0;
1699 int i;
1700
1701 if (ops->get_group_pins)
1702 ret = ops->get_group_pins(pctldev, selector,
1703 &pins, &num_pins);
1704 if (ret)
1705 seq_printf(s, "%s [ERROR GETTING PINS]\n",
1706 gname);
1707 else {
1708 seq_printf(s, "group: %s\n", gname);
1709 for (i = 0; i < num_pins; i++) {
1710 pname = pin_get_name(pctldev, pins[i]);
1711 if (WARN_ON(!pname)) {
1712 mutex_unlock(&pctldev->mutex);
1713 return -EINVAL;
1714 }
1715 seq_printf(s, "pin %d (%s)\n", pins[i], pname);
1716 }
1717 seq_puts(s, "\n");
1718 }
1719 selector++;
1720 }
1721
1722 mutex_unlock(&pctldev->mutex);
1723
1724 return 0;
1725 }
1726 DEFINE_SHOW_ATTRIBUTE(pinctrl_groups);
1727
1728 static int pinctrl_gpioranges_show(struct seq_file *s, void *what)
1729 {
1730 struct pinctrl_dev *pctldev = s->private;
1731 struct pinctrl_gpio_range *range;
1732
1733 seq_puts(s, "GPIO ranges handled:\n");
1734
1735 mutex_lock(&pctldev->mutex);
1736
1737
1738 list_for_each_entry(range, &pctldev->gpio_ranges, node) {
1739 if (range->pins) {
1740 int a;
1741 seq_printf(s, "%u: %s GPIOS [%u - %u] PINS {",
1742 range->id, range->name,
1743 range->base, (range->base + range->npins - 1));
1744 for (a = 0; a < range->npins - 1; a++)
1745 seq_printf(s, "%u, ", range->pins[a]);
1746 seq_printf(s, "%u}\n", range->pins[a]);
1747 }
1748 else
1749 seq_printf(s, "%u: %s GPIOS [%u - %u] PINS [%u - %u]\n",
1750 range->id, range->name,
1751 range->base, (range->base + range->npins - 1),
1752 range->pin_base,
1753 (range->pin_base + range->npins - 1));
1754 }
1755
1756 mutex_unlock(&pctldev->mutex);
1757
1758 return 0;
1759 }
1760 DEFINE_SHOW_ATTRIBUTE(pinctrl_gpioranges);
1761
1762 static int pinctrl_devices_show(struct seq_file *s, void *what)
1763 {
1764 struct pinctrl_dev *pctldev;
1765
1766 seq_puts(s, "name [pinmux] [pinconf]\n");
1767
1768 mutex_lock(&pinctrldev_list_mutex);
1769
1770 list_for_each_entry(pctldev, &pinctrldev_list, node) {
1771 seq_printf(s, "%s ", pctldev->desc->name);
1772 if (pctldev->desc->pmxops)
1773 seq_puts(s, "yes ");
1774 else
1775 seq_puts(s, "no ");
1776 if (pctldev->desc->confops)
1777 seq_puts(s, "yes");
1778 else
1779 seq_puts(s, "no");
1780 seq_puts(s, "\n");
1781 }
1782
1783 mutex_unlock(&pinctrldev_list_mutex);
1784
1785 return 0;
1786 }
1787 DEFINE_SHOW_ATTRIBUTE(pinctrl_devices);
1788
1789 static inline const char *map_type(enum pinctrl_map_type type)
1790 {
1791 static const char * const names[] = {
1792 "INVALID",
1793 "DUMMY_STATE",
1794 "MUX_GROUP",
1795 "CONFIGS_PIN",
1796 "CONFIGS_GROUP",
1797 };
1798
1799 if (type >= ARRAY_SIZE(names))
1800 return "UNKNOWN";
1801
1802 return names[type];
1803 }
1804
1805 static int pinctrl_maps_show(struct seq_file *s, void *what)
1806 {
1807 struct pinctrl_maps *maps_node;
1808 int i;
1809 const struct pinctrl_map *map;
1810
1811 seq_puts(s, "Pinctrl maps:\n");
1812
1813 mutex_lock(&pinctrl_maps_mutex);
1814 for_each_maps(maps_node, i, map) {
1815 seq_printf(s, "device %s\nstate %s\ntype %s (%d)\n",
1816 map->dev_name, map->name, map_type(map->type),
1817 map->type);
1818
1819 if (map->type != PIN_MAP_TYPE_DUMMY_STATE)
1820 seq_printf(s, "controlling device %s\n",
1821 map->ctrl_dev_name);
1822
1823 switch (map->type) {
1824 case PIN_MAP_TYPE_MUX_GROUP:
1825 pinmux_show_map(s, map);
1826 break;
1827 case PIN_MAP_TYPE_CONFIGS_PIN:
1828 case PIN_MAP_TYPE_CONFIGS_GROUP:
1829 pinconf_show_map(s, map);
1830 break;
1831 default:
1832 break;
1833 }
1834
1835 seq_putc(s, '\n');
1836 }
1837 mutex_unlock(&pinctrl_maps_mutex);
1838
1839 return 0;
1840 }
1841 DEFINE_SHOW_ATTRIBUTE(pinctrl_maps);
1842
1843 static int pinctrl_show(struct seq_file *s, void *what)
1844 {
1845 struct pinctrl *p;
1846 struct pinctrl_state *state;
1847 struct pinctrl_setting *setting;
1848
1849 seq_puts(s, "Requested pin control handlers their pinmux maps:\n");
1850
1851 mutex_lock(&pinctrl_list_mutex);
1852
1853 list_for_each_entry(p, &pinctrl_list, node) {
1854 seq_printf(s, "device: %s current state: %s\n",
1855 dev_name(p->dev),
1856 p->state ? p->state->name : "none");
1857
1858 list_for_each_entry(state, &p->states, node) {
1859 seq_printf(s, " state: %s\n", state->name);
1860
1861 list_for_each_entry(setting, &state->settings, node) {
1862 struct pinctrl_dev *pctldev = setting->pctldev;
1863
1864 seq_printf(s, " type: %s controller %s ",
1865 map_type(setting->type),
1866 pinctrl_dev_get_name(pctldev));
1867
1868 switch (setting->type) {
1869 case PIN_MAP_TYPE_MUX_GROUP:
1870 pinmux_show_setting(s, setting);
1871 break;
1872 case PIN_MAP_TYPE_CONFIGS_PIN:
1873 case PIN_MAP_TYPE_CONFIGS_GROUP:
1874 pinconf_show_setting(s, setting);
1875 break;
1876 default:
1877 break;
1878 }
1879 }
1880 }
1881 }
1882
1883 mutex_unlock(&pinctrl_list_mutex);
1884
1885 return 0;
1886 }
1887 DEFINE_SHOW_ATTRIBUTE(pinctrl);
1888
1889 static struct dentry *debugfs_root;
1890
1891 static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
1892 {
1893 struct dentry *device_root;
1894 const char *debugfs_name;
1895
1896 if (pctldev->desc->name &&
1897 strcmp(dev_name(pctldev->dev), pctldev->desc->name)) {
1898 debugfs_name = devm_kasprintf(pctldev->dev, GFP_KERNEL,
1899 "%s-%s", dev_name(pctldev->dev),
1900 pctldev->desc->name);
1901 if (!debugfs_name) {
1902 pr_warn("failed to determine debugfs dir name for %s\n",
1903 dev_name(pctldev->dev));
1904 return;
1905 }
1906 } else {
1907 debugfs_name = dev_name(pctldev->dev);
1908 }
1909
1910 device_root = debugfs_create_dir(debugfs_name, debugfs_root);
1911 pctldev->device_root = device_root;
1912
1913 if (IS_ERR(device_root) || !device_root) {
1914 pr_warn("failed to create debugfs directory for %s\n",
1915 dev_name(pctldev->dev));
1916 return;
1917 }
1918 debugfs_create_file("pins", 0444,
1919 device_root, pctldev, &pinctrl_pins_fops);
1920 debugfs_create_file("pingroups", 0444,
1921 device_root, pctldev, &pinctrl_groups_fops);
1922 debugfs_create_file("gpio-ranges", 0444,
1923 device_root, pctldev, &pinctrl_gpioranges_fops);
1924 if (pctldev->desc->pmxops)
1925 pinmux_init_device_debugfs(device_root, pctldev);
1926 if (pctldev->desc->confops)
1927 pinconf_init_device_debugfs(device_root, pctldev);
1928 }
1929
1930 static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev)
1931 {
1932 debugfs_remove_recursive(pctldev->device_root);
1933 }
1934
1935 static void pinctrl_init_debugfs(void)
1936 {
1937 debugfs_root = debugfs_create_dir("pinctrl", NULL);
1938 if (IS_ERR(debugfs_root) || !debugfs_root) {
1939 pr_warn("failed to create debugfs directory\n");
1940 debugfs_root = NULL;
1941 return;
1942 }
1943
1944 debugfs_create_file("pinctrl-devices", 0444,
1945 debugfs_root, NULL, &pinctrl_devices_fops);
1946 debugfs_create_file("pinctrl-maps", 0444,
1947 debugfs_root, NULL, &pinctrl_maps_fops);
1948 debugfs_create_file("pinctrl-handles", 0444,
1949 debugfs_root, NULL, &pinctrl_fops);
1950 }
1951
1952 #else
1953
1954 static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
1955 {
1956 }
1957
1958 static void pinctrl_init_debugfs(void)
1959 {
1960 }
1961
1962 static void pinctrl_remove_device_debugfs(struct pinctrl_dev *pctldev)
1963 {
1964 }
1965
1966 #endif
1967
1968 static int pinctrl_check_ops(struct pinctrl_dev *pctldev)
1969 {
1970 const struct pinctrl_ops *ops = pctldev->desc->pctlops;
1971
1972 if (!ops ||
1973 !ops->get_groups_count ||
1974 !ops->get_group_name)
1975 return -EINVAL;
1976
1977 return 0;
1978 }
1979
1980
1981
1982
1983
1984
1985
1986 static struct pinctrl_dev *
1987 pinctrl_init_controller(struct pinctrl_desc *pctldesc, struct device *dev,
1988 void *driver_data)
1989 {
1990 struct pinctrl_dev *pctldev;
1991 int ret;
1992
1993 if (!pctldesc)
1994 return ERR_PTR(-EINVAL);
1995 if (!pctldesc->name)
1996 return ERR_PTR(-EINVAL);
1997
1998 pctldev = kzalloc(sizeof(*pctldev), GFP_KERNEL);
1999 if (!pctldev)
2000 return ERR_PTR(-ENOMEM);
2001
2002
2003 pctldev->owner = pctldesc->owner;
2004 pctldev->desc = pctldesc;
2005 pctldev->driver_data = driver_data;
2006 INIT_RADIX_TREE(&pctldev->pin_desc_tree, GFP_KERNEL);
2007 #ifdef CONFIG_GENERIC_PINCTRL_GROUPS
2008 INIT_RADIX_TREE(&pctldev->pin_group_tree, GFP_KERNEL);
2009 #endif
2010 #ifdef CONFIG_GENERIC_PINMUX_FUNCTIONS
2011 INIT_RADIX_TREE(&pctldev->pin_function_tree, GFP_KERNEL);
2012 #endif
2013 INIT_LIST_HEAD(&pctldev->gpio_ranges);
2014 INIT_LIST_HEAD(&pctldev->node);
2015 pctldev->dev = dev;
2016 mutex_init(&pctldev->mutex);
2017
2018
2019 ret = pinctrl_check_ops(pctldev);
2020 if (ret) {
2021 dev_err(dev, "pinctrl ops lacks necessary functions\n");
2022 goto out_err;
2023 }
2024
2025
2026 if (pctldesc->pmxops) {
2027 ret = pinmux_check_ops(pctldev);
2028 if (ret)
2029 goto out_err;
2030 }
2031
2032
2033 if (pctldesc->confops) {
2034 ret = pinconf_check_ops(pctldev);
2035 if (ret)
2036 goto out_err;
2037 }
2038
2039
2040 dev_dbg(dev, "try to register %d pins ...\n", pctldesc->npins);
2041 ret = pinctrl_register_pins(pctldev, pctldesc->pins, pctldesc->npins);
2042 if (ret) {
2043 dev_err(dev, "error during pin registration\n");
2044 pinctrl_free_pindescs(pctldev, pctldesc->pins,
2045 pctldesc->npins);
2046 goto out_err;
2047 }
2048
2049 return pctldev;
2050
2051 out_err:
2052 mutex_destroy(&pctldev->mutex);
2053 kfree(pctldev);
2054 return ERR_PTR(ret);
2055 }
2056
2057 static int pinctrl_claim_hogs(struct pinctrl_dev *pctldev)
2058 {
2059 pctldev->p = create_pinctrl(pctldev->dev, pctldev);
2060 if (PTR_ERR(pctldev->p) == -ENODEV) {
2061 dev_dbg(pctldev->dev, "no hogs found\n");
2062
2063 return 0;
2064 }
2065
2066 if (IS_ERR(pctldev->p)) {
2067 dev_err(pctldev->dev, "error claiming hogs: %li\n",
2068 PTR_ERR(pctldev->p));
2069
2070 return PTR_ERR(pctldev->p);
2071 }
2072
2073 pctldev->hog_default =
2074 pinctrl_lookup_state(pctldev->p, PINCTRL_STATE_DEFAULT);
2075 if (IS_ERR(pctldev->hog_default)) {
2076 dev_dbg(pctldev->dev,
2077 "failed to lookup the default state\n");
2078 } else {
2079 if (pinctrl_select_state(pctldev->p,
2080 pctldev->hog_default))
2081 dev_err(pctldev->dev,
2082 "failed to select default state\n");
2083 }
2084
2085 pctldev->hog_sleep =
2086 pinctrl_lookup_state(pctldev->p,
2087 PINCTRL_STATE_SLEEP);
2088 if (IS_ERR(pctldev->hog_sleep))
2089 dev_dbg(pctldev->dev,
2090 "failed to lookup the sleep state\n");
2091
2092 return 0;
2093 }
2094
2095 int pinctrl_enable(struct pinctrl_dev *pctldev)
2096 {
2097 int error;
2098
2099 error = pinctrl_claim_hogs(pctldev);
2100 if (error) {
2101 dev_err(pctldev->dev, "could not claim hogs: %i\n",
2102 error);
2103 pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
2104 pctldev->desc->npins);
2105 mutex_destroy(&pctldev->mutex);
2106 kfree(pctldev);
2107
2108 return error;
2109 }
2110
2111 mutex_lock(&pinctrldev_list_mutex);
2112 list_add_tail(&pctldev->node, &pinctrldev_list);
2113 mutex_unlock(&pinctrldev_list_mutex);
2114
2115 pinctrl_init_device_debugfs(pctldev);
2116
2117 return 0;
2118 }
2119 EXPORT_SYMBOL_GPL(pinctrl_enable);
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132 struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
2133 struct device *dev, void *driver_data)
2134 {
2135 struct pinctrl_dev *pctldev;
2136 int error;
2137
2138 pctldev = pinctrl_init_controller(pctldesc, dev, driver_data);
2139 if (IS_ERR(pctldev))
2140 return pctldev;
2141
2142 error = pinctrl_enable(pctldev);
2143 if (error)
2144 return ERR_PTR(error);
2145
2146 return pctldev;
2147 }
2148 EXPORT_SYMBOL_GPL(pinctrl_register);
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160 int pinctrl_register_and_init(struct pinctrl_desc *pctldesc,
2161 struct device *dev, void *driver_data,
2162 struct pinctrl_dev **pctldev)
2163 {
2164 struct pinctrl_dev *p;
2165
2166 p = pinctrl_init_controller(pctldesc, dev, driver_data);
2167 if (IS_ERR(p))
2168 return PTR_ERR(p);
2169
2170
2171
2172
2173
2174
2175
2176 *pctldev = p;
2177
2178 return 0;
2179 }
2180 EXPORT_SYMBOL_GPL(pinctrl_register_and_init);
2181
2182
2183
2184
2185
2186
2187
2188 void pinctrl_unregister(struct pinctrl_dev *pctldev)
2189 {
2190 struct pinctrl_gpio_range *range, *n;
2191
2192 if (!pctldev)
2193 return;
2194
2195 mutex_lock(&pctldev->mutex);
2196 pinctrl_remove_device_debugfs(pctldev);
2197 mutex_unlock(&pctldev->mutex);
2198
2199 if (!IS_ERR_OR_NULL(pctldev->p))
2200 pinctrl_put(pctldev->p);
2201
2202 mutex_lock(&pinctrldev_list_mutex);
2203 mutex_lock(&pctldev->mutex);
2204
2205 list_del(&pctldev->node);
2206 pinmux_generic_free_functions(pctldev);
2207 pinctrl_generic_free_groups(pctldev);
2208
2209 pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
2210 pctldev->desc->npins);
2211
2212 list_for_each_entry_safe(range, n, &pctldev->gpio_ranges, node)
2213 list_del(&range->node);
2214
2215 mutex_unlock(&pctldev->mutex);
2216 mutex_destroy(&pctldev->mutex);
2217 kfree(pctldev);
2218 mutex_unlock(&pinctrldev_list_mutex);
2219 }
2220 EXPORT_SYMBOL_GPL(pinctrl_unregister);
2221
2222 static void devm_pinctrl_dev_release(struct device *dev, void *res)
2223 {
2224 struct pinctrl_dev *pctldev = *(struct pinctrl_dev **)res;
2225
2226 pinctrl_unregister(pctldev);
2227 }
2228
2229 static int devm_pinctrl_dev_match(struct device *dev, void *res, void *data)
2230 {
2231 struct pctldev **r = res;
2232
2233 if (WARN_ON(!r || !*r))
2234 return 0;
2235
2236 return *r == data;
2237 }
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250 struct pinctrl_dev *devm_pinctrl_register(struct device *dev,
2251 struct pinctrl_desc *pctldesc,
2252 void *driver_data)
2253 {
2254 struct pinctrl_dev **ptr, *pctldev;
2255
2256 ptr = devres_alloc(devm_pinctrl_dev_release, sizeof(*ptr), GFP_KERNEL);
2257 if (!ptr)
2258 return ERR_PTR(-ENOMEM);
2259
2260 pctldev = pinctrl_register(pctldesc, dev, driver_data);
2261 if (IS_ERR(pctldev)) {
2262 devres_free(ptr);
2263 return pctldev;
2264 }
2265
2266 *ptr = pctldev;
2267 devres_add(dev, ptr);
2268
2269 return pctldev;
2270 }
2271 EXPORT_SYMBOL_GPL(devm_pinctrl_register);
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284 int devm_pinctrl_register_and_init(struct device *dev,
2285 struct pinctrl_desc *pctldesc,
2286 void *driver_data,
2287 struct pinctrl_dev **pctldev)
2288 {
2289 struct pinctrl_dev **ptr;
2290 int error;
2291
2292 ptr = devres_alloc(devm_pinctrl_dev_release, sizeof(*ptr), GFP_KERNEL);
2293 if (!ptr)
2294 return -ENOMEM;
2295
2296 error = pinctrl_register_and_init(pctldesc, dev, driver_data, pctldev);
2297 if (error) {
2298 devres_free(ptr);
2299 return error;
2300 }
2301
2302 *ptr = *pctldev;
2303 devres_add(dev, ptr);
2304
2305 return 0;
2306 }
2307 EXPORT_SYMBOL_GPL(devm_pinctrl_register_and_init);
2308
2309
2310
2311
2312
2313
2314 void devm_pinctrl_unregister(struct device *dev, struct pinctrl_dev *pctldev)
2315 {
2316 WARN_ON(devres_release(dev, devm_pinctrl_dev_release,
2317 devm_pinctrl_dev_match, pctldev));
2318 }
2319 EXPORT_SYMBOL_GPL(devm_pinctrl_unregister);
2320
2321 static int __init pinctrl_init(void)
2322 {
2323 pr_info("initialized pinctrl subsystem\n");
2324 pinctrl_init_debugfs();
2325 return 0;
2326 }
2327
2328
2329 core_initcall(pinctrl_init);