summaryrefslogtreecommitdiff
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[] =
84#define USE_VBUSVALID 84#define USE_VBUSVALID
85#endif 85#endif
86 86
87bool imx233_power_usb_detect(void)
88{
89#ifdef USE_VBUSVALID
90 return BF_RD(POWER_STS, VBUSVALID);
91#else
92 return BF_RD(POWER_STS, VDD5V_GT_VDDIO);
93#endif
94}
95
87void INT_VDD5V(void) 96void INT_VDD5V(void)
88{ 97{
89#ifdef USE_VBUSVALID 98#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);
82void imx233_power_set_charge_current(unsigned current); /* in mA */ 82void imx233_power_set_charge_current(unsigned current); /* in mA */
83void imx233_power_set_stop_current(unsigned current); /* in mA */ 83void imx233_power_set_stop_current(unsigned current); /* in mA */
84void imx233_power_enable_batadj(bool enable); 84void imx233_power_enable_batadj(bool enable);
85bool imx233_power_usb_detect(void);
85 86
86enum imx233_regulator_t 87enum imx233_regulator_t
87{ 88{
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)
61 61
62int usb_detect(void) 62int usb_detect(void)
63{ 63{
64 return BF_RD(POWER_STS, VBUSVALID) ? USB_INSERTED : USB_EXTRACTED; 64 return imx233_power_usb_detect() ? USB_INSERTED : USB_EXTRACTED;
65} 65}
66 66
67void usb_enable(bool on) 67void usb_enable(bool on)