summaryrefslogtreecommitdiffstats
path: root/firmware/target/mips/ingenic_jz47xx/onda_vx747
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-02-13 00:45:49 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-02-13 00:45:49 +0000
commit4532d145f17e5beb7e921cf459c7f8e27bcd58fd (patch)
treedabcb8c70eb9887db7b3fbcd0f3daf48d12780fe /firmware/target/mips/ingenic_jz47xx/onda_vx747
parentc16e563aef9099cfd9c87b7d1d544f466a073211 (diff)
downloadrockbox-4532d145f17e5beb7e921cf459c7f8e27bcd58fd.tar.gz
rockbox-4532d145f17e5beb7e921cf459c7f8e27bcd58fd.zip
Onda VX747:
* Add preliminary keymap * Split up generic MIPS stuff from Ingenic specific * Make apps/ compilable * Add SD driver * Fix RTC driver * Add debug screen * Other cleanups/rewrites/fixes git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19993 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/mips/ingenic_jz47xx/onda_vx747')
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/ata-sd-target.h14
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c10
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-target.h2
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c13
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/power-onda_vx747.c5
-rw-r--r--firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c93
6 files changed, 93 insertions, 44 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/ata-sd-target.h b/firmware/target/mips/ingenic_jz47xx/onda_vx747/ata-sd-target.h
index aed2b9cfea..d05690000f 100644
--- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/ata-sd-target.h
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/ata-sd-target.h
@@ -38,16 +38,20 @@ int _sd_read_sectors(unsigned long start, int count, void* buf);
int _sd_write_sectors(unsigned long start, int count, const void* buf);
int _sd_init(void);
-#define MMC_CD_PIN (29 + 1 * 32) /* Pin to check card insertion */
+#define MMC_CD_PIN (32*1 + 29) /* Pin to check card insertion */
+#define MSC_D0 (32*3 + 10)
+#define MSC_D1 (32*3 + 11)
+#define MSC_D2 (32*3 + 12)
+#define MSC_CLK (32*3 + 9 )
static inline void mmc_init_gpio(void)
{
__gpio_as_msc();
__gpio_as_input(MMC_CD_PIN);
- //__gpio_enable_pull(32*3+29);
- __gpio_enable_pull(32*3+10);
- __gpio_enable_pull(32*3+11);
- __gpio_enable_pull(32*3+12);
+ __gpio_enable_pull(MSC_CLK);
+ __gpio_enable_pull(MSC_D0);
+ __gpio_enable_pull(MSC_D1);
+ __gpio_enable_pull(MSC_D2);
}
#endif
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c
index 208236ef95..eec48768b2 100644
--- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c
@@ -35,7 +35,7 @@ static bool backlight_on;
static void set_backlight(int val)
{
-(void)val;
+ (void)val;
}
bool _backlight_init(void)
@@ -153,3 +153,11 @@ void _backlight_set_brightness(int brightness)
set_backlight(brightness);
}
#endif
+
+#ifdef HAVE_LCD_SLEEP
+/* Turn off LED supply */
+void _backlight_lcd_sleep(void)
+{
+ set_backlight_off();
+}
+#endif
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-target.h b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-target.h
index f3f17f024e..c6647fa9da 100644
--- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-target.h
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/backlight-target.h
@@ -29,10 +29,12 @@
#include <stdbool.h>
+/*
bool _backlight_init(void);
void _backlight_on(void);
void _backlight_off(void);
void _backlight_set_brightness(int brightness);
bool backlight_enabled(void);
+*/
#endif /* BACKLIGHT_TARGET_H */
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c
index c07a191bbe..cc27a17944 100644
--- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c
@@ -26,6 +26,7 @@
#define PIN_CS_N (32*1+17) /* Chip select */
#define PIN_RESET_N (32*1+18) /* Reset */
+#define LCD_PCLK (20000000) /* LCD PCLK */
#define my__gpio_as_lcd_16bit() \
do { \
@@ -199,16 +200,15 @@ static void _set_lcd_bus(void)
static void _set_lcd_clock(void)
{
unsigned int val;
- int pll_div;
__cpm_stop_lcd();
- pll_div = ( REG_CPM_CPCCR & CPM_CPCCR_PCS ); /* clock source, 0:pllout/2 1: pllout */
- pll_div = pll_div ? 1 : 2;
- val = ( __cpm_get_pllout()/pll_div ) / __cpm_get_pclk();
+
+ val = __cpm_get_pllout2() / LCD_PCLK;
val--;
if ( val > 0x1ff )
val = 0x1ff; /* CPM_LPCDR is too large, set it to 0x1ff */
__cpm_set_pixdiv(val);
+
__cpm_start_lcd();
}
@@ -277,3 +277,8 @@ void lcd_off(void)
{
_display_off();
}
+
+void lcd_set_contrast(int val)
+{
+ (void)val;
+}
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/power-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/power-onda_vx747.c
index 2c77da4ba7..fc77d063f9 100644
--- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/power-onda_vx747.c
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/power-onda_vx747.c
@@ -42,3 +42,8 @@ void power_init(void)
{
__gpio_as_input(USB_CHARGER_GPIO);
}
+
+bool charging_state(void)
+{
+ return false;
+}
diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c
index cd1da694b0..f750efdf57 100644
--- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c
+++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c
@@ -26,6 +26,8 @@
#include "button-target.h"
#include "powermgmt.h"
#include "kernel.h"
+#include "backlight.h"
+#include "logf.h"
#ifdef ONDA_VX747
#define BTN_OFF (1 << 29)
@@ -54,15 +56,16 @@
(2 << SADC_CFG_CLKOUT_NUM_BIT) | \
SADC_CFG_XYZ1Z2 | \
SADC_CFG_SNUM | \
- (2 << SADC_CFG_CLKDIV_BIT) | \
+ (1 << SADC_CFG_CLKDIV_BIT) | \
SADC_CFG_PBAT_HIGH | \
SADC_CFG_CMD_INT_PEN \
)
static signed int x_pos, y_pos;
-static int datacount = 0, cur_touch = 0;
-static bool pen_down = false;
-static volatile unsigned short bat_val = 0;
+static int datacount = 0;
+static volatile int cur_touch = 0;
+static volatile bool pen_down = false;
+static volatile unsigned short bat_val;
static struct mutex battery_mtx;
static enum touchscreen_mode current_mode = TOUCHSCREEN_POINT;
@@ -76,20 +79,20 @@ static const int touchscreen_buttons[3][3] =
const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
{
/* TODO */
- 3400
+ 1400
};
const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
{
/* TODO */
- 3300
+ 1300
};
/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
{
/* TODO */
- { 3300, 3680, 3740, 3760, 3780, 3810, 3870, 3930, 3970, 4070, 4160 },
+ { 1300, 3680, 3740, 3760, 3780, 3810, 3870, 3930, 3970, 4070, 4160 },
};
/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
@@ -105,23 +108,34 @@ const unsigned short percent_to_volt_charge[11] =
/* Returns battery voltage from ADC [millivolts] */
unsigned int battery_adc_voltage(void)
{
- register unsigned short dummy;
+ unsigned int val, i;
mutex_lock(&battery_mtx);
- dummy = REG_SADC_BATDAT;
- dummy = REG_SADC_BATDAT;
+ val = REG_SADC_BATDAT;
+ val = REG_SADC_BATDAT;
- bat_val = 0;
REG_SADC_ENA |= SADC_ENA_PBATEN;
+ for(i=0; i<4; i++)
+ {
+ bat_val = 0;
+
+ /* primitive wakeup event */
+ while(bat_val == 0)
+ sleep(0);
+
+ val += bat_val;
+ }
+ REG_SADC_ENA &= ~SADC_ENA_PBATEN;
+
+ val /= 4;
- /* primitive wakeup event */
- while(bat_val == 0)
- yield();
+ logf("%d %d %d", val, (val*BATTERY_SCALE_FACTOR)>>12,
+ (val*0xAAAAAAAB >> 32) >> 1);
mutex_unlock(&battery_mtx);
- return (bat_val*BATTERY_SCALE_FACTOR)>>12;
+ return (val*BATTERY_SCALE_FACTOR)>>12;
}
void button_init_device(void)
@@ -135,11 +149,11 @@ void button_init_device(void)
system_enable_irq(IRQ_SADC);
- REG_SADC_SAMETIME = 350;
+ REG_SADC_SAMETIME = 10;
REG_SADC_WAITTIME = 100;
REG_SADC_STATE &= (~REG_SADC_STATE);
REG_SADC_CTRL = (~(SADC_CTRL_PENDM | SADC_CTRL_PENUM | SADC_CTRL_TSRDYM | SADC_CTRL_PBATRDYM));
- REG_SADC_ENA = (SADC_ENA_TSEN | SADC_ENA_PBATEN);
+ REG_SADC_ENA = SADC_ENA_TSEN;
#ifdef ONDA_VX747
__gpio_as_input(32*3 + 29);
@@ -213,19 +227,24 @@ int button_read_device(int *data)
if(tmp & BTN_OFF)
ret |= BUTTON_POWER;
- if(current_mode == TOUCHSCREEN_BUTTON && cur_touch != 0)
- {
- int px_x = cur_touch >> 16;
- int px_y = cur_touch & 0xFFFF;
- ret |= touchscreen_buttons[px_y/(LCD_HEIGHT/3)]
- [px_x/(LCD_WIDTH/3)];
- }
- else if(pen_down)
+ if(cur_touch != 0)
{
- ret |= BUTTON_TOUCH;
- if(data != NULL && cur_touch != 0)
+ if(current_mode == TOUCHSCREEN_BUTTON)
+ {
+ int px_x = cur_touch >> 16;
+ int px_y = cur_touch & 0xFFFF;
+ ret |= touchscreen_buttons[px_y/(LCD_HEIGHT/3)]
+ [px_x/(LCD_WIDTH/3)];
+ }
+ else if(pen_down)
+ {
+ ret |= BUTTON_TOUCHSCREEN;
*data = cur_touch;
+ }
}
+
+ if(ret & BUTTON_TOUCHSCREEN && !is_backlight_on(true))
+ *data = 0;
return ret;
}
@@ -299,15 +318,17 @@ void SADC(void)
x_pos += xData;
y_pos += yData;
}
+
+ datacount++;
+
+ if(datacount >= TS_AD_COUNT)
+ {
+ cur_touch = touch_to_pixels(x_pos/datacount, y_pos/datacount);
+ datacount = 0;
+ }
}
-
- datacount++;
-
- if(datacount >= TS_AD_COUNT)
- {
- cur_touch = touch_to_pixels(x_pos/datacount, y_pos/datacount);
+ else
datacount = 0;
- }
}
if(state & SADC_CTRL_PBATRDYM)
@@ -316,3 +337,7 @@ void SADC(void)
/* Battery AD IRQ */
}
}
+
+void adc_init(void)
+{
+}