diff options
| author | Haojian Zhuang <haojian.zhuang@linaro.org> | 2013-02-17 19:42:47 +0800 | 
|---|---|---|
| committer | Linus Walleij <linus.walleij@linaro.org> | 2013-03-07 05:27:29 +0100 | 
| commit | 86853c83e33738397564e9377ceeff94d4bc041c (patch) | |
| tree | 94b4df911227c48b62ace647d0989a2b4da0d019 | |
| parent | e3929714942b242ecb55657e70d51e0eb4c77726 (diff) | |
| download | olio-linux-3.10-86853c83e33738397564e9377ceeff94d4bc041c.tar.xz olio-linux-3.10-86853c83e33738397564e9377ceeff94d4bc041c.zip  | |
gpio: add gpio offset in gpio range cells property
Add gpio offset into "gpio-range-cells" property. It's used to support
sparse pinctrl range in gpio chip.
Signed-off-by: Haojian Zhuang <haojian.zhuang@linaro.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
| -rw-r--r-- | Documentation/devicetree/bindings/gpio/gpio.txt | 6 | ||||
| -rw-r--r-- | arch/arm/boot/dts/spear1310.dtsi | 4 | ||||
| -rw-r--r-- | arch/arm/boot/dts/spear1340.dtsi | 4 | ||||
| -rw-r--r-- | arch/arm/boot/dts/spear310.dtsi | 4 | ||||
| -rw-r--r-- | arch/arm/boot/dts/spear320.dtsi | 4 | ||||
| -rw-r--r-- | drivers/gpio/gpiolib-of.c | 15 | 
6 files changed, 13 insertions, 24 deletions
diff --git a/Documentation/devicetree/bindings/gpio/gpio.txt b/Documentation/devicetree/bindings/gpio/gpio.txt index a33628759d3..d933af37069 100644 --- a/Documentation/devicetree/bindings/gpio/gpio.txt +++ b/Documentation/devicetree/bindings/gpio/gpio.txt @@ -98,7 +98,7 @@ announce the pinrange to the pin ctrl subsystem. For example,  		compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";  		reg = <0x1460 0x18>;  		gpio-controller; -		gpio-ranges = <&pinctrl1 20 10>, <&pinctrl2 50 20>; +		gpio-ranges = <&pinctrl1 0 20 10>, <&pinctrl2 10 50 20>;      } @@ -107,8 +107,8 @@ where,     Next values specify the base pin and number of pins for the range     handled by 'qe_pio_e' gpio. In the given example from base pin 20 to -   pin 29 under pinctrl1 and pin 50 to pin 69 under pinctrl2 is handled -   by this gpio controller. +   pin 29 under pinctrl1 with gpio offset 0 and pin 50 to pin 69 under +   pinctrl2 with gpio offset 10 is handled by this gpio controller.  The pinctrl node must have "#gpio-range-cells" property to show number of  arguments to pass with phandle from gpio controllers node. diff --git a/arch/arm/boot/dts/spear1310.dtsi b/arch/arm/boot/dts/spear1310.dtsi index 1513c1927cc..122ae94076c 100644 --- a/arch/arm/boot/dts/spear1310.dtsi +++ b/arch/arm/boot/dts/spear1310.dtsi @@ -89,7 +89,7 @@  		pinmux: pinmux@e0700000 {  			compatible = "st,spear1310-pinmux";  			reg = <0xe0700000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		apb { @@ -212,7 +212,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 246>; +				gpio-ranges = <&pinmux 0 0 246>;  				status = "disabled";  				st-plgpio,ngpio = <246>; diff --git a/arch/arm/boot/dts/spear1340.dtsi b/arch/arm/boot/dts/spear1340.dtsi index 34da11aa679..c511c4772ef 100644 --- a/arch/arm/boot/dts/spear1340.dtsi +++ b/arch/arm/boot/dts/spear1340.dtsi @@ -63,7 +63,7 @@  		pinmux: pinmux@e0700000 {  			compatible = "st,spear1340-pinmux";  			reg = <0xe0700000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		pwm: pwm@e0180000 { @@ -127,7 +127,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 252>; +				gpio-ranges = <&pinmux 0 0 252>;  				status = "disabled";  				st-plgpio,ngpio = <250>; diff --git a/arch/arm/boot/dts/spear310.dtsi b/arch/arm/boot/dts/spear310.dtsi index ab45b8c8198..95372080eea 100644 --- a/arch/arm/boot/dts/spear310.dtsi +++ b/arch/arm/boot/dts/spear310.dtsi @@ -25,7 +25,7 @@  		pinmux: pinmux@b4000000 {  			compatible = "st,spear310-pinmux";  			reg = <0xb4000000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		fsmc: flash@44000000 { @@ -102,7 +102,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 102>; +				gpio-ranges = <&pinmux 0 0 102>;  				status = "disabled";  				st-plgpio,ngpio = <102>; diff --git a/arch/arm/boot/dts/spear320.dtsi b/arch/arm/boot/dts/spear320.dtsi index caa5520b1fd..ffea342aeec 100644 --- a/arch/arm/boot/dts/spear320.dtsi +++ b/arch/arm/boot/dts/spear320.dtsi @@ -24,7 +24,7 @@  		pinmux: pinmux@b3000000 {  			compatible = "st,spear320-pinmux";  			reg = <0xb3000000 0x1000>; -			#gpio-range-cells = <2>; +			#gpio-range-cells = <3>;  		};  		clcd@90000000 { @@ -130,7 +130,7 @@  				interrupt-controller;  				gpio-controller;  				#gpio-cells = <2>; -				gpio-ranges = <&pinmux 0 102>; +				gpio-ranges = <&pinmux 0 0 102>;  				status = "disabled";  				st-plgpio,ngpio = <102>; diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c index a71a54a3e3f..892040ad009 100644 --- a/drivers/gpio/gpiolib-of.c +++ b/drivers/gpio/gpiolib-of.c @@ -203,22 +203,11 @@ static void of_gpiochip_add_pin_range(struct gpio_chip *chip)  		if (!pctldev)  			break; -		/* -		 * This assumes that the n GPIO pins are consecutive in the -		 * GPIO number space, and that the pins are also consecutive -		 * in their local number space. Currently it is not possible -		 * to add different ranges for one and the same GPIO chip, -		 * as the code assumes that we have one consecutive range -		 * on both, mapping 1-to-1. -		 * -		 * TODO: make the OF bindings handle multiple sparse ranges -		 * on the same GPIO chip. -		 */  		ret = gpiochip_add_pin_range(chip,  					     pinctrl_dev_get_devname(pctldev), -					     0, /* offset in gpiochip */  					     pinspec.args[0], -					     pinspec.args[1]); +					     pinspec.args[1], +					     pinspec.args[2]);  		if (ret)  			break;  |