From 825f13453e93966869523de3837c96b2f15cbacf Mon Sep 17 00:00:00 2001 From: kaloz Date: Mon, 22 Nov 2010 13:43:32 +0000 Subject: remove 2.6.25 support git-svn-id: svn://svn.openwrt.org/openwrt/trunk@24089 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...rt_gpiolib_dynamic_gpio_number_allocation.patch | 116 --------------------- 1 file changed, 116 deletions(-) delete mode 100644 target/linux/generic/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch (limited to 'target/linux/generic/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch') diff --git a/target/linux/generic/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch b/target/linux/generic/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch deleted file mode 100644 index 0960f6764..000000000 --- a/target/linux/generic/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch +++ /dev/null @@ -1,116 +0,0 @@ -From: Anton Vorontsov -Date: Mon, 28 Apr 2008 09:14:46 +0000 (-0700) -Subject: gpiolib: dynamic gpio number allocation -X-Git-Tag: v2.6.26-rc1~848 -X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=8d0aab2f16c4fa170f32e7a74a52cd0122bbafef - -gpiolib: dynamic gpio number allocation - -If gpio_chip->base is negative during registration, gpiolib performs dynamic -base allocation. This is useful for devices that aren't always present, such -as GPIOs on hotplugged devices rather than mainboards. (This behavior was -previously specified but not implemented.) - -To avoid using any numbers that may have been explicitly assigned but not yet -registered, this dynamic allocation assigns GPIO numbers from the biggest -number on down, instead of from the smallest on up. - -Signed-off-by: Anton Vorontsov -Signed-off-by: David Brownell -Signed-off-by: Andrew Morton -Signed-off-by: Linus Torvalds ---- - ---- a/drivers/gpio/gpiolib.c -+++ b/drivers/gpio/gpiolib.c -@@ -80,6 +80,33 @@ static inline struct gpio_chip *gpio_to_ - return gpio_desc[gpio].chip; - } - -+/* dynamic allocation of GPIOs, e.g. on a hotplugged device */ -+static int gpiochip_find_base(int ngpio) -+{ -+ int i; -+ int spare = 0; -+ int base = -ENOSPC; -+ -+ for (i = ARCH_NR_GPIOS - 1; i >= 0 ; i--) { -+ struct gpio_chip *chip = gpio_desc[i].chip; -+ -+ if (!chip) { -+ spare++; -+ if (spare == ngpio) { -+ base = i; -+ break; -+ } -+ } else { -+ spare = 0; -+ i -= chip->ngpio - 1; -+ } -+ } -+ -+ if (gpio_is_valid(base)) -+ pr_debug("%s: found new base at %d\n", __func__, base); -+ return base; -+} -+ - /** - * gpiochip_add() - register a gpio_chip - * @chip: the chip to register, with chip->base initialized -@@ -88,38 +115,49 @@ static inline struct gpio_chip *gpio_to_ - * Returns a negative errno if the chip can't be registered, such as - * because the chip->base is invalid or already associated with a - * different chip. Otherwise it returns zero as a success code. -+ * -+ * If chip->base is negative, this requests dynamic assignment of -+ * a range of valid GPIOs. - */ - int gpiochip_add(struct gpio_chip *chip) - { - unsigned long flags; - int status = 0; - unsigned id; -+ int base = chip->base; - -- /* NOTE chip->base negative is reserved to mean a request for -- * dynamic allocation. We don't currently support that. -- */ -- -- if (chip->base < 0 || !gpio_is_valid(chip->base + chip->ngpio)) { -+ if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio)) -+ && base >= 0) { - status = -EINVAL; - goto fail; - } - - spin_lock_irqsave(&gpio_lock, flags); - -+ if (base < 0) { -+ base = gpiochip_find_base(chip->ngpio); -+ if (base < 0) { -+ status = base; -+ goto fail_unlock; -+ } -+ chip->base = base; -+ } -+ - /* these GPIO numbers must not be managed by another gpio_chip */ -- for (id = chip->base; id < chip->base + chip->ngpio; id++) { -+ for (id = base; id < base + chip->ngpio; id++) { - if (gpio_desc[id].chip != NULL) { - status = -EBUSY; - break; - } - } - if (status == 0) { -- for (id = chip->base; id < chip->base + chip->ngpio; id++) { -+ for (id = base; id < base + chip->ngpio; id++) { - gpio_desc[id].chip = chip; - gpio_desc[id].flags = 0; - } - } - -+fail_unlock: - spin_unlock_irqrestore(&gpio_lock, flags); - fail: - /* failures here can mean systems won't boot... */ -- cgit v1.2.3