sunxi: usbc: Fix vbus gpio handling to work with the driver-model
The driver-model gpio functions may return another value then -1 as error,
make the sunxi usbc properly handle this.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Acked-by: Ian Campbell <ijc@hellion.org.uk>
diff --git a/arch/arm/cpu/armv7/sunxi/usbc.c b/arch/arm/cpu/armv7/sunxi/usbc.c
index 7b883fb..21032aa 100644
--- a/arch/arm/cpu/armv7/sunxi/usbc.c
+++ b/arch/arm/cpu/armv7/sunxi/usbc.c
@@ -17,6 +17,7 @@
#include <asm/gpio.h>
#include <asm/io.h>
#include <common.h>
+#include <errno.h>
#ifdef CONFIG_AXP152_POWER
#include <axp152.h>
#endif
@@ -90,7 +91,7 @@
case 1: return sunxi_name_to_gpio(CONFIG_USB1_VBUS_PIN);
case 2: return sunxi_name_to_gpio(CONFIG_USB2_VBUS_PIN);
}
- return -1;
+ return -EINVAL;
}
static int get_vbus_detect_gpio(int index)
@@ -98,7 +99,7 @@
switch (index) {
case 0: return sunxi_name_to_gpio(CONFIG_USB0_VBUS_DET);
}
- return -1;
+ return -EINVAL;
}
static void usb_phy_write(struct sunxi_usbc_hcd *sunxi_usbc, int addr,
@@ -188,13 +189,13 @@
int ret = 0;
sunxi_usbc->gpio_vbus = get_vbus_gpio(index);
- if (sunxi_usbc->gpio_vbus != -1) {
+ if (sunxi_usbc->gpio_vbus >= 0) {
ret |= gpio_request(sunxi_usbc->gpio_vbus, "usbc_vbus");
ret |= gpio_direction_output(sunxi_usbc->gpio_vbus, 0);
}
sunxi_usbc->gpio_vbus_det = get_vbus_detect_gpio(index);
- if (sunxi_usbc->gpio_vbus_det != -1) {
+ if (sunxi_usbc->gpio_vbus_det >= 0) {
ret |= gpio_request(sunxi_usbc->gpio_vbus_det, "usbc_vbus_det");
ret |= gpio_direction_input(sunxi_usbc->gpio_vbus_det);
}
@@ -207,10 +208,10 @@
struct sunxi_usbc_hcd *sunxi_usbc = &sunxi_usbc_hcd[index];
int ret = 0;
- if (sunxi_usbc->gpio_vbus != -1)
+ if (sunxi_usbc->gpio_vbus >= 0)
ret |= gpio_free(sunxi_usbc->gpio_vbus);
- if (sunxi_usbc->gpio_vbus_det != -1)
+ if (sunxi_usbc->gpio_vbus_det >= 0)
ret |= gpio_free(sunxi_usbc->gpio_vbus_det);
return ret;
@@ -264,7 +265,7 @@
{
struct sunxi_usbc_hcd *sunxi_usbc = &sunxi_usbc_hcd[index];
- if (sunxi_usbc->gpio_vbus != -1)
+ if (sunxi_usbc->gpio_vbus >= 0)
gpio_set_value(sunxi_usbc->gpio_vbus, 1);
}
@@ -272,7 +273,7 @@
{
struct sunxi_usbc_hcd *sunxi_usbc = &sunxi_usbc_hcd[index];
- if (sunxi_usbc->gpio_vbus != -1)
+ if (sunxi_usbc->gpio_vbus >= 0)
gpio_set_value(sunxi_usbc->gpio_vbus, 0);
}
@@ -281,9 +282,9 @@
struct sunxi_usbc_hcd *sunxi_usbc = &sunxi_usbc_hcd[index];
int err, retries = 3;
- if (sunxi_usbc->gpio_vbus_det == -1) {
+ if (sunxi_usbc->gpio_vbus_det < 0) {
eprintf("Error: invalid vbus detection pin\n");
- return -1;
+ return sunxi_usbc->gpio_vbus_det;
}
err = gpio_get_value(sunxi_usbc->gpio_vbus_det);