Skip to content

Commit cbec250

Browse files
Merge pull request #34 from OnionIoT/bugfix/fix-gpio-numbering-30
Fix gpio numbering
2 parents 8c9cd9d + c03c305 commit cbec250

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
--- /dev/null
2+
+++ b/target/linux/ramips/patches-5.15/399-mt7621-re-add-gpio-base-of-property.patch
3+
@@ -0,0 +1,51 @@
4+
+diff --git a/drivers/gpio/gpio-mt7621.c b/drivers/gpio/gpio-mt7621.c
5+
+index c3658a597a80..de33cc591f71 100644
6+
+--- a/drivers/gpio/gpio-mt7621.c
7+
++++ b/drivers/gpio/gpio-mt7621.c
8+
+@@ -206,7 +206,7 @@ mediatek_gpio_xlate(struct gpio_chip *chip,
9+
+
10+
+ static int
11+
+ mediatek_gpio_bank_probe(struct device *dev,
12+
+- struct device_node *node, int bank)
13+
++ struct device_node *node, int bank, int base)
14+
+ {
15+
+ struct mtk *mtk = dev_get_drvdata(dev);
16+
+ struct mtk_gc *rg;
17+
+@@ -232,6 +232,7 @@ mediatek_gpio_bank_probe(struct device *dev,
18+
+ return ret;
19+
+ }
20+
+
21+
++ rg->chip.base = base;
22+
+ rg->chip.of_gpio_n_cells = 2;
23+
+ rg->chip.of_xlate = mediatek_gpio_xlate;
24+
+ rg->chip.label = devm_kasprintf(dev, GFP_KERNEL, "%s-bank%d",
25+
+@@ -284,7 +285,7 @@ mediatek_gpio_bank_probe(struct device *dev,
26+
+ /* set polarity to low for all gpios */
27+
+ mtk_gpio_w32(rg, GPIO_REG_POL, 0);
28+
+
29+
+- dev_info(dev, "registering %d gpios\n", rg->chip.ngpio);
30+
++ dev_info(dev, "registering %d gpios in bank %d with base %d%s\n", rg->chip.ngpio, bank, base, base<0 ? " (automatic)" : "");
31+
+
32+
+ return 0;
33+
+ }
34+
+@@ -296,6 +297,7 @@ mediatek_gpio_probe(struct platform_device *pdev)
35+
+ struct device_node *np = dev->of_node;
36+
+ struct mtk *mtk;
37+
+ int i;
38+
++ u32 base;
39+
+ int ret;
40+
+
41+
+ mtk = devm_kzalloc(dev, sizeof(*mtk), GFP_KERNEL);
42+
+@@ -310,8 +312,11 @@ mediatek_gpio_probe(struct platform_device *pdev)
43+
+ mtk->dev = dev;
44+
+ platform_set_drvdata(pdev, mtk);
45+
+
46+
++ base = (u32)(-1); /* automatic by default */
47+
++ of_property_read_u32(np, "gpio-base", &base); /* but support setting base in DT */
48+
++
49+
+ for (i = 0; i < MTK_BANK_CNT; i++) {
50+
+- ret = mediatek_gpio_bank_probe(dev, np, i);
51+
++ ret = mediatek_gpio_bank_probe(dev, np, i, ((int)base)<0 ? -1 : base+32*i);
52+
+ if (ret)
53+
+ return ret;
54+
+ }
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--- a/target/linux/ramips/dts/mt7628an_onion_omega2.dtsi
2+
+++ b/target/linux/ramips/dts/mt7628an_onion_omega2.dtsi
3+
@@ -37,6 +37,12 @@
4+
};
5+
};
6+
7+
+&gpio {
8+
+ /* prevent auto-numbering GPIOs, retain traditional 0-based GPIOs */
9+
+ /* (needs patch in gpio-mt7621.c to re-introduce the gpio-base property) */
10+
+ gpio-base = <0>;
11+
+};
12+
+
13+
&state_default {
14+
gpio {
15+
groups = "gpio";

0 commit comments

Comments
 (0)