|
| 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 | ++ } |
0 commit comments