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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user