summaryrefslogtreecommitdiff
path: root/fw/fe310/eos/eve/eve_touch_engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310/eos/eve/eve_touch_engine.c')
-rw-r--r--fw/fe310/eos/eve/eve_touch_engine.c48
1 files changed, 39 insertions, 9 deletions
diff --git a/fw/fe310/eos/eve/eve_touch_engine.c b/fw/fe310/eos/eve/eve_touch_engine.c
index 2c75ca0..7c5b39f 100644
--- a/fw/fe310/eos/eve/eve_touch_engine.c
+++ b/fw/fe310/eos/eve/eve_touch_engine.c
@@ -26,36 +26,66 @@ static const uint32_t _reg_track[] = {
REG_TRACKER_4
};
-void eve_touch_init_engine(void) {
+void eve_touch_init_engine(uint16_t engine) {
/* configure touch */
eve_write8(REG_CPURESET, 2); /* touch engine reset */
- eve_write16(REG_TOUCH_CONFIG, 0x4000); /* host mode multi touch */
+ eve_write16(REG_TOUCH_CONFIG, engine); /* set touch engine */
eve_write8(REG_CTOUCH_EXTENDED, 0x00); /* set extended mode */
eve_write8(REG_CPURESET, 0); /* clear reset */
- eve_touch_ehost_enter(0, 0x8000, 0x8000);
- eve_touch_ehost_end();
+ if (engine == EVE_TOUCH_ENGINE_HOST) {
+ eve_touch_ehost_enter(0, 0x8000, 0x8000);
+ eve_touch_ehost_end();
+ }
}
-void eve_touch_start(void) {
+uint16_t eve_touch_get_engine(void) {
+ return (eve_read16(REG_TOUCH_CONFIG) & EVE_TOUCH_ENGINE_MASK);
+}
+
+void eve_touch_set_engine(uint16_t engine) {
+ uint16_t reg = eve_read16(REG_TOUCH_CONFIG);
+
+ reg &= ~EVE_TOUCH_ENGINE_MASK;
+ reg |= engine;
+
+ eve_write8(REG_CPURESET, 2); /* touch engine reset */
+ eve_write8(REG_TOUCH_CONFIG, reg); /* set touch engine */
+ eve_write8(REG_CPURESET, 0); /* clear reset */
+
+ if (engine == EVE_TOUCH_ENGINE_HOST) {
+ eve_touch_ehost_enter(0, 0x8000, 0x8000);
+ eve_touch_ehost_end();
+ }
+}
+
+void eve_touch_intr_enable(void) {
uint16_t intr_mask;
intr_mask = eve_read16(REG_INT_MASK);
eve_write16(REG_INT_MASK, intr_mask | (EVE_INT_CONVCOMPLETE | EVE_INT_TAG));
-
- eve_write8(REG_TOUCH_MODE, EVE_TMODE_CONTINUOUS);
}
-void eve_touch_stop(void) {
+void eve_touch_intr_disable(void) {
uint16_t intr_mask;
intr_mask = eve_read16(REG_INT_MASK);
eve_write16(REG_INT_MASK, intr_mask & ~(EVE_INT_CONVCOMPLETE | EVE_INT_TAG));
- eve_timer_clear(NULL);
+}
+void eve_touch_start(void) {
+ eve_write8(REG_TOUCH_MODE, EVE_TMODE_CONTINUOUS);
+}
+
+void eve_touch_stop(void) {
+ eve_timer_clear(NULL);
eve_write8(REG_TOUCH_MODE, EVE_TMODE_OFF);
}
+int eve_touch_get_extended(void) {
+ return !eve_read8(REG_CTOUCH_EXTENDED);
+}
+
void eve_touch_set_extended(int extended) {
eve_write8(REG_CPURESET, 2); /* touch engine reset */
eve_write8(REG_CTOUCH_EXTENDED, !extended); /* set / clear extended mode */