mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
sunxi: musb: Check Vbus-det before enabling otg port power
Sending out 5V when there is a charger connected to the otg port is not a good idea, so check for this and error out. Note this commit currently breaks otg support on the q8h tablets, as we need to do some magic with the pmic there to get vbus info, this is deliberate (better safe then sorry), fixing this is on my TODO list. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Ian Campbell <ijc@hellion.org.uk>
This commit is contained in:
parent
636317c9ee
commit
52defe8f65
7 changed files with 42 additions and 0 deletions
|
@ -223,6 +223,14 @@ config USB0_VBUS_PIN
|
|||
Set the Vbus enable pin for usb0 (otg). This takes a string in the
|
||||
format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
|
||||
|
||||
config USB0_VBUS_DET
|
||||
string "Vbus detect pin for usb0 (otg)"
|
||||
depends on USB_MUSB_SUNXI
|
||||
default ""
|
||||
---help---
|
||||
Set the Vbus detect pin for usb0 (otg). This takes a string in the
|
||||
format understood by sunxi_name_to_gpio, e.g. PH1 for pin 1 of port H.
|
||||
|
||||
config USB1_VBUS_PIN
|
||||
string "Vbus enable pin for usb1 (ehci0)"
|
||||
default "PH6" if MACH_SUN4I || MACH_SUN7I
|
||||
|
|
|
@ -3,6 +3,7 @@ CONFIG_SYS_EXTRA_OPTIONS="CONS_INDEX=2,AXP209_POWER"
|
|||
CONFIG_FDTFILE="sun5i-a13-ampe-a76.dtb"
|
||||
CONFIG_USB_MUSB_SUNXI=y
|
||||
CONFIG_USB0_VBUS_PIN="PG12"
|
||||
CONFIG_USB0_VBUS_DET="PG01"
|
||||
CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:82,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
|
||||
CONFIG_VIDEO_LCD_POWER="AXP0-0"
|
||||
CONFIG_VIDEO_LCD_BL_EN="AXP0-1"
|
||||
|
|
|
@ -3,6 +3,7 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER"
|
|||
CONFIG_FDTFILE="sun4i-a10-chuwi-v7-cw0825.dtb"
|
||||
CONFIG_USB_MUSB_SUNXI=y
|
||||
CONFIG_USB0_VBUS_PIN="PB9"
|
||||
CONFIG_USB0_VBUS_DET="PH5"
|
||||
CONFIG_VIDEO_LCD_MODE="x:1024,y:768,depth:24,pclk_khz:51000,le:19,ri:300,up:6,lo:31,hs:1,vs:1,sync:3,vmode:0"
|
||||
CONFIG_VIDEO_LCD_POWER="PH8"
|
||||
CONFIG_VIDEO_LCD_BL_EN="PH7"
|
||||
|
|
|
@ -6,6 +6,7 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER"
|
|||
CONFIG_FDTFILE="sun4i-a10-hyundai-a7hd.dtb"
|
||||
CONFIG_USB_MUSB_SUNXI=y
|
||||
CONFIG_USB0_VBUS_PIN="PB09"
|
||||
CONFIG_USB0_VBUS_DET="PH5"
|
||||
CONFIG_USB1_VBUS_PIN=""
|
||||
CONFIG_USB2_VBUS_PIN="PH6"
|
||||
CONFIG_VIDEO_LCD_MODE="x:1024,y:600,depth:18,pclk_khz:51000,le:45,ri:274,up:22,lo:12,hs:1,vs:1,sync:3,vmode:0"
|
||||
|
|
|
@ -3,6 +3,7 @@ CONFIG_SYS_EXTRA_OPTIONS="AXP209_POWER"
|
|||
CONFIG_FDTFILE="sun5i-a13-inet-86vs.dtb"
|
||||
CONFIG_USB_MUSB_SUNXI=y
|
||||
CONFIG_USB0_VBUS_PIN="PG12"
|
||||
CONFIG_USB0_VBUS_DET="PG1"
|
||||
CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:45,ri:209,up:22,lo:22,hs:1,vs:1,sync:3,vmode:0"
|
||||
CONFIG_VIDEO_LCD_POWER="AXP0-0"
|
||||
CONFIG_VIDEO_LCD_BL_EN="AXP0-1"
|
||||
|
|
|
@ -3,6 +3,7 @@ CONFIG_SYS_EXTRA_OPTIONS="CONS_INDEX=2,AXP209_POWER"
|
|||
CONFIG_FDTFILE="sun5i-a13-tzx-q8-713b7.dtb"
|
||||
CONFIG_USB_MUSB_SUNXI=y
|
||||
CONFIG_USB0_VBUS_PIN="PG12"
|
||||
CONFIG_USB0_VBUS_DET="PG1"
|
||||
CONFIG_VIDEO_LCD_MODE="x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0"
|
||||
CONFIG_VIDEO_LCD_POWER="AXP0-0"
|
||||
CONFIG_VIDEO_LCD_BL_EN="AXP0-1"
|
||||
|
|
|
@ -22,7 +22,9 @@
|
|||
*/
|
||||
#include <common.h>
|
||||
#include <asm/arch/cpu.h>
|
||||
#include <asm/arch/gpio.h>
|
||||
#include <asm/arch/usbc.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
#include "linux-compat.h"
|
||||
#include "musb_core.h"
|
||||
|
||||
|
@ -224,6 +226,33 @@ static int sunxi_musb_init(struct musb *musb)
|
|||
|
||||
pr_debug("%s():\n", __func__);
|
||||
|
||||
if (is_host_enabled(musb)) {
|
||||
int vbus_det = sunxi_name_to_gpio(CONFIG_USB0_VBUS_DET);
|
||||
if (vbus_det == -1) {
|
||||
eprintf("Error invalid Vusb-det pin\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = gpio_request(vbus_det, "vbus0_det");
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
err = gpio_direction_input(vbus_det);
|
||||
if (err) {
|
||||
gpio_free(vbus_det);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = gpio_get_value(vbus_det);
|
||||
if (err) {
|
||||
eprintf("Error: A charger is plugged into the OTG\n");
|
||||
gpio_free(vbus_det);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
gpio_free(vbus_det);
|
||||
}
|
||||
|
||||
err = sunxi_usbc_request_resources(0);
|
||||
if (err)
|
||||
return err;
|
||||
|
|
Loading…
Reference in a new issue