mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-06 04:19:23 -04:00
gpiolib: Extract gpiochip_choose_fwnode() for wider use
Extract gpiochip_choose_fwnode() for the future use in another function. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Tested-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Reviewed-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Link: https://lore.kernel.org/r/20250213195621.3133406-2-andriy.shevchenko@linux.intel.com Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
committed by
Bartosz Golaszewski
parent
63cdf6241a
commit
375790f183
@@ -883,6 +883,21 @@ void *gpiochip_get_data(struct gpio_chip *gc)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(gpiochip_get_data);
|
||||
|
||||
/*
|
||||
* If the calling driver provides the specific firmware node,
|
||||
* use it. Otherwise use the one from the parent device, if any.
|
||||
*/
|
||||
static struct fwnode_handle *gpiochip_choose_fwnode(struct gpio_chip *gc)
|
||||
{
|
||||
if (gc->fwnode)
|
||||
return gc->fwnode;
|
||||
|
||||
if (gc->parent)
|
||||
return dev_fwnode(gc->parent);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int gpiochip_get_ngpios(struct gpio_chip *gc, struct device *dev)
|
||||
{
|
||||
u32 ngpios = gc->ngpio;
|
||||
@@ -942,14 +957,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
|
||||
gc->gpiodev = gdev;
|
||||
gpiochip_set_data(gc, data);
|
||||
|
||||
/*
|
||||
* If the calling driver did not initialize firmware node,
|
||||
* do it here using the parent device, if any.
|
||||
*/
|
||||
if (gc->fwnode)
|
||||
device_set_node(&gdev->dev, gc->fwnode);
|
||||
else if (gc->parent)
|
||||
device_set_node(&gdev->dev, dev_fwnode(gc->parent));
|
||||
device_set_node(&gdev->dev, gpiochip_choose_fwnode(gc));
|
||||
|
||||
gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
|
||||
if (gdev->id < 0) {
|
||||
|
||||
Reference in New Issue
Block a user