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>
This commit is contained in:
Arnd Bergmann authored and Jakub Kicinski committed 2026-06-02 11:13:08 -07:00
1 parent 51e4eca2d3
commit c0b3005e32
2 files changed
+27 -18

No files matched your search

+8 -12
View File
@@ -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;
}
+19 -6
View File
@@ -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