diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2026-06-01 19:56:42 +0300 |
|---|---|---|
| committer | Jakub Kicinski <kuba@kernel.org> | 2026-06-02 21:13:08 +0300 |
| commit | c0b3005e32ce78e6cef53a61216fedfb268762bc (patch) | |
| tree | 17b0cba26d3d8c7cefc9cf5bd97624db789a55d9 | |
| parent | 51e4eca2d360b8610fdc2b71ebfea3c0c4038a70 (diff) | |
| download | linux-c0b3005e32ce78e6cef53a61216fedfb268762bc.tar.xz | |
net: dsa: b53: hide legacy gpiolib usage on non-mips
The MIPS bcm53xx platform still uses the legacy gpiolib interfaces based
on gpio numbers, but other platforms do not.
Hide these interfaces inside of the existing #ifdef block and use the
modern interfaces in the common parts of the driver to allow building
it when the gpio_set_value() is left out of the kernel.
Reviewed-by: Jonas Gorski <jonas.gorski@gmail.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Link: https://patch.msgid.link/20260601165716.648230-1-arnd@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
| -rw-r--r-- | drivers/net/dsa/b53/b53_common.c | 20 | ||||
| -rw-r--r-- | drivers/net/dsa/b53/b53_priv.h | 25 |
2 files changed, 27 insertions, 18 deletions
diff --git a/drivers/net/dsa/b53/b53_common.c b/drivers/net/dsa/b53/b53_common.c index 2c4131ed7e30..06b8be8dc4db 100644 --- a/drivers/net/dsa/b53/b53_common.c +++ b/drivers/net/dsa/b53/b53_common.c @@ -19,7 +19,7 @@ #include <linux/delay.h> #include <linux/export.h> -#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/kernel.h> #include <linux/math.h> #include <linux/minmax.h> @@ -965,17 +965,17 @@ EXPORT_SYMBOL(b53_configure_vlan); static void b53_switch_reset_gpio(struct b53_device *dev) { - int gpio = dev->reset_gpio; + struct gpio_desc *gpio = dev->reset_gpio; - if (gpio < 0) + if (IS_ERR(gpio)) return; /* Reset sequence: RESET low(50ms)->high(20ms) */ - gpio_set_value(gpio, 0); + gpiod_set_value(gpio, 0); mdelay(50); - gpio_set_value(gpio, 1); + gpiod_set_value(gpio, 1); mdelay(20); dev->current_page = 0xff; @@ -3092,7 +3092,6 @@ static int b53_switch_init(struct b53_device *dev) { u32 chip_id = dev->chip_id; unsigned int i; - int ret; if (is63xx(dev)) chip_id = BCM63XX_DEVICE_ID; @@ -3173,12 +3172,9 @@ static int b53_switch_init(struct b53_device *dev) return -ENOMEM; dev->reset_gpio = b53_switch_get_reset_gpio(dev); - if (dev->reset_gpio >= 0) { - ret = devm_gpio_request_one(dev->dev, dev->reset_gpio, - GPIOF_OUT_INIT_HIGH, "robo_reset"); - if (ret) - return ret; - } + + if (PTR_ERR(dev->reset_gpio) == -EPROBE_DEFER) + return -EPROBE_DEFER; return 0; } diff --git a/drivers/net/dsa/b53/b53_priv.h b/drivers/net/dsa/b53/b53_priv.h index bd6849e5bb93..cd27a7344e89 100644 --- a/drivers/net/dsa/b53/b53_priv.h +++ b/drivers/net/dsa/b53/b53_priv.h @@ -148,7 +148,7 @@ struct b53_device { u8 duplex_reg; u8 jumbo_pm_reg; u8 jumbo_size_reg; - int reset_gpio; + struct gpio_desc *reset_gpio; u8 num_arl_bins; u16 num_arl_buckets; enum dsa_tag_protocol tag_protocol; @@ -467,23 +467,36 @@ static inline void b53_arl_search_read(struct b53_device *dev, u8 idx, #ifdef CONFIG_BCM47XX #include <linux/bcm47xx_nvram.h> +#include <linux/gpio.h> #include <bcm47xx_board.h> -static inline int b53_switch_get_reset_gpio(struct b53_device *dev) +static inline struct gpio_desc *b53_switch_get_reset_gpio(struct b53_device *dev) { enum bcm47xx_board board = bcm47xx_board_get(); + int gpio, ret; switch (board) { case BCM47XX_BOARD_LINKSYS_WRT300NV11: case BCM47XX_BOARD_LINKSYS_WRT310NV1: - return 8; + gpio = 8; + break; default: - return bcm47xx_nvram_gpio_pin("robo_reset"); + gpio = bcm47xx_nvram_gpio_pin("robo_reset"); } + + if (!gpio_is_valid(gpio)) + return ERR_PTR(-EINVAL); + + ret = devm_gpio_request_one(dev->dev, gpio, + GPIOF_OUT_INIT_HIGH, "robo_reset"); + if (ret) + return ERR_PTR(ret); + + return gpio_to_desc(gpio); } #else -static inline int b53_switch_get_reset_gpio(struct b53_device *dev) +static inline struct gpio_desc *b53_switch_get_reset_gpio(struct b53_device *dev) { - return -ENOENT; + return ERR_PTR(-ENODEV); } #endif |
