mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
gpiolib: Move of_node operations to gpiolib-of and correct fwnode use
The initial value of the OF node based on presence of parent, but at the same time this operation somehow appeared separately from others that handle the OF case. On the other hand there is no need to assign dev->fwnode in the OF case if code properly retrieves fwnode, i.e. via dev_fwnode() helper. Amend gpiolib.c and gpiolib-of.c code in order to group OF operations. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
This commit is contained in:
parent
944f4b0af9
commit
1df62542e0
@ -1042,11 +1042,13 @@ void of_gpiochip_remove(struct gpio_chip *chip)
|
|||||||
|
|
||||||
void of_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev)
|
void of_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev)
|
||||||
{
|
{
|
||||||
|
/* Set default OF node to parent's one if present */
|
||||||
|
if (gc->parent)
|
||||||
|
gdev->dev.of_node = gc->parent->of_node;
|
||||||
|
|
||||||
/* If the gpiochip has an assigned OF node this takes precedence */
|
/* If the gpiochip has an assigned OF node this takes precedence */
|
||||||
if (gc->of_node)
|
if (gc->of_node)
|
||||||
gdev->dev.of_node = gc->of_node;
|
gdev->dev.of_node = gc->of_node;
|
||||||
else
|
else
|
||||||
gc->of_node = gdev->dev.of_node;
|
gc->of_node = gdev->dev.of_node;
|
||||||
if (gdev->dev.of_node)
|
|
||||||
gdev->dev.fwnode = of_fwnode_handle(gdev->dev.of_node);
|
|
||||||
}
|
}
|
||||||
|
@ -586,12 +586,9 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
|
|||||||
if (!gdev)
|
if (!gdev)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
gdev->dev.bus = &gpio_bus_type;
|
gdev->dev.bus = &gpio_bus_type;
|
||||||
|
gdev->dev.parent = gc->parent;
|
||||||
gdev->chip = gc;
|
gdev->chip = gc;
|
||||||
gc->gpiodev = gdev;
|
gc->gpiodev = gdev;
|
||||||
if (gc->parent) {
|
|
||||||
gdev->dev.parent = gc->parent;
|
|
||||||
gdev->dev.of_node = gc->parent->of_node;
|
|
||||||
}
|
|
||||||
|
|
||||||
of_gpio_dev_init(gc, gdev);
|
of_gpio_dev_init(gc, gdev);
|
||||||
|
|
||||||
@ -4218,11 +4215,13 @@ EXPORT_SYMBOL_GPL(gpiod_put_array);
|
|||||||
|
|
||||||
static int gpio_bus_match(struct device *dev, struct device_driver *drv)
|
static int gpio_bus_match(struct device *dev, struct device_driver *drv)
|
||||||
{
|
{
|
||||||
|
struct fwnode_handle *fwnode = dev_fwnode(dev);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Only match if the fwnode doesn't already have a proper struct device
|
* Only match if the fwnode doesn't already have a proper struct device
|
||||||
* created for it.
|
* created for it.
|
||||||
*/
|
*/
|
||||||
if (dev->fwnode && dev->fwnode->dev != dev)
|
if (fwnode && fwnode->dev != dev)
|
||||||
return 0;
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user