1
0
Fork 0
forked from len0rd/rockbox

Onda VX747:

* Fix warnings
 * Add fake battery level information to make sure Rockbox doesn't shutdown
 * Enable switching between touch modes by pressing (VOL_DOWN|VOL_UP)


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20269 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Maurus Cuelenaere 2009-03-09 22:17:37 +00:00
parent b1983d21c2
commit 70ab3fca0d
8 changed files with 103 additions and 107 deletions

View file

@ -102,7 +102,7 @@
#endif
#if CONFIG_CPU == DM320 || CONFIG_CPU == S3C2440 || CONFIG_CPU == TCC7801 \
|| CONFIG_CPU == IMX31L || CONFIG_CPU == AS3525
|| CONFIG_CPU == IMX31L || CONFIG_CPU == AS3525 || defined(JZ4732)
#include "debug-target.h"
#endif

View file

@ -1197,7 +1197,7 @@
#define AIC_I2SDIV_BITCLK_1418KHZ (0x1A << AIC_I2SDIV_DIV_BIT) /* BIT_CLK of 1.418MHz */
#define AIC_I2SDIV_BITCLK_1024KHZ (0x24 << AIC_I2SDIV_DIV_BIT) /* BIT_CLK of 1.024MHz */
#define AIC_I2SDIV_BITCLK_7089KHZ (0x34 << AIC_I2SDIV_DIV_BIT) /* BIT_CLK of 708.92KHz */
#define AIC_I2SDIV_BITCLK_512KHZ (0x48 << AIC_I2SDIV_DIV_BIT) /* BIT_CLK of 512.00KHz */
#define AIC_I2SDIV_BITCLK_512KHZ (0x48 << AIC_I2SDIV_DIV_BIT) /* BIT_CLK of 512.00KHz */
/*************************************************************************

View file

@ -40,11 +40,13 @@ const struct sound_settings_info audiohw_settings[] = {
#endif
};
#if 0
static unsigned short codec_volume;
static unsigned short codec_base_gain;
static unsigned short codec_mic_gain;
static int HP_register_value;
#endif
static bool HP_on_off_flag;
static int HP_register_value;
static void i2s_codec_set_samplerate(unsigned short rate);
@ -77,7 +79,7 @@ static void i2s_codec_init(void)
i2s_codec_reset();
//REG_ICDC_CDCCR2 = (ICDC_CDCCR2_AINVOL(ICDC_CDCCR2_AINVOL_DB(0)) | ICDC_CDCCR2_SMPR(ICDC_CDCCR2_SMPR_48)
REG_ICDC_CDCCR2 = ( ICDC_CDCCR2_AINVOL(23) | ICDC_CDCCR2_SMPR(ICDC_CDCCR2_SMPR_44)
REG_ICDC_CDCCR2 = ( ICDC_CDCCR2_AINVOL(14) | ICDC_CDCCR2_SMPR(ICDC_CDCCR2_SMPR_44)
| ICDC_CDCCR2_HPVOL(ICDC_CDCCR2_HPVOL_6));
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_SUSPD | ICDC_CDCCR1_RST);
@ -101,6 +103,7 @@ static void i2s_codec_init(void)
HP_on_off_flag = 1; /* HP is on */
}
#if 0
static void i2s_codec_set_mic(unsigned short v) /* 0 <= v <= 100 */
{
v &= 0xff;
@ -201,6 +204,67 @@ static unsigned short i2s_codec_get_volume(void)
return val;
}
static void HP_turn_on(void)
{
//see 1.3.4.1
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_SUSPD | ICDC_CDCCR1_RST); //set suspend 0
mdelay(15);
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_PDVR | ICDC_CDCCR1_VRCGL | ICDC_CDCCR1_VRCGH);
REG_ICDC_CDCCR1 |= (ICDC_CDCCR1_EDAC | ICDC_CDCCR1_HPCG);
mdelay(600);
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_PDVRA | ICDC_CDCCR1_HPCG | ICDC_CDCCR1_PDHPM | ICDC_CDCCR1_PDHP);
mdelay(2);
HP_register_value = REG_ICDC_CDCCR1;
//see 1.3.4.2
/*REG_ICDC_CDCCR1 &= 0xfffffffc;
mdelay(7);
REG_ICDC_CDCCR1 |= 0x00040400;
mdelay(15);
REG_ICDC_CDCCR1 &= 0xfffbfbff;
udelay(500);
REG_ICDC_CDCCR1 &= 0xffe5fcff;
REG_ICDC_CDCCR1 |= 0x01000000;
mdelay(400);
REG_ICDC_CDCCR1 &= 0xfffeffff;
mdelay(7);
HP_register_value = REG_ICDC_CDCCR1;*/
//see 1.3.4.3
}
static void HP_turn_off(void)
{
//see 1.3.4.1
mdelay(2);
REG_ICDC_CDCCR1 = HP_register_value;
REG_ICDC_CDCCR1 |= 0x001b0300;
REG_ICDC_CDCCR1 &= 0xfeffffff;
mdelay(15);
REG_ICDC_CDCCR1 |= 0x00000002;//set suspend 1
//see 1.3.4.2
/*mdelay(4);
REG_ICDC_CDCCR1 = HP_register_value;
REG_ICDC_CDCCR1 |= 0x001b0300;
REG_ICDC_CDCCR1 &= 0xfeffffff;
mdelay(4);
REG_ICDC_CDCCR1 |= 0x00000400;
mdelay(15);
REG_ICDC_CDCCR1 &= 0xfffffdff;
mdelay(7);
REG_ICDC_CDCCR1 |= 0x00000002;*/
//see 1.3.4.3
}
#endif
static void i2s_codec_set_samplerate(unsigned short rate)
{
unsigned short speed = 0;
@ -243,68 +307,6 @@ static void i2s_codec_set_samplerate(unsigned short rate)
REG_ICDC_CDCCR2 &= speed;
}
static void HP_turn_on(void)
{
//see 1.3.4.1
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_SUSPD | ICDC_CDCCR1_RST); //set suspend 0
mdelay(15);
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_PDVR | ICDC_CDCCR1_VRCGL | ICDC_CDCCR1_VRCGH);
REG_ICDC_CDCCR1 |= (ICDC_CDCCR1_EDAC | ICDC_CDCCR1_HPCG);
mdelay(600);
REG_ICDC_CDCCR1 &= ~(ICDC_CDCCR1_PDVRA | ICDC_CDCCR1_HPCG | ICDC_CDCCR1_PDHPM | ICDC_CDCCR1_PDHP);
mdelay(2);
HP_register_value = REG_ICDC_CDCCR1;
//see 1.3.4.2
/*REG_ICDC_CDCCR1 &= 0xfffffffc;
mdelay(7);
REG_ICDC_CDCCR1 |= 0x00040400;
mdelay(15);
REG_ICDC_CDCCR1 &= 0xfffbfbff;
udelay(500);
REG_ICDC_CDCCR1 &= 0xffe5fcff;
REG_ICDC_CDCCR1 |= 0x01000000;
mdelay(400);
REG_ICDC_CDCCR1 &= 0xfffeffff;
mdelay(7);
HP_register_value = REG_ICDC_CDCCR1;*/
//see 1.3.4.3
}
static void HP_turn_off(void)
{
//see 1.3.4.1
mdelay(2);
REG_ICDC_CDCCR1 = HP_register_value;
REG_ICDC_CDCCR1 |= 0x001b0300;
REG_ICDC_CDCCR1 &= 0xfeffffff;
mdelay(15);
REG_ICDC_CDCCR1 |= 0x00000002;//set suspend 1
//see 1.3.4.2
/*mdelay(4);
REG_ICDC_CDCCR1 = HP_register_value;
REG_ICDC_CDCCR1 |= 0x001b0300;
REG_ICDC_CDCCR1 &= 0xfeffffff;
mdelay(4);
REG_ICDC_CDCCR1 |= 0x00000400;
mdelay(15);
REG_ICDC_CDCCR1 &= 0xfffffdff;
mdelay(7);
REG_ICDC_CDCCR1 |= 0x00000002;*/
//see 1.3.4.3
}
void audiohw_mute(bool mute)
{
if(mute)

View file

@ -74,6 +74,7 @@ static int i2c_put_data(unsigned char data)
return -1;
}
#if 0
static int i2c_put_data_nack(unsigned char data)
{
unsigned int timeout = TIMEOUT*10;
@ -86,6 +87,7 @@ static int i2c_put_data_nack(unsigned char data)
return 0;
}
#endif
static int i2c_get_data(unsigned char *data, int ack)
{
@ -111,13 +113,17 @@ static int i2c_get_data(unsigned char *data, int ack)
return -1;
}
void i2c_setclk(unsigned int i2cclk)
{
__i2c_set_clk(__cpm_get_i2sclk(), i2cclk);
}
/*
* I2C interface
*/
void i2c_open(void)
{
/* TODO */
//__i2c_set_clk(jz_clocks.extalclk, 10000); /* default 10 KHz */
i2c_setclk(10000); /* default 10 KHz */
__i2c_enable();
}
@ -127,12 +133,6 @@ void i2c_close(void)
__i2c_disable();
}
void i2c_setclk(unsigned int i2cclk)
{
/* TODO */
//__i2c_set_clk(jz_clocks.extalclk, i2cclk);
}
int i2c_read(int device, unsigned char *buf, int count)
{
int cnt = count;

View file

@ -25,10 +25,9 @@
#include "lcd-target.h"
#include "system.h"
#include "kernel.h"
#include "backlight-target.h"
/*
Warning: code behaviour is unpredictable when threads get switched in IRQ mode!
Warning: code behaviour is unpredictable when switch_thread() gets called in IRQ mode!
So don't update the LCD in an interrupt handler!
*/
@ -42,6 +41,7 @@ void lcd_init_device(void)
__cpm_start_lcd();
lcd_init_controller();
__cpm_stop_lcd();
lcd_is_on = true;
mutex_init(&lcd_mtx);
wakeup_init(&lcd_wkup);
@ -71,7 +71,7 @@ bool lcd_enabled(void)
/* Update a fraction of the display. */
void lcd_update_rect(int x, int y, int width, int height)
{
x=0;y=0;width=LCD_WIDTH;height=LCD_HEIGHT;
x=0;y=0;width=LCD_WIDTH;height=LCD_HEIGHT; /* HACK! */
mutex_lock(&lcd_mtx);
__cpm_start_lcd();
@ -133,12 +133,13 @@ void DMA_CALLBACK(DMA_LCD_CHANNEL)(void)
This must be called after all other LCD functions that change the display. */
void lcd_update(void)
{
if (!lcd_is_on || !backlight_enabled())
if(!lcd_is_on)
return;
lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
}
/* TODO: use IPU */
void lcd_blit_yuv(unsigned char * const src[3],
int src_x, int src_y, int stride,
int x, int y, int width, int height)

View file

@ -27,12 +27,11 @@
#define BACKLIGHT_GPIO (32*3+31)
#define BACKLIGHT_PWM 7
/* TODO: use HW PWM */
#define SW_PWM 1
#if SW_PWM
static bool backlight_on;
static void set_backlight(int val)
{
(void)val;
@ -48,20 +47,19 @@ bool _backlight_init(void)
return true;
}
bool backlight_enabled(void)
{
return backlight_on;
}
void _backlight_on(void)
{
__gpio_set_pin(BACKLIGHT_GPIO);
if(!backlight_on)
__gpio_set_pin(BACKLIGHT_GPIO);
backlight_on = true;
}
void _backlight_off(void)
{
__gpio_clear_pin(BACKLIGHT_GPIO);
if(backlight_on)
__gpio_clear_pin(BACKLIGHT_GPIO);
backlight_on = false;
}
@ -131,11 +129,6 @@ bool _backlight_init(void)
return true;
}
bool backlight_enabled(void)
{
return old_val > -1 ? true : false;
}
void _backlight_on(void)
{
set_backlight_on();

View file

@ -29,12 +29,9 @@
#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 */

View file

@ -71,36 +71,36 @@ static struct mutex battery_mtx;
const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
{
/* TODO */
1400
1000
};
const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
{
/* TODO */
1300
900
};
/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
{
/* TODO */
{ 1300, 3680, 3740, 3760, 3780, 3810, 3870, 3930, 3970, 4070, 4160 },
{ 1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000 },
};
/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
const unsigned short percent_to_volt_charge[11] =
{
/* TODO */
3300, 3680, 3740, 3760, 3780, 3810, 3870, 3930, 3970, 4070, 4160
1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000
};
/* VBAT = (BDATA/4096) * 7.5V */
#define BATTERY_SCALE_FACTOR 7500
#define BATTERY_SCALE_FACTOR 1875
/* Returns battery voltage from ADC [millivolts] */
unsigned int battery_adc_voltage(void)
{
unsigned int dummy, timeout=1000;
unsigned int dummy, timeout=HZ/4;
mutex_lock(&battery_mtx);
@ -114,18 +114,18 @@ unsigned int battery_adc_voltage(void)
while(bat_val == 0 && timeout--)
sleep(0);
logf("%d %d", bat_val, (bat_val*BATTERY_SCALE_FACTOR)>>12);
logf("%d %d", bat_val, (bat_val*BATTERY_SCALE_FACTOR)>>10);
mutex_unlock(&battery_mtx);
return (bat_val*BATTERY_SCALE_FACTOR)>>12;
return (bat_val*BATTERY_SCALE_FACTOR)>>10;
}
void button_init_device(void)
{
__cpm_start_sadc();
REG_SADC_ENA = 0;
REG_SADC_STATE &= (~REG_SADC_STATE);
REG_SADC_STATE &= ~REG_SADC_STATE;
REG_SADC_CTRL = 0x1F;
REG_SADC_CFG = SADC_CFG_INIT;
@ -134,8 +134,8 @@ void button_init_device(void)
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_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;
#ifdef ONDA_VX747
@ -192,6 +192,9 @@ int button_read_device(int *data)
if( UNLIKELY(!is_backlight_on(true)) )
*data = 0;
}
if(ret & (BUTTON_VOL_DOWN|BUTTON_VOL_UP))
touchscreen_set_mode( touchscreen_get_mode() == TOUCHSCREEN_BUTTON ? TOUCHSCREEN_POINT : TOUCHSCREEN_BUTTON);
return ret;
}
@ -205,7 +208,7 @@ void SADC(void)
sadcstate = REG_SADC_STATE;
state = REG_SADC_STATE & (~REG_SADC_CTRL);
REG_SADC_STATE &= sadcstate;
if(state & SADC_CTRL_PENDM)
{
/* Pen down IRQ */