summaryrefslogtreecommitdiff
path: root/firmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2008-07-14 15:03:10 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2008-07-14 15:03:10 +0000
commit0709f0a5c60b5525ff98708887f5f1e5b0b570c2 (patch)
tree849fd125aa7b217228d584212d2930d8259ff5d8 /firmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c
parent4f199817488708ba60724accb6ce76886f855af8 (diff)
downloadrockbox-0709f0a5c60b5525ff98708887f5f1e5b0b570c2.tar.gz
rockbox-0709f0a5c60b5525ff98708887f5f1e5b0b570c2.zip
Add preliminary support for the Onda VX747 (MIPS target)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18032 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c')
-rwxr-xr-xfirmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c
new file mode 100755
index 0000000000..e42325bcb3
--- /dev/null
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/button-onda_vx747.c
@@ -0,0 +1,123 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Maurus Cuelenaere
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "config.h"
23#include "jz4740.h"
24#include "button-target.h"
25
26#define BTN_VOL_DOWN (1 << 27)
27#define BTN_VOL_UP (1 << 0)
28#define BTN_MENU (1 << 1)
29#define BTN_OFF (1 << 29)
30#define BTN_HOLD (1 << 16)
31#define BTN_MASK (BTN_VOL_DOWN | BTN_VOL_UP \
32 | BTN_MENU | BTN_OFF )
33
34#define SADC_CFG_INIT ( \
35 (2 << SADC_CFG_CLKOUT_NUM_BIT) | \
36 SADC_CFG_XYZ1Z2 | \
37 SADC_CFG_SNUM_5 | \
38 (1 << SADC_CFG_CLKDIV_BIT) | \
39 SADC_CFG_PBAT_HIGH | \
40 SADC_CFG_CMD_INT_PEN )
41
42bool button_hold(void)
43{
44 return (REG_GPIO_PXPIN(3) ^ BTN_HOLD ? 1 : 0);
45}
46
47void button_init_device(void)
48{
49 REG_SADC_ENA = 0;
50 REG_SADC_STATE &= (~REG_SADC_STATE);
51 REG_SADC_CTRL = 0x1f;
52
53 __cpm_start_sadc();
54 REG_SADC_CFG = SADC_CFG_INIT;
55
56 REG_SADC_SAMETIME = 1;
57 REG_SADC_WAITTIME = 1000; //per 100 HZ
58 REG_SADC_STATE &= (~REG_SADC_STATE);
59 REG_SADC_CTRL &= (~(SADC_CTRL_PENDM | SADC_CTRL_TSRDYM));
60 REG_SADC_ENA = SADC_ENA_TSEN; // | REG_SADC_ENA;//SADC_ENA_TSEN | SADC_ENA_PBATEN | SADC_ENA_SADCINEN;
61}
62
63static int touch_to_pixels(short x, short y)
64{
65 /* X:300 -> 3800 Y:300->3900 */
66 x -= 300;
67 y -= 300;
68
69 x /= 3200 / LCD_WIDTH;
70 y /= 3600 / LCD_HEIGHT;
71
72 return (x << 16) | y;
73}
74
75int button_read_device(int *data)
76{
77 unsigned int key = ~REG_GPIO_PXPIN(3);
78 int ret = 0;
79 if(key & BTN_MASK)
80 {
81 if(key & BTN_VOL_DOWN)
82 ret |= BUTTON_VOL_DOWN;
83 if(key & BTN_VOL_UP)
84 ret |= BUTTON_VOL_UP;
85 if(key & BTN_MENU)
86 ret |= BUTTON_MENU;
87 if(key & BTN_OFF)
88 ret |= BUTTON_POWER;
89 }
90
91 if(REG_SADC_STATE & (SADC_CTRL_TSRDYM|SADC_STATE_PEND))
92 {
93 if(REG_SADC_STATE & SADC_CTRL_PENDM)
94 {
95 REG_SADC_CTRL &= (~(SADC_CTRL_PENUM | SADC_CTRL_TSRDYM));
96 REG_SADC_CTRL |= (SADC_CTRL_PENDM);
97 unsigned int dat;
98 unsigned short xData,yData;
99 short tsz1Data,tsz2Data;
100
101 dat = REG_SADC_TSDAT;
102
103 xData = (dat >> 0) & 0xfff;
104 yData = (dat >> 16) & 0xfff;
105
106 dat = REG_SADC_TSDAT;
107 tsz1Data = (dat >> 0) & 0xfff;
108 tsz2Data = (dat >> 16) & 0xfff;
109
110 *data = touch_to_pixels(xData, yData);
111
112 tsz1Data = tsz2Data - tsz1Data;
113 }
114 REG_SADC_STATE = 0;
115 //__intc_unmask_irq(IRQ_SADC);
116 }
117
118 return ret;
119}
120void button_set_touch_available(void)
121{
122 return;
123}