diff options
author | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2009-02-13 00:45:49 +0000 |
---|---|---|
committer | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2009-02-13 00:45:49 +0000 |
commit | 4532d145f17e5beb7e921cf459c7f8e27bcd58fd (patch) | |
tree | dabcb8c70eb9887db7b3fbcd0f3daf48d12780fe /firmware/target/mips/ingenic_jz47xx/onda_vx747 | |
parent | c16e563aef9099cfd9c87b7d1d544f466a073211 (diff) | |
download | rockbox-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')
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) +{ +} |