diff options
| author | Rosen Penev | 2025-09-18 23:15:02 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2025-11-29 20:08:39 +0000 |
| commit | f614322d2822c16d985ef9994d5f6798c8756501 (patch) | |
| tree | 8ea63c389f26eeefe93c76d221bd335b4000665d | |
| parent | 23a070dfb1fd3ed7659fad4934a6a38d8693326f (diff) | |
| download | openwrt-f614322d2822c16d985ef9994d5f6798c8756501.tar.gz | |
mediatek: rtl8367s: modernize gpio API
Upstream is strongly considering removing of_gpio.h. As of this commit,
3 upstream drivers remain with actual usage.
Get ahead of upstream and use the GPIOD API before the OF one goes away.
Rework to remove mediatek,reset-pin in favor of the standard
reset-gpios.
Fix wrong high GPIO.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/20088
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
4 files changed, 11 insertions, 15 deletions
diff --git a/target/linux/mediatek/dts/mt7622-buffalo-wsr-2533dhp2.dts b/target/linux/mediatek/dts/mt7622-buffalo-wsr-2533dhp2.dts index d016e4d328..5211f2d8e5 100644 --- a/target/linux/mediatek/dts/mt7622-buffalo-wsr-2533dhp2.dts +++ b/target/linux/mediatek/dts/mt7622-buffalo-wsr-2533dhp2.dts @@ -22,7 +22,7 @@ compatible = "mediatek,rtk-gsw"; mediatek,ethsys = <ðsys>; mediatek,mdio = <&mdio>; - mediatek,reset-pin = <&pio 54 GPIO_ACTIVE_HIGH>; + reset-gpios = <&pio 54 GPIO_ACTIVE_LOW>; }; }; diff --git a/target/linux/mediatek/dts/mt7622-elecom-wrc-2533gent.dts b/target/linux/mediatek/dts/mt7622-elecom-wrc-2533gent.dts index fa98310a0a..bddbd8219d 100644 --- a/target/linux/mediatek/dts/mt7622-elecom-wrc-2533gent.dts +++ b/target/linux/mediatek/dts/mt7622-elecom-wrc-2533gent.dts @@ -161,7 +161,7 @@ compatible = "mediatek,rtk-gsw"; mediatek,ethsys = <ðsys>; mediatek,mdio = <&mdio>; - mediatek,reset-pin = <&pio 54 0>; + reset-gpios = <&pio 54 GPIO_ACTIVE_LOW>; status = "okay"; }; }; diff --git a/target/linux/mediatek/dts/mt7622-totolink-a8000ru.dts b/target/linux/mediatek/dts/mt7622-totolink-a8000ru.dts index 5ec07128ba..5eaa2797c1 100644 --- a/target/linux/mediatek/dts/mt7622-totolink-a8000ru.dts +++ b/target/linux/mediatek/dts/mt7622-totolink-a8000ru.dts @@ -95,7 +95,7 @@ compatible = "mediatek,rtk-gsw"; mediatek,ethsys = <ðsys>; mediatek,mdio = <&mdio>; - mediatek,reset-pin = <&pio 54 0>; + reset-gpios = <&pio 54 GPIO_ACTIVE_LOW>; status = "okay"; }; }; diff --git a/target/linux/mediatek/files/drivers/net/phy/rtk/rtl8367s_mdio.c b/target/linux/mediatek/files/drivers/net/phy/rtk/rtl8367s_mdio.c index 2f9dc0da6b..537e226a19 100644 --- a/target/linux/mediatek/files/drivers/net/phy/rtk/rtl8367s_mdio.c +++ b/target/linux/mediatek/files/drivers/net/phy/rtk/rtl8367s_mdio.c @@ -16,9 +16,9 @@ #include <linux/init.h> #include <linux/device.h> #include <linux/delay.h> +#include <linux/gpio/consumer.h> #include <linux/of_mdio.h> #include <linux/of_platform.h> -#include <linux/of_gpio.h> #include <linux/platform_device.h> @@ -31,7 +31,7 @@ struct rtk_gsw { struct device *dev; struct mii_bus *bus; - int reset_pin; + struct gpio_desc *reset_gpiod; }; static struct rtk_gsw *_gsw; @@ -67,14 +67,14 @@ static int rtl8367s_hw_reset(void) { struct rtk_gsw *gsw = _gsw; - if (gsw->reset_pin < 0) + if (!gsw->reset_gpiod) return 0; - gpio_direction_output(gsw->reset_pin, 0); + gpiod_set_value_cansleep(gsw->reset_gpiod, 1); usleep_range(1000, 1100); - gpio_set_value(gsw->reset_pin, 1); + gpiod_set_value_cansleep(gsw->reset_gpiod, 0); mdelay(500); @@ -221,7 +221,6 @@ static int rtk_gsw_probe(struct platform_device *pdev) struct mii_bus *mdio_bus; struct rtk_gsw *gsw; const char *pm; - int ret; mdio = of_parse_phandle(np, "mediatek,mdio", 0); @@ -242,12 +241,9 @@ static int rtk_gsw_probe(struct platform_device *pdev) gsw->bus = mdio_bus; - gsw->reset_pin = of_get_named_gpio(np, "mediatek,reset-pin", 0); - if (gsw->reset_pin >= 0) { - ret = devm_gpio_request(gsw->dev, gsw->reset_pin, "mediatek,reset-pin"); - if (ret) - printk("fail to devm_gpio_request\n"); - } + gsw->reset_gpiod = devm_gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_HIGH); + if (IS_ERR(gsw->reset_gpiod)) + return dev_err_probe(&pdev->dev, PTR_ERR(gsw->reset_gpiod), "Failed to reset gpio"); _gsw = gsw; |