From 320b9df0234ed145e96eb15eaa50cadad11b8edf Mon Sep 17 00:00:00 2001 From: Andre Przywara Date: Sun, 12 Feb 2017 14:53:15 +0000 Subject: [PATCH] introduce and use sunxi_gpio_parse_pin_name() --- arch/arm/include/asm/arch-sunxi/gpio.h | 2 ++ arch/arm/mach-sunxi/pinmux.c | 16 ++++++++++++++++ drivers/net/sun8i_emac.c | 7 ++----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h b/arch/arm/include/asm/arch-sunxi/gpio.h index a681bdf005..d4c6004aad 100644 --- a/arch/arm/include/asm/arch-sunxi/gpio.h +++ b/arch/arm/include/asm/arch-sunxi/gpio.h @@ -242,4 +242,6 @@ int axp_gpio_init(void); static inline int axp_gpio_init(void) { return 0; } #endif +int sunxi_gpio_parse_pin_name(const char *pin_name); + #endif /* _SUNXI_GPIO_H */ diff --git a/arch/arm/mach-sunxi/pinmux.c b/arch/arm/mach-sunxi/pinmux.c index b026f78ca5..1d5fb28ee2 100644 --- a/arch/arm/mach-sunxi/pinmux.c +++ b/arch/arm/mach-sunxi/pinmux.c @@ -69,3 +69,19 @@ int sunxi_gpio_set_pull(u32 pin, u32 val) return 0; } + +int sunxi_gpio_parse_pin_name(const char *pin_name) +{ + int pin; + + if (pin_name[0] != 'P') + return -1; + + if (pin_name[1] < 'A' || pin_name[1] > 'Z') + return -1; + + pin = (pin_name[1] - 'A') << 5; + pin += simple_strtol(&pin_name[2], NULL, 10); + + return pin; +} diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c index abd9cc8bc0..107aea9fe2 100644 --- a/drivers/net/sun8i_emac.c +++ b/drivers/net/sun8i_emac.c @@ -460,12 +460,9 @@ static int parse_phy_pins(struct udevice *dev) "allwinner,pins", i, NULL); if (!pin_name) break; - if (pin_name[0] != 'P') + pin = sunxi_gpio_parse_pin_name(pin_name); + if (pin < 0) continue; - pin = (pin_name[1] - 'A') << 5; - if (pin >= 26 << 5) - continue; - pin += simple_strtol(&pin_name[2], NULL, 10); sunxi_gpio_set_cfgpin(pin, SUN8I_GPD8_GMAC); sunxi_gpio_set_drv(pin, drive);