Skip to content

Commit

Permalink
gpiolib: Get rid of not used of_node member
Browse files Browse the repository at this point in the history
All new drivers should use fwnode and / or parent to provide the
necessary information to the GPIO library.

Cc: Thierry Reding <treding@nvidia.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
  • Loading branch information
andy-shev authored and Bartosz Golaszewski committed Jan 30, 2023
1 parent dc0989e commit 70d0fc4
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 54 deletions.
10 changes: 0 additions & 10 deletions drivers/gpio/gpiolib-acpi.c
Expand Up @@ -1388,16 +1388,6 @@ void acpi_gpiochip_remove(struct gpio_chip *chip)
kfree(acpi_gpio);
}

void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev)
{
/* Set default fwnode to parent's one if present */
if (gc->parent)
ACPI_COMPANION_SET(&gdev->dev, ACPI_COMPANION(gc->parent));

if (gc->fwnode)
device_set_node(&gdev->dev, gc->fwnode);
}

static int acpi_gpio_package_count(const union acpi_object *obj)
{
const union acpi_object *element = obj->package.elements;
Expand Down
4 changes: 0 additions & 4 deletions drivers/gpio/gpiolib-acpi.h
Expand Up @@ -26,8 +26,6 @@ struct gpio_device;
void acpi_gpiochip_add(struct gpio_chip *chip);
void acpi_gpiochip_remove(struct gpio_chip *chip);

void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev);

void acpi_gpiochip_request_interrupts(struct gpio_chip *chip);
void acpi_gpiochip_free_interrupts(struct gpio_chip *chip);

Expand All @@ -42,8 +40,6 @@ int acpi_gpio_count(struct device *dev, const char *con_id);
static inline void acpi_gpiochip_add(struct gpio_chip *chip) { }
static inline void acpi_gpiochip_remove(struct gpio_chip *chip) { }

static inline void acpi_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev) { }

static inline void
acpi_gpiochip_request_interrupts(struct gpio_chip *chip) { }

Expand Down
25 changes: 5 additions & 20 deletions drivers/gpio/gpiolib-of.c
Expand Up @@ -651,7 +651,7 @@ static struct gpio_desc *of_parse_own_gpio(struct device_node *np,
u32 tmp;
int ret;

chip_np = chip->of_node;
chip_np = dev_of_node(&chip->gpiodev->dev);
if (!chip_np)
return ERR_PTR(-EINVAL);

Expand Down Expand Up @@ -743,7 +743,7 @@ static int of_gpiochip_scan_gpios(struct gpio_chip *chip)
struct device_node *np;
int ret;

for_each_available_child_of_node(chip->of_node, np) {
for_each_available_child_of_node(dev_of_node(&chip->gpiodev->dev), np) {
if (!of_property_read_bool(np, "gpio-hog"))
continue;

Expand Down Expand Up @@ -953,14 +953,15 @@ EXPORT_SYMBOL_GPL(of_mm_gpiochip_remove);
#ifdef CONFIG_PINCTRL
static int of_gpiochip_add_pin_range(struct gpio_chip *chip)
{
struct device_node *np = chip->of_node;
struct of_phandle_args pinspec;
struct pinctrl_dev *pctldev;
struct device_node *np;
int index = 0, ret;
const char *name;
static const char group_names_propname[] = "gpio-ranges-group-names";
struct property *group_names;

np = dev_of_node(&chip->gpiodev->dev);
if (!np)
return 0;

Expand Down Expand Up @@ -1046,7 +1047,7 @@ int of_gpiochip_add(struct gpio_chip *chip)
struct device_node *np;
int ret;

np = to_of_node(dev_fwnode(&chip->gpiodev->dev));
np = dev_of_node(&chip->gpiodev->dev);
if (!np)
return 0;

Expand Down Expand Up @@ -1075,19 +1076,3 @@ void of_gpiochip_remove(struct gpio_chip *chip)
{
fwnode_handle_put(chip->fwnode);
}

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 (gc->fwnode)
gc->of_node = to_of_node(gc->fwnode);

/* If the gpiochip has an assigned OF node this takes precedence */
if (gc->of_node)
gdev->dev.of_node = gc->of_node;
else
gc->of_node = gdev->dev.of_node;
}
5 changes: 0 additions & 5 deletions drivers/gpio/gpiolib-of.h
Expand Up @@ -23,7 +23,6 @@ struct gpio_desc *of_find_gpio(struct device_node *np,
int of_gpiochip_add(struct gpio_chip *gc);
void of_gpiochip_remove(struct gpio_chip *gc);
int of_gpio_get_count(struct device *dev, const char *con_id);
void of_gpio_dev_init(struct gpio_chip *gc, struct gpio_device *gdev);
#else
static inline struct gpio_desc *of_find_gpio(struct device_node *np,
const char *con_id,
Expand All @@ -38,10 +37,6 @@ static inline int of_gpio_get_count(struct device *dev, const char *con_id)
{
return 0;
}
static inline void of_gpio_dev_init(struct gpio_chip *gc,
struct gpio_device *gdev)
{
}
#endif /* CONFIG_OF_GPIO */

extern struct notifier_block gpio_of_notifier;
Expand Down
11 changes: 3 additions & 8 deletions drivers/gpio/gpiolib.c
Expand Up @@ -659,10 +659,12 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
int base = 0;
int ret = 0;

/* If the calling driver did not initialize firmware node, do it here */
if (gc->fwnode)
fwnode = gc->fwnode;
else if (gc->parent)
fwnode = dev_fwnode(gc->parent);
gc->fwnode = fwnode;

/*
* First: allocate and populate the internal stat container, and
Expand All @@ -676,14 +678,7 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
gdev->chip = gc;
gc->gpiodev = gdev;

of_gpio_dev_init(gc, gdev);
acpi_gpio_dev_init(gc, gdev);

/*
* Assign fwnode depending on the result of the previous calls,
* if none of them succeed, assign it to the parent's one.
*/
gc->fwnode = gdev->dev.fwnode = dev_fwnode(&gdev->dev) ?: fwnode;
device_set_node(&gdev->dev, gc->fwnode);

gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
if (gdev->id < 0) {
Expand Down
7 changes: 0 additions & 7 deletions include/linux/gpio/driver.h
Expand Up @@ -503,13 +503,6 @@ struct gpio_chip {
* the device tree automatically may have an OF translation
*/

/**
* @of_node:
*
* Pointer to a device tree node representing this GPIO controller.
*/
struct device_node *of_node;

/**
* @of_gpio_n_cells:
*
Expand Down

0 comments on commit 70d0fc4

Please sign in to comment.