introduce and use sunxi_gpio_parse_pin_name()

This commit is contained in:
Andre Przywara
2017-02-12 14:53:15 +00:00
committed by Icenowy Zheng
parent ae851665c7
commit 320b9df023
3 changed files with 20 additions and 5 deletions
+2
View File
@@ -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 */
+16
View File
@@ -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;
}
+2 -5
View File
@@ -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);