gpiolib: Return label, if set, for IRQ only line
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 30 May 2024 19:12:29 +0000 (22:12 +0300)
committerBartosz Golaszewski <bartosz.golaszewski@linaro.org>
Tue, 4 Jun 2024 08:17:24 +0000 (10:17 +0200)
If line has been locked as IRQ without requesting,
still check its label and return it, if not NULL.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20240530191418.1138003-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
drivers/gpio/gpiolib.c

index ea723cf1c87fccb88ce877745f24ca4f6257e115..3f578d674b53cbc54c366b1f6063051d2398fe19 100644 (file)
@@ -106,16 +106,16 @@ const char *gpiod_get_label(struct gpio_desc *desc)
        unsigned long flags;
 
        flags = READ_ONCE(desc->flags);
-       if (test_bit(FLAG_USED_AS_IRQ, &flags) &&
-           !test_bit(FLAG_REQUESTED, &flags))
-               return "interrupt";
-
-       if (!test_bit(FLAG_REQUESTED, &flags))
-               return NULL;
 
        label = srcu_dereference_check(desc->label, &desc->gdev->desc_srcu,
                                srcu_read_lock_held(&desc->gdev->desc_srcu));
 
+       if (test_bit(FLAG_USED_AS_IRQ, &flags))
+               return label->str ?: "interrupt";
+
+       if (!test_bit(FLAG_REQUESTED, &flags))
+               return NULL;
+
        return label->str;
 }