Skip to content

Instantly share code, notes, and snippets.

@plan44
Created November 11, 2022 20:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save plan44/2db24a1238cbc1447df9a962c35ddbc2 to your computer and use it in GitHub Desktop.
Save plan44/2db24a1238cbc1447df9a962c35ddbc2 to your computer and use it in GitHub Desktop.
Adds back gpio-base of/DT property in gpio-mt7621.c
--- /dev/null
+++ b/target/linux/ramips/patches-5.10/399-mt7621-re-add-gpio-base-of-property.patch
@@ -0,0 +1,49 @@
+--- a/drivers/gpio/gpio-mt7621.c
++++ b/drivers/gpio/gpio-mt7621.c
+@@ -208,7 +208,7 @@ mediatek_gpio_xlate(struct gpio_chip *ch
+
+ static int
+ mediatek_gpio_bank_probe(struct device *dev,
+- struct device_node *node, int bank)
++ struct device_node *node, int bank, int base)
+ {
+ struct mtk *mtk = dev_get_drvdata(dev);
+ struct mtk_gc *rg;
+@@ -234,6 +234,7 @@ mediatek_gpio_bank_probe(struct device *
+ return ret;
+ }
+
++ rg->chip.base = base;
+ rg->chip.of_gpio_n_cells = 2;
+ rg->chip.of_xlate = mediatek_gpio_xlate;
+ rg->chip.label = devm_kasprintf(dev, GFP_KERNEL, "%s-bank%d",
+@@ -285,7 +286,7 @@ mediatek_gpio_bank_probe(struct device *
+ /* set polarity to low for all gpios */
+ mtk_gpio_w32(rg, GPIO_REG_POL, 0);
+
+- dev_info(dev, "registering %d gpios\n", rg->chip.ngpio);
++ dev_info(dev, "registering %d gpios in bank %d with base %d%s\n", rg->chip.ngpio, bank, base, base<0 ? " (automatic)" : "");
+
+ return 0;
+ }
+@@ -297,6 +298,7 @@ mediatek_gpio_probe(struct platform_devi
+ struct device_node *np = dev->of_node;
+ struct mtk *mtk;
+ int i;
++ u32 base;
+ int ret;
+
+ mtk = devm_kzalloc(dev, sizeof(*mtk), GFP_KERNEL);
+@@ -311,8 +313,11 @@ mediatek_gpio_probe(struct platform_devi
+ mtk->dev = dev;
+ platform_set_drvdata(pdev, mtk);
+
++ base = (u32)(-1); /* automatic by default */
++ of_property_read_u32(np, "gpio-base", &base); /* but support setting base in DT */
++
+ for (i = 0; i < MTK_BANK_CNT; i++) {
+- ret = mediatek_gpio_bank_probe(dev, np, i);
++ ret = mediatek_gpio_bank_probe(dev, np, i, ((int)base)<0 ? -1 : base+32*i);
+ if (ret)
+ return ret;
+ }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment