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>
This commit is contained in:
parent
e392971494
commit
86853c83e3
|
@ -98,7 +98,7 @@ announce the pinrange to the pin ctrl subsystem. For example,
|
||||||
compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";
|
compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";
|
||||||
reg = <0x1460 0x18>;
|
reg = <0x1460 0x18>;
|
||||||
gpio-controller;
|
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
|
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
|
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
|
pin 29 under pinctrl1 with gpio offset 0 and pin 50 to pin 69 under
|
||||||
by this gpio controller.
|
pinctrl2 with gpio offset 10 is handled by this gpio controller.
|
||||||
|
|
||||||
The pinctrl node must have "#gpio-range-cells" property to show number of
|
The pinctrl node must have "#gpio-range-cells" property to show number of
|
||||||
arguments to pass with phandle from gpio controllers node.
|
arguments to pass with phandle from gpio controllers node.
|
||||||
|
|
|
@ -89,7 +89,7 @@
|
||||||
pinmux: pinmux@e0700000 {
|
pinmux: pinmux@e0700000 {
|
||||||
compatible = "st,spear1310-pinmux";
|
compatible = "st,spear1310-pinmux";
|
||||||
reg = <0xe0700000 0x1000>;
|
reg = <0xe0700000 0x1000>;
|
||||||
#gpio-range-cells = <2>;
|
#gpio-range-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
apb {
|
apb {
|
||||||
|
@ -212,7 +212,7 @@
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-ranges = <&pinmux 0 246>;
|
gpio-ranges = <&pinmux 0 0 246>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
st-plgpio,ngpio = <246>;
|
st-plgpio,ngpio = <246>;
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
pinmux: pinmux@e0700000 {
|
pinmux: pinmux@e0700000 {
|
||||||
compatible = "st,spear1340-pinmux";
|
compatible = "st,spear1340-pinmux";
|
||||||
reg = <0xe0700000 0x1000>;
|
reg = <0xe0700000 0x1000>;
|
||||||
#gpio-range-cells = <2>;
|
#gpio-range-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
pwm: pwm@e0180000 {
|
pwm: pwm@e0180000 {
|
||||||
|
@ -127,7 +127,7 @@
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-ranges = <&pinmux 0 252>;
|
gpio-ranges = <&pinmux 0 0 252>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
st-plgpio,ngpio = <250>;
|
st-plgpio,ngpio = <250>;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
pinmux: pinmux@b4000000 {
|
pinmux: pinmux@b4000000 {
|
||||||
compatible = "st,spear310-pinmux";
|
compatible = "st,spear310-pinmux";
|
||||||
reg = <0xb4000000 0x1000>;
|
reg = <0xb4000000 0x1000>;
|
||||||
#gpio-range-cells = <2>;
|
#gpio-range-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
fsmc: flash@44000000 {
|
fsmc: flash@44000000 {
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-ranges = <&pinmux 0 102>;
|
gpio-ranges = <&pinmux 0 0 102>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
st-plgpio,ngpio = <102>;
|
st-plgpio,ngpio = <102>;
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
pinmux: pinmux@b3000000 {
|
pinmux: pinmux@b3000000 {
|
||||||
compatible = "st,spear320-pinmux";
|
compatible = "st,spear320-pinmux";
|
||||||
reg = <0xb3000000 0x1000>;
|
reg = <0xb3000000 0x1000>;
|
||||||
#gpio-range-cells = <2>;
|
#gpio-range-cells = <3>;
|
||||||
};
|
};
|
||||||
|
|
||||||
clcd@90000000 {
|
clcd@90000000 {
|
||||||
|
@ -130,7 +130,7 @@
|
||||||
interrupt-controller;
|
interrupt-controller;
|
||||||
gpio-controller;
|
gpio-controller;
|
||||||
#gpio-cells = <2>;
|
#gpio-cells = <2>;
|
||||||
gpio-ranges = <&pinmux 0 102>;
|
gpio-ranges = <&pinmux 0 0 102>;
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|
||||||
st-plgpio,ngpio = <102>;
|
st-plgpio,ngpio = <102>;
|
||||||
|
|
|
@ -203,22 +203,11 @@ static void of_gpiochip_add_pin_range(struct gpio_chip *chip)
|
||||||
if (!pctldev)
|
if (!pctldev)
|
||||||
break;
|
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,
|
ret = gpiochip_add_pin_range(chip,
|
||||||
pinctrl_dev_get_devname(pctldev),
|
pinctrl_dev_get_devname(pctldev),
|
||||||
0, /* offset in gpiochip */
|
|
||||||
pinspec.args[0],
|
pinspec.args[0],
|
||||||
pinspec.args[1]);
|
pinspec.args[1],
|
||||||
|
pinspec.args[2]);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue