summaryrefslogtreecommitdiffstats
path: root/firmware/target/arm/imx233
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-10-20 22:39:39 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-10-21 01:23:14 +0200
commit46416c619d586c45647ddc76045b0ed253733d57 (patch)
tree3d6ad82a2923bede48a0109537497bbf3bfd3274 /firmware/target/arm/imx233
parent187017bad1c5192c50019a15952f7dd9f36eb3e5 (diff)
downloadrockbox-46416c619d586c45647ddc76045b0ed253733d57.tar.gz
rockbox-46416c619d586c45647ddc76045b0ed253733d57.zip
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
Diffstat (limited to 'firmware/target/arm/imx233')
-rw-r--r--firmware/target/arm/imx233/power-imx233.c9
-rw-r--r--firmware/target/arm/imx233/power-imx233.h1
-rw-r--r--firmware/target/arm/imx233/usb-imx233.c2
3 files changed, 11 insertions, 1 deletions
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)