WM8750 - add ALC and NGAT related low level functions (disabled now by default)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27587 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
24bde73d1e
commit
451138ba74
2 changed files with 123 additions and 5 deletions
|
@ -98,6 +98,50 @@ static int tone_tenthdb2hw(int value)
|
|||
return value;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int alc_tenthdb2hw(int value)
|
||||
{
|
||||
/* -28.5dB - -6dB step 1.5dB - translate -285 - -60 step 15
|
||||
to 0 - 15 step 1
|
||||
*/
|
||||
|
||||
value = 15 - (value + 60)/15;
|
||||
}
|
||||
|
||||
|
||||
static int alc_hldus2hw(unsigned int value)
|
||||
{
|
||||
/* 0000 - 0us
|
||||
* 0001 - 2670us
|
||||
* 0010 - 5330us
|
||||
*
|
||||
* 1111 - 43691000us
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int alc_dcyms2hw(int value)
|
||||
{
|
||||
/* 0000 - 24ms
|
||||
* 0001 - 48ms
|
||||
* 0010 - 96ms
|
||||
*
|
||||
* 1010 or higher 24580ms
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int alc_atkms2hw(int value)
|
||||
{
|
||||
/* 0000 - 6ms
|
||||
* 0001 - 12ms
|
||||
* 0010 - 24ms
|
||||
*
|
||||
* 1010 or higher 6140ms
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef USE_ADAPTIVE_BASS
|
||||
static int adaptivebass2hw(int value)
|
||||
|
@ -110,6 +154,14 @@ static int adaptivebass2hw(int value)
|
|||
#endif
|
||||
|
||||
#if defined(HAVE_WM8750)
|
||||
#if 0
|
||||
static int ngath_tenthdb2hw(int value)
|
||||
{
|
||||
/* -76.5dB - -30dB in 1.5db steps -765 - -300 in 15 steps */
|
||||
value = 31 - (value + 300)/15;
|
||||
return value;
|
||||
}
|
||||
#endif
|
||||
static int recvol2hw(int value)
|
||||
{
|
||||
/* convert tenth of dB of input volume (-172...300) to input register value */
|
||||
|
@ -317,6 +369,72 @@ void audiohw_set_depth_3d(int val)
|
|||
#endif
|
||||
|
||||
#ifdef HAVE_RECORDING
|
||||
#if 0
|
||||
void audiohw_set_ngath(int ngath, int type, bool enable)
|
||||
{
|
||||
/* This function controls Noise gate function
|
||||
* of the codec. This can only run in conjunction
|
||||
* with ALC
|
||||
*/
|
||||
|
||||
if(enable)
|
||||
wmcodec_write(NGAT, NGAT_NGG(type)|NGAT_NGTH(ngath)|NGAT_NGAT);
|
||||
else
|
||||
wmcodec_write(NGAT, NGAT_NGG(type)|NGAT_NGTH(ngath_tenthdb2hw(ngath)));
|
||||
}
|
||||
|
||||
|
||||
void audiohw_set_alc(int level, unsigned int hold, int decay, int attack, bool enable)
|
||||
{
|
||||
/* level in thenth of dB -28.5dB - -6dB in 1.5dB steps
|
||||
* hold time in us 0us - 43691000us
|
||||
* decay time in ms 24ms - 24580ms
|
||||
* attack time in ms 6ms - 6140ms
|
||||
*/
|
||||
|
||||
if(enable)
|
||||
{
|
||||
wmcodec_write(ALC1, ALC1_ALCSEL_STEREO|ALC1_MAXGAIN(0x07)|
|
||||
ALC1_ALCL(alc_tenthdb2hw(level)));
|
||||
wmcodec_write(ALC2, ALC2_ALCZ|ALC2_HLD(alc_hldus2hw(hold)));
|
||||
wmcodec_write(ALC3, ALC3_DCY(alc_dcyms2hw(decay))|
|
||||
ALC3_ATK(alc_atkms2hw(attack)));
|
||||
}
|
||||
else
|
||||
{
|
||||
wmcodec_write(ALC1, ALC1_ALCSEL_DISABLED|ALC1_MAXGAIN(0x07)|ALC1_ALCL(alc_tenthdb2hw(level)));
|
||||
}
|
||||
}
|
||||
|
||||
void audiohw_set_alc(int level, unsigned int hold, int decay, int attack, bool enable)
|
||||
{
|
||||
/* level in thenth of dB -28.5dB - -6dB in 1.5dB steps
|
||||
* hold time in 15 steps 0ms,2.67ms,5.33ms,...,43691ms
|
||||
* decay time in 10 steps 24ms,48ms,96ms,...,24580ms
|
||||
* attack time in 10 steps 6ms,12ms,24ms,...,6140ms
|
||||
*/
|
||||
|
||||
if(enable)
|
||||
{
|
||||
wmcodec_write(ALC1, ALC1_ALCSEL_STEREO|ALC1_MAXGAIN(0x07)|
|
||||
ALC1_ALCL(alc_tenthdb2hw(level)));
|
||||
wmcodec_write(ALC2, ALC2_ALCZ|ALC2_HLD(hold));
|
||||
wmcodec_write(ALC3, ALC3_DCY(decay)|
|
||||
ALC3_ATK(attack));
|
||||
}
|
||||
else
|
||||
{
|
||||
wmcodec_write(ALC1, ALC1_ALCSEL_DISABLED|ALC1_MAXGAIN(0x07)|
|
||||
ALC1_ALCL(alc_tenthdb2hw(level)));
|
||||
}
|
||||
}
|
||||
|
||||
void audiohw_set_alc_level(int level)
|
||||
{
|
||||
wmcodec_write(ALC1, ALC1_ALCSEL_STEREO|ALC1_MAXGAIN(0x07)|
|
||||
ALC1_ALCL(alc_tenthdb2hw(level)));
|
||||
}
|
||||
#endif
|
||||
void audiohw_set_recsrc(int source, bool recording)
|
||||
{
|
||||
/* INPUT1 - FM radio
|
||||
|
|
|
@ -131,8 +131,8 @@ void audiohw_set_recsrc(int source, bool recording);
|
|||
#define ENHANCE_3D_MODE3D_RECORD (0 << 7)
|
||||
|
||||
#define ALC1 0x11
|
||||
#define ALC1_ALCL(x) ((x) & (0x0f))
|
||||
#define ALC1_MAXGAIN(x) ((x) & (0x07 << 4))
|
||||
#define ALC1_ALCL(x) ((x) & 0x0f)
|
||||
#define ALC1_MAXGAIN(x) (((x) & 0x07) << 4)
|
||||
#define ALC1_ALCSEL_DISABLED (0 << 7)
|
||||
#define ALC1_ALCSEL_RIGHT (1 << 7)
|
||||
#define ALC1_ALCSEL_LEFT (2 << 7)
|
||||
|
@ -144,14 +144,14 @@ void audiohw_set_recsrc(int source, bool recording);
|
|||
|
||||
#define ALC3 0x13
|
||||
#define ALC3_ATK(x) ((x) & 0x0f)
|
||||
#define ALC3_DCY(x) ((x) & (0x0f << 4))
|
||||
#define ALC3_DCY(x) (((x) & 0x0f) << 4)
|
||||
|
||||
#define NGAT 0x14
|
||||
#define NGAT_NGAT (1 << 0)
|
||||
#define NGAT_NGG_CONST (0 << 1)
|
||||
#define NGAT_NGG_MUTEADC (1 << 1)
|
||||
#define NGAT_NGG(x) ((x) & (0x3 << 1))
|
||||
#define NGAT_NGTH(x) ((x) & (0x1f << 3))
|
||||
#define NGAT_NGG(x) (((x) & 0x3) << 1)
|
||||
#define NGAT_NGTH(x) (((x) & 0x1f) << 3)
|
||||
#endif
|
||||
|
||||
#define ADDITIONAL1 0x17
|
||||
|
|
Loading…
Reference in a new issue