Commit 397a46c9 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

gpio: remove legacy GPIO line value setter callbacks

With no more users of the legacy GPIO line value setters - .set() and
.set_multiple() - we can now remove them from the kernel.

Link: https://lore.kernel.org/r/20250725074651.14002-1-brgl@bgdev.pl


Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
parent 0074281b
Loading
Loading
Loading
Loading
+6 −21
Original line number Diff line number Diff line
@@ -1037,11 +1037,6 @@ int gpiochip_add_data_with_key(struct gpio_chip *gc, void *data,
	int base = 0;
	int ret;

	/* Only allow one set() and one set_multiple(). */
	if ((gc->set && gc->set_rv) ||
	    (gc->set_multiple && gc->set_multiple_rv))
		return -EINVAL;

	/*
	 * First: allocate and populate the internal stat container, and
	 * set up the struct device.
@@ -2891,10 +2886,9 @@ static int gpiochip_set(struct gpio_chip *gc, unsigned int offset, int value)

	lockdep_assert_held(&gc->gpiodev->srcu);

	if (WARN_ON(unlikely(!gc->set && !gc->set_rv)))
	if (WARN_ON(unlikely(!gc->set_rv)))
		return -EOPNOTSUPP;

	if (gc->set_rv) {
	ret = gc->set_rv(gc, offset, value);
	if (ret > 0)
		ret = -EBADE;
@@ -2902,10 +2896,6 @@ static int gpiochip_set(struct gpio_chip *gc, unsigned int offset, int value)
	return ret;
}

	gc->set(gc, offset, value);
	return 0;
}

static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
{
	int val = !!value, ret = 0, dir;
@@ -2919,7 +2909,7 @@ static int gpiod_direction_output_raw_commit(struct gpio_desc *desc, int value)
	 * output-only, but if there is then not even a .set() operation it
	 * is pretty tricky to drive the output line.
	 */
	if (!guard.gc->set && !guard.gc->set_rv && !guard.gc->direction_output) {
	if (!guard.gc->set_rv && !guard.gc->direction_output) {
		gpiod_warn(desc,
			   "%s: missing set() and direction_output() operations\n",
			   __func__);
@@ -3673,11 +3663,6 @@ static int gpiochip_set_multiple(struct gpio_chip *gc,
		return ret;
	}

	if (gc->set_multiple) {
		gc->set_multiple(gc, mask, bits);
		return 0;
	}

	/* set outputs if the corresponding mask bit is set */
	for_each_set_bit(i, mask, gc->ngpio) {
		ret = gpiochip_set(gc, i, test_bit(i, bits));
+0 −7
Original line number Diff line number Diff line
@@ -347,8 +347,6 @@ struct gpio_irq_chip {
 * @get: returns value for signal "offset", 0=low, 1=high, or negative error
 * @get_multiple: reads values for multiple signals defined by "mask" and
 *	stores them in "bits", returns 0 on success or negative error
 * @set: **DEPRECATED** - please use set_rv() instead
 * @set_multiple: **DEPRECATED** - please use set_multiple_rv() instead
 * @set_rv: assigns output value for signal "offset", returns 0 on success or
 *          negative error value
 * @set_multiple_rv: assigns output values for multiple signals defined by
@@ -445,11 +443,6 @@ struct gpio_chip {
	int			(*get_multiple)(struct gpio_chip *gc,
						unsigned long *mask,
						unsigned long *bits);
	void			(*set)(struct gpio_chip *gc,
						unsigned int offset, int value);
	void			(*set_multiple)(struct gpio_chip *gc,
						unsigned long *mask,
						unsigned long *bits);
	int			(*set_rv)(struct gpio_chip *gc,
					  unsigned int offset,
					  int value);