gpiolib-sysfs.c (19562B)
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/idr.h> 3#include <linux/mutex.h> 4#include <linux/device.h> 5#include <linux/sysfs.h> 6#include <linux/gpio/consumer.h> 7#include <linux/gpio/driver.h> 8#include <linux/interrupt.h> 9#include <linux/kdev_t.h> 10#include <linux/slab.h> 11#include <linux/ctype.h> 12 13#include "gpiolib.h" 14#include "gpiolib-sysfs.h" 15 16#define GPIO_IRQF_TRIGGER_NONE 0 17#define GPIO_IRQF_TRIGGER_FALLING BIT(0) 18#define GPIO_IRQF_TRIGGER_RISING BIT(1) 19#define GPIO_IRQF_TRIGGER_BOTH (GPIO_IRQF_TRIGGER_FALLING | \ 20 GPIO_IRQF_TRIGGER_RISING) 21 22struct gpiod_data { 23 struct gpio_desc *desc; 24 25 struct mutex mutex; 26 struct kernfs_node *value_kn; 27 int irq; 28 unsigned char irq_flags; 29 30 bool direction_can_change; 31}; 32 33/* 34 * Lock to serialise gpiod export and unexport, and prevent re-export of 35 * gpiod whose chip is being unregistered. 36 */ 37static DEFINE_MUTEX(sysfs_lock); 38 39/* 40 * /sys/class/gpio/gpioN... only for GPIOs that are exported 41 * /direction 42 * * MAY BE OMITTED if kernel won't allow direction changes 43 * * is read/write as "in" or "out" 44 * * may also be written as "high" or "low", initializing 45 * output value as specified ("out" implies "low") 46 * /value 47 * * always readable, subject to hardware behavior 48 * * may be writable, as zero/nonzero 49 * /edge 50 * * configures behavior of poll(2) on /value 51 * * available only if pin can generate IRQs on input 52 * * is read/write as "none", "falling", "rising", or "both" 53 * /active_low 54 * * configures polarity of /value 55 * * is read/write as zero/nonzero 56 * * also affects existing and subsequent "falling" and "rising" 57 * /edge configuration 58 */ 59 60static ssize_t direction_show(struct device *dev, 61 struct device_attribute *attr, char *buf) 62{ 63 struct gpiod_data *data = dev_get_drvdata(dev); 64 struct gpio_desc *desc = data->desc; 65 int value; 66 67 mutex_lock(&data->mutex); 68 69 gpiod_get_direction(desc); 70 value = !!test_bit(FLAG_IS_OUT, &desc->flags); 71 72 mutex_unlock(&data->mutex); 73 74 return sysfs_emit(buf, "%s\n", value ? "out" : "in"); 75} 76 77static ssize_t direction_store(struct device *dev, 78 struct device_attribute *attr, const char *buf, size_t size) 79{ 80 struct gpiod_data *data = dev_get_drvdata(dev); 81 struct gpio_desc *desc = data->desc; 82 ssize_t status; 83 84 mutex_lock(&data->mutex); 85 86 if (sysfs_streq(buf, "high")) 87 status = gpiod_direction_output_raw(desc, 1); 88 else if (sysfs_streq(buf, "out") || sysfs_streq(buf, "low")) 89 status = gpiod_direction_output_raw(desc, 0); 90 else if (sysfs_streq(buf, "in")) 91 status = gpiod_direction_input(desc); 92 else 93 status = -EINVAL; 94 95 mutex_unlock(&data->mutex); 96 97 return status ? : size; 98} 99static DEVICE_ATTR_RW(direction); 100 101static ssize_t value_show(struct device *dev, 102 struct device_attribute *attr, char *buf) 103{ 104 struct gpiod_data *data = dev_get_drvdata(dev); 105 struct gpio_desc *desc = data->desc; 106 ssize_t status; 107 108 mutex_lock(&data->mutex); 109 110 status = gpiod_get_value_cansleep(desc); 111 112 mutex_unlock(&data->mutex); 113 114 if (status < 0) 115 return status; 116 117 return sysfs_emit(buf, "%zd\n", status); 118} 119 120static ssize_t value_store(struct device *dev, 121 struct device_attribute *attr, const char *buf, size_t size) 122{ 123 struct gpiod_data *data = dev_get_drvdata(dev); 124 struct gpio_desc *desc = data->desc; 125 ssize_t status; 126 long value; 127 128 status = kstrtol(buf, 0, &value); 129 130 mutex_lock(&data->mutex); 131 132 if (!test_bit(FLAG_IS_OUT, &desc->flags)) { 133 status = -EPERM; 134 } else if (status == 0) { 135 gpiod_set_value_cansleep(desc, value); 136 status = size; 137 } 138 139 mutex_unlock(&data->mutex); 140 141 return status; 142} 143static DEVICE_ATTR_PREALLOC(value, S_IWUSR | S_IRUGO, value_show, value_store); 144 145static irqreturn_t gpio_sysfs_irq(int irq, void *priv) 146{ 147 struct gpiod_data *data = priv; 148 149 sysfs_notify_dirent(data->value_kn); 150 151 return IRQ_HANDLED; 152} 153 154/* Caller holds gpiod-data mutex. */ 155static int gpio_sysfs_request_irq(struct device *dev, unsigned char flags) 156{ 157 struct gpiod_data *data = dev_get_drvdata(dev); 158 struct gpio_desc *desc = data->desc; 159 unsigned long irq_flags; 160 int ret; 161 162 data->irq = gpiod_to_irq(desc); 163 if (data->irq < 0) 164 return -EIO; 165 166 data->value_kn = sysfs_get_dirent(dev->kobj.sd, "value"); 167 if (!data->value_kn) 168 return -ENODEV; 169 170 irq_flags = IRQF_SHARED; 171 if (flags & GPIO_IRQF_TRIGGER_FALLING) 172 irq_flags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ? 173 IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING; 174 if (flags & GPIO_IRQF_TRIGGER_RISING) 175 irq_flags |= test_bit(FLAG_ACTIVE_LOW, &desc->flags) ? 176 IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING; 177 178 /* 179 * FIXME: This should be done in the irq_request_resources callback 180 * when the irq is requested, but a few drivers currently fail 181 * to do so. 182 * 183 * Remove this redundant call (along with the corresponding 184 * unlock) when those drivers have been fixed. 185 */ 186 ret = gpiochip_lock_as_irq(desc->gdev->chip, gpio_chip_hwgpio(desc)); 187 if (ret < 0) 188 goto err_put_kn; 189 190 ret = request_any_context_irq(data->irq, gpio_sysfs_irq, irq_flags, 191 "gpiolib", data); 192 if (ret < 0) 193 goto err_unlock; 194 195 data->irq_flags = flags; 196 197 return 0; 198 199err_unlock: 200 gpiochip_unlock_as_irq(desc->gdev->chip, gpio_chip_hwgpio(desc)); 201err_put_kn: 202 sysfs_put(data->value_kn); 203 204 return ret; 205} 206 207/* 208 * Caller holds gpiod-data mutex (unless called after class-device 209 * deregistration). 210 */ 211static void gpio_sysfs_free_irq(struct device *dev) 212{ 213 struct gpiod_data *data = dev_get_drvdata(dev); 214 struct gpio_desc *desc = data->desc; 215 216 data->irq_flags = 0; 217 free_irq(data->irq, data); 218 gpiochip_unlock_as_irq(desc->gdev->chip, gpio_chip_hwgpio(desc)); 219 sysfs_put(data->value_kn); 220} 221 222static const char * const trigger_names[] = { 223 [GPIO_IRQF_TRIGGER_NONE] = "none", 224 [GPIO_IRQF_TRIGGER_FALLING] = "falling", 225 [GPIO_IRQF_TRIGGER_RISING] = "rising", 226 [GPIO_IRQF_TRIGGER_BOTH] = "both", 227}; 228 229static ssize_t edge_show(struct device *dev, 230 struct device_attribute *attr, char *buf) 231{ 232 struct gpiod_data *data = dev_get_drvdata(dev); 233 int flags; 234 235 mutex_lock(&data->mutex); 236 237 flags = data->irq_flags; 238 239 mutex_unlock(&data->mutex); 240 241 if (flags >= ARRAY_SIZE(trigger_names)) 242 return 0; 243 244 return sysfs_emit(buf, "%s\n", trigger_names[flags]); 245} 246 247static ssize_t edge_store(struct device *dev, 248 struct device_attribute *attr, const char *buf, size_t size) 249{ 250 struct gpiod_data *data = dev_get_drvdata(dev); 251 ssize_t status = size; 252 int flags; 253 254 flags = sysfs_match_string(trigger_names, buf); 255 if (flags < 0) 256 return flags; 257 258 mutex_lock(&data->mutex); 259 260 if (flags == data->irq_flags) { 261 status = size; 262 goto out_unlock; 263 } 264 265 if (data->irq_flags) 266 gpio_sysfs_free_irq(dev); 267 268 if (flags) { 269 status = gpio_sysfs_request_irq(dev, flags); 270 if (!status) 271 status = size; 272 } 273 274out_unlock: 275 mutex_unlock(&data->mutex); 276 277 return status; 278} 279static DEVICE_ATTR_RW(edge); 280 281/* Caller holds gpiod-data mutex. */ 282static int gpio_sysfs_set_active_low(struct device *dev, int value) 283{ 284 struct gpiod_data *data = dev_get_drvdata(dev); 285 struct gpio_desc *desc = data->desc; 286 int status = 0; 287 unsigned int flags = data->irq_flags; 288 289 if (!!test_bit(FLAG_ACTIVE_LOW, &desc->flags) == !!value) 290 return 0; 291 292 assign_bit(FLAG_ACTIVE_LOW, &desc->flags, value); 293 294 /* reconfigure poll(2) support if enabled on one edge only */ 295 if (flags == GPIO_IRQF_TRIGGER_FALLING || 296 flags == GPIO_IRQF_TRIGGER_RISING) { 297 gpio_sysfs_free_irq(dev); 298 status = gpio_sysfs_request_irq(dev, flags); 299 } 300 301 return status; 302} 303 304static ssize_t active_low_show(struct device *dev, 305 struct device_attribute *attr, char *buf) 306{ 307 struct gpiod_data *data = dev_get_drvdata(dev); 308 struct gpio_desc *desc = data->desc; 309 int value; 310 311 mutex_lock(&data->mutex); 312 313 value = !!test_bit(FLAG_ACTIVE_LOW, &desc->flags); 314 315 mutex_unlock(&data->mutex); 316 317 return sysfs_emit(buf, "%d\n", value); 318} 319 320static ssize_t active_low_store(struct device *dev, 321 struct device_attribute *attr, const char *buf, size_t size) 322{ 323 struct gpiod_data *data = dev_get_drvdata(dev); 324 ssize_t status; 325 long value; 326 327 status = kstrtol(buf, 0, &value); 328 if (status) 329 return status; 330 331 mutex_lock(&data->mutex); 332 333 status = gpio_sysfs_set_active_low(dev, value); 334 335 mutex_unlock(&data->mutex); 336 337 return status ? : size; 338} 339static DEVICE_ATTR_RW(active_low); 340 341static umode_t gpio_is_visible(struct kobject *kobj, struct attribute *attr, 342 int n) 343{ 344 struct device *dev = kobj_to_dev(kobj); 345 struct gpiod_data *data = dev_get_drvdata(dev); 346 struct gpio_desc *desc = data->desc; 347 umode_t mode = attr->mode; 348 bool show_direction = data->direction_can_change; 349 350 if (attr == &dev_attr_direction.attr) { 351 if (!show_direction) 352 mode = 0; 353 } else if (attr == &dev_attr_edge.attr) { 354 if (gpiod_to_irq(desc) < 0) 355 mode = 0; 356 if (!show_direction && test_bit(FLAG_IS_OUT, &desc->flags)) 357 mode = 0; 358 } 359 360 return mode; 361} 362 363static struct attribute *gpio_attrs[] = { 364 &dev_attr_direction.attr, 365 &dev_attr_edge.attr, 366 &dev_attr_value.attr, 367 &dev_attr_active_low.attr, 368 NULL, 369}; 370 371static const struct attribute_group gpio_group = { 372 .attrs = gpio_attrs, 373 .is_visible = gpio_is_visible, 374}; 375 376static const struct attribute_group *gpio_groups[] = { 377 &gpio_group, 378 NULL 379}; 380 381/* 382 * /sys/class/gpio/gpiochipN/ 383 * /base ... matching gpio_chip.base (N) 384 * /label ... matching gpio_chip.label 385 * /ngpio ... matching gpio_chip.ngpio 386 */ 387 388static ssize_t base_show(struct device *dev, 389 struct device_attribute *attr, char *buf) 390{ 391 const struct gpio_chip *chip = dev_get_drvdata(dev); 392 393 return sysfs_emit(buf, "%d\n", chip->base); 394} 395static DEVICE_ATTR_RO(base); 396 397static ssize_t label_show(struct device *dev, 398 struct device_attribute *attr, char *buf) 399{ 400 const struct gpio_chip *chip = dev_get_drvdata(dev); 401 402 return sysfs_emit(buf, "%s\n", chip->label ?: ""); 403} 404static DEVICE_ATTR_RO(label); 405 406static ssize_t ngpio_show(struct device *dev, 407 struct device_attribute *attr, char *buf) 408{ 409 const struct gpio_chip *chip = dev_get_drvdata(dev); 410 411 return sysfs_emit(buf, "%u\n", chip->ngpio); 412} 413static DEVICE_ATTR_RO(ngpio); 414 415static struct attribute *gpiochip_attrs[] = { 416 &dev_attr_base.attr, 417 &dev_attr_label.attr, 418 &dev_attr_ngpio.attr, 419 NULL, 420}; 421ATTRIBUTE_GROUPS(gpiochip); 422 423/* 424 * /sys/class/gpio/export ... write-only 425 * integer N ... number of GPIO to export (full access) 426 * /sys/class/gpio/unexport ... write-only 427 * integer N ... number of GPIO to unexport 428 */ 429static ssize_t export_store(struct class *class, 430 struct class_attribute *attr, 431 const char *buf, size_t len) 432{ 433 long gpio; 434 struct gpio_desc *desc; 435 int status; 436 struct gpio_chip *gc; 437 int offset; 438 439 status = kstrtol(buf, 0, &gpio); 440 if (status < 0) 441 goto done; 442 443 desc = gpio_to_desc(gpio); 444 /* reject invalid GPIOs */ 445 if (!desc) { 446 pr_warn("%s: invalid GPIO %ld\n", __func__, gpio); 447 return -EINVAL; 448 } 449 gc = desc->gdev->chip; 450 offset = gpio_chip_hwgpio(desc); 451 if (!gpiochip_line_is_valid(gc, offset)) { 452 pr_warn("%s: GPIO %ld masked\n", __func__, gpio); 453 return -EINVAL; 454 } 455 456 /* No extra locking here; FLAG_SYSFS just signifies that the 457 * request and export were done by on behalf of userspace, so 458 * they may be undone on its behalf too. 459 */ 460 461 status = gpiod_request_user(desc, "sysfs"); 462 if (status) 463 goto done; 464 465 status = gpiod_set_transitory(desc, false); 466 if (!status) { 467 status = gpiod_export(desc, true); 468 if (status < 0) 469 gpiod_free(desc); 470 else 471 set_bit(FLAG_SYSFS, &desc->flags); 472 } 473 474done: 475 if (status) 476 pr_debug("%s: status %d\n", __func__, status); 477 return status ? : len; 478} 479static CLASS_ATTR_WO(export); 480 481static ssize_t unexport_store(struct class *class, 482 struct class_attribute *attr, 483 const char *buf, size_t len) 484{ 485 long gpio; 486 struct gpio_desc *desc; 487 int status; 488 489 status = kstrtol(buf, 0, &gpio); 490 if (status < 0) 491 goto done; 492 493 desc = gpio_to_desc(gpio); 494 /* reject bogus commands (gpio_unexport ignores them) */ 495 if (!desc) { 496 pr_warn("%s: invalid GPIO %ld\n", __func__, gpio); 497 return -EINVAL; 498 } 499 500 status = -EINVAL; 501 502 /* No extra locking here; FLAG_SYSFS just signifies that the 503 * request and export were done by on behalf of userspace, so 504 * they may be undone on its behalf too. 505 */ 506 if (test_and_clear_bit(FLAG_SYSFS, &desc->flags)) { 507 status = 0; 508 gpiod_free(desc); 509 } 510done: 511 if (status) 512 pr_debug("%s: status %d\n", __func__, status); 513 return status ? : len; 514} 515static CLASS_ATTR_WO(unexport); 516 517static struct attribute *gpio_class_attrs[] = { 518 &class_attr_export.attr, 519 &class_attr_unexport.attr, 520 NULL, 521}; 522ATTRIBUTE_GROUPS(gpio_class); 523 524static struct class gpio_class = { 525 .name = "gpio", 526 .owner = THIS_MODULE, 527 528 .class_groups = gpio_class_groups, 529}; 530 531 532/** 533 * gpiod_export - export a GPIO through sysfs 534 * @desc: GPIO to make available, already requested 535 * @direction_may_change: true if userspace may change GPIO direction 536 * Context: arch_initcall or later 537 * 538 * When drivers want to make a GPIO accessible to userspace after they 539 * have requested it -- perhaps while debugging, or as part of their 540 * public interface -- they may use this routine. If the GPIO can 541 * change direction (some can't) and the caller allows it, userspace 542 * will see "direction" sysfs attribute which may be used to change 543 * the gpio's direction. A "value" attribute will always be provided. 544 * 545 * Returns zero on success, else an error. 546 */ 547int gpiod_export(struct gpio_desc *desc, bool direction_may_change) 548{ 549 struct gpio_chip *chip; 550 struct gpio_device *gdev; 551 struct gpiod_data *data; 552 unsigned long flags; 553 int status; 554 const char *ioname = NULL; 555 struct device *dev; 556 int offset; 557 558 /* can't export until sysfs is available ... */ 559 if (!gpio_class.p) { 560 pr_debug("%s: called too early!\n", __func__); 561 return -ENOENT; 562 } 563 564 if (!desc) { 565 pr_debug("%s: invalid gpio descriptor\n", __func__); 566 return -EINVAL; 567 } 568 569 gdev = desc->gdev; 570 chip = gdev->chip; 571 572 mutex_lock(&sysfs_lock); 573 574 /* check if chip is being removed */ 575 if (!chip || !gdev->mockdev) { 576 status = -ENODEV; 577 goto err_unlock; 578 } 579 580 spin_lock_irqsave(&gpio_lock, flags); 581 if (!test_bit(FLAG_REQUESTED, &desc->flags) || 582 test_bit(FLAG_EXPORT, &desc->flags)) { 583 spin_unlock_irqrestore(&gpio_lock, flags); 584 gpiod_dbg(desc, "%s: unavailable (requested=%d, exported=%d)\n", 585 __func__, 586 test_bit(FLAG_REQUESTED, &desc->flags), 587 test_bit(FLAG_EXPORT, &desc->flags)); 588 status = -EPERM; 589 goto err_unlock; 590 } 591 spin_unlock_irqrestore(&gpio_lock, flags); 592 593 data = kzalloc(sizeof(*data), GFP_KERNEL); 594 if (!data) { 595 status = -ENOMEM; 596 goto err_unlock; 597 } 598 599 data->desc = desc; 600 mutex_init(&data->mutex); 601 if (chip->direction_input && chip->direction_output) 602 data->direction_can_change = direction_may_change; 603 else 604 data->direction_can_change = false; 605 606 offset = gpio_chip_hwgpio(desc); 607 if (chip->names && chip->names[offset]) 608 ioname = chip->names[offset]; 609 610 dev = device_create_with_groups(&gpio_class, &gdev->dev, 611 MKDEV(0, 0), data, gpio_groups, 612 ioname ? ioname : "gpio%u", 613 desc_to_gpio(desc)); 614 if (IS_ERR(dev)) { 615 status = PTR_ERR(dev); 616 goto err_free_data; 617 } 618 619 set_bit(FLAG_EXPORT, &desc->flags); 620 mutex_unlock(&sysfs_lock); 621 return 0; 622 623err_free_data: 624 kfree(data); 625err_unlock: 626 mutex_unlock(&sysfs_lock); 627 gpiod_dbg(desc, "%s: status %d\n", __func__, status); 628 return status; 629} 630EXPORT_SYMBOL_GPL(gpiod_export); 631 632static int match_export(struct device *dev, const void *desc) 633{ 634 struct gpiod_data *data = dev_get_drvdata(dev); 635 636 return data->desc == desc; 637} 638 639/** 640 * gpiod_export_link - create a sysfs link to an exported GPIO node 641 * @dev: device under which to create symlink 642 * @name: name of the symlink 643 * @desc: GPIO to create symlink to, already exported 644 * 645 * Set up a symlink from /sys/.../dev/name to /sys/class/gpio/gpioN 646 * node. Caller is responsible for unlinking. 647 * 648 * Returns zero on success, else an error. 649 */ 650int gpiod_export_link(struct device *dev, const char *name, 651 struct gpio_desc *desc) 652{ 653 struct device *cdev; 654 int ret; 655 656 if (!desc) { 657 pr_warn("%s: invalid GPIO\n", __func__); 658 return -EINVAL; 659 } 660 661 cdev = class_find_device(&gpio_class, NULL, desc, match_export); 662 if (!cdev) 663 return -ENODEV; 664 665 ret = sysfs_create_link(&dev->kobj, &cdev->kobj, name); 666 put_device(cdev); 667 668 return ret; 669} 670EXPORT_SYMBOL_GPL(gpiod_export_link); 671 672/** 673 * gpiod_unexport - reverse effect of gpiod_export() 674 * @desc: GPIO to make unavailable 675 * 676 * This is implicit on gpiod_free(). 677 */ 678void gpiod_unexport(struct gpio_desc *desc) 679{ 680 struct gpiod_data *data; 681 struct device *dev; 682 683 if (!desc) { 684 pr_warn("%s: invalid GPIO\n", __func__); 685 return; 686 } 687 688 mutex_lock(&sysfs_lock); 689 690 if (!test_bit(FLAG_EXPORT, &desc->flags)) 691 goto err_unlock; 692 693 dev = class_find_device(&gpio_class, NULL, desc, match_export); 694 if (!dev) 695 goto err_unlock; 696 697 data = dev_get_drvdata(dev); 698 699 clear_bit(FLAG_EXPORT, &desc->flags); 700 701 device_unregister(dev); 702 703 /* 704 * Release irq after deregistration to prevent race with edge_store. 705 */ 706 if (data->irq_flags) 707 gpio_sysfs_free_irq(dev); 708 709 mutex_unlock(&sysfs_lock); 710 711 put_device(dev); 712 kfree(data); 713 714 return; 715 716err_unlock: 717 mutex_unlock(&sysfs_lock); 718} 719EXPORT_SYMBOL_GPL(gpiod_unexport); 720 721int gpiochip_sysfs_register(struct gpio_device *gdev) 722{ 723 struct device *dev; 724 struct device *parent; 725 struct gpio_chip *chip = gdev->chip; 726 727 /* 728 * Many systems add gpio chips for SOC support very early, 729 * before driver model support is available. In those cases we 730 * register later, in gpiolib_sysfs_init() ... here we just 731 * verify that _some_ field of gpio_class got initialized. 732 */ 733 if (!gpio_class.p) 734 return 0; 735 736 /* 737 * For sysfs backward compatibility we need to preserve this 738 * preferred parenting to the gpio_chip parent field, if set. 739 */ 740 if (chip->parent) 741 parent = chip->parent; 742 else 743 parent = &gdev->dev; 744 745 /* use chip->base for the ID; it's already known to be unique */ 746 dev = device_create_with_groups(&gpio_class, parent, MKDEV(0, 0), chip, 747 gpiochip_groups, GPIOCHIP_NAME "%d", 748 chip->base); 749 if (IS_ERR(dev)) 750 return PTR_ERR(dev); 751 752 mutex_lock(&sysfs_lock); 753 gdev->mockdev = dev; 754 mutex_unlock(&sysfs_lock); 755 756 return 0; 757} 758 759void gpiochip_sysfs_unregister(struct gpio_device *gdev) 760{ 761 struct gpio_desc *desc; 762 struct gpio_chip *chip = gdev->chip; 763 764 if (!gdev->mockdev) 765 return; 766 767 device_unregister(gdev->mockdev); 768 769 /* prevent further gpiod exports */ 770 mutex_lock(&sysfs_lock); 771 gdev->mockdev = NULL; 772 mutex_unlock(&sysfs_lock); 773 774 /* unregister gpiod class devices owned by sysfs */ 775 for_each_gpio_desc_with_flag(chip, desc, FLAG_SYSFS) 776 gpiod_free(desc); 777} 778 779static int __init gpiolib_sysfs_init(void) 780{ 781 int status; 782 unsigned long flags; 783 struct gpio_device *gdev; 784 785 status = class_register(&gpio_class); 786 if (status < 0) 787 return status; 788 789 /* Scan and register the gpio_chips which registered very 790 * early (e.g. before the class_register above was called). 791 * 792 * We run before arch_initcall() so chip->dev nodes can have 793 * registered, and so arch_initcall() can always gpio_export(). 794 */ 795 spin_lock_irqsave(&gpio_lock, flags); 796 list_for_each_entry(gdev, &gpio_devices, list) { 797 if (gdev->mockdev) 798 continue; 799 800 /* 801 * TODO we yield gpio_lock here because 802 * gpiochip_sysfs_register() acquires a mutex. This is unsafe 803 * and needs to be fixed. 804 * 805 * Also it would be nice to use gpiochip_find() here so we 806 * can keep gpio_chips local to gpiolib.c, but the yield of 807 * gpio_lock prevents us from doing this. 808 */ 809 spin_unlock_irqrestore(&gpio_lock, flags); 810 status = gpiochip_sysfs_register(gdev); 811 spin_lock_irqsave(&gpio_lock, flags); 812 } 813 spin_unlock_irqrestore(&gpio_lock, flags); 814 815 return status; 816} 817postcore_initcall(gpiolib_sysfs_init);