From 46416c619d586c45647ddc76045b0ed253733d57 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sun, 20 Oct 2013 22:39:39 +0200 Subject: imx233: fix usb_detect() to be consistent with vbus detection The STMP3700 has unreliable vbusvalid irq so we need to use vdd5gtvddio. Therefore, using the vbusvalid bit produces inconsistent results between events and detect. Fix that by making power handle all the usb detect stuff. Change-Id: Ic521b2f6677602e184fe46352c5359f4b4ba8d56 --- firmware/target/arm/imx233/power-imx233.c | 9 +++++++++ firmware/target/arm/imx233/power-imx233.h | 1 + firmware/target/arm/imx233/usb-imx233.c | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) (limited to 'firmware/target/arm') diff --git a/firmware/target/arm/imx233/power-imx233.c b/firmware/target/arm/imx233/power-imx233.c index 9972a21e69..fa2f8488cf 100644 --- a/firmware/target/arm/imx233/power-imx233.c +++ b/firmware/target/arm/imx233/power-imx233.c @@ -84,6 +84,15 @@ static struct current_step_bit_t g_4p2_charge_limit_bits[] = #define USE_VBUSVALID #endif +bool imx233_power_usb_detect(void) +{ +#ifdef USE_VBUSVALID + return BF_RD(POWER_STS, VBUSVALID); +#else + return BF_RD(POWER_STS, VDD5V_GT_VDDIO); +#endif +} + void INT_VDD5V(void) { #ifdef USE_VBUSVALID diff --git a/firmware/target/arm/imx233/power-imx233.h b/firmware/target/arm/imx233/power-imx233.h index d33ca20333..59ffcd37a2 100644 --- a/firmware/target/arm/imx233/power-imx233.h +++ b/firmware/target/arm/imx233/power-imx233.h @@ -82,6 +82,7 @@ void imx233_power_init(void); void imx233_power_set_charge_current(unsigned current); /* in mA */ void imx233_power_set_stop_current(unsigned current); /* in mA */ void imx233_power_enable_batadj(bool enable); +bool imx233_power_usb_detect(void); enum imx233_regulator_t { diff --git a/firmware/target/arm/imx233/usb-imx233.c b/firmware/target/arm/imx233/usb-imx233.c index a4099ceecf..05e412c77a 100644 --- a/firmware/target/arm/imx233/usb-imx233.c +++ b/firmware/target/arm/imx233/usb-imx233.c @@ -61,7 +61,7 @@ void usb_init_device(void) int usb_detect(void) { - return BF_RD(POWER_STS, VBUSVALID) ? USB_INSERTED : USB_EXTRACTED; + return imx233_power_usb_detect() ? USB_INSERTED : USB_EXTRACTED; } void usb_enable(bool on) -- cgit v1.2.3