mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-08 12:45:26 -05:00
ipod6g: some fixes for recording
- Fix broken recording from jack microphone. - Fix recording hardware detection on models that do not support the jack microphone. - Enable monitor mode when recording. Change-Id: Ib79a2746f2d75f74cf6667d33bc9ed6512bbc8a9
This commit is contained in:
parent
c577c63c93
commit
3fffff90e2
2 changed files with 51 additions and 8 deletions
|
|
@ -62,6 +62,7 @@ void INIT_ATTR gpio_init(void)
|
||||||
* 1 0 120/160slim dock line-in + jack mic
|
* 1 0 120/160slim dock line-in + jack mic
|
||||||
*/
|
*/
|
||||||
GPIOCMD = 0xe0700;
|
GPIOCMD = 0xe0700;
|
||||||
|
udelay(10000);
|
||||||
rec_hw_ver = (PDAT(14) & (1 << 7)) ? 0 : 1;
|
rec_hw_ver = (PDAT(14) & (1 << 7)) ? 0 : 1;
|
||||||
GPIOCMD = 0xe070e; /* restore default configuration */
|
GPIOCMD = 0xe070e; /* restore default configuration */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,10 +23,55 @@
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "sound.h"
|
#include "sound.h"
|
||||||
#include "pmu-target.h"
|
#include "pmu-target.h"
|
||||||
|
#include "i2c-s5l8702.h"
|
||||||
|
|
||||||
extern int rec_hw_ver;
|
extern int rec_hw_ver;
|
||||||
|
|
||||||
|
/* Mikey is the internal controller for jack microphone and/or
|
||||||
|
* remote accessories.
|
||||||
|
* TODO:
|
||||||
|
* - move to mikey-6g.c
|
||||||
|
* - detect jack accessory
|
||||||
|
* - support for remote buttons
|
||||||
|
*/
|
||||||
|
unsigned char mikey_read(int address)
|
||||||
|
{
|
||||||
|
unsigned char val;
|
||||||
|
i2c_read(0, 0x72, address, 1, &val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
int mikey_write(int address, unsigned char val)
|
||||||
|
{
|
||||||
|
return i2c_write(0, 0x72, address, 1, &val);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mikey_reset(void)
|
||||||
|
{
|
||||||
|
mikey_write(0, 5);
|
||||||
|
mikey_write(1, 0x80);
|
||||||
|
}
|
||||||
|
|
||||||
#if INPUT_SRC_CAPS != 0
|
#if INPUT_SRC_CAPS != 0
|
||||||
|
#ifdef HAVE_RECORDING
|
||||||
|
void audio_enable_mic(bool enable)
|
||||||
|
{
|
||||||
|
if (rec_hw_ver == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (enable)
|
||||||
|
{
|
||||||
|
mikey_write(0, 7); /* raise voltage to polarize microphone */
|
||||||
|
GPIOCMD = 0xe070f; /* enable preamp */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mikey_reset(); /* microphone line voltage = 0 */
|
||||||
|
GPIOCMD = 0xe070e; /* disable preamp */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void audio_set_output_source(int source)
|
void audio_set_output_source(int source)
|
||||||
{
|
{
|
||||||
if ((unsigned)source >= AUDIO_NUM_SOURCES)
|
if ((unsigned)source >= AUDIO_NUM_SOURCES)
|
||||||
|
|
@ -53,8 +98,7 @@ void audio_input_mux(int source, unsigned flags)
|
||||||
/* Vcodec = 1800mV (900mV + value*100mV) */
|
/* Vcodec = 1800mV (900mV + value*100mV) */
|
||||||
pmu_ldo_set_voltage(3, 0x9);
|
pmu_ldo_set_voltage(3, 0x9);
|
||||||
|
|
||||||
if (rec_hw_ver == 1)
|
audio_enable_mic(false);
|
||||||
GPIOCMD = 0xe070e;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
@ -63,13 +107,12 @@ void audio_input_mux(int source, unsigned flags)
|
||||||
case AUDIO_SRC_MIC: /* recording only */
|
case AUDIO_SRC_MIC: /* recording only */
|
||||||
if (source != last_source)
|
if (source != last_source)
|
||||||
{
|
{
|
||||||
if (rec_hw_ver == 1)
|
audio_enable_mic(true);
|
||||||
GPIOCMD = 0xe070f;
|
|
||||||
|
|
||||||
/* Vcodec = 2400mV (900mV + value*100mV) */
|
/* Vcodec = 2400mV (900mV + value*100mV) */
|
||||||
pmu_ldo_set_voltage(3, 0xf);
|
pmu_ldo_set_voltage(3, 0xf);
|
||||||
|
|
||||||
audiohw_set_monitor(false);
|
audiohw_set_monitor(true);
|
||||||
audiohw_enable_recording(true); /* source mic */
|
audiohw_enable_recording(true); /* source mic */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -79,13 +122,12 @@ void audio_input_mux(int source, unsigned flags)
|
||||||
case AUDIO_SRC_LINEIN: /* recording only */
|
case AUDIO_SRC_LINEIN: /* recording only */
|
||||||
if (source != last_source)
|
if (source != last_source)
|
||||||
{
|
{
|
||||||
if (rec_hw_ver == 1)
|
audio_enable_mic(false);
|
||||||
GPIOCMD = 0xe070e;
|
|
||||||
|
|
||||||
/* Vcodec = 2400mV (900mV + value*100mV) */
|
/* Vcodec = 2400mV (900mV + value*100mV) */
|
||||||
pmu_ldo_set_voltage(3, 0xf);
|
pmu_ldo_set_voltage(3, 0xf);
|
||||||
|
|
||||||
audiohw_set_monitor(false);
|
audiohw_set_monitor(true);
|
||||||
audiohw_enable_recording(false); /* source line */
|
audiohw_enable_recording(false); /* source line */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue