mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-09 02:57:42 -04:00
gpio: provide gpiod_is_equal()
There are users in the kernel that directly compare raw GPIO descriptor pointers in order to determine whether they refer to the same physical GPIO pin. This accidentally works like this but is not guaranteed by any API contract. Let's provide a comparator function that hides the actual logic. Reviewed-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20250407-gpiod-is-equal-v1-1-7d85f568ae6e@linaro.org Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
@@ -265,6 +265,20 @@ struct gpio_device *gpiod_to_gpio_device(struct gpio_desc *desc)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_to_gpio_device);
|
||||
|
||||
/**
|
||||
* gpiod_is_equal() - Check if two GPIO descriptors refer to the same pin.
|
||||
* @desc: Descriptor to compare.
|
||||
* @other: The second descriptor to compare against.
|
||||
*
|
||||
* Returns:
|
||||
* True if the descriptors refer to the same physical pin. False otherwise.
|
||||
*/
|
||||
bool gpiod_is_equal(struct gpio_desc *desc, struct gpio_desc *other)
|
||||
{
|
||||
return desc == other;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiod_is_equal);
|
||||
|
||||
/**
|
||||
* gpio_device_get_base() - Get the base GPIO number allocated by this device
|
||||
* @gdev: GPIO device
|
||||
|
||||
@@ -180,6 +180,8 @@ struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
|
||||
enum gpiod_flags flags,
|
||||
const char *label);
|
||||
|
||||
bool gpiod_is_equal(struct gpio_desc *desc, struct gpio_desc *other);
|
||||
|
||||
#else /* CONFIG_GPIOLIB */
|
||||
|
||||
#include <linux/bug.h>
|
||||
@@ -547,6 +549,13 @@ struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev,
|
||||
return ERR_PTR(-ENOSYS);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
gpiod_is_equal(struct gpio_desc *desc, struct gpio_desc *other)
|
||||
{
|
||||
WARN_ON(desc || other);
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_GPIOLIB */
|
||||
|
||||
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_HTE)
|
||||
|
||||
Reference in New Issue
Block a user