}
 
 /* Caller holds gpiod-data mutex. */
-static int gpio_sysfs_request_irq(struct device *dev, unsigned char flags)
+static int gpio_sysfs_request_irq(struct gpiod_data *data, unsigned char flags)
 {
-       struct gpiod_data *data = dev_get_drvdata(dev);
        struct gpio_desc *desc = data->desc;
        unsigned long irq_flags;
        int ret;
  * Caller holds gpiod-data mutex (unless called after class-device
  * deregistration).
  */
-static void gpio_sysfs_free_irq(struct device *dev)
+static void gpio_sysfs_free_irq(struct gpiod_data *data)
 {
-       struct gpiod_data *data = dev_get_drvdata(dev);
        struct gpio_desc *desc = data->desc;
 
        CLASS(gpio_chip_guard, guard)(desc);
                return size;
 
        if (data->irq_flags)
-               gpio_sysfs_free_irq(dev);
+               gpio_sysfs_free_irq(data);
 
        if (!flags)
                return size;
 
-       status = gpio_sysfs_request_irq(dev, flags);
+       status = gpio_sysfs_request_irq(data, flags);
        if (status)
                return status;
 
 static DEVICE_ATTR_RW(edge);
 
 /* Caller holds gpiod-data mutex. */
-static int gpio_sysfs_set_active_low(struct device *dev, int value)
+static int gpio_sysfs_set_active_low(struct gpiod_data *data, int value)
 {
-       struct gpiod_data *data = dev_get_drvdata(dev);
        unsigned int flags = data->irq_flags;
        struct gpio_desc *desc = data->desc;
        int status = 0;
        /* reconfigure poll(2) support if enabled on one edge only */
        if (flags == GPIO_IRQF_TRIGGER_FALLING ||
            flags == GPIO_IRQF_TRIGGER_RISING) {
-               gpio_sysfs_free_irq(dev);
-               status = gpio_sysfs_request_irq(dev, flags);
+               gpio_sysfs_free_irq(data);
+               status = gpio_sysfs_request_irq(data, flags);
        }
 
        gpiod_line_state_notify(desc, GPIO_V2_LINE_CHANGED_CONFIG);
 
        guard(mutex)(&data->mutex);
 
-       return gpio_sysfs_set_active_low(dev, value) ?: size;
+       return gpio_sysfs_set_active_low(data, value) ?: size;
 }
 static DEVICE_ATTR_RW(active_low);
 
                 * edge_store.
                 */
                if (data->irq_flags)
-                       gpio_sysfs_free_irq(dev);
+                       gpio_sysfs_free_irq(data);
        }
 
        put_device(dev);