forked from len0rd/rockbox
Corrected the bug with boolean settings (the inverted screen that couldn't be turned back to normal) added full multi-screen sound setting support
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7761 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
ec8f328d89
commit
9b5264d37f
6 changed files with 261 additions and 211 deletions
|
|
@ -44,6 +44,7 @@ void gui_select_init_numeric(struct gui_select * select,
|
||||||
select->min_value=min_value;
|
select->min_value=min_value;
|
||||||
select->max_value=max_value+1;
|
select->max_value=max_value+1;
|
||||||
select->option=init_value;
|
select->option=init_value;
|
||||||
|
select->nb_decimals=0;
|
||||||
select->step=step;
|
select->step=step;
|
||||||
select->extra_string=unit;
|
select->extra_string=unit;
|
||||||
select->formatter=formatter;
|
select->formatter=formatter;
|
||||||
|
|
@ -62,6 +63,7 @@ void gui_select_init_items(struct gui_select * select,
|
||||||
select->min_value=0;
|
select->min_value=0;
|
||||||
select->max_value=nb_items;
|
select->max_value=nb_items;
|
||||||
select->option=selected;
|
select->option=selected;
|
||||||
|
select->nb_decimals=0;
|
||||||
select->step=1;
|
select->step=1;
|
||||||
select->formatter=NULL;
|
select->formatter=NULL;
|
||||||
select->items=items;
|
select->items=items;
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ struct gui_select
|
||||||
int max_value;
|
int max_value;
|
||||||
int step;
|
int step;
|
||||||
int option;
|
int option;
|
||||||
|
int nb_decimals;
|
||||||
const char * extra_string;
|
const char * extra_string;
|
||||||
/* In the case the option is a number */
|
/* In the case the option is a number */
|
||||||
void (*formatter)(char* dest,
|
void (*formatter)(char* dest,
|
||||||
|
|
|
||||||
|
|
@ -1418,12 +1418,14 @@ bool set_int(const char* string,
|
||||||
gui_syncselect_draw(&select);
|
gui_syncselect_draw(&select);
|
||||||
talk_unit(voice_unit, *variable);
|
talk_unit(voice_unit, *variable);
|
||||||
if ( function )
|
if ( function )
|
||||||
function(gui_select_get_selected(&select));
|
function(*variable);
|
||||||
}
|
}
|
||||||
gui_syncstatusbar_draw(&statusbars, false);
|
gui_syncstatusbar_draw(&statusbars, false);
|
||||||
if(gui_select_is_canceled(&select))
|
if(gui_select_is_canceled(&select))
|
||||||
{
|
{
|
||||||
*variable=oldvalue;
|
*variable=oldvalue;
|
||||||
|
if ( function )
|
||||||
|
function(*variable);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
||||||
|
|
@ -1446,11 +1448,14 @@ bool set_int(const char* string,
|
||||||
else \
|
else \
|
||||||
*(bool *)dest=value?true:false
|
*(bool *)dest=value?true:false
|
||||||
|
|
||||||
#define set_int_fromtype(type, dest, var) \
|
#define type_fromvoidptr(type, value) \
|
||||||
if (type == INT) \
|
(type == INT)? \
|
||||||
dest=*(int *)var; \
|
(int)(*(int*)(value)) \
|
||||||
else \
|
: \
|
||||||
dest=*(bool *)var?1:0
|
(bool)(*(bool*)(value))
|
||||||
|
|
||||||
|
#define get_int_fromtype(type, var) \
|
||||||
|
(type == INT)?*(int *)var:(*(bool *)var?1:0)
|
||||||
|
|
||||||
bool set_option(const char* string, void* variable, enum optiontype type,
|
bool set_option(const char* string, void* variable, enum optiontype type,
|
||||||
const struct opt_items* options, int numoptions, void (*function)(int))
|
const struct opt_items* options, int numoptions, void (*function)(int))
|
||||||
|
|
@ -1458,12 +1463,12 @@ bool set_option(const char* string, void* variable, enum optiontype type,
|
||||||
int button;
|
int button;
|
||||||
int oldvalue;
|
int oldvalue;
|
||||||
/* oldvalue=*variable; */
|
/* oldvalue=*variable; */
|
||||||
set_int_fromtype(type, oldvalue, variable);
|
oldvalue=get_int_fromtype(type, variable);
|
||||||
struct gui_select select;
|
struct gui_select select;
|
||||||
gui_select_init_items(&select, string, oldvalue, options, numoptions);
|
gui_select_init_items(&select, string, oldvalue, options, numoptions);
|
||||||
gui_syncselect_draw(&select);
|
gui_syncselect_draw(&select);
|
||||||
if (global_settings.talk_menu)
|
if (global_settings.talk_menu)
|
||||||
talk_id(options[gui_select_get_selected(&select)].voice_id, false);
|
talk_id(options[gui_select_get_selected(&select)].voice_id, true);
|
||||||
while ( !gui_select_is_validated(&select) )
|
while ( !gui_select_is_validated(&select) )
|
||||||
{
|
{
|
||||||
gui_syncstatusbar_draw(&statusbars, true);
|
gui_syncstatusbar_draw(&statusbars, true);
|
||||||
|
|
@ -1476,13 +1481,15 @@ bool set_option(const char* string, void* variable, enum optiontype type,
|
||||||
if (global_settings.talk_menu)
|
if (global_settings.talk_menu)
|
||||||
talk_id(options[gui_select_get_selected(&select)].voice_id, false);
|
talk_id(options[gui_select_get_selected(&select)].voice_id, false);
|
||||||
if ( function )
|
if ( function )
|
||||||
function(*(int *)variable);
|
function(type_fromvoidptr(type, variable));
|
||||||
}
|
}
|
||||||
gui_syncstatusbar_draw(&statusbars, false);
|
gui_syncstatusbar_draw(&statusbars, false);
|
||||||
if(gui_select_is_canceled(&select))
|
if(gui_select_is_canceled(&select))
|
||||||
{
|
{
|
||||||
/* *variable=oldvalue; */
|
/* *variable=oldvalue; */
|
||||||
set_type_fromint(type, variable, oldvalue);
|
set_type_fromint(type, variable, oldvalue);
|
||||||
|
if ( function )
|
||||||
|
function(type_fromvoidptr(type, variable));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
||||||
|
|
|
||||||
|
|
@ -50,104 +50,41 @@ static const char* const fmt[] =
|
||||||
"%d.%02d %s " /* 2 decimals */
|
"%d.%02d %s " /* 2 decimals */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int selected_setting; /* Used by the callback */
|
||||||
|
void dec_sound_formatter(char *buffer, int buffer_size, int val, const char * unit)
|
||||||
|
{
|
||||||
|
val = sound_val2phys(selected_setting, val);
|
||||||
|
int integer = val / 10;
|
||||||
|
int dec = val % 10;
|
||||||
|
snprintf(buffer, buffer_size, "%d.%d %s", integer, dec, unit);
|
||||||
|
}
|
||||||
|
|
||||||
bool set_sound(const char* string,
|
bool set_sound(const char* string,
|
||||||
int* variable,
|
int* variable,
|
||||||
int setting)
|
int setting)
|
||||||
{
|
{
|
||||||
bool done = false;
|
|
||||||
bool changed = true;
|
|
||||||
int min, max;
|
|
||||||
int val;
|
|
||||||
int numdec;
|
|
||||||
int integer;
|
|
||||||
int dec;
|
|
||||||
const char* unit;
|
|
||||||
char str[32];
|
|
||||||
int talkunit = UNIT_INT;
|
int talkunit = UNIT_INT;
|
||||||
int steps;
|
const char* unit = sound_unit(setting);
|
||||||
int button;
|
int numdec = sound_numdecimals(setting);
|
||||||
|
int steps = sound_steps(setting);
|
||||||
unit = sound_unit(setting);
|
int min = sound_min(setting);
|
||||||
numdec = sound_numdecimals(setting);
|
int max = sound_max(setting);
|
||||||
steps = sound_steps(setting);
|
void(*sound_callback)(int)=sound_get_fn(setting);
|
||||||
min = sound_min(setting);
|
|
||||||
max = sound_max(setting);
|
|
||||||
if (*unit == 'd') /* crude reconstruction */
|
if (*unit == 'd') /* crude reconstruction */
|
||||||
talkunit = UNIT_DB;
|
talkunit = UNIT_DB;
|
||||||
else if (*unit == '%')
|
else if (*unit == '%')
|
||||||
talkunit = UNIT_PERCENT;
|
talkunit = UNIT_PERCENT;
|
||||||
else if (*unit == 'H')
|
else if (*unit == 'H')
|
||||||
talkunit = UNIT_HERTZ;
|
talkunit = UNIT_HERTZ;
|
||||||
|
if(!numdec)
|
||||||
#ifdef HAVE_LCD_BITMAP
|
return set_int(string, unit, talkunit, variable, sound_callback,
|
||||||
if(global_settings.statusbar)
|
steps, min, max, NULL );
|
||||||
lcd_setmargins(0, STATUSBAR_HEIGHT);
|
|
||||||
else
|
else
|
||||||
lcd_setmargins(0, 0);
|
{/* Decimal number */
|
||||||
#endif
|
selected_setting=setting;
|
||||||
lcd_clear_display();
|
return set_int(string, unit, talkunit, variable, sound_callback,
|
||||||
lcd_puts_scroll(0,0,string);
|
steps, min, max, &dec_sound_formatter );
|
||||||
|
|
||||||
while (!done) {
|
|
||||||
if (changed) {
|
|
||||||
val = sound_val2phys(setting, *variable);
|
|
||||||
if(numdec)
|
|
||||||
{
|
|
||||||
integer = val / (10 * numdec);
|
|
||||||
dec = val % (10 * numdec);
|
|
||||||
snprintf(str,sizeof str, fmt[numdec], integer, dec, unit);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
snprintf(str,sizeof str,"%d %s ", val, unit);
|
|
||||||
}
|
|
||||||
if (global_settings.talk_menu)
|
|
||||||
talk_value(val, talkunit, false); /* speak it */
|
|
||||||
}
|
|
||||||
lcd_puts(0,1,str);
|
|
||||||
status_draw(true);
|
|
||||||
lcd_update();
|
|
||||||
|
|
||||||
changed = false;
|
|
||||||
button = button_get_w_tmo(HZ/2);
|
|
||||||
switch( button ) {
|
|
||||||
case SETTINGS_INC:
|
|
||||||
case SETTINGS_INC | BUTTON_REPEAT:
|
|
||||||
(*variable)+=steps;
|
|
||||||
if(*variable > max )
|
|
||||||
*variable = max;
|
|
||||||
changed = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETTINGS_DEC:
|
|
||||||
case SETTINGS_DEC | BUTTON_REPEAT:
|
|
||||||
(*variable)-=steps;
|
|
||||||
if(*variable < min )
|
|
||||||
*variable = min;
|
|
||||||
changed = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SETTINGS_OK:
|
|
||||||
case SETTINGS_CANCEL:
|
|
||||||
#ifdef SETTINGS_OK2
|
|
||||||
case SETTINGS_OK2:
|
|
||||||
#endif
|
|
||||||
#ifdef SETTINGS_CANCEL2
|
|
||||||
case SETTINGS_CANCEL2:
|
|
||||||
#endif
|
|
||||||
done = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if(default_event_handler(button) == SYS_USB_CONNECTED)
|
|
||||||
return true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (changed)
|
|
||||||
sound_set(setting, *variable);
|
|
||||||
}
|
}
|
||||||
lcd_stop_scroll();
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool volume(void)
|
static bool volume(void)
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,26 @@
|
||||||
#define SOUND_CHAN_MONO_RIGHT 4
|
#define SOUND_CHAN_MONO_RIGHT 4
|
||||||
#define SOUND_CHAN_KARAOKE 5
|
#define SOUND_CHAN_KARAOKE 5
|
||||||
|
|
||||||
|
#ifndef SIMULATOR
|
||||||
|
void sound_set_volume(int value);
|
||||||
|
void sound_set_balance(int value);
|
||||||
|
void sound_set_bass(int value);
|
||||||
|
void sound_set_treble(int value);
|
||||||
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
void sound_set_loudness(int value);
|
||||||
|
void sound_set_avc(int value);
|
||||||
|
void sound_set_mdb_strength(int value);
|
||||||
|
void sound_set_mdb_harmonics(int value);
|
||||||
|
void sound_set_mdb_center(int value);
|
||||||
|
void sound_set_mdb_shape(int value);
|
||||||
|
void sound_set_mdb_enable(int value);
|
||||||
|
void sound_set_superbass(int value);
|
||||||
|
#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */
|
||||||
|
void sound_set_channels(int value);
|
||||||
|
void sound_set_stereo_width(int value);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void (*sound_get_fn(int setting))(int value);
|
||||||
void sound_set(int setting, int value);
|
void sound_set(int setting, int value);
|
||||||
int sound_min(int setting);
|
int sound_min(int setting);
|
||||||
int sound_max(int setting);
|
int sound_max(int setting);
|
||||||
|
|
|
||||||
309
firmware/sound.c
309
firmware/sound.c
|
|
@ -494,145 +494,228 @@ unsigned long mdb_shape_shadow = 0;
|
||||||
unsigned long loudness_shadow = 0;
|
unsigned long loudness_shadow = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void sound_set(int setting, int value)
|
#ifndef SIMULATOR
|
||||||
{
|
|
||||||
#ifdef SIMULATOR
|
|
||||||
setting = value;
|
|
||||||
#else
|
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
|
||||||
int tmp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
void sound_set_volume(int value)
|
||||||
|
{
|
||||||
if(!audio_is_initialized)
|
if(!audio_is_initialized)
|
||||||
return;
|
return;
|
||||||
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
int tmp = 0x7f00 * value / 100;
|
||||||
|
mas_codec_writereg(0x10, tmp & 0xff00);
|
||||||
|
#elif (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380
|
||||||
|
current_volume = VOLUME_MIN + (value * VOLUME_RANGE / 100);
|
||||||
|
set_prescaled_volume(); /* tenth of dB */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_balance(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
int tmp = ((value * 127 / 100) & 0xff) << 8;
|
||||||
|
mas_codec_writereg(0x11, tmp & 0xff00);
|
||||||
|
#elif CONFIG_CODEC == MAS3507D || defined HAVE_UDA1380
|
||||||
|
current_balance = value * VOLUME_RANGE / 100; /* tenth of dB */
|
||||||
|
set_prescaled_volume();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_bass(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
int tmp = ((value * 8) & 0xff) << 8;
|
||||||
|
mas_codec_writereg(0x14, tmp & 0xff00);
|
||||||
|
#elif CONFIG_CODEC == MAS3507D
|
||||||
|
mas_writereg(MAS_REG_KBASS, bass_table[value+15]);
|
||||||
|
current_bass = value * 10;
|
||||||
|
set_prescaled_volume();
|
||||||
|
#elif defined(HAVE_UDA1380)
|
||||||
|
uda1380_set_bass(value >> 1);
|
||||||
|
current_bass = value * 10;
|
||||||
|
set_prescaled_volume();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_treble(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
int tmp = ((value * 8) & 0xff) << 8;
|
||||||
|
mas_codec_writereg(0x15, tmp & 0xff00);
|
||||||
|
#elif CONFIG_CODEC == MAS3507D
|
||||||
|
mas_writereg(MAS_REG_KTREBLE, treble_table[value+15]);
|
||||||
|
current_treble = value * 10;
|
||||||
|
set_prescaled_volume();
|
||||||
|
#elif defined(HAVE_UDA1380)
|
||||||
|
uda1380_set_treble(value >> 1);
|
||||||
|
current_treble = value * 10;
|
||||||
|
set_prescaled_volume();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
void sound_set_loudness(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
loudness_shadow = (loudness_shadow & 0x04) |
|
||||||
|
(MAX(MIN(value * 4, 0x44), 0) << 8);
|
||||||
|
mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_avc(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
int tmp;
|
||||||
|
switch (value) {
|
||||||
|
case 1: /* 20ms */
|
||||||
|
tmp = (0x1 << 8) | (0x8 << 12);
|
||||||
|
break;
|
||||||
|
case 2: /* 2s */
|
||||||
|
tmp = (0x2 << 8) | (0x8 << 12);
|
||||||
|
break;
|
||||||
|
case 3: /* 4s */
|
||||||
|
tmp = (0x4 << 8) | (0x8 << 12);
|
||||||
|
break;
|
||||||
|
case 4: /* 8s */
|
||||||
|
tmp = (0x8 << 8) | (0x8 << 12);
|
||||||
|
break;
|
||||||
|
case -1: /* turn off and then turn on again to decay quickly */
|
||||||
|
tmp = mas_codec_readreg(MAS_REG_KAVC);
|
||||||
|
mas_codec_writereg(MAS_REG_KAVC, 0);
|
||||||
|
break;
|
||||||
|
default: /* off */
|
||||||
|
tmp = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mas_codec_writereg(MAS_REG_KAVC, tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_mdb_strength(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
mas_codec_writereg(MAS_REG_KMDB_STR, (value & 0x7f) << 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_mdb_harmonics(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
int tmp = value * 127 / 100;
|
||||||
|
mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0x7f) << 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_mdb_center(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
mas_codec_writereg(MAS_REG_KMDB_FC, (value/10) << 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_mdb_shape(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
mdb_shape_shadow = (mdb_shape_shadow & 0x02) | ((value/10) << 8);
|
||||||
|
mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_mdb_enable(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
mdb_shape_shadow = (mdb_shape_shadow & ~0x02) | (value?2:0);
|
||||||
|
mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_superbass(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
loudness_shadow = (loudness_shadow & ~0x04) | (value?4:0);
|
||||||
|
mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
|
||||||
|
}
|
||||||
|
#endif /* (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) */
|
||||||
|
|
||||||
|
void sound_set_channels(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
channel_configuration = value;
|
||||||
|
set_channel_config();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sound_set_stereo_width(int value)
|
||||||
|
{
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return;
|
||||||
|
stereo_width = value;
|
||||||
|
if (channel_configuration == SOUND_CHAN_CUSTOM)
|
||||||
|
set_channel_config();
|
||||||
|
}
|
||||||
|
#endif /* SIMULATOR */
|
||||||
|
|
||||||
|
void (*sound_get_fn(int setting))(int value)
|
||||||
|
{
|
||||||
|
#ifdef SIMULATOR
|
||||||
|
(void)setting;
|
||||||
|
return NULL;
|
||||||
|
#else
|
||||||
|
if(!audio_is_initialized)
|
||||||
|
return NULL;
|
||||||
switch(setting)
|
switch(setting)
|
||||||
{
|
{
|
||||||
case SOUND_VOLUME:
|
case SOUND_VOLUME:
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
return &sound_set_volume;
|
||||||
tmp = 0x7f00 * value / 100;
|
|
||||||
mas_codec_writereg(0x10, tmp & 0xff00);
|
|
||||||
#elif (CONFIG_CODEC == MAS3507D) || defined HAVE_UDA1380
|
|
||||||
current_volume = VOLUME_MIN + (value * VOLUME_RANGE / 100);
|
|
||||||
set_prescaled_volume(); /* tenth of dB */
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_BALANCE:
|
case SOUND_BALANCE:
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
return &sound_set_balance;
|
||||||
tmp = ((value * 127 / 100) & 0xff) << 8;
|
|
||||||
mas_codec_writereg(0x11, tmp & 0xff00);
|
|
||||||
#elif CONFIG_CODEC == MAS3507D || defined HAVE_UDA1380
|
|
||||||
current_balance = value * VOLUME_RANGE / 100; /* tenth of dB */
|
|
||||||
set_prescaled_volume();
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_BASS:
|
case SOUND_BASS:
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
return &sound_set_bass;
|
||||||
tmp = ((value * 8) & 0xff) << 8;
|
|
||||||
mas_codec_writereg(0x14, tmp & 0xff00);
|
|
||||||
#elif CONFIG_CODEC == MAS3507D
|
|
||||||
mas_writereg(MAS_REG_KBASS, bass_table[value+15]);
|
|
||||||
current_bass = value * 10;
|
|
||||||
set_prescaled_volume();
|
|
||||||
#elif defined(HAVE_UDA1380)
|
|
||||||
uda1380_set_bass(value >> 1);
|
|
||||||
current_bass = value * 10;
|
|
||||||
set_prescaled_volume();
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_TREBLE:
|
case SOUND_TREBLE:
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
return &sound_set_treble;
|
||||||
tmp = ((value * 8) & 0xff) << 8;
|
|
||||||
mas_codec_writereg(0x15, tmp & 0xff00);
|
|
||||||
#elif CONFIG_CODEC == MAS3507D
|
|
||||||
mas_writereg(MAS_REG_KTREBLE, treble_table[value+15]);
|
|
||||||
current_treble = value * 10;
|
|
||||||
set_prescaled_volume();
|
|
||||||
#elif defined(HAVE_UDA1380)
|
|
||||||
uda1380_set_treble(value >> 1);
|
|
||||||
current_treble = value * 10;
|
|
||||||
set_prescaled_volume();
|
|
||||||
#endif
|
|
||||||
break;
|
|
||||||
|
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
case SOUND_LOUDNESS:
|
case SOUND_LOUDNESS:
|
||||||
loudness_shadow = (loudness_shadow & 0x04) |
|
return &sound_set_loudness;
|
||||||
(MAX(MIN(value * 4, 0x44), 0) << 8);
|
|
||||||
mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_AVC:
|
case SOUND_AVC:
|
||||||
switch (value) {
|
return &sound_set_avc;
|
||||||
case 1: /* 20ms */
|
|
||||||
tmp = (0x1 << 8) | (0x8 << 12);
|
|
||||||
break;
|
|
||||||
case 2: /* 2s */
|
|
||||||
tmp = (0x2 << 8) | (0x8 << 12);
|
|
||||||
break;
|
|
||||||
case 3: /* 4s */
|
|
||||||
tmp = (0x4 << 8) | (0x8 << 12);
|
|
||||||
break;
|
|
||||||
case 4: /* 8s */
|
|
||||||
tmp = (0x8 << 8) | (0x8 << 12);
|
|
||||||
break;
|
|
||||||
case -1: /* turn off and then turn on again to decay quickly */
|
|
||||||
tmp = mas_codec_readreg(MAS_REG_KAVC);
|
|
||||||
mas_codec_writereg(MAS_REG_KAVC, 0);
|
|
||||||
break;
|
|
||||||
default: /* off */
|
|
||||||
tmp = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
mas_codec_writereg(MAS_REG_KAVC, tmp);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_MDB_STRENGTH:
|
case SOUND_MDB_STRENGTH:
|
||||||
mas_codec_writereg(MAS_REG_KMDB_STR, (value & 0x7f) << 8);
|
return &sound_set_mdb_strength;
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_MDB_HARMONICS:
|
case SOUND_MDB_HARMONICS:
|
||||||
tmp = value * 127 / 100;
|
return &sound_set_mdb_harmonics;
|
||||||
mas_codec_writereg(MAS_REG_KMDB_HAR, (tmp & 0x7f) << 8);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_MDB_CENTER:
|
case SOUND_MDB_CENTER:
|
||||||
mas_codec_writereg(MAS_REG_KMDB_FC, (value/10) << 8);
|
return &sound_set_mdb_center;
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_MDB_SHAPE:
|
case SOUND_MDB_SHAPE:
|
||||||
mdb_shape_shadow = (mdb_shape_shadow & 0x02) | ((value/10) << 8);
|
return &sound_set_mdb_shape;
|
||||||
mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_MDB_ENABLE:
|
case SOUND_MDB_ENABLE:
|
||||||
mdb_shape_shadow = (mdb_shape_shadow & ~0x02) | (value?2:0);
|
return &sound_set_mdb_enable;
|
||||||
mas_codec_writereg(MAS_REG_KMDB_SWITCH, mdb_shape_shadow);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_SUPERBASS:
|
case SOUND_SUPERBASS:
|
||||||
loudness_shadow = (loudness_shadow & ~0x04) |
|
return &sound_set_superbass;
|
||||||
(value?4:0);
|
|
||||||
mas_codec_writereg(MAS_REG_KLOUDNESS, loudness_shadow);
|
|
||||||
break;
|
|
||||||
#endif
|
#endif
|
||||||
case SOUND_CHANNELS:
|
case SOUND_CHANNELS:
|
||||||
channel_configuration = value;
|
return &sound_set_channels;
|
||||||
set_channel_config();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOUND_STEREO_WIDTH:
|
case SOUND_STEREO_WIDTH:
|
||||||
stereo_width = value;
|
return &sound_set_stereo_width;
|
||||||
if (channel_configuration == SOUND_CHAN_CUSTOM)
|
default :
|
||||||
set_channel_config();
|
return NULL;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
#endif /* SIMULATOR */
|
#endif /* SIMULATOR */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sound_set(int setting, int value)
|
||||||
|
{
|
||||||
|
|
||||||
|
void (*sound_set_val)(int)=sound_get_fn(setting);
|
||||||
|
if(sound_set_val)
|
||||||
|
sound_set_val(value);
|
||||||
|
}
|
||||||
|
|
||||||
int sound_val2phys(int setting, int value)
|
int sound_val2phys(int setting, int value)
|
||||||
{
|
{
|
||||||
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue