diff options
author | Rafaël Carré <rafael.carre@gmail.com> | 2010-05-17 20:53:25 +0000 |
---|---|---|
committer | Rafaël Carré <rafael.carre@gmail.com> | 2010-05-17 20:53:25 +0000 |
commit | 88c55d7290b7c360075557c40fdf65ceeeaf0c4b (patch) | |
tree | 29cf685626bf8c01bb64ed9456850f62e4a57d7d /firmware/target/arm/ascodec-target.h | |
parent | 2ed7745ddefc084ca7030d48b251882e94fa2f9c (diff) | |
download | rockbox-88c55d7290b7c360075557c40fdf65ceeeaf0c4b.tar.gz rockbox-88c55d7290b7c360075557c40fdf65ceeeaf0c4b.zip |
as3514/as3543 fixes
- Enable end of charge monitoring once, it doesn't need to be disabled
- Acknowledge the first (wrong) end of charge interrupt on charger enable
(this had been broken in r25299)
- Centralize reads to ENRD* registers and cache the results when needed
- on PP it is not needed because reads are atomic, we only check for
end of charge when the charging, and for charger presence when
discharging
as3525v2 (using as3543) specifics
- I got the datasheet today from AMS, thanks to them for being so fast
and not require me to sign tons of papers!
- USB detection now works on as3525v2 using the as3543. Clip+ won't
reboot to OF yet, it needs mkamsboot support first (usbstack disabled)
- Charging should work, the CHARGER register is at a different place, it
is an extended PMU register -> use ascodec_read/write_charger() to
access it
- real interrupts are not used yet for ENRD, we get thousands of
interrupts per second, apparently only limited by the i2c clock.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26116 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/ascodec-target.h')
-rw-r--r-- | firmware/target/arm/ascodec-target.h | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/firmware/target/arm/ascodec-target.h b/firmware/target/arm/ascodec-target.h index c87d869ebb..68d9905a6b 100644 --- a/firmware/target/arm/ascodec-target.h +++ b/firmware/target/arm/ascodec-target.h | |||
@@ -59,14 +59,19 @@ static inline void ascodec_unlock(void) | |||
59 | i2c_unlock(); | 59 | i2c_unlock(); |
60 | } | 60 | } |
61 | 61 | ||
62 | static inline void ascodec_enable_endofch_irq(void) | 62 | static inline bool ascodec_chg_status(void) |
63 | { | 63 | { |
64 | ascodec_write(AS3514_IRQ_ENRD0, IRQ_ENDOFCH); | 64 | return ascodec_read(AS3514_IRQ_ENRD0) & CHG_STATUS; |
65 | } | ||
66 | |||
67 | static inline bool ascodec_endofch(void) | ||
68 | { | ||
69 | return ascodec_read(AS3514_IRQ_ENRD0) & CHG_ENDOFCH; | ||
65 | } | 70 | } |
66 | 71 | ||
67 | static inline void ascodec_disable_endofch_irq(void) | 72 | static inline void ascodec_monitor_endofch(void) |
68 | { | 73 | { |
69 | ascodec_write(AS3514_IRQ_ENRD0, 0); | 74 | ascodec_write(AS3514_IRQ_ENRD0, IRQ_ENDOFCH); |
70 | } | 75 | } |
71 | 76 | ||
72 | static inline void ascodec_wait_adc_finished(void) | 77 | static inline void ascodec_wait_adc_finished(void) |
@@ -81,6 +86,16 @@ static inline void ascodec_wait_adc_finished(void) | |||
81 | */ | 86 | */ |
82 | } | 87 | } |
83 | 88 | ||
89 | static inline void ascodec_write_charger(int value) | ||
90 | { | ||
91 | ascodec_write(AS3514_CHARGER, value); | ||
92 | } | ||
93 | |||
94 | static inline int ascodec_read_charger(void) | ||
95 | { | ||
96 | return ascodec_read(AS3514_CHARGER); | ||
97 | } | ||
98 | |||
84 | extern void ascodec_suppressor_on(bool on); | 99 | extern void ascodec_suppressor_on(bool on); |
85 | 100 | ||
86 | #endif /* CPU_PP */ | 101 | #endif /* CPU_PP */ |