mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-25 00:11:13 +00:00
51 lines
1.6 KiB
Diff
51 lines
1.6 KiB
Diff
|
From 53b9d9bbb57e292c6b332a2fb9899003586e17ca Mon Sep 17 00:00:00 2001
|
||
|
From: Phil Elwell <phil@raspberrypi.com>
|
||
|
Date: Thu, 2 May 2024 16:17:02 +0100
|
||
|
Subject: [PATCH 1211/1215] gpiolib: Override gpiochip numbers with DT aliases
|
||
|
|
||
|
In the same way that other subsystems support the setting of device
|
||
|
id numbers from Device Tree aliases, allow gpiochip numbers to be
|
||
|
derived from "gpiochip<n>" aliases.
|
||
|
|
||
|
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||
|
---
|
||
|
drivers/gpio/gpiolib.c | 13 ++++++++++++-
|
||
|
1 file changed, 12 insertions(+), 1 deletion(-)
|
||
|
|
||
|
--- a/drivers/gpio/gpiolib.c
|
||
|
+++ b/drivers/gpio/gpiolib.c
|
||
|
@@ -110,6 +110,7 @@ static int gpiochip_irqchip_init_valid_m
|
||
|
static void gpiochip_irqchip_free_valid_mask(struct gpio_chip *gc);
|
||
|
|
||
|
static bool gpiolib_initialized;
|
||
|
+static int first_dynamic_gpiochip_num = -1;
|
||
|
|
||
|
static inline void desc_set_label(struct gpio_desc *d, const char *label)
|
||
|
{
|
||
|
@@ -745,6 +746,7 @@ int gpiochip_add_data_with_key(struct gp
|
||
|
unsigned int i;
|
||
|
int base = 0;
|
||
|
int ret = 0;
|
||
|
+ int id;
|
||
|
|
||
|
/*
|
||
|
* First: allocate and populate the internal stat container, and
|
||
|
@@ -769,7 +771,16 @@ int gpiochip_add_data_with_key(struct gp
|
||
|
else if (gc->parent)
|
||
|
device_set_node(&gdev->dev, dev_fwnode(gc->parent));
|
||
|
|
||
|
- gdev->id = ida_alloc(&gpio_ida, GFP_KERNEL);
|
||
|
+ if (first_dynamic_gpiochip_num < 0) {
|
||
|
+ id = of_alias_get_highest_id("gpiochip");
|
||
|
+ first_dynamic_gpiochip_num = (id >= 0) ? (id + 1) : 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ id = of_alias_get_id(gdev->dev.of_node, "gpiochip");
|
||
|
+ if (id < 0)
|
||
|
+ id = first_dynamic_gpiochip_num;
|
||
|
+
|
||
|
+ gdev->id = ida_alloc_range(&gpio_ida, id, ~0, GFP_KERNEL);
|
||
|
if (gdev->id < 0) {
|
||
|
ret = gdev->id;
|
||
|
goto err_free_gdev;
|