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:
1 parent
51e4eca2d3
commit
c0b3005e32
2 files changed
+27
-18
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in new issue
Block a user