[PATCH 6/6] gpio: sim: allow to define the active-low setting of a simulated hog

From: Bartosz Golaszewski

Date: Thu Mar 05 2026 - 04:55:19 EST


Add a new configfs attribute to the hog group allowing to configure the
active-low lookup flag for hogged lines.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxxxxxxxx>
---
drivers/gpio/gpio-sim.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c
index 51bcbdd91b4b027b7a340971a11cce5280ca1295..f32674230237eb08bbf8dd1337a79b5d0aa13259 100644
--- a/drivers/gpio/gpio-sim.c
+++ b/drivers/gpio/gpio-sim.c
@@ -654,6 +654,7 @@ struct gpio_sim_hog {

char *name;
int dir;
+ bool active_low;
};

static struct gpio_sim_hog *to_gpio_sim_hog(struct config_item *item)
@@ -836,7 +837,7 @@ static int gpio_sim_bank_add_hogs(struct gpio_sim_bank *bank)
hog = line->hog;

gpios[0] = line->offset;
- gpios[1] = 0;
+ gpios[1] = hog->active_low ? 1 : 0;

memset(properties, 0, sizeof(properties));

@@ -1315,9 +1316,46 @@ gpio_sim_hog_config_direction_store(struct config_item *item,

CONFIGFS_ATTR(gpio_sim_hog_config_, direction);

+static ssize_t gpio_sim_hog_config_active_low_show(struct config_item *item,
+ char *page)
+{
+ struct gpio_sim_hog *hog = to_gpio_sim_hog(item);
+ struct gpio_sim_device *dev = gpio_sim_hog_get_device(hog);
+
+ guard(mutex)(&dev->lock);
+
+ return sprintf(page, "%c\n", hog->active_low ? '1' : '0');
+}
+
+static ssize_t
+gpio_sim_hog_config_active_low_store(struct config_item *item,
+ const char *page, size_t count)
+{
+ struct gpio_sim_hog *hog = to_gpio_sim_hog(item);
+ struct gpio_sim_device *dev = gpio_sim_hog_get_device(hog);
+ bool active_low;
+ int ret;
+
+ guard(mutex)(&dev->lock);
+
+ if (gpio_sim_device_is_live(dev))
+ return -EBUSY;
+
+ ret = kstrtobool(page, &active_low);
+ if (ret)
+ return ret;
+
+ hog->active_low = active_low;
+
+ return count;
+}
+
+CONFIGFS_ATTR(gpio_sim_hog_config_, active_low);
+
static struct configfs_attribute *gpio_sim_hog_config_attrs[] = {
&gpio_sim_hog_config_attr_name,
&gpio_sim_hog_config_attr_direction,
+ &gpio_sim_hog_config_attr_active_low,
NULL
};


--
2.47.3