mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-26 06:30:39 +00:00
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>
This commit is contained in:
parent
90641f82f1
commit
a725426929
1 changed files with 11 additions and 10 deletions
|
@ -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 @@ static int get_vbus_gpio(int index)
|
|||
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 @@ static int get_vbus_detect_gpio(int index)
|
|||
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 sunxi_usbc_request_resources(int index)
|
|||
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 @@ int sunxi_usbc_free_resources(int index)
|
|||
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 @@ void sunxi_usbc_vbus_enable(int index)
|
|||
{
|
||||
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 @@ void sunxi_usbc_vbus_disable(int index)
|
|||
{
|
||||
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 @@ int sunxi_usbc_vbus_detect(int index)
|
|||
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);
|
||||
|
|
Loading…
Reference in a new issue